From 689bddabd9bbcd27a83bb11fdc232d0db8193466 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Thu, 13 Oct 2022 14:54:37 +0100 Subject: [PATCH 01/39] flambda-backend: Add strict mode for ocamldep (#892) --- driver/makedepend.ml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/driver/makedepend.ml b/driver/makedepend.ml index 481b6507cc1b..1d1f1dedd0dc 100644 --- a/driver/makedepend.ml +++ b/driver/makedepend.ml @@ -38,6 +38,7 @@ let allow_approximation = ref false let map_files = ref [] let module_map = ref String.Map.empty let debug = ref false +let strict = ref false module Error_occurred : sig val set : unit -> unit @@ -327,7 +328,7 @@ let read_parse_and_extract parse_function extract_function def ast_kind end with x -> begin print_exception x; - if not !allow_approximation then begin + if !strict || not !allow_approximation then begin Error_occurred.set (); (String.Set.empty, def) end else @@ -415,7 +416,9 @@ let process_file_as process_fun def source_file = )); Location.input_name := source_file; try - if Sys.file_exists source_file then process_fun source_file else def + if !strict || Sys.file_exists source_file + then process_fun source_file + else def with x -> report_err x; def let process_file source_file ~ml_file ~mli_file ~def = @@ -642,6 +645,8 @@ let run_main argv = " (Windows) Use forward slash / instead of backslash \\ in file paths"; "-sort", Arg.Set sort_files, " Sort files according to their dependencies"; + "-strict", Arg.Set strict, + " Fail if an input file does not exist"; "-version", Arg.Unit print_version, " Print version and exit"; "-vnum", Arg.Unit print_version_num, From 9eb9448e6d9637d13a4e521dc865b951c145b8b9 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 17 Oct 2022 16:16:18 +0100 Subject: [PATCH 02/39] flambda-backend: Backport the main safepoints PRs (#740) Co-authored-by: Xavier Clerc Co-authored-by: Greta Yorsh <45005955+gretay-js@users.noreply.github.com> --- runtime/caml/domain_state.tbl | 2 +- runtime/signals_nat.c | 21 +- testsuite/tests/asmgen/main.c | 8 + testsuite/tests/asmgen/mainarith.c | 4 + testsuite/tests/backend/polling.c | 18 ++ testsuite/tests/backend/polling_insertion.ml | 293 +++++++++++++++++++ 6 files changed, 339 insertions(+), 7 deletions(-) create mode 100644 testsuite/tests/backend/polling.c create mode 100644 testsuite/tests/backend/polling_insertion.ml diff --git a/runtime/caml/domain_state.tbl b/runtime/caml/domain_state.tbl index a560becf44a3..0666a09f9997 100644 --- a/runtime/caml/domain_state.tbl +++ b/runtime/caml/domain_state.tbl @@ -14,8 +14,8 @@ /* */ /**************************************************************************/ -DOMAIN_STATE(value*, young_ptr) DOMAIN_STATE(value*, young_limit) +DOMAIN_STATE(value*, young_ptr) /* Minor heap limit. See minor_gc.c. */ DOMAIN_STATE(char*, exception_pointer) diff --git a/runtime/signals_nat.c b/runtime/signals_nat.c index ca86956783ca..484553235e5d 100644 --- a/runtime/signals_nat.c +++ b/runtime/signals_nat.c @@ -79,14 +79,23 @@ void caml_garbage_collection(void) including allocations combined by Comballoc */ alloc_len = (unsigned char*)(&d->live_ofs[d->num_live]); nallocs = *alloc_len++; - for (i = 0; i < nallocs; i++) { - allocsz += Whsize_wosize(Wosize_encoded_alloc_len(alloc_len[i])); + + if (nallocs == 0) { + /* This is a poll */ + caml_process_pending_actions(); } - /* We have computed whsize (including header), but need wosize (without) */ - allocsz -= 1; + else + { + for (i = 0; i < nallocs; i++) { + allocsz += Whsize_wosize(Wosize_encoded_alloc_len(alloc_len[i])); + } - caml_alloc_small_dispatch(allocsz, CAML_DO_TRACK | CAML_FROM_CAML, - nallocs, alloc_len); + /* We have computed whsize (including header), but need wosize (without) */ + allocsz -= 1; + + caml_alloc_small_dispatch(allocsz, CAML_DO_TRACK | CAML_FROM_CAML, + nallocs, alloc_len); + } } DECLARE_SIGNAL_HANDLER(handle_signal) diff --git a/testsuite/tests/asmgen/main.c b/testsuite/tests/asmgen/main.c index 103e022baf08..975b54833e82 100644 --- a/testsuite/tests/asmgen/main.c +++ b/testsuite/tests/asmgen/main.c @@ -18,6 +18,14 @@ #include #include +/* This stub isn't needed for msvc32, since it's already in asmgen_i386nt.asm */ +#if !defined(_MSC_VER) || !defined(_M_IX86) +void caml_call_gc() +{ + +} +#endif + void caml_ml_array_bound_error(void) { fprintf(stderr, "Fatal error: out-of-bound access in array or string\n"); diff --git a/testsuite/tests/asmgen/mainarith.c b/testsuite/tests/asmgen/mainarith.c index 354ab02d391d..ae4d1c50e05f 100644 --- a/testsuite/tests/asmgen/mainarith.c +++ b/testsuite/tests/asmgen/mainarith.c @@ -22,6 +22,10 @@ #include #define FMT ARCH_INTNAT_PRINTF_FORMAT +void caml_call_poll() +{ +} + void caml_ml_array_bound_error(void) { fprintf(stderr, "Fatal error: out-of-bound access in array or string\n"); diff --git a/testsuite/tests/backend/polling.c b/testsuite/tests/backend/polling.c new file mode 100644 index 000000000000..c28baab048bf --- /dev/null +++ b/testsuite/tests/backend/polling.c @@ -0,0 +1,18 @@ +#define CAML_NAME_SPACE +#define CAML_INTERNALS + +#include +#include + +CAMLprim value request_minor_gc(value v) { + Caml_state->requested_minor_gc = 1; + Caml_state->requested_major_slice = 1; + caml_something_to_do = 1; + Caml_state->young_limit = Caml_state->young_alloc_end; + + return Val_unit; +} + +CAMLprim value minor_gcs(value v) { + return Val_long(Caml_state->stat_minor_collections); +} diff --git a/testsuite/tests/backend/polling_insertion.ml b/testsuite/tests/backend/polling_insertion.ml new file mode 100644 index 000000000000..5be260faba45 --- /dev/null +++ b/testsuite/tests/backend/polling_insertion.ml @@ -0,0 +1,293 @@ +(* TEST + modules = "polling.c" + compare_programs = "false" + * arch64 + ** native +*) + +(* This set of tests examine poll insertion behaviour. We do this by requesting + and checking the number of minor collections at various points to determine + whether a poll was correctly added. There are some subtleties because + [caml_empty_minor_heap] will not increment the minor_collections stat if + nothing has been allocated on the minor heap, so we sometimes need to + add an allocation before we call [request_minor_gc]. The [minor_gcs] + function returns the number of minor collections so far without allocating. + + ignore(Sys.opaque_identity(ref 41)) is used wherever we want to do an + allocation in order to use some minor heap so the minor collections stat is + incremented. + + ignore(Sys.opaque_identity(ref 42)) is used wherever we want an allocation + for the purposes of testing whether a poll would be elided or not. +*) + +external request_minor_gc : unit -> unit = "request_minor_gc" +external minor_gcs : unit -> int = "minor_gcs" + +(* This function tests that polls are added to loops *) +let polls_added_to_loops () = + let minors_before = minor_gcs () in + request_minor_gc (); + for a = 0 to 1 do + ignore (Sys.opaque_identity 42) + done; + let minors_now = minor_gcs () in + assert (minors_before < minors_now) + + +(* This function should have no prologue poll but will have + one in the loop. *) +let func_with_added_poll_because_loop () = + (* We do two loop iterations so that the poll is triggered whether + in poll-at-top or poll-at-bottom mode. *) + for a = 0 to Sys.opaque_identity(1) do + ignore (Sys.opaque_identity 42) + done + [@@inline never] + +let func_with_no_prologue_poll () = + (* this function does not have indirect or 'forward' tail call nor + does it call a synthesised function with suppressed polls. *) + ignore(Sys.opaque_identity(minor_gcs ())) + [@@inline never] + +let prologue_polls_in_functions () = + ignore(Sys.opaque_identity(ref 41)); + let minors_before = minor_gcs () in + request_minor_gc (); + func_with_added_poll_because_loop (); + let minors_now = minor_gcs () in + assert (minors_before < minors_now); + + ignore(Sys.opaque_identity(ref 41)); + let minors_before = minor_gcs () in + request_minor_gc (); + func_with_no_prologue_poll (); + let minors_now = minor_gcs () in + assert (minors_before = minors_now) + +(* These next functions test that polls are not added to functions that + unconditionally allocate. + [allocating_func] allocates unconditionally + [allocating_func_if] allocates unconditionally but does so + on two separate branches *) +let allocating_func minors_before = + let minors_now = minor_gcs () in + assert (minors_before = minors_now); + (* No poll yet *) + ignore (Sys.opaque_identity (ref 42)); + let minors_now2 = minor_gcs () in + assert (minors_before + 1 = minors_now2); + (* Polled at alloc *) + [@@inline never] + +let allocating_func_if minors_before = + let minors_now = minor_gcs () in + assert (minors_before = minors_now); + (* No poll yet *) + if minors_before > 0 then ignore (Sys.opaque_identity (ref 42)) + else ignore (Sys.opaque_identity (ref 42)); + let minors_now2 = minor_gcs () in + assert (minors_before + 1 = minors_now2); + (* Polled at alloc *) + [@@inline never] + +let allocating_func_nested_ifs minors_before = + let minors_now = minor_gcs () in + assert (minors_before = minors_now); + (* No poll yet *) + if Sys.opaque_identity(minors_before) > 0 then + if Sys.opaque_identity(minors_before) > 1 then + ignore (Sys.opaque_identity (ref 42)) + else + ignore (Sys.opaque_identity (ref 42)) + else + if Sys.opaque_identity(minors_before) < 5 then + ignore (Sys.opaque_identity (ref 42)) + else + ignore (Sys.opaque_identity (ref 42)); + let minors_now2 = minor_gcs () in + assert (minors_before + 1 = minors_now2); + (* Polled at alloc *) + [@@inline never] + +let allocating_func_match minors_before = + let minors_now = minor_gcs () in + assert (minors_before = minors_now); + (* No poll yet *) + match minors_before with + | 0 -> ignore (Sys.opaque_identity (ref 42)) + | _ -> ignore (Sys.opaque_identity (ref 42)); + let minors_now2 = minor_gcs () in + assert (minors_before + 1 = minors_now2); + (* Polled at alloc *) + [@@inline never] + +let polls_not_added_unconditionally_allocating_functions () = + let minors_before = minor_gcs () in + ignore(Sys.opaque_identity(ref 41)); + request_minor_gc (); + allocating_func minors_before; + let minors_before = minor_gcs () in + ignore(Sys.opaque_identity(ref 41)); + request_minor_gc (); + allocating_func_if minors_before; + let minors_before = minor_gcs () in + ignore(Sys.opaque_identity(ref 41)); + request_minor_gc (); + allocating_func_nested_ifs minors_before; + let minors_before = minor_gcs () in + ignore(Sys.opaque_identity(ref 41)); + request_minor_gc (); + allocating_func_match minors_before + +(* This function tests that polls are not added to the back edge of + where loop bodies allocat unconditionally *) +let polls_not_added_to_allocating_loops () = + let current_minors = ref (minor_gcs ()) in + request_minor_gc (); + for a = 0 to 1 do + (* Since the loop body allocates there should be no poll points *) + let minors_now = minor_gcs () in + assert(minors_now = !current_minors); + ignore(Sys.opaque_identity(ref 42)); + let minors_now2 = minor_gcs () in + assert(minors_now+1 = minors_now2); + current_minors := minors_now2; + ignore(Sys.opaque_identity(ref 41)); + request_minor_gc () + done + +(* this next set of functions tests that self tail recursive functions + have polls added correctly *) +let rec self_rec_func n = + match n with + | 0 -> 0 + | _ -> + begin + let n1 = Sys.opaque_identity(n-1) in + (self_rec_func[@tailcall]) n1 + end + +let polls_added_to_self_recursive_functions () = + let minors_before = minor_gcs () in + request_minor_gc (); + ignore(self_rec_func 2); + let minors_after = minor_gcs () in + (* should be at least one minor gc from polls in self_rec_func *) + assert(minors_before+1 = minors_after) + +(* this pair of mutually recursive functions is to test that a poll is + correctly placed in the first one compiled *) +let rec mut_rec_func_even d = + match d with + | 0 -> 0 + | _ -> mut_rec_func_odd (d-1) +and mut_rec_func_odd d = + mut_rec_func_even (d-1) +and mut_rec_func d = + match d with + | n when n mod 2 == 0 + -> mut_rec_func_even n + | n -> mut_rec_func_odd n + +let polls_added_to_mutually_recursive_functions () = + let minors_before = minor_gcs () in + request_minor_gc (); + ignore(mut_rec_func 3); + let minors_after = minor_gcs () in + (* should be at least one minor gc from polls in mut_rec_func *) + assert(minors_before < minors_after) + +(* this is to test that indirect tail calls (which might result in a self + call) have polls inserted in them. + These correspond to Itailcall_ind at Mach *) +let do_indirect_tail_call f n = + f (n-1) + [@@inline never] + +let polls_added_to_indirect_tail_calls () = + let f = fun n -> n+1 in + let minors_before = minor_gcs () in + request_minor_gc (); + ignore(do_indirect_tail_call f 3); + let minors_after = minor_gcs () in + (* should be at one minor gc from the poll in do_indirect_tail_call *) + assert(minors_before+1 = minors_after) + +(* this is to test that indirect non-tail calls do not have a poll placed + in them. These correspond to Icall_ind at Mach *) +let do_indirect_call f n = + n * f (n-1) + [@@inline never] + +let polls_not_added_to_indirect_calls () = + let f = fun n -> n+1 in + let minors_before = minor_gcs () in + request_minor_gc (); + ignore(do_indirect_call f 3); + let minors_after = minor_gcs () in + (* should be at one minor gc from the poll in do_indirect_tail_call *) + assert(minors_before = minors_after) + +(* this set of functions tests that we don't poll for immediate + (non-tail) calls. These correspond to Icall_imm at Mach *) +let call_func1 n = + Sys.opaque_identity(n-1) + [@@inline never] + +let call_func2 n = + n * (call_func1 (Sys.opaque_identity(n+1))) + [@@inline never] + +let polls_not_added_to_immediate_calls () = + let minors_before = minor_gcs () in + request_minor_gc (); + ignore(call_func1 100); + let minors_after = minor_gcs () in + (* should be no minor collections *) + assert(minors_before = minors_after) + +let[@inline never][@local never] app minors_before f x y = + let minors_after_prologue = minor_gcs () in + assert(minors_before+1 = minors_after_prologue); + request_minor_gc (); + f x y + +let polls_not_added_in_caml_apply () = + let minors_before = minor_gcs() in + request_minor_gc(); + ignore(Sys.opaque_identity(app minors_before (fun x y -> x * y) 5 4)); + let minors_after = minor_gcs() in + assert(minors_before+1 = minors_after) + +let () = + ignore(Sys.opaque_identity(ref 41)); + polls_added_to_loops (); (* relies on there being some minor heap usage *) + + ignore(Sys.opaque_identity(ref 41)); + prologue_polls_in_functions (); + + ignore(Sys.opaque_identity(ref 41)); + polls_added_to_self_recursive_functions (); + + ignore(Sys.opaque_identity(ref 41)); + polls_added_to_mutually_recursive_functions (); + + ignore(Sys.opaque_identity(ref 41)); + polls_added_to_indirect_tail_calls (); + + ignore(Sys.opaque_identity(ref 41)); + polls_not_added_to_indirect_calls (); + + ignore(Sys.opaque_identity(ref 41)); + polls_not_added_to_immediate_calls (); + + ignore(Sys.opaque_identity(ref 41)); + polls_not_added_unconditionally_allocating_functions (); + + ignore(Sys.opaque_identity(ref 41)); + polls_not_added_to_allocating_loops (); + + ignore(Sys.opaque_identity(ref 41)); + polls_not_added_in_caml_apply () From 75659153a1a739ac67b2f405d053b641e1b93981 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 17 Oct 2022 17:31:11 +0100 Subject: [PATCH 03/39] flambda-backend: [@poll error] attribute (#745) --- Makefile.common-jst | 3 ++ lambda/lambda.ml | 6 ++++ lambda/lambda.mli | 6 ++++ lambda/printlambda.ml | 7 +++- lambda/translattribute.ml | 67 ++++++++++++++++++++++++++++++++++++++- lambda/translcore.ml | 1 + lambda/translmod.ml | 1 + 7 files changed, 89 insertions(+), 2 deletions(-) diff --git a/Makefile.common-jst b/Makefile.common-jst index d93fed95e653..c3d2cbcd46b6 100644 --- a/Makefile.common-jst +++ b/Makefile.common-jst @@ -178,6 +178,9 @@ runtest-upstream: _install # replace backend-specific testsuite/tools with their new versions rm _runtest/testsuite/tools/* cp -a testsuite/tools/* _runtest/testsuite/tools/ + # replace backend-specific testsuite/tests/asmcomp with their new versions + rm _runtest/testsuite/tests/asmcomp/* + cp -a testsuite/tests/asmcomp/* _runtest/testsuite/tests/asmcomp/ # replace backend-specific testsuite/tests/asmgen with their new versions rm _runtest/testsuite/tests/asmgen/* cp -a testsuite/tests/asmgen/* _runtest/testsuite/tests/asmgen/ diff --git a/lambda/lambda.ml b/lambda/lambda.ml index 27a3f5b929c9..9627c24dd521 100644 --- a/lambda/lambda.ml +++ b/lambda/lambda.ml @@ -373,6 +373,10 @@ type local_attribute = | Never_local (* [@local never] *) | Default_local (* [@local maybe] or no [@local] attribute *) +type poll_attribute = + | Error_poll (* [@poll error] *) + | Default_poll (* no [@poll] attribute *) + type property = | Noalloc @@ -401,6 +405,7 @@ type function_attribute = { specialise : specialise_attribute; local: local_attribute; check : check_attribute; + poll: poll_attribute; is_a_functor: bool; stub: bool; } @@ -533,6 +538,7 @@ let default_function_attribute = { specialise = Default_specialise; local = Default_local; check = Default_check ; + poll = Default_poll; is_a_functor = false; stub = false; } diff --git a/lambda/lambda.mli b/lambda/lambda.mli index 441df0752417..179684cc690b 100644 --- a/lambda/lambda.mli +++ b/lambda/lambda.mli @@ -294,6 +294,10 @@ type check_attribute = | Assert of property | Assume of property +type poll_attribute = + | Error_poll (* [@poll error] *) + | Default_poll (* no [@poll] attribute *) + type function_kind = Curried of {nlocal: int} | Tupled (* [nlocal] determines how many arguments may be partially applied before the resulting closure must be locally allocated. @@ -321,6 +325,7 @@ type function_attribute = { specialise : specialise_attribute; local: local_attribute; check : check_attribute; + poll: poll_attribute; is_a_functor: bool; stub: bool; } @@ -407,6 +412,7 @@ and lambda_switch = sw_numblocks: int; (* Number of tag block cases *) sw_blocks: (int * lambda) list; (* Tag block cases *) sw_failaction : lambda option} (* Action to take if failure *) + and lambda_event = { lev_loc: scoped_location; lev_kind: lambda_event_kind; diff --git a/lambda/printlambda.ml b/lambda/printlambda.ml index 62b5e158ff67..6b796a580d4c 100644 --- a/lambda/printlambda.ml +++ b/lambda/printlambda.ml @@ -561,7 +561,8 @@ let check_attribute ppf check = | Assert p -> fprintf ppf "assert %s@ " (check_property p) | Assume p -> fprintf ppf "assume %s@ " (check_property p) -let function_attribute ppf { inline; specialise; check; local; is_a_functor; stub } = +let function_attribute ppf + { inline; specialise; check; local; is_a_functor; stub; poll } = if is_a_functor then fprintf ppf "is_a_functor@ "; if stub then @@ -583,6 +584,10 @@ let function_attribute ppf { inline; specialise; check; local; is_a_functor; stu | Always_local -> fprintf ppf "always_local@ " | Never_local -> fprintf ppf "never_local@ " end; + begin match poll with + | Default_poll -> () + | Error_poll -> fprintf ppf "error_poll@ " + end; check_attribute ppf check let apply_tailcall_attribute ppf = function diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index e7cdabfd6abf..75f244019218 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -43,6 +43,10 @@ let is_property_attribute p a = | Noalloc, {txt=("noalloc"|"ocaml.noalloc")} -> true | _ -> false +let is_poll_attribute = function + | {txt=("poll")} -> true + | _ -> false + let find_attribute p attributes = let inline_attribute, other_attributes = List.partition (fun a -> p a.Parsetree.attr_name) attributes @@ -214,6 +218,18 @@ let parse_property_attribute attr p = ] payload +let parse_poll_attribute attr = + match attr with + | None -> Default_poll + | Some {Parsetree.attr_name = {txt; loc}; attr_payload = payload} -> + parse_id_payload txt loc + ~default:Default_poll + ~empty:Default_poll + [ + "error", Error_poll; + ] + payload + let get_inline_attribute l = let attr, _ = find_attribute is_inline_attribute l in parse_inline_attribute attr @@ -237,6 +253,10 @@ let get_check_attribute l = | a -> Some a) [Noalloc] +let get_poll_attribute l = + let attr, _ = find_attribute is_poll_attribute l in + parse_poll_attribute attr + let check_local_inline loc attr = match attr.local, attr.inline with | Always_local, (Always_inline | Available_inline | Unroll _) -> @@ -245,6 +265,24 @@ let check_local_inline loc attr = | _ -> () +let check_poll_inline loc attr = + match attr.poll, attr.inline with + | Error_poll, (Always_inline | Available_inline | Unroll _) -> + Location.prerr_warning loc + (Warnings.Inlining_impossible + "[@poll error] is incompatible with inlining") + | _ -> + () + +let check_poll_local loc attr = + match attr.poll, attr.local with + | Error_poll, Always_local -> + Location.prerr_warning loc + (Warnings.Inlining_impossible + "[@poll error] is incompatible with local function optimization") + | _ -> + () + let add_inline_attribute expr loc attributes = match expr, get_inline_attribute attributes with | expr, Default_inline -> expr @@ -257,6 +295,7 @@ let add_inline_attribute expr loc attributes = end; let attr = { attr with inline } in check_local_inline loc attr; + check_poll_inline loc attr; Lfunction { funct with attr = attr } | expr, (Always_inline | Available_inline | Never_inline | Unroll _) -> Location.prerr_warning loc @@ -292,6 +331,7 @@ let add_local_attribute expr loc attributes = end; let attr = { attr with local } in check_local_inline loc attr; + check_poll_local loc attr; Lfunction { funct with attr } | expr, (Always_local | Never_local) -> Location.prerr_warning loc @@ -328,6 +368,26 @@ let add_check_attribute expr loc attributes = (Printf.sprintf "%s/%s"(to_string a) (to_string b))); expr +let add_poll_attribute expr loc attributes = + match expr, get_poll_attribute attributes with + | expr, Default_poll -> expr + | Lfunction({ attr = { stub = false } as attr } as funct), poll -> + begin match attr.poll with + | Default_poll -> () + | Error_poll -> + Location.prerr_warning loc + (Warnings.Duplicated_attribute "error_poll") + end; + let attr = { attr with poll } in + check_poll_inline loc attr; + check_poll_local loc attr; + let attr = { attr with inline = Never_inline; local = Never_local } in + Lfunction { funct with attr } + | expr, Error_poll -> + Location.prerr_warning loc + (Warnings.Misplaced_attribute "error_poll"); + expr + (* Get the [@inlined] attribute payload (or default if not present). It also returns the expression without this attribute. This is used to ensure that this attribute is not misplaced: If it @@ -400,7 +460,8 @@ let get_tailcall_attribute e = let check_attribute e {Parsetree.attr_name = { txt; loc }; _} = match txt with | "inline" | "ocaml.inline" - | "specialise" | "ocaml.specialise" -> begin + | "specialise" | "ocaml.specialise" + | "poll" | "ocaml.poll" -> begin match e.exp_desc with | Texp_function _ -> () | _ -> @@ -443,4 +504,8 @@ let add_function_attributes lam loc attr = let lam = add_check_attribute lam loc attr in + let lam = + (* last because poll overrides inline and local *) + add_poll_attribute lam loc attr + in lam diff --git a/lambda/translcore.ml b/lambda/translcore.ml index 416989ae9fbc..6a34fef97846 100644 --- a/lambda/translcore.ml +++ b/lambda/translcore.ml @@ -820,6 +820,7 @@ and transl_exp0 ~in_new_scope ~scopes e = check = Default_check; is_a_functor = false; stub = false; + poll = Default_poll; } in let funcid = Ident.create_local ("probe_handler_" ^ name) in let handler = diff --git a/lambda/translmod.ml b/lambda/translmod.ml index a143041553cb..436657bcf81b 100644 --- a/lambda/translmod.ml +++ b/lambda/translmod.ml @@ -534,6 +534,7 @@ let rec compile_functor ~scopes mexp coercion root_path loc = inline = inline_attribute; specialise = Default_specialise; local = Default_local; + poll = Default_poll; check = Default_check; is_a_functor = true; stub = false; From 3cd36f0058250d2e10abfed5b5faf24f50d262d1 Mon Sep 17 00:00:00 2001 From: Luke Maurer Date: Tue, 18 Oct 2022 09:14:07 +0100 Subject: [PATCH 04/39] flambda-backend: Have Lambda `Pgetglobal` and `Psetglobal` take `Compilation_unit.t` (#896) * Have Lambda `Pgetglobal` and `Psetglobal` take `Compilation_unit.t` Also introduces the `Pgetpredef` primitive to cover the case where the original `Pgetglobal` took a predefined `Ident.t`. This is the first step toward having `Compilation_unit.t` take the place of known-global `Ident.t`s. There have been about as few API changes as I can get away with, which in many places means converting between `Ident.t` and `Compilation_unit.t`, which we very much want to get away from in the long term, since an `Ident.t` is ambiguous as to whether it has its proper prefix (usually not, but occasionally so!). Co-authored-by: Mark Shinwell --- bytecomp/bytegen.ml | 10 +++-- lambda/lambda.ml | 19 ++++++--- lambda/lambda.mli | 5 ++- lambda/printlambda.ml | 6 ++- lambda/translmod.ml | 51 ++++++++++++++++++------ lambda/translobj.mli | 2 +- lambda/translprim.ml | 2 +- middle_end/closure/closure.ml | 10 ++++- middle_end/convert_primitives.ml | 1 + middle_end/flambda/closure_conversion.ml | 17 +++++--- middle_end/internal_variable_names.ml | 4 ++ otherlibs/dynlink/dune | 20 ++++++---- toplevel/opttoploop.ml | 7 +++- utils/compilation_unit.ml | 5 +++ utils/compilation_unit.mli | 13 ++++++ 15 files changed, 128 insertions(+), 44 deletions(-) diff --git a/bytecomp/bytegen.ml b/bytecomp/bytegen.ml index 740f287e23d7..44fc3574c66a 100644 --- a/bytecomp/bytegen.ml +++ b/bytecomp/bytegen.ml @@ -112,7 +112,8 @@ let preserve_tailcall_for_prim = function Pidentity | Popaque | Pdirapply _ | Prevapply _ | Psequor | Psequand | Pobj_magic -> true - | Pbytes_to_string | Pbytes_of_string | Pignore | Pgetglobal _ | Psetglobal _ + | Pbytes_to_string | Pbytes_of_string | Pignore + | Pgetglobal _ | Psetglobal _ | Pgetpredef _ | Pmakeblock _ | Pmakefloatblock _ | Pfield _ | Pfield_computed _ | Psetfield _ | Psetfield_computed _ | Pfloatfield _ | Psetfloatfield _ | Pduprecord _ @@ -390,8 +391,11 @@ let comp_bint_primitive bi suff args = let comp_primitive p args = match p with - Pgetglobal id -> Kgetglobal id - | Psetglobal id -> Ksetglobal id + Pgetglobal cu -> + Kgetglobal (cu |> Compilation_unit.to_global_ident_for_legacy_code) + | Psetglobal cu -> + Ksetglobal (cu |> Compilation_unit.to_global_ident_for_legacy_code) + | Pgetpredef id -> Kgetglobal id | Pintcomp cmp -> Kintcomp cmp | Pcompare_ints -> Kccall("caml_int_compare", 2) | Pcompare_floats -> Kccall("caml_float_compare", 2) diff --git a/lambda/lambda.ml b/lambda/lambda.ml index 9627c24dd521..1ff4a176f54c 100644 --- a/lambda/lambda.ml +++ b/lambda/lambda.ml @@ -110,8 +110,9 @@ type primitive = | Prevapply of region_close | Pdirapply of region_close (* Globals *) - | Pgetglobal of Ident.t - | Psetglobal of Ident.t + | Pgetglobal of Compilation_unit.t + | Psetglobal of Compilation_unit.t + | Pgetpredef of Ident.t (* Operations on heap blocks *) | Pmakeblock of int * mutable_flag * block_shape * alloc_mode | Pmakefloatblock of mutable_flag * alloc_mode @@ -836,8 +837,16 @@ let rec patch_guarded patch = function let rec transl_address loc = function | Env.Aident id -> - if Ident.is_global_or_predef id - then Lprim(Pgetglobal id, [], loc) + if Ident.is_predef id + then Lprim (Pgetpredef id, [], loc) + else if Ident.is_global id + then + (* Prefixes are currently always empty *) + let cu = + Compilation_unit.create Compilation_unit.Prefix.empty + (Ident.name id |> Compilation_unit.Name.of_string) + in + Lprim(Pgetglobal cu, [], loc) else Lvar id | Env.Adot(addr, pos) -> Lprim(Pfield (pos, Reads_agree), [transl_address loc addr], loc) @@ -1191,7 +1200,7 @@ let mod_setfield pos = let primitive_may_allocate : primitive -> alloc_mode option = function | Pidentity | Pbytes_to_string | Pbytes_of_string | Pignore -> None | Prevapply _ | Pdirapply _ -> Some alloc_local - | Pgetglobal _ | Psetglobal _ -> None + | Pgetglobal _ | Psetglobal _ | Pgetpredef _ -> None | Pmakeblock (_, _, _, m) -> Some m | Pmakefloatblock (_, m) -> Some m | Pfield _ | Pfield_computed _ | Psetfield _ | Psetfield_computed _ -> None diff --git a/lambda/lambda.mli b/lambda/lambda.mli index 179684cc690b..5d79f2bc772c 100644 --- a/lambda/lambda.mli +++ b/lambda/lambda.mli @@ -77,8 +77,9 @@ type primitive = | Prevapply of region_close | Pdirapply of region_close (* Globals *) - | Pgetglobal of Ident.t - | Psetglobal of Ident.t + | Pgetglobal of Compilation_unit.t + | Psetglobal of Compilation_unit.t + | Pgetpredef of Ident.t (* Operations on heap blocks *) | Pmakeblock of int * mutable_flag * block_shape * alloc_mode | Pmakefloatblock of mutable_flag * alloc_mode diff --git a/lambda/printlambda.ml b/lambda/printlambda.ml index 6b796a580d4c..574c5945728a 100644 --- a/lambda/printlambda.ml +++ b/lambda/printlambda.ml @@ -220,8 +220,9 @@ let primitive ppf = function | Pignore -> fprintf ppf "ignore" | Prevapply _ -> fprintf ppf "revapply" | Pdirapply _ -> fprintf ppf "dirapply" - | Pgetglobal id -> fprintf ppf "global %a" Ident.print id - | Psetglobal id -> fprintf ppf "setglobal %a" Ident.print id + | Pgetglobal cu -> fprintf ppf "global %a!" Compilation_unit.print cu + | Psetglobal cu -> fprintf ppf "setglobal %a!" Compilation_unit.print cu + | Pgetpredef id -> fprintf ppf "getpredef %a!" Ident.print id | Pmakeblock(tag, Immutable, shape, mode) -> fprintf ppf "make%sblock %i%a" (alloc_mode mode) tag block_shape shape @@ -451,6 +452,7 @@ let name_of_primitive = function | Pdirapply _ -> "Pdirapply" | Pgetglobal _ -> "Pgetglobal" | Psetglobal _ -> "Psetglobal" + | Pgetpredef _ -> "Pgetpredef" | Pmakeblock _ -> "Pmakeblock" | Pmakefloatblock _ -> "Pmakefloatblock" | Pfield _ -> "Pfield" diff --git a/lambda/translmod.ml b/lambda/translmod.ml index 436657bcf81b..44c799fe2965 100644 --- a/lambda/translmod.ml +++ b/lambda/translmod.ml @@ -47,6 +47,18 @@ let cons_opt x_opt xs = | None -> xs | Some x -> x :: xs +(* Hacky shims. Note that we only ever create compilation units with + empty prefixes, so these are indeed safe. *) +let compilation_unit_of_modname modname = + Compilation_unit.create Compilation_unit.Prefix.empty + (modname |> Compilation_unit.Name.of_string) +let compilation_unit_of_ident ident = + Ident.name ident |> compilation_unit_of_modname +let ident_of_compilation_unit compilation_unit = + assert (Compilation_unit.Prefix.is_empty + (Compilation_unit.for_pack_prefix compilation_unit)); + compilation_unit |> Compilation_unit.to_global_ident_for_legacy_code + (* Keep track of the root path (from the root of the namespace to the currently compiled module expression). Useful for naming extensions. *) @@ -869,7 +881,9 @@ let scan_used_globals lam = let rec scan lam = Lambda.iter_head_constructor scan lam; match lam with - Lprim ((Pgetglobal id | Psetglobal id), _, _) -> + Lprim ((Pgetglobal cu | Psetglobal cu), _, _) -> + globals := Ident.Set.add (cu |> ident_of_compilation_unit) !globals + | Lprim (Pgetpredef id, _, _) -> globals := Ident.Set.add id !globals | _ -> () in @@ -921,8 +935,11 @@ let transl_implementation module_name (str, cc) = let implementation = transl_implementation_flambda module_name (str, cc) in + let compilation_unit = + implementation.module_ident |> compilation_unit_of_ident + in let code = - Lprim (Psetglobal implementation.module_ident, [implementation.code], + Lprim (Psetglobal compilation_unit, [implementation.code], Loc_unknown) in { implementation with code } @@ -1069,7 +1086,8 @@ let transl_store_subst = ref Ident.Map.empty let nat_toplevel_name id = try match Ident.Map.find id !transl_store_subst with | Lprim(Pfield (pos, _), - [Lprim(Pgetglobal glob, [], _)], _) -> (glob,pos) + [Lprim(Pgetglobal glob, [], _)], _) -> + ((glob |> ident_of_compilation_unit),pos) | _ -> raise Not_found with Not_found -> fatal_error("Translmod.nat_toplevel_name: " ^ Ident.unique_name id) @@ -1446,7 +1464,9 @@ let transl_store_structure ~scopes glob map prims aliases str = in let aliases = make_sequence store_alias aliases in List.fold_right store_primitive prims - (transl_store ~scopes (global_path glob) !transl_store_subst aliases str) + (transl_store ~scopes + (global_path (glob |> ident_of_compilation_unit)) + !transl_store_subst aliases str) (* Transform a coercion and the list of value identifiers defined by a toplevel structure into a table [id -> (pos, coercion)], @@ -1504,6 +1524,7 @@ let transl_store_gen ~scopes module_name ({ str_items = str }, restr) topl = Translcore.clear_probe_handlers (); Translprim.clear_used_primitives (); let module_id = Ident.create_persistent module_name in + let compilation_unit = module_id |> compilation_unit_of_ident in let (map, prims, aliases, size) = build_ident_map restr (defined_idents str) (more_idents str) in let f str = @@ -1513,11 +1534,12 @@ let transl_store_gen ~scopes module_name ({ str_items = str }, restr) topl = assert (size = 0); Lambda.subst (fun _ _ env -> env) !transl_store_subst (transl_exp ~scopes expr) - | str -> transl_store_structure ~scopes module_id map prims aliases str + | str -> + transl_store_structure ~scopes compilation_unit map prims aliases str in Translcore.declare_probe_handlers expr in - transl_store_label_init module_id size f str + transl_store_label_init compilation_unit size f str (*size, transl_label_init (transl_store_structure module_id map prims str)*) let transl_store_phrases module_name str = @@ -1543,7 +1565,7 @@ let transl_store_implementation module_name (str, restr) = (* Compile a toplevel phrase *) -let toploop_ident = Ident.create_persistent "Toploop" +let toploop_unit = Compilation_unit.of_string "Toploop" let toploop_getvalue_pos = 0 (* position of getvalue in module Toploop *) let toploop_setvalue_pos = 1 (* position of setvalue in module Toploop *) @@ -1561,7 +1583,7 @@ let toploop_getvalue id = Lapply{ ap_loc=Loc_unknown; ap_func=Lprim(mod_field toploop_getvalue_pos, - [Lprim(Pgetglobal toploop_ident, [], Loc_unknown)], + [Lprim(Pgetglobal toploop_unit, [], Loc_unknown)], Loc_unknown); ap_args=[Lconst(Const_base( Const_string (toplevel_name id, Location.none, None)))]; @@ -1577,7 +1599,7 @@ let toploop_setvalue id lam = Lapply{ ap_loc=Loc_unknown; ap_func=Lprim(mod_field toploop_setvalue_pos, - [Lprim(Pgetglobal toploop_ident, [], Loc_unknown)], + [Lprim(Pgetglobal toploop_unit, [], Loc_unknown)], Loc_unknown); ap_args= [Lconst(Const_base( @@ -1742,7 +1764,9 @@ let transl_toplevel_definition str = let get_component = function None -> Lconst const_unit - | Some id -> Lprim(Pgetglobal id, [], Loc_unknown) + | Some id -> + let cu = id |> compilation_unit_of_ident in + Lprim(Pgetglobal cu, [], Loc_unknown) let transl_package_flambda component_names coercion = let size = @@ -1763,7 +1787,7 @@ let transl_package component_names target_name coercion = let components = Lprim(Pmakeblock(0, Immutable, None, alloc_heap), List.map get_component component_names, Loc_unknown) in - Lprim(Psetglobal target_name, + Lprim(Psetglobal (target_name |> compilation_unit_of_ident), [apply_coercion Loc_unknown Strict coercion components], Loc_unknown) (* @@ -1783,6 +1807,7 @@ let transl_package component_names target_name coercion = *) let transl_store_package component_names target_name coercion = + let target_unit = target_name |> compilation_unit_of_ident in let rec make_sequence fn pos arg = match arg with [] -> lambda_unit @@ -1793,7 +1818,7 @@ let transl_store_package component_names target_name coercion = make_sequence (fun pos id -> Lprim(mod_setfield pos, - [Lprim(Pgetglobal target_name, [], Loc_unknown); + [Lprim(Pgetglobal target_unit, [], Loc_unknown); get_component id], Loc_unknown)) 0 component_names) @@ -1810,7 +1835,7 @@ let transl_store_package component_names target_name coercion = make_sequence (fun pos _id -> Lprim(mod_setfield pos, - [Lprim(Pgetglobal target_name, [], Loc_unknown); + [Lprim(Pgetglobal target_unit, [], Loc_unknown); Lprim(mod_field pos, [Lvar blk], Loc_unknown)], Loc_unknown)) 0 pos_cc_list)) diff --git a/lambda/translobj.mli b/lambda/translobj.mli index c27053e96111..cbe9ac811197 100644 --- a/lambda/translobj.mli +++ b/lambda/translobj.mli @@ -23,7 +23,7 @@ val meth: lambda -> string -> lambda * lambda list val reset_labels: unit -> unit val transl_label_init: (unit -> lambda * 'a) -> lambda * 'a val transl_store_label_init: - Ident.t -> int -> ('a -> lambda) -> 'a -> int * lambda + Compilation_unit.t -> int -> ('a -> lambda) -> 'a -> int * lambda val method_ids: Ident.Set.t ref (* reset when starting a new wrapper *) diff --git a/lambda/translprim.ml b/lambda/translprim.ml index 4750492883af..5e453afb7cce 100644 --- a/lambda/translprim.ml +++ b/lambda/translprim.ml @@ -815,7 +815,7 @@ let lambda_primitive_needs_event_after = function | Pbbswap _ | Pobj_dup -> true | Pidentity | Pbytes_to_string | Pbytes_of_string | Pignore | Psetglobal _ - | Pgetglobal _ | Pmakeblock _ | Pmakefloatblock _ + | Pgetglobal _ | Pgetpredef _ | Pmakeblock _ | Pmakefloatblock _ | Pfield _ | Pfield_computed _ | Psetfield _ | Psetfield_computed _ | Pfloatfield _ | Psetfloatfield _ | Praise _ | Psequor | Psequand | Pnot | Pnegint | Paddint | Psubint | Pmulint diff --git a/middle_end/closure/closure.ml b/middle_end/closure/closure.ml index 6684107ca36d..0503df55ad95 100644 --- a/middle_end/closure/closure.ml +++ b/middle_end/closure/closure.ml @@ -1227,7 +1227,12 @@ let rec close ({ backend; fenv; cenv ; mutable_vars } as env) lam = ap_specialised=Default_specialise; ap_probe=None; }) - | Lprim(Pgetglobal id, [], loc) -> + | Lprim(Pgetglobal cu, [], loc) -> + let id = Compilation_unit.to_global_ident_for_legacy_code cu in + let dbg = Debuginfo.from_location loc in + check_constant_result (getglobal dbg id) + (Compilenv.global_approx id) + | Lprim(Pgetpredef id, [], loc) -> let dbg = Debuginfo.from_location loc in check_constant_result (getglobal dbg id) (Compilenv.global_approx id) @@ -1237,11 +1242,12 @@ let rec close ({ backend; fenv; cenv ; mutable_vars } as env) lam = check_constant_result (Uprim(P.Pfield n, [ulam], dbg)) (field_approx n approx) | Lprim(Psetfield(n, is_ptr, init), - [Lprim(Pgetglobal id, [], _); lam], loc) -> + [Lprim(Pgetglobal cu, [], _); lam], loc) -> let (ulam, approx) = close env lam in if approx <> Value_unknown then (!global_approx).(n) <- approx; let dbg = Debuginfo.from_location loc in + let id = cu |> Compilation_unit.to_global_ident_for_legacy_code in (Uprim(P.Psetfield(n, is_ptr, init), [getglobal dbg id; ulam], dbg), Value_unknown) | Lprim(Praise k, [arg], loc) -> diff --git a/middle_end/convert_primitives.ml b/middle_end/convert_primitives.ml index 7abfacaf8bc6..9bb2477e0691 100644 --- a/middle_end/convert_primitives.ml +++ b/middle_end/convert_primitives.ml @@ -164,6 +164,7 @@ let convert (prim : Lambda.primitive) : Clambda_primitives.primitive = | Pidentity | Pgetglobal _ | Psetglobal _ + | Pgetpredef _ -> Misc.fatal_errorf "lambda primitive %a can't be converted to \ clambda primitive" diff --git a/middle_end/flambda/closure_conversion.ml b/middle_end/flambda/closure_conversion.ml index 82b0c30bd57f..d8141a04a26e 100644 --- a/middle_end/flambda/closure_conversion.ml +++ b/middle_end/flambda/closure_conversion.ml @@ -475,22 +475,27 @@ let rec close t env (lam : Lambda.lambda) : Flambda.t = close t env (Lambda.Llet(Strict, Pgenval, Ident.create_local "dummy", arg, Lconst const)) - | Lprim (Pfield _, [Lprim (Pgetglobal id, [],_)], _) - when Ident.same id t.current_unit_id -> + | Lprim (Pfield _, [Lprim (Pgetglobal cu, [],_)], _) + when Ident.same (cu |> Compilation_unit.to_global_ident_for_legacy_code) + t.current_unit_id -> Misc.fatal_errorf "[Pfield (Pgetglobal ...)] for the current compilation \ unit is forbidden upon entry to the middle end" | Lprim (Psetfield (_, _, _), [Lprim (Pgetglobal _, [], _); _], _) -> Misc.fatal_errorf "[Psetfield (Pgetglobal ...)] is \ forbidden upon entry to the middle end" - | Lprim (Pgetglobal id, [], _) when Ident.is_predef id -> + | Lprim (Pgetpredef id, [], _) -> + assert (Ident.is_predef id); let symbol = Symbol.for_predef_ident id in t.imported_symbols <- Symbol.Set.add symbol t.imported_symbols; name_expr (Symbol symbol) ~name:Names.predef_exn - | Lprim (Pgetglobal id, [], _) -> + | Lprim (Pgetglobal cu, [], _) -> + let id = cu |> Compilation_unit.to_global_ident_for_legacy_code in assert (not (Ident.same id t.current_unit_id)); - let symbol = - Symbol.for_global_or_predef_ident ((pack_prefix_for_global_ident t) id) id + let cu = + Compilation_unit.with_for_pack_prefix cu + (pack_prefix_for_global_ident t id) in + let symbol = Symbol.for_compilation_unit cu in t.imported_symbols <- Symbol.Set.add symbol t.imported_symbols; name_expr (Symbol symbol) ~name:Names.pgetglobal | Lprim (lambda_p, args, loc) -> diff --git a/middle_end/internal_variable_names.ml b/middle_end/internal_variable_names.ml index d8a48332cdd4..e045fbd4295d 100644 --- a/middle_end/internal_variable_names.ml +++ b/middle_end/internal_variable_names.ml @@ -119,6 +119,7 @@ let pfloatcomp = "Pfloatcomp" let pfloatfield = "Pfloatfield" let pfloatofint = "Pfloatofint" let pgetglobal = "Pgetglobal" +let pgetpredef = "Pgetpredef" let pidentity = "Pidentity" let pignore = "Pignore" let pint_as_pointer = "Pint_as_pointer" @@ -225,6 +226,7 @@ let pfloatcomp_arg = "Pfloatcomp_arg" let pfloatfield_arg = "Pfloatfield_arg" let pfloatofint_arg = "Pfloatofint_arg" let pgetglobal_arg = "Pgetglobal_arg" +let pgetpredef_arg = "Pgetpredef_arg" let pobj_dup_arg = "Pobj_dup_arg" let pobj_magic_arg = "Pobj_magic_arg" let pidentity_arg = "Pidentity_arg" @@ -327,6 +329,7 @@ let of_primitive : Lambda.primitive -> string = function | Pdirapply _ -> pdirapply | Pgetglobal _ -> pgetglobal | Psetglobal _ -> psetglobal + | Pgetpredef _ -> pgetpredef | Pmakeblock _ -> pmakeblock | Pmakefloatblock _ -> pmakefloatblock | Pfield _ -> pfield @@ -437,6 +440,7 @@ let of_primitive_arg : Lambda.primitive -> string = function | Pdirapply _ -> pdirapply_arg | Pgetglobal _ -> pgetglobal_arg | Psetglobal _ -> psetglobal_arg + | Pgetpredef _ -> pgetpredef_arg | Pmakeblock _ -> pmakeblock_arg | Pmakefloatblock _ -> pmakefloatblock_arg | Pfield _ -> pfield_arg diff --git a/otherlibs/dynlink/dune b/otherlibs/dynlink/dune index f0f6006c16fd..bd31a1411b28 100644 --- a/otherlibs/dynlink/dune +++ b/otherlibs/dynlink/dune @@ -205,6 +205,10 @@ ; at the moment, apparently Buenzli is working on this). ; We use a workaround for the moment. +; CR-someday lmaurer: This is a serious maintenance burden. *Surely* this +; list can be generated automatically and added to the dynlink.cma rule +; by a %{read} expression. + ; Deps within the compiler tree must be on dynlink_internal not dynlink. (library (name dynlink_internal) @@ -229,6 +233,7 @@ -ccopt %{read:natdynlinkops} -o dynlink.cma ; NOTE: Be sure to keep these arguments in dependency order! + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Binutils.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Local_store.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Build_path_prefix_map.cmo @@ -245,6 +250,9 @@ .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ident.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Longident.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Builtin_attributes.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Compilation_unit.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Linkage_name.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symbol.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Type_immediacy.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Path.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Attr_helper.cmo @@ -253,7 +261,6 @@ .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Syntaxerr.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Bytesections.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Cmi_format.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Debuginfo.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Btype.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Consistbl.cmo @@ -273,9 +280,6 @@ .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Runtimedef.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symtable.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Opcodes.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Compilation_unit.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Linkage_name.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symbol.cmo .dynlink_internal.objs/byte/dynlink_types.cmo .dynlink_internal.objs/byte/dynlink_platform_intf.cmo .dynlink_internal.objs/byte/dynlink_common.cmo @@ -293,6 +297,7 @@ -ccopt %{read:natdynlinkops} -o dynlink.cmxa ; NOTE: Be sure to keep these arguments in dependency order! + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Binutils.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Local_store.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Build_path_prefix_map.cmx @@ -309,6 +314,9 @@ .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ident.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Longident.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Builtin_attributes.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Compilation_unit.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Linkage_name.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symbol.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Type_immediacy.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Path.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Attr_helper.cmx @@ -317,7 +325,6 @@ .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Syntaxerr.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Bytesections.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Cmi_format.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Debuginfo.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Btype.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Consistbl.cmx @@ -337,9 +344,6 @@ .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Runtimedef.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symtable.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Opcodes.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Compilation_unit.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Linkage_name.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symbol.cmx .dynlink_internal.objs/native/dynlink_types.cmx .dynlink_internal.objs/native/dynlink_platform_intf.cmx .dynlink_internal.objs/native/dynlink_common.cmx diff --git a/toplevel/opttoploop.ml b/toplevel/opttoploop.ml index 2ac70d1a36d5..681ee3279c03 100644 --- a/toplevel/opttoploop.ml +++ b/toplevel/opttoploop.ml @@ -77,13 +77,18 @@ let toplevel_value id = try Ident.find_same id !remembered with _ -> Misc.fatal_error @@ "Unknown ident: " ^ Ident.unique_name id +let compilation_unit_of_toplevel_ident id = + Compilation_unit.create Compilation_unit.Prefix.empty + (Ident.name id |> Compilation_unit.Name.of_string) + let close_phrase lam = let open Lambda in Ident.Set.fold (fun id l -> let glb, pos = toplevel_value id in let glob = Lprim (mod_field pos, - [Lprim (Pgetglobal glb, [], Loc_unknown)], + [Lprim (Pgetglobal (glb |> compilation_unit_of_toplevel_ident), + [], Loc_unknown)], Loc_unknown) in Llet(Strict, Pgenval, id, glob, l) diff --git a/utils/compilation_unit.ml b/utils/compilation_unit.ml index 49e29068da02..ff6360700d1b 100644 --- a/utils/compilation_unit.ml +++ b/utils/compilation_unit.ml @@ -196,6 +196,8 @@ let predef_exn = create Prefix.empty (Name.of_string "*predef*") let name t = t.name +let name_as_string t = name t |> Name.to_string + let for_pack_prefix t = t.for_pack_prefix let with_for_pack_prefix t for_pack_prefix = { t with for_pack_prefix; } @@ -248,6 +250,9 @@ let print_name ppf t = let full_path_as_string t = Format.asprintf "%a" print t +let to_global_ident_for_legacy_code t = + Ident.create_persistent (full_path_as_string t) + let print_debug ppf { for_pack_prefix; hash = _; name } = if Prefix.is_empty for_pack_prefix then Format.fprintf ppf "@[(\ diff --git a/utils/compilation_unit.mli b/utils/compilation_unit.mli index 72215ab9a147..f9662cebf8c7 100644 --- a/utils/compilation_unit.mli +++ b/utils/compilation_unit.mli @@ -93,6 +93,12 @@ val create : Prefix.t -> Name.t -> t prefix is extracted if there is any. *) val of_string : string -> t +(** Create a global [Ident.t] representing this compilation unit. DO NOT USE + if you can possibly avoid it. Most uses of [Ident.t]s that are known to be + global should simply use [t] instead. *) +(* CR mshinwell: Delete this as soon as the functor packs work is finished. *) +val to_global_ident_for_legacy_code : t -> Ident.t + (** Find whether one compilation unit has another as a child. That is, whether the other unit has this one as its path prefix. *) val is_parent : t -> child:t -> bool @@ -106,6 +112,13 @@ val predef_exn : t (** The name of the compilation unit, excluding any [for_pack_prefix]. *) val name : t -> Name.t +(** The name of the compilation unit, excluding any [for_pack_prefix], as + as a string. *) + +(* CR mshinwell: Try to delete this as soon as the functor packs work is + finished. *) +val name_as_string : t -> string + (** The "-for-pack" prefix associated with the given compilation unit. *) val for_pack_prefix : t -> Prefix.t From 7fa7f9dd96bc39e474f8b568938ed8832aa7fac2 Mon Sep 17 00:00:00 2001 From: Luke Maurer Date: Tue, 18 Oct 2022 14:36:49 +0100 Subject: [PATCH 05/39] flambda-backend: Add missing dependencies to Dune files (#889) Precise dependencies seem to be more necessary when compiling with Dune 3.1.1, presumably due to some change in sandboxing or parallelism. --- otherlibs/dynlink/dune | 216 +++++++++++++++++++++-------------------- runtime/caml/dune | 2 +- tools/dune | 3 + 3 files changed, 114 insertions(+), 107 deletions(-) diff --git a/otherlibs/dynlink/dune b/otherlibs/dynlink/dune index bd31a1411b28..444587cc15f0 100644 --- a/otherlibs/dynlink/dune +++ b/otherlibs/dynlink/dune @@ -226,128 +226,132 @@ (rule (targets dynlink.cma) - (deps dynlink_internal.cma) + (deps + ; Note: Be sure to keep these arguments in dependency order! + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Binutils.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Local_store.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Build_path_prefix_map.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Config.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Misc.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Warnings.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Arg_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Identifiable.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Numbers.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Profile.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Clflags.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Terminfo.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Location.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ident.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Longident.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Builtin_attributes.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Compilation_unit.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Linkage_name.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symbol.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Type_immediacy.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Path.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Attr_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Primitive.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Types.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Syntaxerr.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Bytesections.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Cmi_format.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Debuginfo.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Btype.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Consistbl.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Datarepr.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Load_path.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Persistent_env.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Docstrings.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Predef.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_mapper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Subst.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Env.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Lambda.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Dll.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Instruct.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Meta.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Runtimedef.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symtable.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Opcodes.cmo + .dynlink_internal.objs/byte/dynlink_types.cmo + .dynlink_internal.objs/byte/dynlink_platform_intf.cmo + .dynlink_internal.objs/byte/dynlink_common.cmo + .dynlink_internal.objs/byte/dynlink.cmo + ) (action (run %{ocamlc} -g -a -ccopt %{read:natdynlinkops} -o dynlink.cma - ; NOTE: Be sure to keep these arguments in dependency order! - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Binutils.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Local_store.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Build_path_prefix_map.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Config.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Misc.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Warnings.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Arg_helper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Identifiable.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Numbers.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Profile.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Clflags.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Terminfo.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Location.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ident.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Longident.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Builtin_attributes.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Compilation_unit.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Linkage_name.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symbol.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Type_immediacy.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Path.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Attr_helper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Primitive.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Types.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Syntaxerr.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Bytesections.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Cmi_format.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Debuginfo.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Btype.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Consistbl.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Datarepr.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Load_path.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Persistent_env.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Docstrings.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_helper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Predef.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_mapper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Subst.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Env.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Lambda.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Dll.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Instruct.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Meta.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Runtimedef.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symtable.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Opcodes.cmo - .dynlink_internal.objs/byte/dynlink_types.cmo - .dynlink_internal.objs/byte/dynlink_platform_intf.cmo - .dynlink_internal.objs/byte/dynlink_common.cmo - .dynlink_internal.objs/byte/dynlink.cmo + %{deps} ) ) ) (rule (targets dynlink.cmxa dynlink.a) - (deps dynlink_internal.cmxa) + (deps + ; NOTE: Be sure to keep these arguments in dependency order! + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Binutils.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Local_store.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Build_path_prefix_map.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Config.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Misc.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Warnings.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Arg_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Identifiable.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Numbers.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Profile.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Clflags.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Terminfo.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Location.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ident.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Longident.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Builtin_attributes.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Compilation_unit.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Linkage_name.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symbol.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Type_immediacy.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Path.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Attr_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Primitive.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Types.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Syntaxerr.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Bytesections.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Cmi_format.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Debuginfo.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Btype.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Consistbl.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Datarepr.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Load_path.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Persistent_env.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Docstrings.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Predef.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_mapper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Subst.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Env.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Lambda.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Dll.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Instruct.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Meta.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Runtimedef.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symtable.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Opcodes.cmx + .dynlink_internal.objs/native/dynlink_types.cmx + .dynlink_internal.objs/native/dynlink_platform_intf.cmx + .dynlink_internal.objs/native/dynlink_common.cmx + .dynlink_internal.objs/native/dynlink.cmx + ) (action (run %{ocamlopt} -g -a -ccopt %{read:natdynlinkops} -o dynlink.cmxa - ; NOTE: Be sure to keep these arguments in dependency order! - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Binutils.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Local_store.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Build_path_prefix_map.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Config.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Misc.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Warnings.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Arg_helper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Identifiable.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Numbers.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Profile.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Clflags.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Terminfo.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Location.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ident.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Longident.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Builtin_attributes.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Compilation_unit.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Linkage_name.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symbol.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Type_immediacy.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Path.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Attr_helper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Primitive.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Types.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Syntaxerr.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Bytesections.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Cmi_format.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Debuginfo.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Btype.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Consistbl.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Datarepr.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Load_path.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Persistent_env.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Docstrings.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_helper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Predef.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_mapper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Subst.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Env.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Lambda.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Dll.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Instruct.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Meta.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Runtimedef.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symtable.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Opcodes.cmx - .dynlink_internal.objs/native/dynlink_types.cmx - .dynlink_internal.objs/native/dynlink_platform_intf.cmx - .dynlink_internal.objs/native/dynlink_common.cmx - .dynlink_internal.objs/native/dynlink.cmx + %{deps} ) ) ) diff --git a/runtime/caml/dune b/runtime/caml/dune index 703a504497d9..830ce097a62d 100644 --- a/runtime/caml/dune +++ b/runtime/caml/dune @@ -23,7 +23,7 @@ (rule (targets opnames.h) - (deps instruct.h) + (deps instruct.h ../Makefile) (action (run make -s -C .. caml/opnames.h))) (rule diff --git a/tools/dune b/tools/dune index b78cd5c6cf8a..d25fb6db3213 100644 --- a/tools/dune +++ b/tools/dune @@ -61,7 +61,10 @@ (rule (targets ocamlmklibconfig.ml) (deps + ../Makefile.build_config + ../Makefile.common ../Makefile.config + ../Makefile.config_if_required ../Makefile Makefile .depend) From 5a977e4483ecf017afb4eabb3fc1d50e1441f44f Mon Sep 17 00:00:00 2001 From: Vincent Laviron Date: Wed, 19 Oct 2022 15:46:32 +0200 Subject: [PATCH 06/39] flambda-backend: Fix missing End_region primitives on switch arms (#898) --- testsuite/tests/typing-local/regions.ml | 7 +++++++ testsuite/tests/typing-local/regions.reference | 1 + 2 files changed, 8 insertions(+) diff --git a/testsuite/tests/typing-local/regions.ml b/testsuite/tests/typing-local/regions.ml index 44c73f23b68c..57ceccb331c0 100644 --- a/testsuite/tests/typing-local/regions.ml +++ b/testsuite/tests/typing-local/regions.ml @@ -114,6 +114,13 @@ let () = check_empty "toplevel rec binding" ());; let () = check_empty "toplevel eval" +let () = + let f x b g = + let local_ p = x, x in + if b then () else (g p; ()) + in f 0 true (fun _ -> ()) +let () = check_empty "constant switch arm" + module type T = sig val x : int end let _ = let module M : T = diff --git a/testsuite/tests/typing-local/regions.reference b/testsuite/tests/typing-local/regions.reference index bea73d31191d..d5ea082ec107 100644 --- a/testsuite/tests/typing-local/regions.reference +++ b/testsuite/tests/typing-local/regions.reference @@ -13,6 +13,7 @@ toplevel binding: OK toplevel rec binding: OK toplevel eval: OK + constant switch arm: OK first class mod: OK class d definition: OK class definitions: OK From 853c4884fd0a33bc178df735ab17e785f91d8a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathana=C3=ABlle=20Courant?= Date: Wed, 19 Oct 2022 17:43:34 +0200 Subject: [PATCH 07/39] flambda-backend: Transform tail-recursive functions into recursive continuations (#893) --- lambda/lambda.ml | 7 ++++ lambda/lambda.mli | 6 +++ lambda/printlambda.ml | 9 +++- lambda/translattribute.ml | 41 +++++++++++++++++++ lambda/translattribute.mli | 10 +++++ lambda/translcore.ml | 1 + lambda/translmod.ml | 1 + .../functors/functors.compilers.reference | 10 ++--- 8 files changed, 78 insertions(+), 7 deletions(-) diff --git a/lambda/lambda.ml b/lambda/lambda.ml index 1ff4a176f54c..88ddbab4a118 100644 --- a/lambda/lambda.ml +++ b/lambda/lambda.ml @@ -386,6 +386,11 @@ type check_attribute = | Assert of property | Assume of property +type loop_attribute = + | Always_loop (* [@loop] or [@loop always] *) + | Never_loop (* [@loop never] *) + | Default_loop (* no [@loop] attribute *) + type function_kind = Curried of {nlocal: int} | Tupled type let_kind = Strict | Alias | StrictOpt @@ -407,6 +412,7 @@ type function_attribute = { local: local_attribute; check : check_attribute; poll: poll_attribute; + loop: loop_attribute; is_a_functor: bool; stub: bool; } @@ -540,6 +546,7 @@ let default_function_attribute = { local = Default_local; check = Default_check ; poll = Default_poll; + loop = Default_loop; is_a_functor = false; stub = false; } diff --git a/lambda/lambda.mli b/lambda/lambda.mli index 5d79f2bc772c..34dc2f1e4000 100644 --- a/lambda/lambda.mli +++ b/lambda/lambda.mli @@ -299,6 +299,11 @@ type poll_attribute = | Error_poll (* [@poll error] *) | Default_poll (* no [@poll] attribute *) +type loop_attribute = + | Always_loop (* [@loop] or [@loop always] *) + | Never_loop (* [@loop never] *) + | Default_loop (* no [@loop] attribute *) + type function_kind = Curried of {nlocal: int} | Tupled (* [nlocal] determines how many arguments may be partially applied before the resulting closure must be locally allocated. @@ -327,6 +332,7 @@ type function_attribute = { local: local_attribute; check : check_attribute; poll: poll_attribute; + loop: loop_attribute; is_a_functor: bool; stub: bool; } diff --git a/lambda/printlambda.ml b/lambda/printlambda.ml index 574c5945728a..bcfec1065e4c 100644 --- a/lambda/printlambda.ml +++ b/lambda/printlambda.ml @@ -564,7 +564,7 @@ let check_attribute ppf check = | Assume p -> fprintf ppf "assume %s@ " (check_property p) let function_attribute ppf - { inline; specialise; check; local; is_a_functor; stub; poll } = + { inline; specialise; check; local; is_a_functor; stub; poll; loop } = if is_a_functor then fprintf ppf "is_a_functor@ "; if stub then @@ -590,7 +590,12 @@ let function_attribute ppf | Default_poll -> () | Error_poll -> fprintf ppf "error_poll@ " end; - check_attribute ppf check + check_attribute ppf check; + begin match loop with + | Default_loop -> () + | Always_loop -> fprintf ppf "always_loop@ " + | Never_loop -> fprintf ppf "never_loop@ " + end let apply_tailcall_attribute ppf = function | Default_tailcall -> () diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index 75f244019218..2cfaef2d1809 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -47,6 +47,10 @@ let is_poll_attribute = function | {txt=("poll")} -> true | _ -> false +let is_loop_attribute = function + | {txt=("loop"|"ocaml.loop")} -> true + | _ -> false + let find_attribute p attributes = let inline_attribute, other_attributes = List.partition (fun a -> p a.Parsetree.attr_name) attributes @@ -230,6 +234,19 @@ let parse_poll_attribute attr = ] payload +let parse_loop_attribute attr = + match attr with + | None -> Default_loop + | Some {Parsetree.attr_name = {txt; loc}; attr_payload = payload} -> + parse_id_payload txt loc + ~default:Default_loop + ~empty:Always_loop + [ + "never", Never_loop; + "always", Always_loop; + ] + payload + let get_inline_attribute l = let attr, _ = find_attribute is_inline_attribute l in parse_inline_attribute attr @@ -257,6 +274,10 @@ let get_poll_attribute l = let attr, _ = find_attribute is_poll_attribute l in parse_poll_attribute attr +let get_loop_attribute l = + let attr, _ = find_attribute is_loop_attribute l in + parse_loop_attribute attr + let check_local_inline loc attr = match attr.local, attr.inline with | Always_local, (Always_inline | Available_inline | Unroll _) -> @@ -388,6 +409,23 @@ let add_poll_attribute expr loc attributes = (Warnings.Misplaced_attribute "error_poll"); expr +let add_loop_attribute expr loc attributes = + match expr, get_loop_attribute attributes with + | expr, Default_loop -> expr + | Lfunction({ attr = { stub = false } as attr } as funct), loop -> + begin match attr.loop with + | Default_loop -> () + | Always_loop | Never_loop -> + Location.prerr_warning loc + (Warnings.Duplicated_attribute "loop") + end; + let attr = { attr with loop } in + Lfunction { funct with attr = attr } + | expr, (Always_loop | Never_loop) -> + Location.prerr_warning loc + (Warnings.Misplaced_attribute "loop"); + expr + (* Get the [@inlined] attribute payload (or default if not present). It also returns the expression without this attribute. This is used to ensure that this attribute is not misplaced: If it @@ -504,6 +542,9 @@ let add_function_attributes lam loc attr = let lam = add_check_attribute lam loc attr in + let lam = + add_loop_attribute lam loc attr + in let lam = (* last because poll overrides inline and local *) add_poll_attribute lam loc attr diff --git a/lambda/translattribute.mli b/lambda/translattribute.mli index 8b0d7713985c..7368d1311b4f 100644 --- a/lambda/translattribute.mli +++ b/lambda/translattribute.mli @@ -53,6 +53,16 @@ val get_local_attribute : Parsetree.attributes -> Lambda.local_attribute +val add_loop_attribute + : Lambda.lambda + -> Location.t + -> Parsetree.attributes + -> Lambda.lambda + +val get_loop_attribute + : Parsetree.attributes + -> Lambda.loop_attribute + val get_and_remove_inlined_attribute : Typedtree.expression -> Lambda.inlined_attribute * Typedtree.expression diff --git a/lambda/translcore.ml b/lambda/translcore.ml index 6a34fef97846..50bf4e5994e5 100644 --- a/lambda/translcore.ml +++ b/lambda/translcore.ml @@ -818,6 +818,7 @@ and transl_exp0 ~in_new_scope ~scopes e = specialise = Always_specialise; local = Never_local; check = Default_check; + loop = Never_loop; is_a_functor = false; stub = false; poll = Default_poll; diff --git a/lambda/translmod.ml b/lambda/translmod.ml index 44c799fe2965..b3113c62c2d0 100644 --- a/lambda/translmod.ml +++ b/lambda/translmod.ml @@ -548,6 +548,7 @@ let rec compile_functor ~scopes mexp coercion root_path loc = local = Default_local; poll = Default_poll; check = Default_check; + loop = Never_loop; is_a_functor = true; stub = false; }; diff --git a/testsuite/tests/functors/functors.compilers.reference b/testsuite/tests/functors/functors.compilers.reference index 58284f72e0b1..65f3181c77c7 100644 --- a/testsuite/tests/functors/functors.compilers.reference +++ b/testsuite/tests/functors/functors.compilers.reference @@ -2,14 +2,14 @@ (let (O = (module-defn(O) Functors functors.ml(12):184-279 - (function X is_a_functor always_inline + (function X is_a_functor always_inline never_loop (let (cow = (function x[int] : int (apply (field 0 X) x)) sheep = (function x[int] : int (+ 1 (apply cow x)))) (makeblock 0 cow sheep)))) F = (module-defn(F) Functors functors.ml(17):281-392 - (function X Y is_a_functor always_inline + (function X Y is_a_functor always_inline never_loop (let (cow = (function x[int] : int @@ -18,7 +18,7 @@ (makeblock 0 cow sheep)))) F1 = (module-defn(F1) Functors functors.ml(31):516-632 - (function X Y is_a_functor always_inline + (function X Y is_a_functor always_inline never_loop (let (cow = (function x[int] : int @@ -27,7 +27,7 @@ (makeblock 0 sheep)))) F2 = (module-defn(F2) Functors functors.ml(36):634-784 - (function X Y is_a_functor always_inline + (function X Y is_a_functor always_inline never_loop (let (X =a (makeblock 0 (field 1 X)) Y =a (makeblock 0 (field 1 Y)) @@ -41,7 +41,7 @@ (let (F = (module-defn(F) Functors.M functors.ml(44):849-966 - (function X Y is_a_functor always_inline + (function X Y is_a_functor always_inline never_loop (let (cow = (function x[int] : int From e6a317c8663a39bcb9b0afc01d4d30058ee3b3f2 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Thu, 20 Oct 2022 09:36:05 +0100 Subject: [PATCH 08/39] flambda-backend: Revert "Transform tail-recursive functions into recursive continuations (#893)" This reverts commit 5e903caf81e7ee422f302eb70b12af69b7455251. --- lambda/lambda.ml | 7 ---- lambda/lambda.mli | 6 --- lambda/printlambda.ml | 9 +--- lambda/translattribute.ml | 41 ------------------- lambda/translattribute.mli | 10 ----- lambda/translcore.ml | 1 - lambda/translmod.ml | 1 - .../functors/functors.compilers.reference | 10 ++--- 8 files changed, 7 insertions(+), 78 deletions(-) diff --git a/lambda/lambda.ml b/lambda/lambda.ml index 88ddbab4a118..1ff4a176f54c 100644 --- a/lambda/lambda.ml +++ b/lambda/lambda.ml @@ -386,11 +386,6 @@ type check_attribute = | Assert of property | Assume of property -type loop_attribute = - | Always_loop (* [@loop] or [@loop always] *) - | Never_loop (* [@loop never] *) - | Default_loop (* no [@loop] attribute *) - type function_kind = Curried of {nlocal: int} | Tupled type let_kind = Strict | Alias | StrictOpt @@ -412,7 +407,6 @@ type function_attribute = { local: local_attribute; check : check_attribute; poll: poll_attribute; - loop: loop_attribute; is_a_functor: bool; stub: bool; } @@ -546,7 +540,6 @@ let default_function_attribute = { local = Default_local; check = Default_check ; poll = Default_poll; - loop = Default_loop; is_a_functor = false; stub = false; } diff --git a/lambda/lambda.mli b/lambda/lambda.mli index 34dc2f1e4000..5d79f2bc772c 100644 --- a/lambda/lambda.mli +++ b/lambda/lambda.mli @@ -299,11 +299,6 @@ type poll_attribute = | Error_poll (* [@poll error] *) | Default_poll (* no [@poll] attribute *) -type loop_attribute = - | Always_loop (* [@loop] or [@loop always] *) - | Never_loop (* [@loop never] *) - | Default_loop (* no [@loop] attribute *) - type function_kind = Curried of {nlocal: int} | Tupled (* [nlocal] determines how many arguments may be partially applied before the resulting closure must be locally allocated. @@ -332,7 +327,6 @@ type function_attribute = { local: local_attribute; check : check_attribute; poll: poll_attribute; - loop: loop_attribute; is_a_functor: bool; stub: bool; } diff --git a/lambda/printlambda.ml b/lambda/printlambda.ml index bcfec1065e4c..574c5945728a 100644 --- a/lambda/printlambda.ml +++ b/lambda/printlambda.ml @@ -564,7 +564,7 @@ let check_attribute ppf check = | Assume p -> fprintf ppf "assume %s@ " (check_property p) let function_attribute ppf - { inline; specialise; check; local; is_a_functor; stub; poll; loop } = + { inline; specialise; check; local; is_a_functor; stub; poll } = if is_a_functor then fprintf ppf "is_a_functor@ "; if stub then @@ -590,12 +590,7 @@ let function_attribute ppf | Default_poll -> () | Error_poll -> fprintf ppf "error_poll@ " end; - check_attribute ppf check; - begin match loop with - | Default_loop -> () - | Always_loop -> fprintf ppf "always_loop@ " - | Never_loop -> fprintf ppf "never_loop@ " - end + check_attribute ppf check let apply_tailcall_attribute ppf = function | Default_tailcall -> () diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index 2cfaef2d1809..75f244019218 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -47,10 +47,6 @@ let is_poll_attribute = function | {txt=("poll")} -> true | _ -> false -let is_loop_attribute = function - | {txt=("loop"|"ocaml.loop")} -> true - | _ -> false - let find_attribute p attributes = let inline_attribute, other_attributes = List.partition (fun a -> p a.Parsetree.attr_name) attributes @@ -234,19 +230,6 @@ let parse_poll_attribute attr = ] payload -let parse_loop_attribute attr = - match attr with - | None -> Default_loop - | Some {Parsetree.attr_name = {txt; loc}; attr_payload = payload} -> - parse_id_payload txt loc - ~default:Default_loop - ~empty:Always_loop - [ - "never", Never_loop; - "always", Always_loop; - ] - payload - let get_inline_attribute l = let attr, _ = find_attribute is_inline_attribute l in parse_inline_attribute attr @@ -274,10 +257,6 @@ let get_poll_attribute l = let attr, _ = find_attribute is_poll_attribute l in parse_poll_attribute attr -let get_loop_attribute l = - let attr, _ = find_attribute is_loop_attribute l in - parse_loop_attribute attr - let check_local_inline loc attr = match attr.local, attr.inline with | Always_local, (Always_inline | Available_inline | Unroll _) -> @@ -409,23 +388,6 @@ let add_poll_attribute expr loc attributes = (Warnings.Misplaced_attribute "error_poll"); expr -let add_loop_attribute expr loc attributes = - match expr, get_loop_attribute attributes with - | expr, Default_loop -> expr - | Lfunction({ attr = { stub = false } as attr } as funct), loop -> - begin match attr.loop with - | Default_loop -> () - | Always_loop | Never_loop -> - Location.prerr_warning loc - (Warnings.Duplicated_attribute "loop") - end; - let attr = { attr with loop } in - Lfunction { funct with attr = attr } - | expr, (Always_loop | Never_loop) -> - Location.prerr_warning loc - (Warnings.Misplaced_attribute "loop"); - expr - (* Get the [@inlined] attribute payload (or default if not present). It also returns the expression without this attribute. This is used to ensure that this attribute is not misplaced: If it @@ -542,9 +504,6 @@ let add_function_attributes lam loc attr = let lam = add_check_attribute lam loc attr in - let lam = - add_loop_attribute lam loc attr - in let lam = (* last because poll overrides inline and local *) add_poll_attribute lam loc attr diff --git a/lambda/translattribute.mli b/lambda/translattribute.mli index 7368d1311b4f..8b0d7713985c 100644 --- a/lambda/translattribute.mli +++ b/lambda/translattribute.mli @@ -53,16 +53,6 @@ val get_local_attribute : Parsetree.attributes -> Lambda.local_attribute -val add_loop_attribute - : Lambda.lambda - -> Location.t - -> Parsetree.attributes - -> Lambda.lambda - -val get_loop_attribute - : Parsetree.attributes - -> Lambda.loop_attribute - val get_and_remove_inlined_attribute : Typedtree.expression -> Lambda.inlined_attribute * Typedtree.expression diff --git a/lambda/translcore.ml b/lambda/translcore.ml index 50bf4e5994e5..6a34fef97846 100644 --- a/lambda/translcore.ml +++ b/lambda/translcore.ml @@ -818,7 +818,6 @@ and transl_exp0 ~in_new_scope ~scopes e = specialise = Always_specialise; local = Never_local; check = Default_check; - loop = Never_loop; is_a_functor = false; stub = false; poll = Default_poll; diff --git a/lambda/translmod.ml b/lambda/translmod.ml index b3113c62c2d0..44c799fe2965 100644 --- a/lambda/translmod.ml +++ b/lambda/translmod.ml @@ -548,7 +548,6 @@ let rec compile_functor ~scopes mexp coercion root_path loc = local = Default_local; poll = Default_poll; check = Default_check; - loop = Never_loop; is_a_functor = true; stub = false; }; diff --git a/testsuite/tests/functors/functors.compilers.reference b/testsuite/tests/functors/functors.compilers.reference index 65f3181c77c7..58284f72e0b1 100644 --- a/testsuite/tests/functors/functors.compilers.reference +++ b/testsuite/tests/functors/functors.compilers.reference @@ -2,14 +2,14 @@ (let (O = (module-defn(O) Functors functors.ml(12):184-279 - (function X is_a_functor always_inline never_loop + (function X is_a_functor always_inline (let (cow = (function x[int] : int (apply (field 0 X) x)) sheep = (function x[int] : int (+ 1 (apply cow x)))) (makeblock 0 cow sheep)))) F = (module-defn(F) Functors functors.ml(17):281-392 - (function X Y is_a_functor always_inline never_loop + (function X Y is_a_functor always_inline (let (cow = (function x[int] : int @@ -18,7 +18,7 @@ (makeblock 0 cow sheep)))) F1 = (module-defn(F1) Functors functors.ml(31):516-632 - (function X Y is_a_functor always_inline never_loop + (function X Y is_a_functor always_inline (let (cow = (function x[int] : int @@ -27,7 +27,7 @@ (makeblock 0 sheep)))) F2 = (module-defn(F2) Functors functors.ml(36):634-784 - (function X Y is_a_functor always_inline never_loop + (function X Y is_a_functor always_inline (let (X =a (makeblock 0 (field 1 X)) Y =a (makeblock 0 (field 1 Y)) @@ -41,7 +41,7 @@ (let (F = (module-defn(F) Functors.M functors.ml(44):849-966 - (function X Y is_a_functor always_inline never_loop + (function X Y is_a_functor always_inline (let (cow = (function x[int] : int From ce339f19f57a82f218c7ea20466d6be92f931f77 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Thu, 20 Oct 2022 12:54:37 +0100 Subject: [PATCH 09/39] flambda-backend: Fix alloc modes and call kinds for overapplications (#902) --- testsuite/tests/typing-local/pr902.ml | 32 ++++++++++++++++++++ testsuite/tests/typing-local/pr902.reference | 1 + 2 files changed, 33 insertions(+) create mode 100644 testsuite/tests/typing-local/pr902.ml create mode 100644 testsuite/tests/typing-local/pr902.reference diff --git a/testsuite/tests/typing-local/pr902.ml b/testsuite/tests/typing-local/pr902.ml new file mode 100644 index 000000000000..7133578b7280 --- /dev/null +++ b/testsuite/tests/typing-local/pr902.ml @@ -0,0 +1,32 @@ +(* TEST + * stack-allocation + ** native +*) + +(* PR902 (return mode on second application expression in a split + overapplication) *) + +external local_stack_offset : unit -> int = "caml_local_stack_offset" +external opaque_identity : ('a[@local_opt]) -> ('a[@local_opt]) = "%opaque" +external is_local : local_ 'a -> bool = "caml_obj_is_local" + +let f2 p () = p + +let f1 () x : (unit -> local_ (int * int)) = + (* This local allocation should end up in the caller's region, because + we should have got here via one of the caml_applyL functions. If the + return mode of the second application in the expansion of the + overapplication below is wrongly Heap, then caml_apply will be used + instead, which will open its own region for this allocation. *) + let p = local_ (x, x) in + local_ ((opaque_identity f2) p) [@nontail] + +let[@inline never] to_be_overapplied () () = Sys.opaque_identity f1 + +let () = + let start_offset = local_stack_offset () in + let p = to_be_overapplied () () () 42 () in + let end_offset = local_stack_offset () in + assert (is_local p); + let ok = end_offset - start_offset = 64 in + Printf.printf "PR902: %s\n" (if ok then "ok" else "FAIL") diff --git a/testsuite/tests/typing-local/pr902.reference b/testsuite/tests/typing-local/pr902.reference new file mode 100644 index 000000000000..fd5f1bd02c4e --- /dev/null +++ b/testsuite/tests/typing-local/pr902.reference @@ -0,0 +1 @@ +PR902: ok From 9943b2ecc218ff4c5f085dfe441b2f364b15b76a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathana=C3=ABlle=20Courant?= Date: Mon, 24 Oct 2022 11:29:11 +0200 Subject: [PATCH 10/39] flambda-backend: Revert "Revert "Transform tail-recursive functions into recursive continuations (#893)"" (#909) This reverts commit 41454a01a6b058b55bf378441f7fecc447b098a7. --- lambda/lambda.ml | 7 ++++ lambda/lambda.mli | 6 +++ lambda/printlambda.ml | 9 +++- lambda/translattribute.ml | 41 +++++++++++++++++++ lambda/translattribute.mli | 10 +++++ lambda/translcore.ml | 1 + lambda/translmod.ml | 1 + .../functors/functors.compilers.reference | 10 ++--- 8 files changed, 78 insertions(+), 7 deletions(-) diff --git a/lambda/lambda.ml b/lambda/lambda.ml index 1ff4a176f54c..88ddbab4a118 100644 --- a/lambda/lambda.ml +++ b/lambda/lambda.ml @@ -386,6 +386,11 @@ type check_attribute = | Assert of property | Assume of property +type loop_attribute = + | Always_loop (* [@loop] or [@loop always] *) + | Never_loop (* [@loop never] *) + | Default_loop (* no [@loop] attribute *) + type function_kind = Curried of {nlocal: int} | Tupled type let_kind = Strict | Alias | StrictOpt @@ -407,6 +412,7 @@ type function_attribute = { local: local_attribute; check : check_attribute; poll: poll_attribute; + loop: loop_attribute; is_a_functor: bool; stub: bool; } @@ -540,6 +546,7 @@ let default_function_attribute = { local = Default_local; check = Default_check ; poll = Default_poll; + loop = Default_loop; is_a_functor = false; stub = false; } diff --git a/lambda/lambda.mli b/lambda/lambda.mli index 5d79f2bc772c..34dc2f1e4000 100644 --- a/lambda/lambda.mli +++ b/lambda/lambda.mli @@ -299,6 +299,11 @@ type poll_attribute = | Error_poll (* [@poll error] *) | Default_poll (* no [@poll] attribute *) +type loop_attribute = + | Always_loop (* [@loop] or [@loop always] *) + | Never_loop (* [@loop never] *) + | Default_loop (* no [@loop] attribute *) + type function_kind = Curried of {nlocal: int} | Tupled (* [nlocal] determines how many arguments may be partially applied before the resulting closure must be locally allocated. @@ -327,6 +332,7 @@ type function_attribute = { local: local_attribute; check : check_attribute; poll: poll_attribute; + loop: loop_attribute; is_a_functor: bool; stub: bool; } diff --git a/lambda/printlambda.ml b/lambda/printlambda.ml index 574c5945728a..bcfec1065e4c 100644 --- a/lambda/printlambda.ml +++ b/lambda/printlambda.ml @@ -564,7 +564,7 @@ let check_attribute ppf check = | Assume p -> fprintf ppf "assume %s@ " (check_property p) let function_attribute ppf - { inline; specialise; check; local; is_a_functor; stub; poll } = + { inline; specialise; check; local; is_a_functor; stub; poll; loop } = if is_a_functor then fprintf ppf "is_a_functor@ "; if stub then @@ -590,7 +590,12 @@ let function_attribute ppf | Default_poll -> () | Error_poll -> fprintf ppf "error_poll@ " end; - check_attribute ppf check + check_attribute ppf check; + begin match loop with + | Default_loop -> () + | Always_loop -> fprintf ppf "always_loop@ " + | Never_loop -> fprintf ppf "never_loop@ " + end let apply_tailcall_attribute ppf = function | Default_tailcall -> () diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index 75f244019218..2cfaef2d1809 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -47,6 +47,10 @@ let is_poll_attribute = function | {txt=("poll")} -> true | _ -> false +let is_loop_attribute = function + | {txt=("loop"|"ocaml.loop")} -> true + | _ -> false + let find_attribute p attributes = let inline_attribute, other_attributes = List.partition (fun a -> p a.Parsetree.attr_name) attributes @@ -230,6 +234,19 @@ let parse_poll_attribute attr = ] payload +let parse_loop_attribute attr = + match attr with + | None -> Default_loop + | Some {Parsetree.attr_name = {txt; loc}; attr_payload = payload} -> + parse_id_payload txt loc + ~default:Default_loop + ~empty:Always_loop + [ + "never", Never_loop; + "always", Always_loop; + ] + payload + let get_inline_attribute l = let attr, _ = find_attribute is_inline_attribute l in parse_inline_attribute attr @@ -257,6 +274,10 @@ let get_poll_attribute l = let attr, _ = find_attribute is_poll_attribute l in parse_poll_attribute attr +let get_loop_attribute l = + let attr, _ = find_attribute is_loop_attribute l in + parse_loop_attribute attr + let check_local_inline loc attr = match attr.local, attr.inline with | Always_local, (Always_inline | Available_inline | Unroll _) -> @@ -388,6 +409,23 @@ let add_poll_attribute expr loc attributes = (Warnings.Misplaced_attribute "error_poll"); expr +let add_loop_attribute expr loc attributes = + match expr, get_loop_attribute attributes with + | expr, Default_loop -> expr + | Lfunction({ attr = { stub = false } as attr } as funct), loop -> + begin match attr.loop with + | Default_loop -> () + | Always_loop | Never_loop -> + Location.prerr_warning loc + (Warnings.Duplicated_attribute "loop") + end; + let attr = { attr with loop } in + Lfunction { funct with attr = attr } + | expr, (Always_loop | Never_loop) -> + Location.prerr_warning loc + (Warnings.Misplaced_attribute "loop"); + expr + (* Get the [@inlined] attribute payload (or default if not present). It also returns the expression without this attribute. This is used to ensure that this attribute is not misplaced: If it @@ -504,6 +542,9 @@ let add_function_attributes lam loc attr = let lam = add_check_attribute lam loc attr in + let lam = + add_loop_attribute lam loc attr + in let lam = (* last because poll overrides inline and local *) add_poll_attribute lam loc attr diff --git a/lambda/translattribute.mli b/lambda/translattribute.mli index 8b0d7713985c..7368d1311b4f 100644 --- a/lambda/translattribute.mli +++ b/lambda/translattribute.mli @@ -53,6 +53,16 @@ val get_local_attribute : Parsetree.attributes -> Lambda.local_attribute +val add_loop_attribute + : Lambda.lambda + -> Location.t + -> Parsetree.attributes + -> Lambda.lambda + +val get_loop_attribute + : Parsetree.attributes + -> Lambda.loop_attribute + val get_and_remove_inlined_attribute : Typedtree.expression -> Lambda.inlined_attribute * Typedtree.expression diff --git a/lambda/translcore.ml b/lambda/translcore.ml index 6a34fef97846..50bf4e5994e5 100644 --- a/lambda/translcore.ml +++ b/lambda/translcore.ml @@ -818,6 +818,7 @@ and transl_exp0 ~in_new_scope ~scopes e = specialise = Always_specialise; local = Never_local; check = Default_check; + loop = Never_loop; is_a_functor = false; stub = false; poll = Default_poll; diff --git a/lambda/translmod.ml b/lambda/translmod.ml index 44c799fe2965..b3113c62c2d0 100644 --- a/lambda/translmod.ml +++ b/lambda/translmod.ml @@ -548,6 +548,7 @@ let rec compile_functor ~scopes mexp coercion root_path loc = local = Default_local; poll = Default_poll; check = Default_check; + loop = Never_loop; is_a_functor = true; stub = false; }; diff --git a/testsuite/tests/functors/functors.compilers.reference b/testsuite/tests/functors/functors.compilers.reference index 58284f72e0b1..65f3181c77c7 100644 --- a/testsuite/tests/functors/functors.compilers.reference +++ b/testsuite/tests/functors/functors.compilers.reference @@ -2,14 +2,14 @@ (let (O = (module-defn(O) Functors functors.ml(12):184-279 - (function X is_a_functor always_inline + (function X is_a_functor always_inline never_loop (let (cow = (function x[int] : int (apply (field 0 X) x)) sheep = (function x[int] : int (+ 1 (apply cow x)))) (makeblock 0 cow sheep)))) F = (module-defn(F) Functors functors.ml(17):281-392 - (function X Y is_a_functor always_inline + (function X Y is_a_functor always_inline never_loop (let (cow = (function x[int] : int @@ -18,7 +18,7 @@ (makeblock 0 cow sheep)))) F1 = (module-defn(F1) Functors functors.ml(31):516-632 - (function X Y is_a_functor always_inline + (function X Y is_a_functor always_inline never_loop (let (cow = (function x[int] : int @@ -27,7 +27,7 @@ (makeblock 0 sheep)))) F2 = (module-defn(F2) Functors functors.ml(36):634-784 - (function X Y is_a_functor always_inline + (function X Y is_a_functor always_inline never_loop (let (X =a (makeblock 0 (field 1 X)) Y =a (makeblock 0 (field 1 Y)) @@ -41,7 +41,7 @@ (let (F = (module-defn(F) Functors.M functors.ml(44):849-966 - (function X Y is_a_functor always_inline + (function X Y is_a_functor always_inline never_loop (let (cow = (function x[int] : int From 5acc6eaf901539e82fa5386120ee7c705aa65f35 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 24 Oct 2022 12:09:04 +0100 Subject: [PATCH 11/39] flambda-backend: Fixes after merge --- driver/main_args.ml | 6 ----- driver/main_args.mli | 1 - lambda/translattribute.ml | 41 +++-------------------------------- parsing/builtin_attributes.ml | 1 + 4 files changed, 4 insertions(+), 45 deletions(-) diff --git a/driver/main_args.ml b/driver/main_args.ml index e1f99b0b036e..df60bcf60c2f 100644 --- a/driver/main_args.ml +++ b/driver/main_args.ml @@ -936,9 +936,6 @@ let mk_afl_inst_ratio f = \ (advanced, see afl-fuzz docs for AFL_INST_RATIO)" ;; -let mk_alloc_check f = - "-alloc-check", Arg.Unit f, "" - let mk__ f = "-", Arg.String f, " Treat as a file name (even if it starts with `-')" @@ -1170,7 +1167,6 @@ module type Optcomp_options = sig val _save_ir_after : string -> unit val _probes : unit -> unit val _no_probes : unit -> unit - val _alloc_check : unit -> unit end;; module type Opttop_options = sig @@ -1536,7 +1532,6 @@ struct mk_dprofile F._dprofile; mk_dump_into_file F._dump_into_file; mk_dump_pass F._dump_pass; - mk_alloc_check F._alloc_check; mk_args F._args; mk_args0 F._args0; @@ -2017,7 +2012,6 @@ module Default = struct let _v () = Compenv.print_version_and_library "native-code compiler" let _no_probes = clear probes let _probes = set probes - let _alloc_check () = () end module Odoc_args = struct diff --git a/driver/main_args.mli b/driver/main_args.mli index b998760028b0..16cccecaa8e5 100644 --- a/driver/main_args.mli +++ b/driver/main_args.mli @@ -242,7 +242,6 @@ module type Optcomp_options = sig val _save_ir_after : string -> unit val _probes : unit -> unit val _no_probes : unit -> unit - val _alloc_check : unit -> unit end;; module type Opttop_options = sig diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index 7b74206b3039..b006cf6600d2 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -41,9 +41,8 @@ let is_tailcall_attribute = let is_property_attribute = function | Noalloc -> [ ["noalloc"; "ocaml.noalloc"], true ] -let is_poll_attribute = function - | {txt=("poll")} -> true - | _ -> false +let is_poll_attribute = + [ ["poll"; "ocaml.poll"], true ] let find_attribute p attributes = let inline_attribute = Builtin_attributes.filter_attributes p attributes in @@ -250,7 +249,7 @@ let get_check_attribute l = [Noalloc] let get_poll_attribute l = - let attr, _ = find_attribute is_poll_attribute l in + let attr = find_attribute is_poll_attribute l in parse_poll_attribute attr let check_local_inline loc attr = @@ -425,40 +424,6 @@ let get_tailcall_attribute e = Location.prerr_warning loc (Warnings.Attribute_payload (txt, msg)); Default_tailcall -let check_attribute e {Parsetree.attr_name = { txt; loc }; _} = - match txt with - | "inline" | "ocaml.inline" - | "specialise" | "ocaml.specialise" -> begin - match e.exp_desc with - | Texp_function _ -> () - | _ -> - Location.prerr_warning loc - (Warnings.Misplaced_attribute txt) - end - | "poll" | "ocaml.poll" - | "inlined" | "ocaml.inlined" - | "specialised" | "ocaml.specialised" - | "tailcall" | "ocaml.tailcall" -> - (* Removed by the Texp_apply cases *) - Location.prerr_warning loc - (Warnings.Misplaced_attribute txt) - | _ -> () - -let check_attribute_on_module e {Parsetree.attr_name = { txt; loc }; _} = - match txt with - | "inline" | "ocaml.inline" -> begin - match e.mod_desc with - | Tmod_functor _ -> () - | _ -> - Location.prerr_warning loc - (Warnings.Misplaced_attribute txt) - end - | "inlined" | "ocaml.inlined" -> - (* Removed by the Texp_apply cases *) - Location.prerr_warning loc - (Warnings.Misplaced_attribute txt) - | _ -> () - let add_function_attributes lam loc attr = let lam = add_inline_attribute lam loc attr diff --git a/parsing/builtin_attributes.ml b/parsing/builtin_attributes.ml index 0584a710fe93..073c906f5860 100644 --- a/parsing/builtin_attributes.ml +++ b/parsing/builtin_attributes.ml @@ -79,6 +79,7 @@ let builtin_attrs = ; "include_functor"; "ocaml.include_functor"; "extension.include_functor" ; "noalloc"; "ocaml.noalloc" ; "untagged"; "ocaml.untagged" + ; "poll"; "ocaml.poll" ] let builtin_attrs = From c0f16e325bb8f3e5a2d2a5b1375e8203c816b7e8 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 24 Oct 2022 12:17:20 +0100 Subject: [PATCH 12/39] flambda-backend: Compilation fixes --- lambda/translattribute.ml | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index 3c0aef7d6b0b..b8d072700cd7 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -44,9 +44,8 @@ let is_property_attribute = function let is_poll_attribute = [ ["poll"; "ocaml.poll"], true ] -let is_loop_attribute = function - | {txt=("loop"|"ocaml.loop")} -> true - | _ -> false +let is_loop_attribute = + [ ["loop"; "ocaml.loop"], true ] let find_attribute p attributes = let inline_attribute = Builtin_attributes.filter_attributes p attributes in @@ -270,7 +269,7 @@ let get_poll_attribute l = parse_poll_attribute attr let get_loop_attribute l = - let attr, _ = find_attribute is_loop_attribute l in + let attr = find_attribute is_loop_attribute l in parse_loop_attribute attr let check_local_inline loc attr = @@ -422,17 +421,10 @@ let add_loop_attribute expr loc attributes = (Warnings.Misplaced_attribute "loop"); expr -(* Get the [@inlined] attribute payload (or default if not present). - It also returns the expression without this attribute. This is - used to ensure that this attribute is not misplaced: If it - appears on any expression, it is an error, otherwise it would - have been removed by this function *) -let get_and_remove_inlined_attribute e = - let attr, exp_attributes = - find_attribute is_inlined_attribute e.exp_attributes - in - let inlined = parse_inlined_attribute attr in - inlined, { e with exp_attributes } +(* Get the [@inlined] attribute payload (or default if not present). *) +let get_inlined_attribute e = + let attr = find_attribute is_inlined_attribute e.exp_attributes in + parse_inlined_attribute attr let get_inlined_attribute_on_module e = let rec get mod_expr = From 85aec7bb78b8595b748275b9603a4e29cf2c1702 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 24 Oct 2022 12:19:16 +0100 Subject: [PATCH 13/39] flambda-backend: Add loop attribute to Builtin_attributes --- parsing/builtin_attributes.ml | 1 + 1 file changed, 1 insertion(+) diff --git a/parsing/builtin_attributes.ml b/parsing/builtin_attributes.ml index 073c906f5860..53b4ef3b22ac 100644 --- a/parsing/builtin_attributes.ml +++ b/parsing/builtin_attributes.ml @@ -80,6 +80,7 @@ let builtin_attrs = ; "noalloc"; "ocaml.noalloc" ; "untagged"; "ocaml.untagged" ; "poll"; "ocaml.poll" + ; "loop"; "ocaml.loop" ] let builtin_attrs = From 3d38d13beaf2b5e88ea19fba0198e54768756533 Mon Sep 17 00:00:00 2001 From: Greta Yorsh <45005955+gretay-js@users.noreply.github.com> Date: Mon, 24 Oct 2022 14:39:50 +0100 Subject: [PATCH 14/39] flambda-backend: Long frames in frametable (#797) --- runtime/backtrace_nat.c | 12 ++++--- runtime/caml/stack.h | 24 +++++++++++++- runtime/roots_nat.c | 69 +++++++++++++++++++++++++++++++++-------- runtime/signals_nat.c | 5 +-- 4 files changed, 89 insertions(+), 21 deletions(-) diff --git a/runtime/backtrace_nat.c b/runtime/backtrace_nat.c index 5da300fbe6e3..da088c5598da 100644 --- a/runtime/backtrace_nat.c +++ b/runtime/backtrace_nat.c @@ -47,7 +47,7 @@ frame_descr * caml_next_frame_descriptor(uintnat * pc, char ** sp) /* Skip to next frame */ if (d->frame_size != 0xFFFF) { /* Regular frame, update sp/pc and return the frame descriptor */ - *sp += (d->frame_size & 0xFFFC); + *sp += (get_frame_size(d) & 0xFFFFFFFC); *pc = Saved_return_address(*sp); #ifdef Mask_already_scanned *pc = Mask_already_scanned(*pc); @@ -164,17 +164,19 @@ static debuginfo debuginfo_extract(frame_descr* d, int alloc_idx) { unsigned char* infoptr; uint32_t debuginfo_offset; + uint32_t frame_size; /* The special frames marking the top of an ML stack chunk are never returned by caml_next_frame_descriptor, so should never reach here. */ - CAMLassert(d->frame_size != 0xffff); + CAMLassert(d->frame_size != 0xFFFF); + frame_size = get_frame_size(d); - if ((d->frame_size & 1) == 0) { + if ((frame_size & 1) == 0) { return NULL; } /* Recover debugging info */ - infoptr = (unsigned char*)&d->live_ofs[d->num_live]; - if (d->frame_size & 2) { + infoptr = get_end_of_live_ofs(d); + if (frame_size & 2) { CAMLassert(alloc_idx == -1 || (0 <= alloc_idx && alloc_idx < *infoptr)); /* skip alloc_lengths */ infoptr += *infoptr + 1; diff --git a/runtime/caml/stack.h b/runtime/caml/stack.h index 4dab8186cb51..370271018465 100644 --- a/runtime/caml/stack.h +++ b/runtime/caml/stack.h @@ -86,7 +86,6 @@ struct caml_context { }; /* Structure of frame descriptors */ - typedef struct { uintnat retaddr; unsigned short frame_size; @@ -104,6 +103,29 @@ typedef struct { num_debug is num_alloc if frame_size & 2, otherwise 1. */ } frame_descr; +typedef struct { + uintnat retaddr; + unsigned short marker; /* LONG_FRAME_MARKER */ + unsigned short _pad; /* Ensure frame_size is 4-byte aligned */ + uint32_t frame_size; + uint32_t num_live; + uint32_t live_ofs[1 /* num_live */]; + /* + If frame_size & 2, then allocation info follows: + unsigned char num_allocs; + unsigned char alloc_lengths[num_alloc]; + + If frame_size & 1, then debug info follows: + uint32_t debug_info_offset[num_debug]; + + Debug info is stored as relative offsets to debuginfo structures. + num_debug is num_alloc if frame_size & 2, otherwise 1. */ +} frame_descr_long; + +/* Helpers for long frames */ +uint32_t get_frame_size(frame_descr *); +unsigned char * get_end_of_live_ofs (frame_descr *d); + /* Allocation lengths are encoded as 0-255, giving sizes 1-256 */ #define Wosize_encoded_alloc_len(n) ((uintnat)(n) + 1) diff --git a/runtime/roots_nat.c b/runtime/roots_nat.c index 0f788f644e44..601f59708dce 100644 --- a/runtime/roots_nat.c +++ b/runtime/roots_nat.c @@ -80,21 +80,48 @@ static link* frametables_list_tail(link *list) { return tail; } +/* Special marker instead of frame_size for frame_descr in long format */ +static uint32_t LONG_FRAME_MARKER = 0x7FFF; + +uint32_t get_frame_size(frame_descr *d) { + CAMLassert(d && d->frame_size != 0xFFFF); + if (d->frame_size == LONG_FRAME_MARKER) { + /* Handle long frames */ + frame_descr_long *dl = (frame_descr_long *)d; + return (dl->frame_size); + } else { + return (d->frame_size); + } +} + +/* Skip to end of live_ofs */ +unsigned char * get_end_of_live_ofs (frame_descr *d) { + CAMLassert(d && d->frame_size != 0xFFFF); + if (d->frame_size == LONG_FRAME_MARKER) { + /* Handle long frames */ + frame_descr_long *dl = (frame_descr_long *)d; + return ((unsigned char*)&dl->live_ofs[dl->num_live]); + } else { + return ((unsigned char*)&d->live_ofs[d->num_live]); + } +} + static frame_descr * next_frame_descr(frame_descr * d) { unsigned char num_allocs = 0, *p; + uint32_t frame_size; CAMLassert(d->retaddr >= 4096); - /* Skip to end of live_ofs */ - p = (unsigned char*)&d->live_ofs[d->num_live]; + frame_size = get_frame_size(d); + p = get_end_of_live_ofs(d); /* Skip alloc_lengths if present */ - if (d->frame_size & 2) { + if (frame_size & 2) { num_allocs = *p; p += num_allocs + 1; } /* Skip debug info if present */ - if (d->frame_size & 1) { + if (frame_size & 1) { /* Align to 32 bits */ p = Align_to(p, uint32_t); - p += sizeof(uint32_t) * (d->frame_size & 2 ? num_allocs : 1); + p += sizeof(uint32_t) * (frame_size & 2 ? num_allocs : 1); } /* Align to word size */ p = Align_to(p, void*); @@ -624,17 +651,33 @@ void caml_do_local_roots_nat(scanning_action maj, scanning_action min, } if (d->frame_size != 0xFFFF) { /* Scan the roots in this frame */ - for (p = d->live_ofs, n = d->num_live; n > 0; n--, p++) { - ofs = *p; - if (ofs & 1) { - root = regs + (ofs >> 1); - } else { - root = (value *)(sp + ofs); + if (d->frame_size == LONG_FRAME_MARKER) { + /* Handle long frames */ + frame_descr_long *dl = (frame_descr_long *)d; + uint32_t * p; + uint32_t n; + for (p = dl->live_ofs, n = dl->num_live; n > 0; n--, p++) { + uint32_t ofs = *p; + if (ofs & 1) { + root = regs + (ofs >> 1); + } else { + root = (value *)(sp + ofs); + } + visit(maj, min, root); + } + } else { + for (p = d->live_ofs, n = d->num_live; n > 0; n--, p++) { + ofs = *p; + if (ofs & 1) { + root = regs + (ofs >> 1); + } else { + root = (value *)(sp + ofs); + } + visit(maj, min, root); } - visit(maj, min, root); } /* Move to next frame */ - sp += (d->frame_size & 0xFFFC); + sp += (get_frame_size(d) & 0xFFFFFFFC); retaddr = Saved_return_address(sp); #ifdef Mask_already_scanned retaddr = Mask_already_scanned(retaddr); diff --git a/runtime/signals_nat.c b/runtime/signals_nat.c index 484553235e5d..4be0487de61e 100644 --- a/runtime/signals_nat.c +++ b/runtime/signals_nat.c @@ -72,12 +72,13 @@ void caml_garbage_collection(void) h = (h + 1) & caml_frame_descriptors_mask; } /* Must be an allocation frame */ - CAMLassert(d && d->frame_size != 0xFFFF && (d->frame_size & 2)); + CAMLassert(d && d->frame_size != 0xFFFF && + (get_frame_size(d) & 2)); } /* Compute the total allocation size at this point, including allocations combined by Comballoc */ - alloc_len = (unsigned char*)(&d->live_ofs[d->num_live]); + alloc_len = get_end_of_live_ofs(d); nallocs = *alloc_len++; if (nallocs == 0) { From c2f742fca7d21c69dd4a0cbfaed33781d68b888b Mon Sep 17 00:00:00 2001 From: Keryan Didier Date: Mon, 24 Oct 2022 18:34:56 +0200 Subject: [PATCH 15/39] flambda-backend: Re-enable some tests for Flambda2 (#881) Co-authored-by: Vincent Laviron --- lambda/translattribute.ml | 5 ++++- ocamltest/Makefile | 1 + ocamltest/ocaml_actions.ml | 6 ++++-- ocamltest/ocamltest_config.ml.in | 2 ++ ocamltest/ocamltest_config.mli | 3 +++ testsuite/tests/asmgen/catch-rec-deadhandler.run | 5 ++++- 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index 2cfaef2d1809..3b6288a23c24 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -507,11 +507,14 @@ let check_attribute e {Parsetree.attr_name = { txt; loc }; _} = (Warnings.Misplaced_attribute txt) end | "inlined" | "ocaml.inlined" - | "specialised" | "ocaml.specialised" | "tailcall" | "ocaml.tailcall" -> (* Removed by the Texp_apply cases *) Location.prerr_warning loc (Warnings.Misplaced_attribute txt) + | "specialised" | "ocaml.specialised" when Config.flambda -> + (* Removed by the Texp_apply cases *) + Location.prerr_warning loc + (Warnings.Misplaced_attribute txt) | _ -> () let check_attribute_on_module e {Parsetree.attr_name = { txt; loc }; _} = diff --git a/ocamltest/Makefile b/ocamltest/Makefile index dc614d0eb6ec..40456e2dd33a 100644 --- a/ocamltest/Makefile +++ b/ocamltest/Makefile @@ -268,6 +268,7 @@ ocamltest_config.ml: ocamltest_config.ml.in Makefile ../Makefile.config $(call SUBST_STRING,ocamloptdefaultflags) \ $(call SUBST_STRING,ocamlsrcdir) \ $(call SUBST,FLAMBDA) \ + $(call SUBST,FLAMBDA2) \ $(call SUBST,FORCE_SAFE_STRING) \ $(call SUBST,FLAT_FLOAT_ARRAY) \ $(call SUBST,WITH_OCAMLDOC) \ diff --git a/ocamltest/ocaml_actions.ml b/ocamltest/ocaml_actions.ml index 6551068ce0af..c10948815c66 100644 --- a/ocamltest/ocaml_actions.ml +++ b/ocamltest/ocaml_actions.ml @@ -1126,13 +1126,15 @@ let no_flat_float_array = make let flambda = Actions.make "flambda" - (Actions_helpers.pass_or_skip Ocamltest_config.flambda + (Actions_helpers.pass_or_skip + (Ocamltest_config.flambda || Ocamltest_config.flambda2) "support for flambda enabled" "support for flambda disabled") let no_flambda = make "no-flambda" - (Actions_helpers.pass_or_skip (not Ocamltest_config.flambda) + (Actions_helpers.pass_or_skip + (not (Ocamltest_config.flambda || Ocamltest_config.flambda2)) "support for flambda disabled" "support for flambda enabled") diff --git a/ocamltest/ocamltest_config.ml.in b/ocamltest/ocamltest_config.ml.in index bf16b5d36b6c..06bf39d59747 100644 --- a/ocamltest/ocamltest_config.ml.in +++ b/ocamltest/ocamltest_config.ml.in @@ -47,6 +47,8 @@ let ocamlsrcdir = "%%ocamlsrcdir%%" let flambda = %%FLAMBDA%% +let flambda2 = %%FLAMBDA2%% + let ocamlc_default_flags = "%%ocamlcdefaultflags%%" let ocamlopt_default_flags = "%%ocamloptdefaultflags%%" diff --git a/ocamltest/ocamltest_config.mli b/ocamltest/ocamltest_config.mli index 4a5bfaa3c6ca..341443d2a40d 100644 --- a/ocamltest/ocamltest_config.mli +++ b/ocamltest/ocamltest_config.mli @@ -70,6 +70,9 @@ val ocamlsrcdir : string val flambda : bool (** Whether flambda has been enabled at configure time *) +val flambda2 : bool +(** Whether flambda2 has been enabled at configure time *) + val safe_string : bool (** Whether the compiler was configured with -safe-string *) diff --git a/testsuite/tests/asmgen/catch-rec-deadhandler.run b/testsuite/tests/asmgen/catch-rec-deadhandler.run index bad9f117cd32..cd7b1635ef33 100755 --- a/testsuite/tests/asmgen/catch-rec-deadhandler.run +++ b/testsuite/tests/asmgen/catch-rec-deadhandler.run @@ -2,4 +2,7 @@ exec > "${output}" 2>&1 -grep -E "catch |with\(|and\(|exit\(" "${compiler_output}" +if [ "${REGISTER_ALLOCATOR}" = "irc" ] +then cat "${reference}" +else grep -E "catch |with\(|and\(|exit\(" "${compiler_output}" +fi From cf4d0d34a8771402ba1aad311358e718fd4acb22 Mon Sep 17 00:00:00 2001 From: Chris Casinghino Date: Tue, 25 Oct 2022 07:54:12 -0400 Subject: [PATCH 16/39] flambda-backend: Merge fixes (#21) * dune file fix for dependency changes * Fix test output (duplicated attributes are no longer ignored) * Refactor checking of flambda-backend-only attrs to match new style --- lambda/translattribute.ml | 52 +++++++++---------- otherlibs/dynlink/dune | 16 +++--- .../tests/warnings/w53.compilers.reference | 8 +-- 3 files changed, 36 insertions(+), 40 deletions(-) diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index b8d072700cd7..869482d4ce37 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -363,9 +363,11 @@ let add_check_attribute expr loc attributes = | Assume p -> Printf.sprintf "%s assume" (to_string p) | Default_check -> assert false in - match expr, get_check_attribute attributes with - | expr, [] -> expr - | Lfunction({ attr = { stub = false } as attr } as funct), [check] -> + match expr with + | Lfunction({ attr = { stub = false } as attr } as funct) -> + begin match get_check_attribute attributes with + | [] -> expr + | [check] -> begin match attr.check with | Default_check -> () | Assert Noalloc | Assume Noalloc -> @@ -374,40 +376,36 @@ let add_check_attribute expr loc attributes = end; let attr = { attr with check } in Lfunction { funct with attr } - | expr, [check] -> - Location.prerr_warning loc - (Warnings.Misplaced_attribute (to_string check)); - expr - | expr, a::b::_ -> - Location.prerr_warning loc - (Warnings.Duplicated_attribute - (Printf.sprintf "%s/%s"(to_string a) (to_string b))); - expr + | (_ :: _ :: _) -> assert false + end + | _ -> expr let add_poll_attribute expr loc attributes = - match expr, get_poll_attribute attributes with - | expr, Default_poll -> expr - | Lfunction({ attr = { stub = false } as attr } as funct), poll -> + match expr with + | Lfunction({ attr = { stub = false } as attr } as funct) -> + begin match get_poll_attribute attributes with + | Default_poll -> expr + | Error_poll as poll -> begin match attr.poll with | Default_poll -> () | Error_poll -> - Location.prerr_warning loc - (Warnings.Duplicated_attribute "error_poll") + Location.prerr_warning loc + (Warnings.Duplicated_attribute "error_poll") end; let attr = { attr with poll } in check_poll_inline loc attr; check_poll_local loc attr; let attr = { attr with inline = Never_inline; local = Never_local } in Lfunction { funct with attr } - | expr, Error_poll -> - Location.prerr_warning loc - (Warnings.Misplaced_attribute "error_poll"); - expr + end + | _ -> expr let add_loop_attribute expr loc attributes = - match expr, get_loop_attribute attributes with - | expr, Default_loop -> expr - | Lfunction({ attr = { stub = false } as attr } as funct), loop -> + match expr with + | Lfunction({ attr = { stub = false } as attr } as funct) -> + begin match get_loop_attribute attributes with + | Default_loop -> expr + | (Always_loop | Never_loop) as loop -> begin match attr.loop with | Default_loop -> () | Always_loop | Never_loop -> @@ -416,10 +414,8 @@ let add_loop_attribute expr loc attributes = end; let attr = { attr with loop } in Lfunction { funct with attr = attr } - | expr, (Always_loop | Never_loop) -> - Location.prerr_warning loc - (Warnings.Misplaced_attribute "loop"); - expr + end + | _ -> expr (* Get the [@inlined] attribute payload (or default if not present). *) let get_inlined_attribute e = diff --git a/otherlibs/dynlink/dune b/otherlibs/dynlink/dune index c67a9f1b5b55..fe1ed17fa1fa 100644 --- a/otherlibs/dynlink/dune +++ b/otherlibs/dynlink/dune @@ -355,14 +355,10 @@ .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Location.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ident.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Longident.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Builtin_attributes.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Compilation_unit.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Linkage_name.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symbol.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Type_immediacy.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Path.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Attr_helper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Primitive.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Types.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Syntaxerr.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Bytesections.cmo @@ -375,6 +371,10 @@ .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Persistent_env.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Docstrings.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Builtin_attributes.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Type_immediacy.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Attr_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Primitive.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Predef.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_mapper.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Subst.cmo @@ -413,14 +413,10 @@ .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Location.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ident.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Longident.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Builtin_attributes.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Compilation_unit.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Linkage_name.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symbol.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Type_immediacy.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Path.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Attr_helper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Primitive.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Types.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Syntaxerr.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Bytesections.cmx @@ -433,6 +429,10 @@ .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Persistent_env.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Docstrings.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Builtin_attributes.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Type_immediacy.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Attr_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Primitive.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Predef.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_mapper.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Subst.cmx diff --git a/testsuite/tests/warnings/w53.compilers.reference b/testsuite/tests/warnings/w53.compilers.reference index 443fd8f414aa..8847a4ff8b99 100644 --- a/testsuite/tests/warnings/w53.compilers.reference +++ b/testsuite/tests/warnings/w53.compilers.reference @@ -6,10 +6,6 @@ File "w53.ml", line 12, characters 4-5: 12 | let h x = x [@inline] (* rejected *) ^ Warning 32 [unused-value-declaration]: unused value h. -File "w53.ml", line 334, characters 2-33: -334 | let x : int64 = 42L [@@noalloc] (* rejected *) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context File "w53.ml", line 12, characters 14-20: 12 | let h x = x [@inline] (* rejected *) ^^^^^^ @@ -562,6 +558,10 @@ File "w53.ml", line 333, characters 19-26: 333 | type s1 = Foo1 [@noalloc] (* rejected *) ^^^^^^^ Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 334, characters 25-32: +334 | let x : int64 = 42L [@@noalloc] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context File "w53.ml", line 336, characters 46-53: 336 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) ^^^^^^^ From ead605caf3ae3f1645dc152cb6839cd2417b6f7d Mon Sep 17 00:00:00 2001 From: Stephen Dolan Date: Tue, 25 Oct 2022 14:34:59 +0100 Subject: [PATCH 17/39] flambda-backend: Add a missing Extract_exception (#916) --- runtime/signals.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/signals.c b/runtime/signals.c index d1cacd0f552b..3097209d6d4f 100644 --- a/runtime/signals.c +++ b/runtime/signals.c @@ -221,7 +221,7 @@ void caml_raise_async_if_exception(value res, const char* where) { if (Is_exception_result(res)) { check_async_exn(res, where); - caml_raise_async(res); + caml_raise_async(Extract_exception(res)); } } From 5e57b7d80df0d7ba3d42122bf3bfbdcb2d9de76e Mon Sep 17 00:00:00 2001 From: Stephen Dolan Date: Tue, 25 Oct 2022 17:29:02 +0100 Subject: [PATCH 18/39] flambda-backend: Bugfix for runtime frame_descr logic for C frames (#918) --- runtime/roots_nat.c | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/runtime/roots_nat.c b/runtime/roots_nat.c index 601f59708dce..43576d66a4dd 100644 --- a/runtime/roots_nat.c +++ b/runtime/roots_nat.c @@ -110,22 +110,33 @@ static frame_descr * next_frame_descr(frame_descr * d) { unsigned char num_allocs = 0, *p; uint32_t frame_size; CAMLassert(d->retaddr >= 4096); - frame_size = get_frame_size(d); - p = get_end_of_live_ofs(d); - /* Skip alloc_lengths if present */ - if (frame_size & 2) { - num_allocs = *p; - p += num_allocs + 1; - } - /* Skip debug info if present */ - if (frame_size & 1) { - /* Align to 32 bits */ - p = Align_to(p, uint32_t); - p += sizeof(uint32_t) * (frame_size & 2 ? num_allocs : 1); + if (d->frame_size != 0xFFFF) { + frame_size = get_frame_size(d); + p = get_end_of_live_ofs(d); + /* Skip alloc_lengths if present */ + if (frame_size & 2) { + num_allocs = *p; + p += num_allocs + 1; + } + /* Skip debug info if present */ + if (frame_size & 1) { + /* Align to 32 bits */ + p = Align_to(p, uint32_t); + p += sizeof(uint32_t) * (frame_size & 2 ? num_allocs : 1); + } + /* Align to word size */ + p = Align_to(p, void*); + return ((frame_descr*) p); + } else { + /* This marks the top of an ML stack chunk. Skip over empty + * frame descriptor */ + /* Skip to address of zero-sized live_ofs */ + CAMLassert(d->num_live == 0); + p = (unsigned char*)&d->live_ofs[0]; + /* Align to word size */ + p = Align_to(p, void*); + return ((frame_descr*) p); } - /* Align to word size */ - p = Align_to(p, void*); - return ((frame_descr*) p); } static void fill_hashtable(link *frametables) { From 4d70045a5ec1f0594ddcb84fa42cfd5e4739fd11 Mon Sep 17 00:00:00 2001 From: Greta Yorsh <45005955+gretay-js@users.noreply.github.com> Date: Wed, 26 Oct 2022 09:38:25 +0100 Subject: [PATCH 19/39] flambda-backend: Remove filename from system frametable (amd64) (#920) --- runtime/amd64.S | 3 --- 1 file changed, 3 deletions(-) diff --git a/runtime/amd64.S b/runtime/amd64.S index ca1d18b09390..ab2cfa969663 100644 --- a/runtime/amd64.S +++ b/runtime/amd64.S @@ -768,9 +768,6 @@ G(caml_system__frametable): .value -1 /* negative frame size => use callback link */ .value 0 /* no roots here */ .align EIGHT_ALIGN - .quad 16 - .quad 0 - .string "amd64.S" #if defined(SYS_macosx) .literal16 From befea0169e7176a4878c7579e147c6afb85d3c7e Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 31 Oct 2022 15:50:09 +0000 Subject: [PATCH 20/39] flambda-backend: Compilation fixes / rectify merge faults --- driver/main_args.ml | 6 ---- driver/main_args.mli | 1 - lambda/debuginfo.mli | 14 +++++++- lambda/lambda.ml | 4 --- lambda/lambda.mli | 4 --- lambda/printlambda.ml | 13 ++----- lambda/tmc.ml | 2 +- lambda/translattribute.ml | 47 ++++++++---------------- lambda/translmod.ml | 2 +- middle_end/internal_variable_names.ml | 1 - otherlibs/dynlink/dune | 4 ++- otherlibs/unix/unlink.c | 3 +- toplevel/native/dune | 52 +++++++++++++-------------- 13 files changed, 63 insertions(+), 90 deletions(-) diff --git a/driver/main_args.ml b/driver/main_args.ml index b7c652855c19..623e44593afb 100644 --- a/driver/main_args.ml +++ b/driver/main_args.ml @@ -944,9 +944,6 @@ let mk_afl_inst_ratio f = \ (advanced, see afl-fuzz docs for AFL_INST_RATIO)" ;; -let mk_alloc_check f = - "-alloc-check", Arg.Unit f, "" - let mk__ f = "-", Arg.String f, " Treat as a file name (even if it starts with `-')" @@ -1180,7 +1177,6 @@ module type Optcomp_options = sig val _save_ir_after : string -> unit val _probes : unit -> unit val _no_probes : unit -> unit - val _alloc_check : unit -> unit end;; module type Opttop_options = sig @@ -1552,7 +1548,6 @@ struct mk_dump_into_file F._dump_into_file; mk_dump_dir F._dump_dir; mk_dump_pass F._dump_pass; - mk_alloc_check F._alloc_check; mk_args F._args; mk_args0 F._args0; @@ -2039,7 +2034,6 @@ module Default = struct let _v () = Compenv.print_version_and_library "native-code compiler" let _no_probes = clear probes let _probes = set probes - let _alloc_check () = () end module Odoc_args = struct diff --git a/driver/main_args.mli b/driver/main_args.mli index c3f3cf0d12fc..b903e30a8457 100644 --- a/driver/main_args.mli +++ b/driver/main_args.mli @@ -244,7 +244,6 @@ module type Optcomp_options = sig val _save_ir_after : string -> unit val _probes : unit -> unit val _no_probes : unit -> unit - val _alloc_check : unit -> unit end;; module type Opttop_options = sig diff --git a/lambda/debuginfo.mli b/lambda/debuginfo.mli index da5be7b75093..9677e65c92ce 100644 --- a/lambda/debuginfo.mli +++ b/lambda/debuginfo.mli @@ -14,7 +14,19 @@ (**************************************************************************) module Scoped_location : sig - type scopes + type scope_item = private + | Sc_anonymous_function + | Sc_value_definition + | Sc_module_definition + | Sc_class_definition + | Sc_method_definition + | Sc_partial_or_eta_wrapper + | Sc_lazy + + type scopes = private + | Empty + | Cons of {item: scope_item; str: string; str_fun: string; name : string; prev: scopes} + val string_of_scopes : scopes -> string val empty_scopes : scopes diff --git a/lambda/lambda.ml b/lambda/lambda.ml index 3dad79621f9f..bb0c4164b5dc 100644 --- a/lambda/lambda.ml +++ b/lambda/lambda.ml @@ -364,10 +364,6 @@ type local_attribute = | Never_local (* [@local never] *) | Default_local (* [@local maybe] or no [@local] attribute *) -type poll_attribute = - | Error_poll (* [@poll error] *) - | Default_poll (* no [@poll] attribute *) - type property = | Noalloc diff --git a/lambda/lambda.mli b/lambda/lambda.mli index 40c46e2672fa..ad08167efb41 100644 --- a/lambda/lambda.mli +++ b/lambda/lambda.mli @@ -296,10 +296,6 @@ type check_attribute = | Assert of property | Assume of property -type poll_attribute = - | Error_poll (* [@poll error] *) - | Default_poll (* no [@poll] attribute *) - type loop_attribute = | Always_loop (* [@loop] or [@loop always] *) | Never_loop (* [@loop never] *) diff --git a/lambda/printlambda.ml b/lambda/printlambda.ml index 1c05a58608af..a0fa4f6dbf10 100644 --- a/lambda/printlambda.ml +++ b/lambda/printlambda.ml @@ -557,9 +557,8 @@ let check_attribute ppf check = | Assert p -> fprintf ppf "assert %s@ " (check_property p) | Assume p -> fprintf ppf "assume %s@ " (check_property p) -let function_attribute ppf - { inline; specialise; check; local; is_a_functor; stub; poll; loop } = - if is_a_functor then +let function_attribute ppf t = + if t.is_a_functor then fprintf ppf "is_a_functor@ "; if t.stub then fprintf ppf "stub@ "; @@ -580,20 +579,14 @@ let function_attribute ppf | Always_local -> fprintf ppf "always_local@ " | Never_local -> fprintf ppf "never_local@ " end; - begin match poll with - | Default_poll -> () - | Error_poll -> fprintf ppf "error_poll@ " - end; check_attribute ppf t.check; if t.tmc_candidate then fprintf ppf "tail_mod_cons@ "; - begin match loop with + begin match t.loop with | Default_loop -> () | Always_loop -> fprintf ppf "always_loop@ " | Never_loop -> fprintf ppf "never_loop@ " end; - if t.tmc_candidate then - fprintf ppf "tail_mod_cons@ "; begin match t.poll with | Default_poll -> () | Error_poll -> fprintf ppf "error_poll@ " diff --git a/lambda/tmc.ml b/lambda/tmc.ml index 720cf6ed9f89..d79ec5de8343 100644 --- a/lambda/tmc.ml +++ b/lambda/tmc.ml @@ -858,7 +858,7 @@ let rec choice ctx t = (* in common cases we just return *) | Pbytes_to_string | Pbytes_of_string - | Pgetglobal _ | Psetglobal _ + | Pgetglobal _ | Psetglobal _ | Pgetpredef _ | Pfield _ | Pfield_computed _ | Psetfield _ | Psetfield_computed _ | Pfloatfield _ | Psetfloatfield _ diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index ea413d526d63..2f10f518eb15 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -44,9 +44,6 @@ let is_property_attribute = function let is_tmc_attribute = [ ["tail_mod_cons"; "ocaml.tail_mod_cons"], true ] -let is_poll_attribute = - [ ["poll"], true ] - let is_poll_attribute = [ ["poll"; "ocaml.poll"], true ] @@ -373,11 +370,9 @@ let add_check_attribute expr loc attributes = | Assume p -> Printf.sprintf "%s assume" (to_string p) | Default_check -> assert false in - match expr with - | Lfunction({ attr = { stub = false } as attr } as funct) -> - begin match get_check_attribute attributes with - | [] -> expr - | [check] -> + match expr, get_check_attribute attributes with + | expr, [] -> expr + | Lfunction({ attr = { stub = false } as attr } as funct), [check] -> begin match attr.check with | Default_check -> () | Assert Noalloc | Assume Noalloc -> @@ -385,30 +380,16 @@ let add_check_attribute expr loc attributes = (Warnings.Duplicated_attribute (to_string check)) end; let attr = { attr with check } in - Lfunction { funct with attr } - | (_ :: _ :: _) -> assert false - end - | _ -> expr - -let add_poll_attribute expr loc attributes = - match expr with - | Lfunction({ attr = { stub = false } as attr } as funct) -> - begin match get_poll_attribute attributes with - | Default_poll -> expr - | Error_poll as poll -> - begin match attr.poll with - | Default_poll -> () - | Error_poll -> - Location.prerr_warning loc - (Warnings.Duplicated_attribute "error_poll") - end; - let attr = { attr with poll } in - check_poll_inline loc attr; - check_poll_local loc attr; - let attr = { attr with inline = Never_inline; local = Never_local } in - Lfunction { funct with attr } - end - | _ -> expr + lfunction_with_attr ~attr funct + | expr, [check] -> + Location.prerr_warning loc + (Warnings.Misplaced_attribute (to_string check)); + expr + | expr, a::b::_ -> + Location.prerr_warning loc + (Warnings.Duplicated_attribute + (Printf.sprintf "%s/%s"(to_string a) (to_string b))); + expr let add_loop_attribute expr loc attributes = match expr with @@ -423,7 +404,7 @@ let add_loop_attribute expr loc attributes = (Warnings.Duplicated_attribute "loop") end; let attr = { attr with loop } in - Lfunction { funct with attr = attr } + lfunction_with_attr ~attr funct end | _ -> expr diff --git a/lambda/translmod.ml b/lambda/translmod.ml index e05810c0bd00..8005d73a0c0a 100644 --- a/lambda/translmod.ml +++ b/lambda/translmod.ml @@ -545,8 +545,8 @@ let rec compile_functor ~scopes mexp coercion root_path loc = inline = inline_attribute; specialise = Default_specialise; local = Default_local; - poll = Default_poll; check = Default_check; + poll = Default_poll; loop = Never_loop; is_a_functor = true; stub = false; diff --git a/middle_end/internal_variable_names.ml b/middle_end/internal_variable_names.ml index cdd4e718a063..8b17c9877cbb 100644 --- a/middle_end/internal_variable_names.ml +++ b/middle_end/internal_variable_names.ml @@ -119,7 +119,6 @@ let pfloatfield = "Pfloatfield" let pfloatofint = "Pfloatofint" let pgetglobal = "Pgetglobal" let pgetpredef = "Pgetpredef" -let pidentity = "Pidentity" let pignore = "Pignore" let pint_as_pointer = "Pint_as_pointer" let pintcomp = "Pintcomp" diff --git a/otherlibs/dynlink/dune b/otherlibs/dynlink/dune index 97ff37f4cd06..80c04b68a097 100644 --- a/otherlibs/dynlink/dune +++ b/otherlibs/dynlink/dune @@ -21,7 +21,7 @@ -principal -absname -w - +a-4-9-40-41-42-44-45-48 + +a-4-9-40-41-42-44-45-48-69-70 -warn-error A -bin-annot @@ -164,6 +164,8 @@ (copy_files ../../typing/type_immediacy.ml) +(copy_files ../../typing/shape.ml) + (copy_files ../../typing/types.ml) (copy_files ../../typing/btype.ml) diff --git a/otherlibs/unix/unlink.c b/otherlibs/unix/unlink.c index f4cd9bae846e..567f9d6639f8 100644 --- a/otherlibs/unix/unlink.c +++ b/otherlibs/unix/unlink.c @@ -29,7 +29,8 @@ CAMLprim value unix_unlink(value path) caml_unix_check_path(path, "unlink"); p = caml_stat_strdup_to_os(String_val(path)); caml_enter_blocking_section(); - ret = caml_unlink(p); + /* CR mshinwell: caml_unlink causes a compiler error on macOS */ + ret = unlink(p); caml_leave_blocking_section(); caml_stat_free(p); if (ret == -1) uerror("unlink", path); diff --git a/toplevel/native/dune b/toplevel/native/dune index 90f675ceeb2d..7da3d8421b6c 100644 --- a/toplevel/native/dune +++ b/toplevel/native/dune @@ -12,31 +12,31 @@ ;* * ;************************************************************************** -(copy_files# ../*.ml*) - -(library - (name ocamltoplevel_native) - (wrapped false) - (modes native) - (flags (:standard -principal)) - (libraries ocamlcommon ocamloptcomp dynlink_internal) - (modules :standard \ topstart expunge)) - -(executable - (name topstart) - (modes native) - (flags (:standard -principal)) - (modules topstart) - (libraries ocamltoplevel_native)) - -(install - (files - (topstart.exe as ocamlnat) - ) - (section bin) - (package ocaml)) - -; +;(copy_files# ../*.ml*) +; +;(library +; (name ocamltoplevel_native) +; (wrapped false) +; (modes native) +; (flags (:standard -principal)) +; (libraries ocamlcommon ocamloptcomp dynlink_internal) +; (modules :standard \ topstart expunge)) +; +;(executable +; (name topstart) +; (modes native) +; (flags (:standard -principal)) +; (modules topstart) +; (libraries ocamltoplevel_native)) +; +;(install +; (files +; (topstart.exe as ocamlnat) +; ) +; (section bin) +; (package ocaml)) +; +; ; (install ; (files ; (ocamltoplevel.cma as compiler-libs/ocamltoplevel.cma) @@ -63,4 +63,4 @@ ; ) ; (section lib) ; (package ocaml)) -; +; From 32f835689bd88bcf89c6541b105fcca4bce76d6f Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 31 Oct 2022 18:56:57 +0000 Subject: [PATCH 21/39] flambda-backend: Topeval fix for symbols patch --- toplevel/native/topeval.ml | 1 + 1 file changed, 1 insertion(+) diff --git a/toplevel/native/topeval.ml b/toplevel/native/topeval.ml index 3334ce20fbda..a65fe1f7a9f1 100644 --- a/toplevel/native/topeval.ml +++ b/toplevel/native/topeval.ml @@ -52,6 +52,7 @@ let close_phrase lam = let open Lambda in Ident.Set.fold (fun id l -> let glb, pos = toplevel_value id in + let glb = Compilation_unit.of_string (Ident.name glb) in let glob = Lprim (Pfield (pos, Reads_agree), [Lprim (Pgetglobal glb, [], Loc_unknown)], From 971dbeb55bd600f13d549517f9e9ade31bb4f8c5 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 31 Oct 2022 16:39:45 +0000 Subject: [PATCH 22/39] flambda-backend: Testsuite fixes --- .../tool-toplevel/pr6468.compilers.reference | 2 +- .../tests/warnings/w53.compilers.reference | 26 ++++++++----------- toplevel/byte/topeval.ml | 2 ++ 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/testsuite/tests/tool-toplevel/pr6468.compilers.reference b/testsuite/tests/tool-toplevel/pr6468.compilers.reference index 07267b3bc16e..ada52ad007a2 100644 --- a/testsuite/tests/tool-toplevel/pr6468.compilers.reference +++ b/testsuite/tests/tool-toplevel/pr6468.compilers.reference @@ -10,5 +10,5 @@ Raised at f in file "//toplevel//", line 2, characters 11-26 Called from g in file "//toplevel//", line 1, characters 11-15 Called from Stdlib__Fun.protect in file "fun.ml", line 37, characters 8-15 Re-raised at Stdlib__Fun.protect in file "fun.ml", line 42, characters 6-52 -Called from Topeval.load_lambda in file "toplevel/byte/topeval.ml", line 89, characters 4-150 +Called from Topeval.load_lambda in file "ocaml/toplevel/byte/topeval.ml", line 90, characters 4-150 diff --git a/testsuite/tests/warnings/w53.compilers.reference b/testsuite/tests/warnings/w53.compilers.reference index eff4122395b6..5b330fd12aec 100644 --- a/testsuite/tests/warnings/w53.compilers.reference +++ b/testsuite/tests/warnings/w53.compilers.reference @@ -106,14 +106,14 @@ File "w53.ml", line 75, characters 14-25: 75 | type t4 [@@@immediate64] (* rejected *) ^^^^^^^^^^^ Warning 53 [misplaced-attribute]: the "immediate64" attribute cannot appear in this context -File "w53.ml", line 79, characters 32-43: -79 | let x = (4 [@immediate], 42 [@immediate64]) (* rejected *) - ^^^^^^^^^^^ -Warning 53 [misplaced-attribute]: the "immediate64" attribute cannot appear in this context File "w53.ml", line 79, characters 15-24: 79 | let x = (4 [@immediate], 42 [@immediate64]) (* rejected *) ^^^^^^^^^ Warning 53 [misplaced-attribute]: the "immediate" attribute cannot appear in this context +File "w53.ml", line 79, characters 32-43: +79 | let x = (4 [@immediate], 42 [@immediate64]) (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "immediate64" attribute cannot appear in this context File "w53.ml", line 84, characters 26-31: 84 | type t2 = {x : int} [@@@boxed] (* rejected *) ^^^^^ @@ -126,14 +126,14 @@ File "w53.ml", line 87, characters 17-24: 87 | val x : int [@@unboxed] (* rejected *) ^^^^^^^ Warning 53 [misplaced-attribute]: the "unboxed" attribute cannot appear in this context -File "w53.ml", line 91, characters 30-35: -91 | let x = (5 [@unboxed], 42 [@boxed]) (* rejected *) - ^^^^^ -Warning 53 [misplaced-attribute]: the "boxed" attribute cannot appear in this context File "w53.ml", line 91, characters 15-22: 91 | let x = (5 [@unboxed], 42 [@boxed]) (* rejected *) ^^^^^^^ Warning 53 [misplaced-attribute]: the "unboxed" attribute cannot appear in this context +File "w53.ml", line 91, characters 30-35: +91 | let x = (5 [@unboxed], 42 [@boxed]) (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "boxed" attribute cannot appear in this context File "w53.ml", line 95, characters 21-30: 95 | type 'a t1 = 'a [@@principal] (* rejected *) ^^^^^^^^^ @@ -562,18 +562,14 @@ File "w53.ml", line 333, characters 19-26: 333 | type s1 = Foo1 [@noalloc] (* rejected *) ^^^^^^^ Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context -File "w53.ml", line 334, characters 25-32: -334 | let x : int64 = 42L [@@noalloc] (* rejected *) - ^^^^^^^ +File "w53.ml", line 336, characters 24-31: +336 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) + ^^^^^^^ Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context File "w53.ml", line 336, characters 46-53: 336 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) ^^^^^^^ Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context -File "w53.ml", line 336, characters 24-31: -336 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) - ^^^^^^^ -Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context File "w53.ml", line 341, characters 21-29: 341 | type 'a t1 = 'a [@@untagged] (* rejected *) ^^^^^^^^ diff --git a/toplevel/byte/topeval.ml b/toplevel/byte/topeval.ml index 87e6d03e8e4e..d08cad0be1b7 100644 --- a/toplevel/byte/topeval.ml +++ b/toplevel/byte/topeval.ml @@ -15,6 +15,8 @@ (* The interactive toplevel loop *) +#18 "ocaml/toplevel/byte/topeval.ml" + open Format open Misc open Parsetree From c86bf6e0351dce644a06b0d90416939805c333d3 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Tue, 1 Nov 2022 09:43:38 +0000 Subject: [PATCH 23/39] flambda-backend: Remove duplicate tests for polling --- testsuite/tests/backend/polling.c | 18 -- testsuite/tests/backend/polling_insertion.ml | 293 ------------------- 2 files changed, 311 deletions(-) delete mode 100644 testsuite/tests/backend/polling.c delete mode 100644 testsuite/tests/backend/polling_insertion.ml diff --git a/testsuite/tests/backend/polling.c b/testsuite/tests/backend/polling.c deleted file mode 100644 index c28baab048bf..000000000000 --- a/testsuite/tests/backend/polling.c +++ /dev/null @@ -1,18 +0,0 @@ -#define CAML_NAME_SPACE -#define CAML_INTERNALS - -#include -#include - -CAMLprim value request_minor_gc(value v) { - Caml_state->requested_minor_gc = 1; - Caml_state->requested_major_slice = 1; - caml_something_to_do = 1; - Caml_state->young_limit = Caml_state->young_alloc_end; - - return Val_unit; -} - -CAMLprim value minor_gcs(value v) { - return Val_long(Caml_state->stat_minor_collections); -} diff --git a/testsuite/tests/backend/polling_insertion.ml b/testsuite/tests/backend/polling_insertion.ml deleted file mode 100644 index 5be260faba45..000000000000 --- a/testsuite/tests/backend/polling_insertion.ml +++ /dev/null @@ -1,293 +0,0 @@ -(* TEST - modules = "polling.c" - compare_programs = "false" - * arch64 - ** native -*) - -(* This set of tests examine poll insertion behaviour. We do this by requesting - and checking the number of minor collections at various points to determine - whether a poll was correctly added. There are some subtleties because - [caml_empty_minor_heap] will not increment the minor_collections stat if - nothing has been allocated on the minor heap, so we sometimes need to - add an allocation before we call [request_minor_gc]. The [minor_gcs] - function returns the number of minor collections so far without allocating. - - ignore(Sys.opaque_identity(ref 41)) is used wherever we want to do an - allocation in order to use some minor heap so the minor collections stat is - incremented. - - ignore(Sys.opaque_identity(ref 42)) is used wherever we want an allocation - for the purposes of testing whether a poll would be elided or not. -*) - -external request_minor_gc : unit -> unit = "request_minor_gc" -external minor_gcs : unit -> int = "minor_gcs" - -(* This function tests that polls are added to loops *) -let polls_added_to_loops () = - let minors_before = minor_gcs () in - request_minor_gc (); - for a = 0 to 1 do - ignore (Sys.opaque_identity 42) - done; - let minors_now = minor_gcs () in - assert (minors_before < minors_now) - - -(* This function should have no prologue poll but will have - one in the loop. *) -let func_with_added_poll_because_loop () = - (* We do two loop iterations so that the poll is triggered whether - in poll-at-top or poll-at-bottom mode. *) - for a = 0 to Sys.opaque_identity(1) do - ignore (Sys.opaque_identity 42) - done - [@@inline never] - -let func_with_no_prologue_poll () = - (* this function does not have indirect or 'forward' tail call nor - does it call a synthesised function with suppressed polls. *) - ignore(Sys.opaque_identity(minor_gcs ())) - [@@inline never] - -let prologue_polls_in_functions () = - ignore(Sys.opaque_identity(ref 41)); - let minors_before = minor_gcs () in - request_minor_gc (); - func_with_added_poll_because_loop (); - let minors_now = minor_gcs () in - assert (minors_before < minors_now); - - ignore(Sys.opaque_identity(ref 41)); - let minors_before = minor_gcs () in - request_minor_gc (); - func_with_no_prologue_poll (); - let minors_now = minor_gcs () in - assert (minors_before = minors_now) - -(* These next functions test that polls are not added to functions that - unconditionally allocate. - [allocating_func] allocates unconditionally - [allocating_func_if] allocates unconditionally but does so - on two separate branches *) -let allocating_func minors_before = - let minors_now = minor_gcs () in - assert (minors_before = minors_now); - (* No poll yet *) - ignore (Sys.opaque_identity (ref 42)); - let minors_now2 = minor_gcs () in - assert (minors_before + 1 = minors_now2); - (* Polled at alloc *) - [@@inline never] - -let allocating_func_if minors_before = - let minors_now = minor_gcs () in - assert (minors_before = minors_now); - (* No poll yet *) - if minors_before > 0 then ignore (Sys.opaque_identity (ref 42)) - else ignore (Sys.opaque_identity (ref 42)); - let minors_now2 = minor_gcs () in - assert (minors_before + 1 = minors_now2); - (* Polled at alloc *) - [@@inline never] - -let allocating_func_nested_ifs minors_before = - let minors_now = minor_gcs () in - assert (minors_before = minors_now); - (* No poll yet *) - if Sys.opaque_identity(minors_before) > 0 then - if Sys.opaque_identity(minors_before) > 1 then - ignore (Sys.opaque_identity (ref 42)) - else - ignore (Sys.opaque_identity (ref 42)) - else - if Sys.opaque_identity(minors_before) < 5 then - ignore (Sys.opaque_identity (ref 42)) - else - ignore (Sys.opaque_identity (ref 42)); - let minors_now2 = minor_gcs () in - assert (minors_before + 1 = minors_now2); - (* Polled at alloc *) - [@@inline never] - -let allocating_func_match minors_before = - let minors_now = minor_gcs () in - assert (minors_before = minors_now); - (* No poll yet *) - match minors_before with - | 0 -> ignore (Sys.opaque_identity (ref 42)) - | _ -> ignore (Sys.opaque_identity (ref 42)); - let minors_now2 = minor_gcs () in - assert (minors_before + 1 = minors_now2); - (* Polled at alloc *) - [@@inline never] - -let polls_not_added_unconditionally_allocating_functions () = - let minors_before = minor_gcs () in - ignore(Sys.opaque_identity(ref 41)); - request_minor_gc (); - allocating_func minors_before; - let minors_before = minor_gcs () in - ignore(Sys.opaque_identity(ref 41)); - request_minor_gc (); - allocating_func_if minors_before; - let minors_before = minor_gcs () in - ignore(Sys.opaque_identity(ref 41)); - request_minor_gc (); - allocating_func_nested_ifs minors_before; - let minors_before = minor_gcs () in - ignore(Sys.opaque_identity(ref 41)); - request_minor_gc (); - allocating_func_match minors_before - -(* This function tests that polls are not added to the back edge of - where loop bodies allocat unconditionally *) -let polls_not_added_to_allocating_loops () = - let current_minors = ref (minor_gcs ()) in - request_minor_gc (); - for a = 0 to 1 do - (* Since the loop body allocates there should be no poll points *) - let minors_now = minor_gcs () in - assert(minors_now = !current_minors); - ignore(Sys.opaque_identity(ref 42)); - let minors_now2 = minor_gcs () in - assert(minors_now+1 = minors_now2); - current_minors := minors_now2; - ignore(Sys.opaque_identity(ref 41)); - request_minor_gc () - done - -(* this next set of functions tests that self tail recursive functions - have polls added correctly *) -let rec self_rec_func n = - match n with - | 0 -> 0 - | _ -> - begin - let n1 = Sys.opaque_identity(n-1) in - (self_rec_func[@tailcall]) n1 - end - -let polls_added_to_self_recursive_functions () = - let minors_before = minor_gcs () in - request_minor_gc (); - ignore(self_rec_func 2); - let minors_after = minor_gcs () in - (* should be at least one minor gc from polls in self_rec_func *) - assert(minors_before+1 = minors_after) - -(* this pair of mutually recursive functions is to test that a poll is - correctly placed in the first one compiled *) -let rec mut_rec_func_even d = - match d with - | 0 -> 0 - | _ -> mut_rec_func_odd (d-1) -and mut_rec_func_odd d = - mut_rec_func_even (d-1) -and mut_rec_func d = - match d with - | n when n mod 2 == 0 - -> mut_rec_func_even n - | n -> mut_rec_func_odd n - -let polls_added_to_mutually_recursive_functions () = - let minors_before = minor_gcs () in - request_minor_gc (); - ignore(mut_rec_func 3); - let minors_after = minor_gcs () in - (* should be at least one minor gc from polls in mut_rec_func *) - assert(minors_before < minors_after) - -(* this is to test that indirect tail calls (which might result in a self - call) have polls inserted in them. - These correspond to Itailcall_ind at Mach *) -let do_indirect_tail_call f n = - f (n-1) - [@@inline never] - -let polls_added_to_indirect_tail_calls () = - let f = fun n -> n+1 in - let minors_before = minor_gcs () in - request_minor_gc (); - ignore(do_indirect_tail_call f 3); - let minors_after = minor_gcs () in - (* should be at one minor gc from the poll in do_indirect_tail_call *) - assert(minors_before+1 = minors_after) - -(* this is to test that indirect non-tail calls do not have a poll placed - in them. These correspond to Icall_ind at Mach *) -let do_indirect_call f n = - n * f (n-1) - [@@inline never] - -let polls_not_added_to_indirect_calls () = - let f = fun n -> n+1 in - let minors_before = minor_gcs () in - request_minor_gc (); - ignore(do_indirect_call f 3); - let minors_after = minor_gcs () in - (* should be at one minor gc from the poll in do_indirect_tail_call *) - assert(minors_before = minors_after) - -(* this set of functions tests that we don't poll for immediate - (non-tail) calls. These correspond to Icall_imm at Mach *) -let call_func1 n = - Sys.opaque_identity(n-1) - [@@inline never] - -let call_func2 n = - n * (call_func1 (Sys.opaque_identity(n+1))) - [@@inline never] - -let polls_not_added_to_immediate_calls () = - let minors_before = minor_gcs () in - request_minor_gc (); - ignore(call_func1 100); - let minors_after = minor_gcs () in - (* should be no minor collections *) - assert(minors_before = minors_after) - -let[@inline never][@local never] app minors_before f x y = - let minors_after_prologue = minor_gcs () in - assert(minors_before+1 = minors_after_prologue); - request_minor_gc (); - f x y - -let polls_not_added_in_caml_apply () = - let minors_before = minor_gcs() in - request_minor_gc(); - ignore(Sys.opaque_identity(app minors_before (fun x y -> x * y) 5 4)); - let minors_after = minor_gcs() in - assert(minors_before+1 = minors_after) - -let () = - ignore(Sys.opaque_identity(ref 41)); - polls_added_to_loops (); (* relies on there being some minor heap usage *) - - ignore(Sys.opaque_identity(ref 41)); - prologue_polls_in_functions (); - - ignore(Sys.opaque_identity(ref 41)); - polls_added_to_self_recursive_functions (); - - ignore(Sys.opaque_identity(ref 41)); - polls_added_to_mutually_recursive_functions (); - - ignore(Sys.opaque_identity(ref 41)); - polls_added_to_indirect_tail_calls (); - - ignore(Sys.opaque_identity(ref 41)); - polls_not_added_to_indirect_calls (); - - ignore(Sys.opaque_identity(ref 41)); - polls_not_added_to_immediate_calls (); - - ignore(Sys.opaque_identity(ref 41)); - polls_not_added_unconditionally_allocating_functions (); - - ignore(Sys.opaque_identity(ref 41)); - polls_not_added_to_allocating_loops (); - - ignore(Sys.opaque_identity(ref 41)); - polls_not_added_in_caml_apply () From 6d758cd63cb400bec6613bbc21b1a5d9e62a157d Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Tue, 1 Nov 2022 08:52:40 +0000 Subject: [PATCH 24/39] flambda-backend: Revert whitespace changes in dune files, to match upstream --- runtime/caml/dune | 153 +++++++++++++++++++++---------------------- tools/dune | 88 +++++++++++++------------ toplevel/native/dune | 52 +++++++-------- 3 files changed, 148 insertions(+), 145 deletions(-) diff --git a/runtime/caml/dune b/runtime/caml/dune index 98c39d82f326..d0fe7f4e3144 100644 --- a/runtime/caml/dune +++ b/runtime/caml/dune @@ -14,90 +14,87 @@ (rule (targets jumptbl.h) - (mode fallback) - (deps - (:h instruct.h)) + (mode fallback) + (deps (:h instruct.h)) (action - (with-stdout-to - %{targets} - (bash - "cat %{h} | tr -d '\\r' | sed -n -e '/^ /s/ \\([A-Z]\\)/ \\&\\&lbl_\\1/gp' -e '/^}/q'")))) + (with-stdout-to %{targets} + (bash "cat %{h} | tr -d '\\r' | \ + sed -n -e '/^ /s/ \\([A-Z]\\)/ \\&\\&lbl_\\1/gp' -e '/^}/q'")))) (rule - (targets opnames.h) - (deps instruct.h ../sak) - (action - (run make -s -C .. COMPUTE_DEPS=false caml/opnames.h))) + (targets opnames.h) + (deps instruct.h ../sak) + (action (run make -s -C .. COMPUTE_DEPS=false caml/opnames.h))) (rule (targets version.h) - (mode fallback) + (mode fallback) (action - (with-stdout-to - %{targets} - (run %{dep:../../tools/make-version-header.sh} %{dep:../../VERSION})))) + (with-stdout-to %{targets} + (run %{dep:../../tools/make-version-header.sh} %{dep:../../VERSION})))) (install - (files - (domain_state.tbl as caml/domain_state.tbl) - (address_class.h as caml/address_class.h) - (alloc.h as caml/alloc.h) - (backtrace.h as caml/backtrace.h) - (backtrace_prim.h as caml/backtrace_prim.h) - (bigarray.h as caml/bigarray.h) - (callback.h as caml/callback.h) - (codefrag.h as caml/codefrag.h) - (compact.h as caml/compact.h) - (compare.h as caml/compare.h) - (compatibility.h as caml/compatibility.h) - (config.h as caml/config.h) - (custom.h as caml/custom.h) - (debugger.h as caml/debugger.h) - (domain.h as caml/domain.h) - (domain_state.h as caml/domain_state.h) - (dynlink.h as caml/dynlink.h) - (eventlog.h as caml/eventlog.h) - (exec.h as caml/exec.h) - (fail.h as caml/fail.h) - (finalise.h as caml/finalise.h) - (fix_code.h as caml/fix_code.h) - (freelist.h as caml/freelist.h) - (gc.h as caml/gc.h) - (gc_ctrl.h as caml/gc_ctrl.h) - (globroots.h as caml/globroots.h) - (hash.h as caml/hash.h) - (hooks.h as caml/hooks.h) - (instrtrace.h as caml/instrtrace.h) - (instruct.h as caml/instruct.h) - (interp.h as caml/interp.h) - (intext.h as caml/intext.h) - (io.h as caml/io.h) - (jumptbl.h as caml/jumptbl.h) - (m.h as caml/m.h) - (major_gc.h as caml/major_gc.h) - (md5.h as caml/md5.h) - (memory.h as caml/memory.h) - (memprof.h as caml/memprof.h) - (minor_gc.h as caml/minor_gc.h) - (misc.h as caml/misc.h) - (mlvalues.h as caml/mlvalues.h) - (opnames.h as caml/opnames.h) - (osdeps.h as caml/osdeps.h) - (prims.h as caml/prims.h) - (printexc.h as caml/printexc.h) - (reverse.h as caml/reverse.h) - (roots.h as caml/roots.h) - (s.h as caml/s.h) - (signals.h as caml/signals.h) - (skiplist.h as caml/skiplist.h) - (signals_machdep.h as caml/signals_machdep.h) - (stack.h as caml/stack.h) - (stacks.h as caml/stacks.h) - (startup.h as caml/startup.h) - (startup_aux.h as caml/startup_aux.h) - (sys.h as caml/sys.h) - (ui.h as caml/ui.h) - (version.h as caml/version.h) - (weak.h as caml/weak.h)) - (section lib) - (package ocaml_runtime_stdlib)) + (files + (domain_state.tbl as caml/domain_state.tbl) + (address_class.h as caml/address_class.h) + (alloc.h as caml/alloc.h) + (backtrace.h as caml/backtrace.h) + (backtrace_prim.h as caml/backtrace_prim.h) + (bigarray.h as caml/bigarray.h) + (callback.h as caml/callback.h) + (codefrag.h as caml/codefrag.h) + (compact.h as caml/compact.h) + (compare.h as caml/compare.h) + (compatibility.h as caml/compatibility.h) + (config.h as caml/config.h) + (custom.h as caml/custom.h) + (debugger.h as caml/debugger.h) + (domain.h as caml/domain.h) + (domain_state.h as caml/domain_state.h) + (dynlink.h as caml/dynlink.h) + (eventlog.h as caml/eventlog.h) + (exec.h as caml/exec.h) + (fail.h as caml/fail.h) + (finalise.h as caml/finalise.h) + (fix_code.h as caml/fix_code.h) + (freelist.h as caml/freelist.h) + (gc.h as caml/gc.h) + (gc_ctrl.h as caml/gc_ctrl.h) + (globroots.h as caml/globroots.h) + (hash.h as caml/hash.h) + (hooks.h as caml/hooks.h) + (instrtrace.h as caml/instrtrace.h) + (instruct.h as caml/instruct.h) + (interp.h as caml/interp.h) + (intext.h as caml/intext.h) + (io.h as caml/io.h) + (jumptbl.h as caml/jumptbl.h) + (m.h as caml/m.h) + (major_gc.h as caml/major_gc.h) + (md5.h as caml/md5.h) + (memory.h as caml/memory.h) + (memprof.h as caml/memprof.h) + (minor_gc.h as caml/minor_gc.h) + (misc.h as caml/misc.h) + (mlvalues.h as caml/mlvalues.h) + (opnames.h as caml/opnames.h) + (osdeps.h as caml/osdeps.h) + (prims.h as caml/prims.h) + (printexc.h as caml/printexc.h) + (reverse.h as caml/reverse.h) + (roots.h as caml/roots.h) + (s.h as caml/s.h) + (signals.h as caml/signals.h) + (skiplist.h as caml/skiplist.h) + (signals_machdep.h as caml/signals_machdep.h) + (stack.h as caml/stack.h) + (stacks.h as caml/stacks.h) + (startup.h as caml/startup.h) + (startup_aux.h as caml/startup_aux.h) + (sys.h as caml/sys.h) + (ui.h as caml/ui.h) + (version.h as caml/version.h) + (weak.h as caml/weak.h) + ) + (section lib) + (package ocaml_runtime_stdlib)) diff --git a/tools/dune b/tools/dune index 666cb7cc39ef..878c3b6836ea 100644 --- a/tools/dune +++ b/tools/dune @@ -13,71 +13,77 @@ ;************************************************************************** (executable - (name objinfo) - (modes byte native) - (modules objinfo) - (libraries ocamlcommon ocamlbytecomp ocamloptcomp)) + (name objinfo) + (modes byte native) + (modules objinfo) + (libraries ocamlcommon ocamlbytecomp ocamloptcomp)) (executables - (names make_opcodes cvt_emit) + (names make_opcodes cvt_emit) (modules make_opcodes cvt_emit)) (ocamllex (modules make_opcodes) - (mode fallback)) + (mode fallback)) (ocamllex (modules cvt_emit) - (mode fallback)) + (mode fallback)) (executable - (name ocamldep) - (modes byte native) - (modules ocamldep) - (libraries ocamlcommon ocamlbytecomp)) + (name ocamldep) + (modes byte native) + (modules ocamldep) + (libraries ocamlcommon ocamlbytecomp)) (install - (files - (ocamldep.bc as ocamldep.byte) - (ocamldep.exe as ocamldep.opt)) - (section bin) - (package ocaml)) + (files + (ocamldep.bc as ocamldep.byte) + (ocamldep.exe as ocamldep.opt) + ) + (section bin) + (package ocaml)) (executable - (name cmpbyt) - (modes byte) - (modules cmpbyt) - (libraries ocamlcommon ocamlbytecomp)) + (name cmpbyt) + (modes byte) + (modules cmpbyt) + (libraries ocamlcommon ocamlbytecomp)) (executable - (name ocamlmklib) - (modes byte native) - (modules ocamlmklib) - (libraries ocamlcommon ocamlbytecomp)) + (name ocamlmklib) + (modes byte native) + (modules ocamlmklib) + (libraries ocamlcommon ocamlbytecomp)) (install - (files - (ocamlmklib.bc as ocamlmklib.byte) - (ocamlmklib.exe as ocamlmklib.opt)) - (section bin) - (package ocaml)) + (files + (ocamlmklib.bc as ocamlmklib.byte) + (ocamlmklib.exe as ocamlmklib.opt) + ) + (section bin) + (package ocaml)) (executable - (name ocamlmktop) - (modes byte native) - (modules ocamlmktop) - (libraries ocamlcommon ocamlbytecomp)) + (name ocamlmktop) + (modes byte native) + (modules ocamlmktop) + (libraries ocamlcommon ocamlbytecomp)) (install - (files - (ocamlmktop.bc as ocamlmktop.byte) - (ocamlmktop.exe as ocamlmktop.opt)) - (section bin) - (package ocaml)) + (files + (ocamlmktop.bc as ocamlmktop.byte) + (ocamlmktop.exe as ocamlmktop.opt) + ) + (section bin) + (package ocaml)) (install - (files eventlog_metadata) - (section lib) - (package ocaml)) + (files + eventlog_metadata + ) + (section lib) + (package ocaml)) + ; ocamlcp, ocamloptp and ocamlprof are not currently supported. diff --git a/toplevel/native/dune b/toplevel/native/dune index 7da3d8421b6c..40e6dea42d48 100644 --- a/toplevel/native/dune +++ b/toplevel/native/dune @@ -12,31 +12,31 @@ ;* * ;************************************************************************** -;(copy_files# ../*.ml*) -; -;(library -; (name ocamltoplevel_native) -; (wrapped false) -; (modes native) -; (flags (:standard -principal)) -; (libraries ocamlcommon ocamloptcomp dynlink_internal) -; (modules :standard \ topstart expunge)) -; -;(executable -; (name topstart) -; (modes native) -; (flags (:standard -principal)) -; (modules topstart) -; (libraries ocamltoplevel_native)) -; -;(install -; (files -; (topstart.exe as ocamlnat) -; ) -; (section bin) -; (package ocaml)) -; -; +; (copy_files# ../*.ml*) +; +; (library +; (name ocamltoplevel_native) +; (wrapped false) +; (modes native) +; (flags (:standard -principal)) +; (libraries ocamlcommon ocamloptcomp dynlink_internal) +; (modules :standard \ topstart expunge)) +; +; (executable +; (name topstart) +; (modes native) +; (flags (:standard -principal)) +; (modules topstart) +; (libraries ocamltoplevel_native)) +; +; (install +; (files +; (topstart.exe as ocamlnat) +; ) +; (section bin) +; (package ocaml)) +; +; ; (install ; (files ; (ocamltoplevel.cma as compiler-libs/ocamltoplevel.cma) @@ -63,4 +63,4 @@ ; ) ; (section lib) ; (package ocaml)) -; +; From 72a7658a4b6bbe15a35d33bc228bad2298affff7 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Tue, 1 Nov 2022 10:50:24 +0000 Subject: [PATCH 25/39] flambda-backend: Remove reformatting changes only in dynlink/dune (preserving PR889 and adjusting to minimise diff) --- otherlibs/dynlink/dune | 571 +++++++++++++++++------------------------ 1 file changed, 231 insertions(+), 340 deletions(-) diff --git a/otherlibs/dynlink/dune b/otherlibs/dynlink/dune index 80c04b68a097..a112821c40d6 100644 --- a/otherlibs/dynlink/dune +++ b/otherlibs/dynlink/dune @@ -13,85 +13,77 @@ ;************************************************************************** (library - (name dynlink_compilerlibs) - (wrapped true) - (modes byte native) - (flags - (-strict-sequence - -principal - -absname - -w - +a-4-9-40-41-42-44-45-48-69-70 - -warn-error - A - -bin-annot - -safe-string - -strict-formats)) - (ocamlopt_flags - (:include %{project_root}/ocamlopt_flags.sexp)) - (modules - binutils - local_store - config - build_path_prefix_map - misc - identifiable - numbers - arg_helper - clflags - profile - consistbl - terminfo - warnings - load_path - int_replace_polymorphic_compare - location - longident - docstrings - syntaxerr - ast_helper - ast_mapper - attr_helper - builtin_attributes - ident - path - primitive - type_immediacy - shape - types - btype - lazy_backtrack - subst - predef - datarepr - cmi_format - persistent_env - env - debuginfo - lambda - runtimedef - instruct - opcodes - bytesections - dll - meta - symtable - asttypes - parsetree - outcometree - cmo_format - cmxs_format - debug_event - compilation_unit - symbol - linkage_name) - (modules_without_implementation - asttypes - parsetree - outcometree - cmo_format - cmxs_format - debug_event)) + (name dynlink_compilerlibs) + (wrapped true) + (modes byte native) + (flags ( + -strict-sequence -principal -absname -w +a-4-9-40-41-42-44-45-48 + -warn-error A -bin-annot -safe-string -strict-formats + )) + (ocamlopt_flags (:include %{project_root}/ocamlopt_flags.sexp)) + (modules + binutils + local_store + config + build_path_prefix_map + misc + identifiable + numbers + arg_helper + clflags + profile + consistbl + terminfo + warnings + load_path + int_replace_polymorphic_compare + location + longident + docstrings + syntaxerr + ast_helper + ast_mapper + attr_helper + builtin_attributes + ident + path + primitive + type_immediacy + shape + types + btype + lazy_backtrack + subst + predef + datarepr + cmi_format + persistent_env + env + debuginfo + lambda + runtimedef + instruct + opcodes + bytesections + dll + meta + symtable + asttypes + parsetree + outcometree + cmo_format + cmxs_format + debug_event + compilation_unit + symbol + linkage_name) + (modules_without_implementation + asttypes + parsetree + outcometree + cmo_format + cmxs_format + debug_event)) ;(install ; (files @@ -103,215 +95,113 @@ ; (package ocaml)) ;; .ml: - (copy_files ../../utils/binutils.ml) - (copy_files ../../utils/local_store.ml) - (copy_files ../../utils/config.ml) - (copy_files ../../utils/build_path_prefix_map.ml) - (copy_files ../../utils/misc.ml) - (copy_files ../../utils/identifiable.ml) - (copy_files ../../utils/numbers.ml) - (copy_files ../../utils/arg_helper.ml) - (copy_files ../../utils/clflags.ml) - (copy_files ../../utils/profile.ml) - (copy_files ../../utils/consistbl.ml) - (copy_files ../../utils/terminfo.ml) - (copy_files ../../utils/warnings.ml) - (copy_files ../../utils/load_path.ml) - (copy_files ../../utils/int_replace_polymorphic_compare.ml) - (copy_files ../../utils/compilation_unit.ml) - (copy_files ../../utils/symbol.ml) - (copy_files ../../utils/linkage_name.ml) - +(copy_files ../../utils/lazy_backtrack.ml) (copy_files ../../parsing/location.ml) - (copy_files ../../parsing/longident.ml) - (copy_files ../../parsing/docstrings.ml) - (copy_files ../../parsing/syntaxerr.ml) - (copy_files ../../parsing/ast_helper.ml) - (copy_files ../../parsing/ast_mapper.ml) - (copy_files ../../parsing/attr_helper.ml) - (copy_files ../../parsing/builtin_attributes.ml) - (copy_files ../../typing/ident.ml) - (copy_files ../../typing/path.ml) - (copy_files ../../typing/primitive.ml) - (copy_files ../../typing/type_immediacy.ml) - (copy_files ../../typing/shape.ml) - (copy_files ../../typing/types.ml) - (copy_files ../../typing/btype.ml) - (copy_files ../../typing/subst.ml) - (copy_files ../../typing/predef.ml) - (copy_files ../../typing/datarepr.ml) - (copy_files ../../file_formats/cmi_format.ml) - (copy_files ../../typing/persistent_env.ml) - (copy_files ../../typing/env.ml) - (copy_files ../../lambda/debuginfo.ml) - (copy_files ../../lambda/lambda.ml) - (copy_files ../../lambda/runtimedef.ml) - (copy_files ../../bytecomp/instruct.ml) - (copy_files ../../bytecomp/opcodes.ml) - (copy_files ../../bytecomp/bytesections.ml) - (copy_files ../../bytecomp/dll.ml) - (copy_files ../../bytecomp/meta.ml) - (copy_files ../../bytecomp/symtable.ml) ;; .mli: - (copy_files ../../utils/binutils.mli) - (copy_files ../../utils/local_store.mli) - (copy_files ../../utils/config.mli) - (copy_files ../../utils/build_path_prefix_map.mli) - (copy_files ../../utils/misc.mli) - (copy_files ../../utils/identifiable.mli) - (copy_files ../../utils/numbers.mli) - (copy_files ../../utils/arg_helper.mli) - (copy_files ../../utils/clflags.mli) - (copy_files ../../utils/profile.mli) - (copy_files ../../utils/consistbl.mli) - (copy_files ../../utils/terminfo.mli) - (copy_files ../../utils/warnings.mli) - (copy_files ../../utils/load_path.mli) - (copy_files ../../utils/int_replace_polymorphic_compare.mli) - (copy_files ../../utils/compilation_unit.mli) - (copy_files ../../utils/symbol.mli) - (copy_files ../../utils/linkage_name.mli) - -(copy_files ../../utils/lazy_backtrack.ml) - +(copy_files ../../utils/lazy_backtrack.mli) (copy_files ../../parsing/location.mli) - (copy_files ../../parsing/longident.mli) - (copy_files ../../parsing/docstrings.mli) - (copy_files ../../parsing/syntaxerr.mli) - (copy_files ../../parsing/ast_helper.mli) - (copy_files ../../parsing/ast_mapper.mli) - (copy_files ../../parsing/attr_helper.mli) - (copy_files ../../parsing/builtin_attributes.mli) - (copy_files ../../typing/ident.mli) - (copy_files ../../typing/path.mli) - (copy_files ../../typing/primitive.mli) - (copy_files ../../typing/type_immediacy.mli) - (copy_files ../../typing/shape.mli) - (copy_files ../../typing/types.mli) - (copy_files ../../typing/btype.mli) - (copy_files ../../typing/subst.mli) - (copy_files ../../typing/predef.mli) - (copy_files ../../typing/datarepr.mli) - (copy_files ../../file_formats/cmi_format.mli) - (copy_files ../../typing/persistent_env.mli) - (copy_files ../../typing/env.mli) - (copy_files ../../lambda/debuginfo.mli) - (copy_files ../../lambda/lambda.mli) - (copy_files ../../lambda/runtimedef.mli) - (copy_files ../../bytecomp/instruct.mli) - (copy_files ../../bytecomp/opcodes.mli) - (copy_files ../../bytecomp/bytesections.mli) - (copy_files ../../bytecomp/dll.mli) - (copy_files ../../bytecomp/meta.mli) - (copy_files ../../bytecomp/symtable.mli) - (copy_files ../../bytecomp/debug_event.mli) ; .mli-only: - (copy_files ../../parsing/asttypes.mli) - (copy_files ../../parsing/parsetree.mli) - (copy_files ../../typing/outcometree.mli) - (copy_files ../../file_formats/cmo_format.mli) - (copy_files ../../file_formats/cmxs_format.mli) ; We need support in dune for including all modules from another library @@ -321,177 +211,178 @@ ; at the moment, apparently Buenzli is working on this). ; We use a workaround for the moment. -; CR-someday lmaurer: This is a serious maintenance burden. *Surely* this -; list can be generated automatically and added to the dynlink.cma rule -; by a %{read} expression. - ; Deps within the compiler tree must be on dynlink_internal not dynlink. - (library - (name dynlink_internal) - (wrapped false) - (modes byte native) - (modules dynlink dynlink_common dynlink_types dynlink_platform_intf) - (libraries dynlink_compilerlibs)) + (name dynlink_internal) + (wrapped false) + (modes byte native) + (modules dynlink dynlink_common dynlink_types dynlink_platform_intf) + (libraries dynlink_compilerlibs)) ; The non-installed version of dynlink.cmi is needed to build other parts ; of the tree. - (rule - (targets dynlink.cmi) - (deps .dynlink_internal.objs/byte/dynlink.cmi) - (action - (copy %{deps} %{targets}))) + (targets dynlink.cmi) + (deps .dynlink_internal.objs/byte/dynlink.cmi) + (action (copy %{deps} %{targets}))) (rule - (targets dynlink.cma) - (deps - ; Note: Be sure to keep these arguments in dependency order! - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Binutils.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Local_store.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Build_path_prefix_map.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Config.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Misc.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Warnings.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Arg_helper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Identifiable.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Numbers.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Profile.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Clflags.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Terminfo.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Location.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ident.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Longident.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Compilation_unit.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Linkage_name.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symbol.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Path.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Types.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Syntaxerr.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Bytesections.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Cmi_format.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Debuginfo.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Btype.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Consistbl.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Shape.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Datarepr.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Load_path.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Lazy_backtrack.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Persistent_env.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Docstrings.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_helper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Builtin_attributes.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Type_immediacy.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Attr_helper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Primitive.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Predef.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_mapper.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Subst.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Env.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Lambda.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Dll.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Instruct.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Meta.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Runtimedef.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symtable.cmo - .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Opcodes.cmo - .dynlink_internal.objs/byte/dynlink_types.cmo - .dynlink_internal.objs/byte/dynlink_platform_intf.cmo - .dynlink_internal.objs/byte/dynlink_common.cmo - .dynlink_internal.objs/byte/dynlink.cmo) - (action - (run %{ocamlc} -g -a -ccopt %{read:natdynlinkops} -o dynlink.cma %{deps}))) + (targets dynlink.cma) + (action + (run %{ocamlc} + -g -a + -ccopt %{read:natdynlinkops} + -o dynlink.cma + %{deps})) + (deps + ; NOTE: Be sure to keep these arguments in dependency order! + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Binutils.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Local_store.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Build_path_prefix_map.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Config.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Misc.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Warnings.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Arg_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Identifiable.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Numbers.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Profile.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Clflags.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Terminfo.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Location.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ident.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Longident.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Compilation_unit.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Linkage_name.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symbol.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Path.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Types.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Syntaxerr.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Bytesections.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Cmi_format.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Debuginfo.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Btype.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Consistbl.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Shape.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Datarepr.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Load_path.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Lazy_backtrack.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Persistent_env.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Docstrings.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Builtin_attributes.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Type_immediacy.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Attr_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Primitive.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Predef.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_mapper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Subst.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Env.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Lambda.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Dll.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Instruct.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Meta.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Runtimedef.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Symtable.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Opcodes.cmo + .dynlink_internal.objs/byte/dynlink_types.cmo + .dynlink_internal.objs/byte/dynlink_platform_intf.cmo + .dynlink_internal.objs/byte/dynlink_common.cmo + .dynlink_internal.objs/byte/dynlink.cmo + ) +) (rule - (targets dynlink.cmxa dynlink.a) - (deps dynlink_internal.cmxa) - (action - (run - %{ocamlopt} - -g - -a - -ccopt - %{read:natdynlinkops} - -o - dynlink.cmxa - ; NOTE: Be sure to keep these arguments in dependency order! - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Binutils.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Local_store.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Build_path_prefix_map.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Config.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Misc.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Warnings.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Arg_helper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Identifiable.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Numbers.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Profile.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Clflags.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Terminfo.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Location.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ident.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Longident.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Builtin_attributes.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Type_immediacy.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Path.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Attr_helper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Primitive.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Types.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Syntaxerr.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Bytesections.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Cmi_format.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Debuginfo.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Btype.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Consistbl.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Shape.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Datarepr.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Load_path.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Lazy_backtrack.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Persistent_env.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Docstrings.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_helper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Predef.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_mapper.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Subst.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Env.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Lambda.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Dll.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Instruct.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Meta.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Runtimedef.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symtable.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Opcodes.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Compilation_unit.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Linkage_name.cmx - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symbol.cmx - .dynlink_internal.objs/native/dynlink_types.cmx - .dynlink_internal.objs/native/dynlink_platform_intf.cmx - .dynlink_internal.objs/native/dynlink_common.cmx - .dynlink_internal.objs/native/dynlink.cmx))) + (targets dynlink.cmxa dynlink.a) + (action + (run %{ocamlopt} + -g -a + -ccopt %{read:natdynlinkops} + -o dynlink.cmxa + %{deps})) + (deps + ; NOTE: Be sure to keep these arguments in dependency order! + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Int_replace_polymorphic_compare.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Binutils.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Local_store.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Build_path_prefix_map.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Config.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Misc.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Warnings.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Arg_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Identifiable.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Numbers.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Profile.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Clflags.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Terminfo.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Location.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ident.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Longident.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Compilation_unit.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Linkage_name.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symbol.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Path.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Types.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Syntaxerr.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Bytesections.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Cmi_format.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Debuginfo.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Btype.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Consistbl.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Shape.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Datarepr.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Load_path.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Lazy_backtrack.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Persistent_env.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Docstrings.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Builtin_attributes.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Type_immediacy.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Attr_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Primitive.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Predef.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_mapper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Subst.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Env.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Lambda.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Dll.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Instruct.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Meta.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Runtimedef.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Symtable.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Opcodes.cmx + .dynlink_internal.objs/native/dynlink_types.cmx + .dynlink_internal.objs/native/dynlink_platform_intf.cmx + .dynlink_internal.objs/native/dynlink_common.cmx + .dynlink_internal.objs/native/dynlink.cmx + ) +) (executable (name extract_crc) (modes byte) - (flags - (:standard -principal)) - (libraries dynlink_internal) + (flags (:standard -principal)) + (libraries + dynlink_internal + ) (modules extract_crc)) (install - (files - .dynlink_internal.objs/native/dynlink_common.cmx - .dynlink_internal.objs/native/dynlink_platform_intf.cmx - .dynlink_internal.objs/native/dynlink_types.cmx - .dynlink_internal.objs/native/dynlink.cmx - dynlink.cma - dynlink.cmxa - dynlink.a - ; dynlink.cmxs - dynlink.mli - dynlink.cmi - (.dynlink_internal.objs/byte/dynlink.cmti as dynlink.cmti) - (extract_crc.bc as extract_crc) - .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Misc.cmx) - (section lib) - (package ocaml)) + (files + .dynlink_internal.objs/native/dynlink_common.cmx + .dynlink_internal.objs/native/dynlink_platform_intf.cmx + .dynlink_internal.objs/native/dynlink_types.cmx + .dynlink_internal.objs/native/dynlink.cmx + dynlink.cma + dynlink.cmxa + dynlink.a +; dynlink.cmxs + dynlink.mli + dynlink.cmi + (.dynlink_internal.objs/byte/dynlink.cmti as dynlink.cmti) + (extract_crc.bc as extract_crc) + + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Misc.cmx + ) + (section lib) + (package ocaml)) From 841687d523ee7eb8e705f36f229bb1b08d262546 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Tue, 1 Nov 2022 12:45:41 +0000 Subject: [PATCH 26/39] flambda-backend: Run make alldepend in ocaml/ (#936) make alldepend --- .depend | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/.depend b/.depend index 3bfb0387d2d8..e70f1dbda747 100644 --- a/.depend +++ b/.depend @@ -1858,6 +1858,7 @@ bytecomp/bytegen.cmo : \ typing/env.cmi \ lambda/debuginfo.cmi \ utils/config.cmi \ + utils/compilation_unit.cmi \ utils/clflags.cmi \ parsing/asttypes.cmi \ bytecomp/bytegen.cmi @@ -1874,6 +1875,7 @@ bytecomp/bytegen.cmx : \ typing/env.cmx \ lambda/debuginfo.cmx \ utils/config.cmx \ + utils/compilation_unit.cmx \ utils/clflags.cmx \ parsing/asttypes.cmi \ bytecomp/bytegen.cmi @@ -2280,6 +2282,7 @@ asmcomp/asmgen.cmx : \ asmcomp/asmgen.cmi : \ lambda/lambda.cmi \ asmcomp/emitaux.cmi \ + utils/compilation_unit.cmi \ asmcomp/cmm.cmi \ middle_end/clambda.cmi \ middle_end/backend_intf.cmi @@ -2317,6 +2320,7 @@ asmcomp/asmlink.cmo : \ utils/misc.cmi \ parsing/location.cmi \ utils/load_path.cmi \ + utils/linkage_name.cmi \ asmcomp/emitaux.cmi \ asmcomp/emit.cmi \ utils/consistbl.cmi \ @@ -2337,6 +2341,7 @@ asmcomp/asmlink.cmx : \ utils/misc.cmx \ parsing/location.cmx \ utils/load_path.cmx \ + utils/linkage_name.cmx \ asmcomp/emitaux.cmx \ asmcomp/emit.cmx \ utils/consistbl.cmx \ @@ -2352,6 +2357,8 @@ asmcomp/asmlink.cmx : \ asmcomp/asmlink.cmi asmcomp/asmlink.cmi : \ utils/misc.cmi \ + utils/linkage_name.cmi \ + utils/compilation_unit.cmi \ file_formats/cmx_format.cmi asmcomp/asmpackager.cmo : \ typing/typemod.cmi \ @@ -2407,6 +2414,7 @@ asmcomp/asmpackager.cmx : \ asmcomp/asmpackager.cmi asmcomp/asmpackager.cmi : \ typing/env.cmi \ + utils/compilation_unit.cmi \ middle_end/backend_intf.cmi asmcomp/branch_relaxation.cmo : \ utils/misc.cmi \ @@ -3248,6 +3256,7 @@ middle_end/compilenv.cmi : \ utils/symbol.cmi \ middle_end/flambda/simple_value_approx.cmi \ middle_end/flambda/base_types/set_of_closures_id.cmi \ + utils/linkage_name.cmi \ lambda/lambda.cmi \ typing/ident.cmi \ middle_end/flambda/export_info.cmi \ @@ -3256,12 +3265,14 @@ middle_end/compilenv.cmi : \ middle_end/clambda.cmi middle_end/convert_primitives.cmo : \ lambda/printlambda.cmi \ + typing/primitive.cmi \ utils/misc.cmi \ lambda/lambda.cmi \ middle_end/clambda_primitives.cmi \ middle_end/convert_primitives.cmi middle_end/convert_primitives.cmx : \ lambda/printlambda.cmx \ + typing/primitive.cmx \ utils/misc.cmx \ lambda/lambda.cmx \ middle_end/clambda_primitives.cmx \ @@ -3389,6 +3400,7 @@ lambda/lambda.cmo : \ typing/env.cmi \ lambda/debuginfo.cmi \ utils/config.cmi \ + utils/compilation_unit.cmi \ utils/clflags.cmi \ parsing/asttypes.cmi \ lambda/lambda.cmi @@ -3402,6 +3414,7 @@ lambda/lambda.cmx : \ typing/env.cmx \ lambda/debuginfo.cmx \ utils/config.cmx \ + utils/compilation_unit.cmx \ utils/clflags.cmx \ parsing/asttypes.cmi \ lambda/lambda.cmi @@ -3412,6 +3425,7 @@ lambda/lambda.cmi : \ typing/ident.cmi \ typing/env.cmi \ lambda/debuginfo.cmi \ + utils/compilation_unit.cmi \ parsing/asttypes.cmi lambda/matching.cmo : \ typing/types.cmi \ @@ -3471,6 +3485,7 @@ lambda/printlambda.cmo : \ lambda/lambda.cmi \ typing/ident.cmi \ lambda/debuginfo.cmi \ + utils/compilation_unit.cmi \ utils/clflags.cmi \ parsing/asttypes.cmi \ lambda/printlambda.cmi @@ -3482,6 +3497,7 @@ lambda/printlambda.cmx : \ lambda/lambda.cmx \ typing/ident.cmx \ lambda/debuginfo.cmx \ + utils/compilation_unit.cmx \ utils/clflags.cmx \ parsing/asttypes.cmi \ lambda/printlambda.cmi @@ -3700,6 +3716,7 @@ lambda/translmod.cmo : \ typing/env.cmi \ lambda/debuginfo.cmi \ typing/ctype.cmi \ + utils/compilation_unit.cmi \ utils/clflags.cmi \ parsing/asttypes.cmi \ lambda/translmod.cmi @@ -3722,6 +3739,7 @@ lambda/translmod.cmx : \ typing/env.cmx \ lambda/debuginfo.cmx \ typing/ctype.cmx \ + utils/compilation_unit.cmx \ utils/clflags.cmx \ parsing/asttypes.cmi \ lambda/translmod.cmi @@ -3758,7 +3776,8 @@ lambda/translobj.cmx : \ lambda/translobj.cmi : \ lambda/lambda.cmi \ typing/ident.cmi \ - typing/env.cmi + typing/env.cmi \ + utils/compilation_unit.cmi lambda/translprim.cmo : \ typing/types.cmi \ typing/typeopt.cmi \ @@ -3946,7 +3965,6 @@ middle_end/closure/closure_middle_end.cmo : \ typing/path.cmi \ utils/linkage_name.cmi \ lambda/lambda.cmi \ - typing/ident.cmi \ middle_end/compilenv.cmi \ utils/compilation_unit.cmi \ middle_end/closure/closure.cmi \ @@ -3959,7 +3977,6 @@ middle_end/closure/closure_middle_end.cmx : \ typing/path.cmx \ utils/linkage_name.cmx \ lambda/lambda.cmx \ - typing/ident.cmx \ middle_end/compilenv.cmx \ utils/compilation_unit.cmx \ middle_end/closure/closure.cmx \ @@ -4618,6 +4635,7 @@ middle_end/flambda/flambda_to_clambda.cmi : \ middle_end/flambda/flambda_utils.cmo : \ middle_end/variable.cmi \ middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/symbol_utils.cmi \ utils/symbol.cmi \ lambda/switch.cmi \ middle_end/flambda/base_types/static_exception.cmi \ @@ -4643,6 +4661,7 @@ middle_end/flambda/flambda_utils.cmo : \ middle_end/flambda/flambda_utils.cmx : \ middle_end/variable.cmx \ middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/symbol_utils.cmx \ utils/symbol.cmx \ lambda/switch.cmx \ middle_end/flambda/base_types/static_exception.cmx \ @@ -6354,6 +6373,7 @@ toplevel/opttoploop.cmo : \ parsing/longident.cmi \ parsing/location.cmi \ utils/load_path.cmi \ + utils/linkage_name.cmi \ parsing/lexer.cmi \ lambda/lambda.cmi \ typing/includemod.cmi \ @@ -6402,6 +6422,7 @@ toplevel/opttoploop.cmx : \ parsing/longident.cmx \ parsing/location.cmx \ utils/load_path.cmx \ + utils/linkage_name.cmx \ parsing/lexer.cmx \ lambda/lambda.cmx \ typing/includemod.cmx \ From 9745cdb28a82e244479a39fd9b362127deac6d1a Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Thu, 3 Nov 2022 19:18:20 +0000 Subject: [PATCH 27/39] flambda-backend: Print -dprofile/-dtimings output to stdout like 4.12 (#943) --- driver/compile_common.ml | 4 ++-- driver/compmisc.ml | 9 +++++++-- driver/compmisc.mli | 3 ++- driver/maindriver.ml | 2 +- driver/optmaindriver.ml | 2 +- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/driver/compile_common.ml b/driver/compile_common.ml index ed327b508b3e..b2615c132ead 100644 --- a/driver/compile_common.ml +++ b/driver/compile_common.ml @@ -36,7 +36,7 @@ let with_info ~native ~tool_name ~source_file ~output_prefix ~dump_ext k = Env.set_unit_name module_name; let env = Compmisc.initial_env() in let dump_file = String.concat "." [output_prefix; dump_ext] in - Compmisc.with_ppf_dump ~file_prefix:dump_file @@ fun ppf_dump -> + Compmisc.with_ppf_dump ~file_prefix:dump_file (fun ppf_dump -> k { module_name; output_prefix; @@ -45,7 +45,7 @@ let with_info ~native ~tool_name ~source_file ~output_prefix ~dump_ext k = ppf_dump; tool_name; native; - } + }) (** Compile a .mli file *) diff --git a/driver/compmisc.ml b/driver/compmisc.ml index 830fb7c59c59..e62effaaa531 100644 --- a/driver/compmisc.ml +++ b/driver/compmisc.ml @@ -83,7 +83,7 @@ let rec make_directory dir = Sys.mkdir dir 0o777 end -let with_ppf_dump ~file_prefix f = +let with_ppf_dump ?stdout ~file_prefix f = let with_ch ch = let ppf = Format.formatter_of_out_channel ch in ppf, @@ -93,7 +93,12 @@ let with_ppf_dump ~file_prefix f = in let ppf_dump, finally = match !Clflags.dump_dir, !Clflags.dump_into_file with - | None, false -> Format.err_formatter, ignore + | None, false -> + let formatter = + if Option.is_some stdout then Format.std_formatter + else Format.err_formatter + in + formatter, ignore | None, true -> with_ch (open_out (file_prefix ^ ".dump")) | Some d, _ -> let () = make_directory Filename.(dirname @@ concat d @@ file_prefix) in diff --git a/driver/compmisc.mli b/driver/compmisc.mli index bb4c292b4f1e..04c67b11a4a4 100644 --- a/driver/compmisc.mli +++ b/driver/compmisc.mli @@ -20,4 +20,5 @@ val initial_env : unit -> Env.t val set_from_env : 'a option ref -> 'a Clflags.env_reader -> unit val read_clflags_from_env : unit -> unit -val with_ppf_dump : file_prefix:string -> (Format.formatter -> 'a) -> 'a +val with_ppf_dump : ?stdout:unit -> + file_prefix:string -> (Format.formatter -> 'a) -> 'a diff --git a/driver/maindriver.ml b/driver/maindriver.ml index a6cf1a7b1bdb..b89b01c11c8b 100644 --- a/driver/maindriver.ml +++ b/driver/maindriver.ml @@ -111,6 +111,6 @@ let main argv ppf = Location.report_exception ppf x; 2 | () -> - Compmisc.with_ppf_dump ~file_prefix:"profile" + Compmisc.with_ppf_dump ~stdout:() ~file_prefix:"profile" (fun ppf -> Profile.print ppf !Clflags.profile_columns ~timings_precision:!Clflags.timings_precision); 0 diff --git a/driver/optmaindriver.ml b/driver/optmaindriver.ml index c990b2c8fab2..9cf2e4a77785 100644 --- a/driver/optmaindriver.ml +++ b/driver/optmaindriver.ml @@ -137,6 +137,6 @@ let main argv ppf = Location.report_exception ppf x; 2 | () -> - Compmisc.with_ppf_dump ~file_prefix:"profile" + Compmisc.with_ppf_dump ~stdout:() ~file_prefix:"profile" (fun ppf -> Profile.print ppf !Clflags.profile_columns ~timings_precision:!Clflags.timings_precision); 0 From fdb79872c66505f368c3920ed07d251bf126addd Mon Sep 17 00:00:00 2001 From: Chris Casinghino Date: Fri, 11 Nov 2022 11:00:03 +0000 Subject: [PATCH 28/39] flambda-backend: Fix include functor issue after 4.14 merge. (#948) --- .../tests/typing-modules/include_functor.ml | 22 ++++++++++++++ typing/typemod.ml | 30 +++++++++++-------- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/testsuite/tests/typing-modules/include_functor.ml b/testsuite/tests/typing-modules/include_functor.ml index 1a0f11405456..49f66ef3a7c2 100644 --- a/testsuite/tests/typing-modules/include_functor.ml +++ b/testsuite/tests/typing-modules/include_functor.ml @@ -675,3 +675,25 @@ Line 20, characters 16-17: Error: This expression has type int but an expression was expected of type string |}];; + +(* Test 21: Check that scraping of result type happens in environment expanded + with parameter type. *) +module M21 = struct + module F (_ : sig end) = struct + module type S = sig end + end + + module P = struct + module Make (M : sig end) : F(M).S = struct end + end + + include functor P.Make +end;; +[%%expect{| +module M21 : + sig + module F : sig end -> sig module type S = sig end end + module P : sig module Make : functor (M : sig end) -> F(M).S end + end +|}];; + diff --git a/typing/typemod.ml b/typing/typemod.ml index 2684f80d33d5..1754dbaedec2 100644 --- a/typing/typemod.ml +++ b/typing/typemod.ml @@ -131,38 +131,42 @@ let extract_sig_functor_open funct_body env loc mty sig_acc = with Includemod.Error msg -> raise (Error(loc, env, Not_included_functor msg)) in + (* We must scrape the result type in an environment expanded with the + parameter type (to avoid `Not_found` exceptions when it is referenced). + Because we don't have an actual parameter, we create definitions for + the parameter's types with [sig_make_manifest]. References to this + fake parameter are eliminated later. *) + let extended_env = + match param with + | None -> env + | Some id -> + let sg_param = Mtype.sig_make_manifest sig_acc in + Env.add_module ~arg:true id Mp_present (Mty_signature sg_param) env + in let incl_kind, sg_result = (* Accept functor types of the forms: sig..end -> sig..end and sig..end -> () -> sig..end *) - match Mtype.scrape env mty_result with + match Mtype.scrape extended_env mty_result with | Mty_signature sg_result -> Tincl_functor coercion, sg_result | Mty_functor (Unit,_) when funct_body && Mtype.contains_type env mty -> raise (Error (loc, env, Not_includable_in_functor_body)) | Mty_functor (Unit,mty_result) -> begin - match Mtype.scrape env mty_result with + match Mtype.scrape extended_env mty_result with | Mty_signature sg_result -> Tincl_gen_functor coercion, sg_result | sg -> raise (Error (loc,env,Signature_result_expected (Mty_functor (Unit,sg)))) end | sg -> raise (Error (loc,env,Signature_result_expected sg)) in - (* Like the [Pmod_apply] case, we want to use [nondep_supertype] to - eliminate references to the functor's parameter in its result type. - Unlike that case, we don't have an actual parameter, just the previous - contents of the module currently being checked. So we create - definitions for the parameter's types with [sig_make_manifest] before - the call to [nondep_sig]. *) + (* Here we eliminate references to the non-existent parameter module using + [nondep_sig]. *) let sg = match param with | None -> sg_result | Some id -> - let sg_param = Mtype.sig_make_manifest sig_acc in - let env = - Env.add_module ~arg:true id Mp_present (Mty_signature sg_param) env - in - try Mtype.nondep_sig env [id] sg_result + try Mtype.nondep_sig extended_env [id] sg_result with Ctype.Nondep_cannot_erase _ -> raise(Error(loc, env, Cannot_eliminate_dependency (Functor_included, mty_func))) From 8fb75bd345549597903eeb38e90db6aae7b6afed Mon Sep 17 00:00:00 2001 From: Stephen Dolan Date: Fri, 18 Nov 2022 10:43:30 +0000 Subject: [PATCH 29/39] flambda-backend: Port ocaml/ocaml#11727 and ocaml/ocaml#11732 (#965) --- lambda/translcore.ml | 2 + testsuite/tests/basic-more/pr10338.ml | 5 +++ .../typing-modules/packed_module_levels.ml | 42 +++++++++++++++++++ typing/typemod.ml | 4 +- 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 testsuite/tests/typing-modules/packed_module_levels.ml diff --git a/lambda/translcore.ml b/lambda/translcore.ml index 1015891d4a47..7866a2615113 100644 --- a/lambda/translcore.ml +++ b/lambda/translcore.ml @@ -183,6 +183,8 @@ let rec trivial_pat pat = match pat.pat_desc with Tpat_var _ | Tpat_any -> true + | Tpat_alias (p, _, _) -> + trivial_pat p | Tpat_construct (_, cd, [], _) -> not cd.cstr_generalized && cd.cstr_consts = 1 && cd.cstr_nonconsts = 0 | Tpat_tuple patl -> diff --git a/testsuite/tests/basic-more/pr10338.ml b/testsuite/tests/basic-more/pr10338.ml index 9eeb4d3da4e4..7697f377f805 100644 --- a/testsuite/tests/basic-more/pr10338.ml +++ b/testsuite/tests/basic-more/pr10338.ml @@ -19,3 +19,8 @@ let f ?(y=1) : empty -> int = function _ -> .;; module type E = sig exception Ex end;; let f ((module M) : (module E)) (M.Ex | _) = "42";; print_endline (f (module struct exception Ex end) Exit);; + +(* push_defaults should push past the module pattern *) +let f ?(x = assert false) ((module M) : (module E)) () = 1;; +(* so partial application of the module doesn't raise *) +let partial = f (module struct exception Ex end);; diff --git a/testsuite/tests/typing-modules/packed_module_levels.ml b/testsuite/tests/typing-modules/packed_module_levels.ml new file mode 100644 index 000000000000..a4883d00deb5 --- /dev/null +++ b/testsuite/tests/typing-modules/packed_module_levels.ml @@ -0,0 +1,42 @@ +(* TEST + * expect +*) +type (_, _) equ = Refl : ('q, 'q) equ + +module type Ty = sig type t end +type 'a modu = (module Ty with type t = 'a) + +type 'q1 packed = + P : 'q0 modu * ('q0, 'q1) equ -> 'q1 packed + +(* Adds a module M to the environment where M.t equals an existential *) +let repack (type q) (x : q packed) : q modu = + match x with + | P (p, eq) -> + let module M = (val p) in + let Refl = eq in + (module M) + +[%%expect{| +type (_, _) equ = Refl : ('q, 'q) equ +module type Ty = sig type t end +type 'a modu = (module Ty with type t = 'a) +type 'q1 packed = P : 'q0 modu * ('q0, 'q1) equ -> 'q1 packed +val repack : 'q packed -> 'q modu = +|}] + +(* Same, using a polymorphic function rather than an existential *) + +let mkmod (type a) () : a modu = + (module struct type t = a end) + +let f (type foo) (intish : (foo, int) equ) = + let module M = (val (mkmod () : foo modu)) in + let Refl = intish in + let module C : sig type t = int end = M in + () + +[%%expect{| +val mkmod : unit -> 'a modu = +val f : ('foo, int) equ -> unit = +|}] diff --git a/typing/typemod.ml b/typing/typemod.ml index 1754dbaedec2..f8d8ec9aeec9 100644 --- a/typing/typemod.ml +++ b/typing/typemod.ml @@ -2141,8 +2141,10 @@ and package_constraints env loc mty constrs = end let modtype_of_package env loc p fl = + (* We call Ctype.correct_levels to ensure that the types being added to the + module type are at generic_level. *) package_constraints env loc (Mty_ident p) - (List.map (fun (n, t) -> (Longident.flatten n, t)) fl) + (List.map (fun (n, t) -> Longident.flatten n, Ctype.correct_levels t) fl) let package_subtype env p1 fl1 p2 fl2 = let mkmty p fl = From 7c7d75a6b1432a9c506491d9c5746fc450d7fee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathana=C3=ABlle=20Courant?= Date: Tue, 22 Nov 2022 15:13:23 +0100 Subject: [PATCH 30/39] flambda-backend: Fix split_default_wrapper which did not trigger anymore with flambda2 (#970) --- lambda/simplif.ml | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/lambda/simplif.ml b/lambda/simplif.ml index 1abb1d6ab3c9..b6a80fecc525 100644 --- a/lambda/simplif.ml +++ b/lambda/simplif.ml @@ -740,22 +740,7 @@ let split_default_wrapper ~id:fun_id ~kind ~params ~return ~body | Llet(Strict, k, id, (Lifthenelse(Lprim (Pisint _, [Lvar optparam], _), _, _, _) as def), rest) when - (not (Clflags.is_flambda2 ())) - && Ident.name optparam = "*opt*" && List.mem_assoc optparam params - && not (List.mem_assoc optparam map) - -> - let wrapper_body, inner = aux ((optparam, id) :: map) add_region rest in - Llet(Strict, k, id, def, wrapper_body), inner - | Llet(Strict, k, id, - (Lswitch(Lvar optparam, - {sw_numconsts = 1; - sw_consts = [_]; - sw_numblocks = 1; - sw_blocks = [_]; - sw_failaction = None}, _dbg, _) - as def), rest) when - Clflags.is_flambda2 () - && Ident.name optparam = "*opt*" && List.mem_assoc optparam params + Ident.name optparam = "*opt*" && List.mem_assoc optparam params && not (List.mem_assoc optparam map) -> let wrapper_body, inner = aux ((optparam, id) :: map) add_region rest in From b73ab126cf648f100928f2c17267b666a8d4f810 Mon Sep 17 00:00:00 2001 From: Luke Maurer Date: Thu, 24 Nov 2022 11:41:39 +0000 Subject: [PATCH 31/39] flambda-backend: Fix invocation of `caml_shared_startup` in native dynlink (#980) --- otherlibs/dynlink/dynlink.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/otherlibs/dynlink/dynlink.ml b/otherlibs/dynlink/dynlink.ml index 78e27b7e4f5e..bad7b68eda25 100644 --- a/otherlibs/dynlink/dynlink.ml +++ b/otherlibs/dynlink/dynlink.ml @@ -279,7 +279,7 @@ module Native = struct (Printexc.get_raw_backtrace ()) let run_shared_startup handle ~filename ~priv = - ndl_run handle "_shared_startup" ~filename ~priv + ndl_run handle "caml_shared_startup" ~filename ~priv let run handle ~filename ~unit_header ~priv = List.iter (fun cu -> ndl_run handle cu ~filename ~priv) From 396d5b8837a8f0d43bab249b9f56b1e3f419e550 Mon Sep 17 00:00:00 2001 From: Luke Maurer Date: Thu, 24 Nov 2022 17:01:06 +0000 Subject: [PATCH 32/39] flambda-backend: Add a test for frametable setup in natdynlinked libraries (#983) --- testsuite/tests/lib-dynlink-native/main.reference | 3 +++ testsuite/tests/lib-dynlink-native/plugin2.ml | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/testsuite/tests/lib-dynlink-native/main.reference b/testsuite/tests/lib-dynlink-native/main.reference index e9e4ee45dd41..e6d6be749a69 100644 --- a/testsuite/tests/lib-dynlink-native/main.reference +++ b/testsuite/tests/lib-dynlink-native/main.reference @@ -7,6 +7,9 @@ Registering module Plugin2 2 6 1 +Raised by primitive operation at Plugin2.foo in file "plugin2.ml", line 4, characters 38-64 +Called from Plugin2.test_frametable in file "plugin2.ml", line 10, characters 2-72 +Called from Plugin2 in file "plugin2.ml", line 19, characters 2-20 XXX Loading plugin_thread.so Registering module Plugin_thread diff --git a/testsuite/tests/lib-dynlink-native/plugin2.ml b/testsuite/tests/lib-dynlink-native/plugin2.ml index 109c129d1a89..84342bf49d04 100644 --- a/testsuite/tests/lib-dynlink-native/plugin2.ml +++ b/testsuite/tests/lib-dynlink-native/plugin2.ml @@ -1,8 +1,20 @@ (*external ex: int -> int = "caml_ex"*) +let foo a1 a2 a3 a4 a5 a6 a7 a8 a9 = + Printexc.print_raw_backtrace stdout (Printexc.get_callstack 4); + fun a10 a11 a12 a13 a14 a15 a16 a17 a18 -> () + +(* Ensure that the frametable is set up correctly so that a [caml_curry_18] + frame can be traversed *) +let[@inline never] test_frametable () = + (Sys.opaque_identity foo) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; + (* force non-tail call *) + Sys.opaque_identity () + let () = Api.reg_mod "Plugin2"; Api.add_cb (fun () -> print_endline "Callback from plugin2"); (* let i = ex 3 in*) List.iter (fun i -> Printf.printf "%i\n" i) Plugin.facts; + test_frametable (); Printf.printf "XXX\n" From 724fb680744a81ede073a00c1f0569a0fe712e70 Mon Sep 17 00:00:00 2001 From: Luke Maurer Date: Mon, 28 Nov 2022 14:23:08 +0000 Subject: [PATCH 33/39] flambda-backend: Use `Compilation_unit.t` instead of `Ident.t` for globals (#871) --- .depend | 127 ++++++++------ asmcomp/asmgen.ml | 5 +- asmcomp/asmlink.ml | 102 +++++------ asmcomp/asmlink.mli | 10 +- asmcomp/asmpackager.ml | 67 +++---- asmcomp/asmpackager.mli | 2 +- asmcomp/cmm_helpers.ml | 3 +- asmcomp/cmm_helpers.mli | 2 +- boot/ocamlc | Bin 3217810 -> 3231203 bytes boot/ocamllex | Bin 372230 -> 373176 bytes bytecomp/bytegen.ml | 4 +- bytecomp/bytelink.ml | 45 ++--- bytecomp/bytelink.mli | 8 +- bytecomp/bytepackager.ml | 163 ++++++++---------- bytecomp/bytepackager.mli | 2 +- bytecomp/emitcode.ml | 4 +- bytecomp/emitcode.mli | 4 +- bytecomp/symtable.ml | 2 +- bytecomp/symtable.mli | 2 +- compilerlibs/Makefile.compilerlibs | 1 - debugger/.depend | 6 + debugger/eval.ml | 14 +- debugger/loadprinter.ml | 11 +- debugger/printval.ml | 15 +- driver/compile.ml | 3 +- driver/compile.mli | 5 +- driver/compile_common.ml | 11 +- driver/compile_common.mli | 2 +- driver/optcompile.ml | 20 +-- driver/optmaindriver.ml | 3 - file_formats/cmi_format.ml | 12 +- file_formats/cmi_format.mli | 7 +- file_formats/cmo_format.mli | 12 +- file_formats/cmt_format.ml | 12 +- file_formats/cmt_format.mli | 11 +- file_formats/cmx_format.mli | 13 +- file_formats/cmxs_format.mli | 9 +- jst.dune | 2 +- lambda/debuginfo.ml | 4 + lambda/debuginfo.mli | 1 + lambda/lambda.ml | 15 +- lambda/lambda.mli | 9 +- lambda/translcore.ml | 11 +- lambda/translcore.mli | 4 +- lambda/translmod.ml | 107 +++++------- lambda/translmod.mli | 18 +- lambda/translprim.ml | 31 ++-- lambda/translprim.mli | 2 +- middle_end/backend_intf.mli | 4 - middle_end/closure/closure.ml | 24 +-- middle_end/closure/closure_middle_end.ml | 3 +- middle_end/compilenv.ml | 133 +++----------- middle_end/compilenv.mli | 19 +- middle_end/flambda/closure_conversion.ml | 32 +--- middle_end/flambda/closure_conversion.mli | 2 +- middle_end/flambda/export_info_for_pack.mli | 34 ---- middle_end/flambda/flambda_middle_end.ml | 6 +- ocamldoc/.depend | 2 + ocamldoc/odoc_analyse.ml | 20 ++- otherlibs/dynlink/dynlink.ml | 51 ++++-- otherlibs/dynlink/extract_crc.ml | 2 +- .../test10_main.byte.reference | 4 +- .../test10_main.native.reference | 6 +- testsuite/tests/lib-dynlink-native/main.ml | 2 +- testsuite/tests/packs/basic/main.ml | 54 ++++++ testsuite/tests/packs/basic/main.reference | 2 + testsuite/tests/packs/basic/member.ml | 5 + .../inconsistent/main.compilers.reference | 3 + testsuite/tests/packs/inconsistent/main.ml | 30 ++++ testsuite/tests/packs/inconsistent/member.ml | 1 + .../packs/inconsistent/use_member_directly.ml | 1 + .../tests/self-contained-toplevel/main.ml | 2 +- tools/.depend | 2 + tools/objinfo.ml | 42 ++--- tools/ocamlcmt.ml | 11 +- toplevel/byte/topeval.ml | 28 +-- toplevel/expunge.ml | 6 +- toplevel/native/topeval.ml | 45 +++-- toplevel/native/tophooks.ml | 2 - toplevel/topcommon.ml | 6 +- toplevel/topcommon.mli | 2 + toplevel/toploop.ml | 2 +- typing/datarepr.mli | 4 +- typing/env.ml | 122 ++++++++----- typing/env.mli | 36 ++-- typing/persistent_env.ml | 162 +++++++++++------ typing/persistent_env.mli | 44 +++-- typing/printtyp.ml | 44 +++-- typing/printtyp.mli | 2 + typing/shape.ml | 13 +- typing/shape.mli | 5 +- typing/typemod.ml | 22 ++- typing/typemod.mli | 6 +- utils/compilation_unit.ml | 106 ++++++++++-- utils/compilation_unit.mli | 73 ++++++-- utils/consistbl.ml | 31 ++-- utils/consistbl.mli | 30 ++-- utils/misc.ml | 2 - utils/misc.mli | 5 - utils/symbol.ml | 19 +- utils/symbol.mli | 5 +- 101 files changed, 1248 insertions(+), 994 deletions(-) delete mode 100644 middle_end/flambda/export_info_for_pack.mli create mode 100644 testsuite/tests/packs/basic/main.ml create mode 100644 testsuite/tests/packs/basic/main.reference create mode 100644 testsuite/tests/packs/basic/member.ml create mode 100644 testsuite/tests/packs/inconsistent/main.compilers.reference create mode 100644 testsuite/tests/packs/inconsistent/main.ml create mode 100644 testsuite/tests/packs/inconsistent/member.ml create mode 100644 testsuite/tests/packs/inconsistent/use_member_directly.ml diff --git a/.depend b/.depend index b8b4af59d2db..7da87e050484 100644 --- a/.depend +++ b/.depend @@ -68,13 +68,19 @@ utils/config.cmx : \ utils/config.cmi utils/config.cmi : utils/consistbl.cmo : \ + utils/symbol.cmi \ utils/misc.cmi \ + utils/compilation_unit.cmi \ utils/consistbl.cmi utils/consistbl.cmx : \ + utils/symbol.cmx \ utils/misc.cmx \ + utils/compilation_unit.cmx \ utils/consistbl.cmi utils/consistbl.cmi : \ - utils/misc.cmi + utils/symbol.cmi \ + utils/misc.cmi \ + utils/compilation_unit.cmi utils/diffing.cmo : \ utils/misc.cmi \ utils/diffing.cmi @@ -662,7 +668,8 @@ typing/datarepr.cmx : \ typing/datarepr.cmi : \ typing/types.cmi \ typing/path.cmi \ - typing/ident.cmi + typing/ident.cmi \ + utils/compilation_unit.cmi typing/env.cmo : \ utils/warnings.cmi \ typing/types.cmi \ @@ -679,6 +686,7 @@ typing/env.cmo : \ utils/lazy_backtrack.cmi \ typing/ident.cmi \ typing/datarepr.cmi \ + utils/compilation_unit.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ @@ -701,6 +709,7 @@ typing/env.cmx : \ utils/lazy_backtrack.cmx \ typing/ident.cmx \ typing/datarepr.cmx \ + utils/compilation_unit.cmx \ file_formats/cmi_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ @@ -718,6 +727,7 @@ typing/env.cmi : \ parsing/location.cmi \ utils/load_path.cmi \ typing/ident.cmi \ + utils/compilation_unit.cmi \ file_formats/cmi_format.cmi \ parsing/asttypes.cmi typing/envaux.cmo : \ @@ -1069,6 +1079,7 @@ typing/persistent_env.cmo : \ utils/lazy_backtrack.cmi \ utils/consistbl.cmi \ utils/config.cmi \ + utils/compilation_unit.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi \ typing/persistent_env.cmi @@ -1080,6 +1091,7 @@ typing/persistent_env.cmx : \ utils/lazy_backtrack.cmx \ utils/consistbl.cmx \ utils/config.cmx \ + utils/compilation_unit.cmx \ file_formats/cmi_format.cmx \ utils/clflags.cmx \ typing/persistent_env.cmi @@ -1089,6 +1101,7 @@ typing/persistent_env.cmi : \ parsing/location.cmi \ utils/lazy_backtrack.cmi \ utils/consistbl.cmi \ + utils/compilation_unit.cmi \ file_formats/cmi_format.cmi typing/predef.cmo : \ typing/types.cmi \ @@ -1167,6 +1180,7 @@ typing/printtyp.cmo : \ typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ + utils/compilation_unit.cmi \ utils/clflags.cmi \ typing/btype.cmi \ parsing/asttypes.cmi \ @@ -1189,6 +1203,7 @@ typing/printtyp.cmx : \ typing/errortrace.cmx \ typing/env.cmx \ typing/ctype.cmx \ + utils/compilation_unit.cmx \ utils/clflags.cmx \ typing/btype.cmx \ parsing/asttypes.cmi \ @@ -1259,17 +1274,20 @@ typing/shape.cmo : \ utils/misc.cmi \ utils/identifiable.cmi \ typing/ident.cmi \ + utils/compilation_unit.cmi \ typing/shape.cmi typing/shape.cmx : \ typing/path.cmx \ utils/misc.cmx \ utils/identifiable.cmx \ typing/ident.cmx \ + utils/compilation_unit.cmx \ typing/shape.cmi typing/shape.cmi : \ typing/path.cmi \ utils/identifiable.cmi \ - typing/ident.cmi + typing/ident.cmi \ + utils/compilation_unit.cmi typing/signature_group.cmo : \ typing/types.cmi \ typing/ident.cmi \ @@ -1777,6 +1795,7 @@ typing/typemod.cmo : \ typing/env.cmi \ typing/ctype.cmi \ utils/config.cmi \ + utils/compilation_unit.cmi \ file_formats/cmt_format.cmi \ typing/cmt2annot.cmo \ file_formats/cmi_format.cmi \ @@ -1813,6 +1832,7 @@ typing/typemod.cmx : \ typing/env.cmx \ typing/ctype.cmx \ utils/config.cmx \ + utils/compilation_unit.cmx \ file_formats/cmt_format.cmx \ typing/cmt2annot.cmx \ file_formats/cmi_format.cmx \ @@ -1834,6 +1854,7 @@ typing/typemod.cmi : \ typing/includemod.cmi \ typing/ident.cmi \ typing/env.cmi \ + utils/compilation_unit.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi typing/typeopt.cmo : \ @@ -2096,6 +2117,7 @@ bytecomp/bytelink.cmx : \ bytecomp/bytelink.cmi : \ bytecomp/symtable.cmi \ utils/misc.cmi \ + utils/compilation_unit.cmi \ file_formats/cmo_format.cmi bytecomp/bytepackager.cmo : \ typing/typemod.cmi \ @@ -2141,7 +2163,8 @@ bytecomp/bytepackager.cmx : \ bytecomp/bytepackager.cmi bytecomp/bytepackager.cmi : \ typing/ident.cmi \ - typing/env.cmi + typing/env.cmi \ + utils/compilation_unit.cmi bytecomp/bytesections.cmo : \ utils/config.cmi \ bytecomp/bytesections.cmi @@ -2174,7 +2197,6 @@ bytecomp/emitcode.cmo : \ parsing/location.cmi \ lambda/lambda.cmi \ bytecomp/instruct.cmi \ - typing/ident.cmi \ typing/env.cmi \ utils/config.cmi \ utils/compilation_unit.cmi \ @@ -2192,7 +2214,6 @@ bytecomp/emitcode.cmx : \ parsing/location.cmx \ lambda/lambda.cmx \ bytecomp/instruct.cmx \ - typing/ident.cmx \ typing/env.cmx \ utils/config.cmx \ utils/compilation_unit.cmx \ @@ -2205,7 +2226,7 @@ bytecomp/emitcode.cmx : \ bytecomp/emitcode.cmi : \ utils/misc.cmi \ bytecomp/instruct.cmi \ - typing/ident.cmi \ + utils/compilation_unit.cmi \ file_formats/cmo_format.cmi bytecomp/instruct.cmo : \ typing/types.cmi \ @@ -2369,7 +2390,6 @@ asmcomp/asmgen.cmo : \ lambda/lambda.cmi \ asmcomp/interval.cmi \ asmcomp/interf.cmi \ - typing/ident.cmi \ asmcomp/emitaux.cmi \ asmcomp/emit.cmi \ asmcomp/deadcode.cmi \ @@ -2413,7 +2433,6 @@ asmcomp/asmgen.cmx : \ lambda/lambda.cmx \ asmcomp/interval.cmx \ asmcomp/interf.cmx \ - typing/ident.cmx \ asmcomp/emitaux.cmx \ asmcomp/emit.cmx \ asmcomp/deadcode.cmx \ @@ -2472,7 +2491,6 @@ asmcomp/asmlink.cmo : \ utils/misc.cmi \ parsing/location.cmi \ utils/load_path.cmi \ - utils/linkage_name.cmi \ asmcomp/emitaux.cmi \ asmcomp/emit.cmi \ utils/consistbl.cmi \ @@ -2493,7 +2511,6 @@ asmcomp/asmlink.cmx : \ utils/misc.cmx \ parsing/location.cmx \ utils/load_path.cmx \ - utils/linkage_name.cmx \ asmcomp/emitaux.cmx \ asmcomp/emit.cmx \ utils/consistbl.cmx \ @@ -2509,7 +2526,6 @@ asmcomp/asmlink.cmx : \ asmcomp/asmlink.cmi asmcomp/asmlink.cmi : \ utils/misc.cmi \ - utils/linkage_name.cmi \ utils/compilation_unit.cmi \ file_formats/cmx_format.cmi asmcomp/asmpackager.cmo : \ @@ -2523,9 +2539,7 @@ asmcomp/asmpackager.cmo : \ utils/load_path.cmi \ utils/linkage_name.cmi \ lambda/lambda.cmi \ - typing/ident.cmi \ middle_end/flambda/flambda_middle_end.cmi \ - middle_end/flambda/export_info_for_pack.cmi \ middle_end/flambda/export_info.cmi \ typing/env.cmi \ utils/config.cmi \ @@ -2549,9 +2563,7 @@ asmcomp/asmpackager.cmx : \ utils/load_path.cmx \ utils/linkage_name.cmx \ lambda/lambda.cmx \ - typing/ident.cmx \ middle_end/flambda/flambda_middle_end.cmx \ - middle_end/flambda/export_info_for_pack.cmx \ middle_end/flambda/export_info.cmx \ typing/env.cmx \ utils/config.cmx \ @@ -2814,6 +2826,7 @@ asmcomp/emit.cmo : \ asmcomp/x86_ast.cmi \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ + asmcomp/printmach.cmi \ utils/numbers.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ @@ -2822,6 +2835,7 @@ asmcomp/emit.cmo : \ asmcomp/emitenv.cmi \ asmcomp/emitaux.cmi \ utils/domainstate.cmi \ + lambda/debuginfo.cmi \ utils/config.cmi \ asmcomp/cmm_helpers.cmi \ asmcomp/cmm.cmi \ @@ -2837,6 +2851,7 @@ asmcomp/emit.cmx : \ asmcomp/x86_ast.cmi \ asmcomp/reg.cmx \ asmcomp/proc.cmx \ + asmcomp/printmach.cmx \ utils/numbers.cmx \ utils/misc.cmx \ asmcomp/mach.cmx \ @@ -2845,6 +2860,7 @@ asmcomp/emit.cmx : \ asmcomp/emitenv.cmi \ asmcomp/emitaux.cmx \ utils/domainstate.cmx \ + lambda/debuginfo.cmx \ utils/config.cmx \ asmcomp/cmm_helpers.cmx \ asmcomp/cmm.cmx \ @@ -3342,9 +3358,7 @@ asmcomp/x86_proc.cmi : \ asmcomp/x86_ast.cmi middle_end/backend_intf.cmi : \ utils/symbol.cmi \ - middle_end/flambda/simple_value_approx.cmi \ - typing/ident.cmi \ - utils/compilation_unit.cmi + middle_end/flambda/simple_value_approx.cmi middle_end/backend_var.cmo : \ typing/path.cmi \ typing/ident.cmi \ @@ -3440,12 +3454,9 @@ middle_end/compilenv.cmx : \ middle_end/clambda.cmx \ middle_end/compilenv.cmi middle_end/compilenv.cmi : \ - utils/symbol.cmi \ middle_end/flambda/simple_value_approx.cmi \ middle_end/flambda/base_types/set_of_closures_id.cmi \ - utils/linkage_name.cmi \ lambda/lambda.cmi \ - typing/ident.cmi \ middle_end/flambda/export_info.cmi \ utils/compilation_unit.cmi \ file_formats/cmx_format.cmi \ @@ -3565,17 +3576,20 @@ lambda/debuginfo.cmo : \ parsing/location.cmi \ utils/int_replace_polymorphic_compare.cmi \ typing/ident.cmi \ + utils/compilation_unit.cmi \ parsing/asttypes.cmi \ lambda/debuginfo.cmi lambda/debuginfo.cmx : \ parsing/location.cmx \ utils/int_replace_polymorphic_compare.cmx \ typing/ident.cmx \ + utils/compilation_unit.cmx \ parsing/asttypes.cmi \ lambda/debuginfo.cmi lambda/debuginfo.cmi : \ parsing/location.cmi \ typing/ident.cmi \ + utils/compilation_unit.cmi \ parsing/asttypes.cmi lambda/lambda.cmo : \ typing/types.cmi \ @@ -3847,6 +3861,7 @@ lambda/translcore.cmo : \ typing/printtyp.cmi \ typing/primitive.cmi \ typing/predef.cmi \ + parsing/pprintast.cmi \ typing/path.cmi \ parsing/parsetree.cmi \ typing/parmatch.cmi \ @@ -3877,6 +3892,7 @@ lambda/translcore.cmx : \ typing/printtyp.cmx \ typing/primitive.cmx \ typing/predef.cmx \ + parsing/pprintast.cmx \ typing/path.cmx \ parsing/parsetree.cmi \ typing/parmatch.cmx \ @@ -3897,7 +3913,7 @@ lambda/translcore.cmx : \ lambda/translcore.cmi : \ typing/types.cmi \ typing/typedtree.cmi \ - typing/path.cmi \ + parsing/longident.cmi \ parsing/location.cmi \ lambda/lambda.cmi \ typing/ident.cmi \ @@ -3917,6 +3933,7 @@ lambda/translmod.cmo : \ typing/path.cmi \ typing/mtype.cmi \ utils/misc.cmi \ + parsing/longident.cmi \ parsing/location.cmi \ lambda/lambda.cmi \ typing/ident.cmi \ @@ -3940,6 +3957,7 @@ lambda/translmod.cmx : \ typing/path.cmx \ typing/mtype.cmx \ utils/misc.cmx \ + parsing/longident.cmx \ parsing/location.cmx \ lambda/lambda.cmx \ typing/ident.cmx \ @@ -3955,7 +3973,8 @@ lambda/translmod.cmi : \ typing/primitive.cmi \ parsing/location.cmi \ lambda/lambda.cmi \ - typing/ident.cmi + typing/ident.cmi \ + utils/compilation_unit.cmi lambda/translobj.cmo : \ typing/primitive.cmi \ utils/misc.cmi \ @@ -3999,6 +4018,7 @@ lambda/translprim.cmo : \ typing/env.cmi \ lambda/debuginfo.cmi \ utils/config.cmi \ + utils/compilation_unit.cmi \ utils/clflags.cmi \ parsing/asttypes.cmi \ lambda/translprim.cmi @@ -4016,6 +4036,7 @@ lambda/translprim.cmx : \ typing/env.cmx \ lambda/debuginfo.cmx \ utils/config.cmx \ + utils/compilation_unit.cmx \ utils/clflags.cmx \ parsing/asttypes.cmi \ lambda/translprim.cmi @@ -4027,24 +4048,27 @@ lambda/translprim.cmi : \ parsing/location.cmi \ lambda/lambda.cmi \ typing/ident.cmi \ - typing/env.cmi + typing/env.cmi \ + utils/compilation_unit.cmi file_formats/cmi_format.cmo : \ typing/types.cmi \ utils/misc.cmi \ parsing/location.cmi \ utils/config.cmi \ + utils/compilation_unit.cmi \ file_formats/cmi_format.cmi file_formats/cmi_format.cmx : \ typing/types.cmx \ utils/misc.cmx \ parsing/location.cmx \ utils/config.cmx \ + utils/compilation_unit.cmx \ file_formats/cmi_format.cmi file_formats/cmi_format.cmi : \ typing/types.cmi \ - utils/misc.cmi -file_formats/cmo_format.cmi : \ utils/misc.cmi \ + utils/compilation_unit.cmi +file_formats/cmo_format.cmi : \ lambda/lambda.cmi \ typing/ident.cmi \ utils/compilation_unit.cmi @@ -4059,6 +4083,7 @@ file_formats/cmt_format.cmo : \ parsing/lexer.cmi \ typing/env.cmi \ utils/config.cmi \ + utils/compilation_unit.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi \ file_formats/cmt_format.cmi @@ -4073,6 +4098,7 @@ file_formats/cmt_format.cmx : \ parsing/lexer.cmx \ typing/env.cmx \ utils/config.cmx \ + utils/compilation_unit.cmx \ file_formats/cmi_format.cmx \ utils/clflags.cmx \ file_formats/cmt_format.cmi @@ -4080,18 +4106,16 @@ file_formats/cmt_format.cmi : \ typing/types.cmi \ typing/typedtree.cmi \ typing/shape.cmi \ - utils/misc.cmi \ parsing/location.cmi \ typing/env.cmi \ + utils/compilation_unit.cmi \ file_formats/cmi_format.cmi file_formats/cmx_format.cmi : \ - utils/misc.cmi \ lambda/lambda.cmi \ middle_end/flambda/export_info.cmi \ utils/compilation_unit.cmi \ middle_end/clambda.cmi file_formats/cmxs_format.cmi : \ - utils/misc.cmi \ utils/compilation_unit.cmi file_formats/linear_format.cmo : \ utils/misc.cmi \ @@ -4175,6 +4199,7 @@ middle_end/closure/closure_middle_end.cmo : \ typing/path.cmi \ utils/linkage_name.cmi \ lambda/lambda.cmi \ + typing/ident.cmi \ middle_end/compilenv.cmi \ utils/compilation_unit.cmi \ middle_end/closure/closure.cmi \ @@ -4187,6 +4212,7 @@ middle_end/closure/closure_middle_end.cmx : \ typing/path.cmx \ utils/linkage_name.cmx \ lambda/lambda.cmx \ + typing/ident.cmx \ middle_end/compilenv.cmx \ utils/compilation_unit.cmx \ middle_end/closure/closure.cmx \ @@ -4388,8 +4414,8 @@ middle_end/flambda/closure_conversion.cmx : \ middle_end/flambda/closure_conversion.cmi middle_end/flambda/closure_conversion.cmi : \ lambda/lambda.cmi \ - typing/ident.cmi \ middle_end/flambda/flambda.cmi \ + utils/compilation_unit.cmi \ middle_end/backend_intf.cmi middle_end/flambda/closure_conversion_aux.cmo : \ middle_end/variable.cmi \ @@ -4501,8 +4527,7 @@ middle_end/flambda/export_info_for_pack.cmo : \ middle_end/flambda/export_info.cmi \ middle_end/flambda/base_types/export_id.cmi \ utils/compilation_unit.cmi \ - middle_end/flambda/base_types/closure_id.cmi \ - middle_end/flambda/export_info_for_pack.cmi + middle_end/flambda/base_types/closure_id.cmi middle_end/flambda/export_info_for_pack.cmx : \ middle_end/variable.cmx \ middle_end/flambda/base_types/var_within_closure.cmx \ @@ -4515,11 +4540,7 @@ middle_end/flambda/export_info_for_pack.cmx : \ middle_end/flambda/export_info.cmx \ middle_end/flambda/base_types/export_id.cmx \ utils/compilation_unit.cmx \ - middle_end/flambda/base_types/closure_id.cmx \ - middle_end/flambda/export_info_for_pack.cmi -middle_end/flambda/export_info_for_pack.cmi : \ - middle_end/flambda/export_info.cmi \ - utils/compilation_unit.cmi + middle_end/flambda/base_types/closure_id.cmx middle_end/flambda/extract_projections.cmo : \ middle_end/variable.cmi \ middle_end/flambda/base_types/var_within_closure.cmi \ @@ -6100,6 +6121,7 @@ driver/compile.cmo : \ lambda/lambda.cmi \ bytecomp/emitcode.cmi \ driver/compile_common.cmi \ + utils/compilation_unit.cmi \ utils/clflags.cmi \ bytecomp/bytegen.cmi \ driver/compile.cmi @@ -6114,14 +6136,15 @@ driver/compile.cmx : \ lambda/lambda.cmx \ bytecomp/emitcode.cmx \ driver/compile_common.cmx \ + utils/compilation_unit.cmx \ utils/clflags.cmx \ bytecomp/bytegen.cmx \ driver/compile.cmi driver/compile.cmi : \ typing/typedtree.cmi \ bytecomp/instruct.cmi \ - typing/ident.cmi \ driver/compile_common.cmi \ + utils/compilation_unit.cmi \ utils/clflags.cmi driver/compile_common.cmo : \ utils/warnings.cmi \ @@ -6140,6 +6163,7 @@ driver/compile_common.cmo : \ typing/env.cmi \ utils/config.cmi \ driver/compmisc.cmi \ + utils/compilation_unit.cmi \ driver/compenv.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ @@ -6161,6 +6185,7 @@ driver/compile_common.cmx : \ typing/env.cmx \ utils/config.cmx \ driver/compmisc.cmx \ + utils/compilation_unit.cmx \ driver/compenv.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ @@ -6168,7 +6193,8 @@ driver/compile_common.cmx : \ driver/compile_common.cmi : \ typing/typedtree.cmi \ parsing/parsetree.cmi \ - typing/env.cmi + typing/env.cmi \ + utils/compilation_unit.cmi driver/compmisc.cmo : \ utils/warnings.cmi \ typing/types.cmi \ @@ -6298,7 +6324,6 @@ driver/optcompile.cmo : \ utils/config.cmi \ middle_end/compilenv.cmi \ driver/compile_common.cmi \ - utils/compilation_unit.cmi \ middle_end/closure/closure_middle_end.cmi \ utils/clflags.cmi \ asmcomp/asmgen.cmi \ @@ -6315,7 +6340,6 @@ driver/optcompile.cmx : \ utils/config.cmx \ middle_end/compilenv.cmx \ driver/compile_common.cmx \ - utils/compilation_unit.cmx \ middle_end/closure/closure_middle_end.cmx \ utils/clflags.cmx \ asmcomp/asmgen.cmx \ @@ -6347,7 +6371,6 @@ driver/optmaindriver.cmo : \ middle_end/flambda/import_approx.cmi \ utils/config.cmi \ driver/compmisc.cmi \ - middle_end/compilenv.cmi \ driver/compenv.cmi \ utils/clflags.cmi \ middle_end/backend_intf.cmi \ @@ -6367,7 +6390,6 @@ driver/optmaindriver.cmx : \ middle_end/flambda/import_approx.cmx \ utils/config.cmx \ driver/compmisc.cmx \ - middle_end/compilenv.cmx \ driver/compenv.cmx \ utils/clflags.cmx \ middle_end/backend_intf.cmi \ @@ -6410,12 +6432,16 @@ toplevel/expunge.cmo : \ lambda/runtimedef.cmi \ utils/misc.cmi \ typing/ident.cmi \ + utils/compilation_unit.cmi \ + file_formats/cmo_format.cmi \ bytecomp/bytesections.cmi toplevel/expunge.cmx : \ bytecomp/symtable.cmx \ lambda/runtimedef.cmx \ utils/misc.cmx \ typing/ident.cmx \ + utils/compilation_unit.cmx \ + file_formats/cmo_format.cmi \ bytecomp/bytesections.cmx toplevel/genprintval.cmo : \ typing/types.cmi \ @@ -6473,7 +6499,6 @@ toplevel/topcommon.cmo : \ parsing/longident.cmi \ parsing/location.cmi \ utils/load_path.cmi \ - utils/linkage_name.cmi \ parsing/lexer.cmi \ typing/ident.cmi \ toplevel/genprintval.cmi \ @@ -6481,6 +6506,7 @@ toplevel/topcommon.cmo : \ bytecomp/dll.cmi \ utils/config.cmi \ driver/compmisc.cmi \ + utils/compilation_unit.cmi \ driver/compenv.cmi \ utils/clflags.cmi \ parsing/asttypes.cmi \ @@ -6501,7 +6527,6 @@ toplevel/topcommon.cmx : \ parsing/longident.cmx \ parsing/location.cmx \ utils/load_path.cmx \ - utils/linkage_name.cmx \ parsing/lexer.cmx \ typing/ident.cmx \ toplevel/genprintval.cmx \ @@ -6509,6 +6534,7 @@ toplevel/topcommon.cmx : \ bytecomp/dll.cmx \ utils/config.cmx \ driver/compmisc.cmx \ + utils/compilation_unit.cmx \ driver/compenv.cmx \ utils/clflags.cmx \ parsing/asttypes.cmi \ @@ -6525,7 +6551,8 @@ toplevel/topcommon.cmi : \ parsing/location.cmi \ typing/ident.cmi \ toplevel/genprintval.cmi \ - typing/env.cmi + typing/env.cmi \ + utils/compilation_unit.cmi toplevel/topdirs.cmo : \ utils/warnings.cmi \ typing/types.cmi \ @@ -6661,6 +6688,7 @@ toplevel/byte/topeval.cmo : \ bytecomp/dll.cmi \ utils/config.cmi \ driver/compmisc.cmi \ + utils/compilation_unit.cmi \ file_formats/cmo_format.cmi \ utils/clflags.cmi \ bytecomp/bytegen.cmi \ @@ -6696,6 +6724,7 @@ toplevel/byte/topeval.cmx : \ bytecomp/dll.cmx \ utils/config.cmx \ driver/compmisc.cmx \ + utils/compilation_unit.cmx \ file_formats/cmo_format.cmi \ utils/clflags.cmx \ bytecomp/bytegen.cmx \ @@ -6780,6 +6809,7 @@ toplevel/native/topeval.cmo : \ lambda/translmod.cmi \ toplevel/native/tophooks.cmi \ toplevel/topcommon.cmi \ + utils/symbol.cmi \ lambda/simplif.cmi \ typing/shape.cmi \ typing/printtyped.cmi \ @@ -6812,6 +6842,7 @@ toplevel/native/topeval.cmx : \ lambda/translmod.cmx \ toplevel/native/tophooks.cmx \ toplevel/topcommon.cmx \ + utils/symbol.cmx \ lambda/simplif.cmx \ typing/shape.cmx \ typing/printtyped.cmx \ @@ -6846,7 +6877,6 @@ toplevel/native/tophooks.cmo : \ middle_end/flambda/import_approx.cmi \ middle_end/flambda/flambda_middle_end.cmi \ utils/config.cmi \ - middle_end/compilenv.cmi \ middle_end/closure/closure_middle_end.cmi \ utils/clflags.cmi \ middle_end/backend_intf.cmi \ @@ -6862,7 +6892,6 @@ toplevel/native/tophooks.cmx : \ middle_end/flambda/import_approx.cmx \ middle_end/flambda/flambda_middle_end.cmx \ utils/config.cmx \ - middle_end/compilenv.cmx \ middle_end/closure/closure_middle_end.cmx \ utils/clflags.cmx \ middle_end/backend_intf.cmi \ diff --git a/asmcomp/asmgen.ml b/asmcomp/asmgen.ml index 7e3d18bc504a..dc348d6a18e3 100644 --- a/asmcomp/asmgen.ml +++ b/asmcomp/asmgen.ml @@ -65,7 +65,7 @@ let linear_unit_info = let reset () = start_from_emit := false; if should_save_before_emit () then begin - linear_unit_info.unit <- Compilation_unit.get_current_exn (); + linear_unit_info.unit <- Compilation_unit.get_current_or_dummy (); linear_unit_info.items <- []; end @@ -272,7 +272,8 @@ let compile_implementation ?toplevel ~backend ~prefixname ~middle_end ~asm_filename:(asm_filename prefixname) ~keep_asm:!keep_asm_file ~obj_filename:(prefixname ^ ext_obj) (fun () -> - Ident.Set.iter Compilenv.require_global program.required_globals; + Compilation_unit.Set.iter Compilenv.require_global + program.required_globals; let clambda_with_constants = middle_end ~backend ~prefixname ~ppf_dump program in diff --git a/asmcomp/asmlink.ml b/asmcomp/asmlink.ml index 3817897278d0..4db3a0d6bf27 100644 --- a/asmcomp/asmlink.ml +++ b/asmcomp/asmlink.ml @@ -25,40 +25,40 @@ module CU = Compilation_unit type error = | File_not_found of filepath | Not_an_object_file of filepath - | Missing_implementations of (Linkage_name.t * string list) list + | Missing_implementations of (CU.t * string list) list | Inconsistent_interface of CU.Name.t * filepath * filepath - | Inconsistent_implementation of CU.Name.t * filepath * filepath + | Inconsistent_implementation of CU.t * filepath * filepath | Assembler_error of filepath | Linking_error of int | Multiple_definition of CU.Name.t * filepath * filepath - | Missing_cmx of filepath * CU.Name.t + | Missing_cmx of filepath * CU.t exception Error of error (* Consistency check between interfaces and implementations *) -module Cmi_consistbl = Consistbl.Make (CU.Name) +module Cmi_consistbl = Consistbl.Make (CU.Name) (CU) let crc_interfaces = Cmi_consistbl.create () let interfaces = ref ([] : CU.Name.t list) -module Cmx_consistbl = Consistbl.Make (CU.Name) +module Cmx_consistbl = Consistbl.Make (CU) (Unit) let crc_implementations = Cmx_consistbl.create () -let implementations = ref ([] : CU.Name.t list) -let implementations_defined = ref ([] : (CU.Name.t * string) list) -let cmx_required = ref ([] : CU.Name.t list) +let implementations = ref ([] : CU.t list) +let implementations_defined = ref ([] : (CU.t * string) list) +let cmx_required = ref ([] : CU.t list) let check_consistency file_name unit crc = begin try List.iter (fun (name, crco) -> - let name = CU.Name.of_string name in interfaces := name :: !interfaces; match crco with None -> () - | Some crc -> + | Some (full_name, crc) -> if CU.Name.equal name (CU.name unit.ui_unit) - then Cmi_consistbl.set crc_interfaces name crc file_name - else Cmi_consistbl.check crc_interfaces name crc file_name) + then Cmi_consistbl.set crc_interfaces name full_name crc file_name + else + Cmi_consistbl.check crc_interfaces name full_name crc file_name) unit.ui_imports_cmi with Cmi_consistbl.Inconsistency { unit_name = name; @@ -70,14 +70,13 @@ let check_consistency file_name unit crc = begin try List.iter (fun (name, crco) -> - let name = name |> CU.Name.of_string in implementations := name :: !implementations; match crco with None -> if List.mem name !cmx_required then raise(Error(Missing_cmx(file_name, name))) | Some crc -> - Cmx_consistbl.check crc_implementations name crc file_name) + Cmx_consistbl.check crc_implementations name () crc file_name) unit.ui_imports_cmx with Cmx_consistbl.Inconsistency { unit_name = name; @@ -88,25 +87,22 @@ let check_consistency file_name unit crc = end; let ui_name = CU.name unit.ui_unit in begin try - let source = List.assoc ui_name !implementations_defined in - raise (Error(Multiple_definition(CU.name unit.ui_unit, file_name, source))) + let source = List.assoc unit.ui_unit !implementations_defined in + raise (Error(Multiple_definition(ui_name, file_name, source))) with Not_found -> () end; - implementations := ui_name :: !implementations; - Cmx_consistbl.set crc_implementations ui_name crc file_name; + implementations := unit.ui_unit :: !implementations; + Cmx_consistbl.set crc_implementations unit.ui_unit () crc file_name; implementations_defined := - (ui_name, file_name) :: !implementations_defined; + (unit.ui_unit, file_name) :: !implementations_defined; if CU.is_packed unit.ui_unit then - cmx_required := ui_name :: !cmx_required + cmx_required := unit.ui_unit :: !cmx_required -let extract_crc_interfaces0 () = - Cmi_consistbl.extract !interfaces crc_interfaces let extract_crc_interfaces () = - extract_crc_interfaces0 () - |> List.map (fun (name, crc) -> (name |> CU.Name.to_string, crc)) + Cmi_consistbl.extract !interfaces crc_interfaces let extract_crc_implementations () = Cmx_consistbl.extract !implementations crc_implementations - |> List.map (fun (name, crc) -> (name |> CU.Name.to_string, crc)) + |> List.map (fun (name, crco) -> name, Option.map snd crco) (* Add C objects and options and "custom" info from a library descriptor. See bytecomp/bytelink.ml for comments on the order of C objects. *) @@ -135,7 +131,7 @@ let runtime_lib () = let missing_globals = (Hashtbl.create 17 : - (Linkage_name.t, string list ref) Hashtbl.t) + (CU.t, string list ref) Hashtbl.t) let is_required name = try ignore (Hashtbl.find missing_globals name); true @@ -193,26 +189,17 @@ let read_file obj_name = end else raise(Error(Not_an_object_file file_name)) -let linkage_name_of_modname modname = +let assume_no_prefix modname = (* We're the linker, so we assume that everything's already been packed, so no module needs its prefix considered. *) - modname |> Linkage_name.of_string + CU.create CU.Prefix.empty modname let scan_file file tolink = match file with | Unit (file_name,info,crc) -> (* This is a .cmx file. It must be linked in any case. *) - let linkage_name = - info.ui_unit - |> Compilation_unit.name - |> Compilation_unit.Name.to_string - |> linkage_name_of_modname - in - remove_required linkage_name; - List.iter (fun (name, crc) -> - let name = name |> linkage_name_of_modname in - add_required file_name (name, crc)) - info.ui_imports_cmx; + remove_required info.ui_unit; + List.iter (add_required file_name) info.ui_imports_cmx; (info, file_name, crc) :: tolink | Library (file_name,infos) -> (* This is an archive file. Each unit contained in it will be linked @@ -221,20 +208,15 @@ let scan_file file tolink = List.fold_right (fun (info, crc) reqd -> let ui_name = CU.name info.ui_unit in - let linkage_name = - ui_name |> CU.Name.to_string |> linkage_name_of_modname - in if info.ui_force_link || !Clflags.link_everything - || is_required linkage_name + || is_required info.ui_unit then begin - remove_required linkage_name; + remove_required info.ui_unit; let req_by = Printf.sprintf "%s(%s)" file_name (ui_name |> CU.Name.to_string) in - info.ui_imports_cmx |> List.iter (fun (modname, digest) -> - let linkage_name = modname |> Linkage_name.of_string in - add_required req_by (linkage_name, digest)); + List.iter (add_required req_by) info.ui_imports_cmx; (info, file_name, crc) :: reqd end else reqd) @@ -254,22 +236,24 @@ let make_globals_map units_list ~crc_interfaces = let defined = List.map (fun (unit, _, impl_crc) -> let name = CU.name unit.ui_unit in - let intf_crc = CU.Name.Tbl.find crc_interfaces name in + let intf_crc = + CU.Name.Tbl.find crc_interfaces name + |> Option.map (fun (_unit, crc) -> crc) + in CU.Name.Tbl.remove crc_interfaces name; let syms = List.map Symbol.for_compilation_unit unit.ui_defines in - (name, intf_crc, Some impl_crc, syms)) + (unit.ui_unit, intf_crc, Some impl_crc, syms)) units_list in CU.Name.Tbl.fold (fun name intf acc -> - (name, intf, None, []) :: acc) + let intf = Option.map (fun (_unit, crc) -> crc) intf in + (assume_no_prefix name, intf, None, []) :: acc) crc_interfaces defined let make_startup_file ~ppf_dump units_list ~crc_interfaces = let compile_phrase p = Asmgen.compile_phrase ~ppf_dump p in Location.input_name := "caml_startup"; (* set name of "current" input *) - let startup_comp_unit = - CU.create CU.Prefix.empty (CU.Name.of_string "_startup") - in + let startup_comp_unit = CU.of_string "_startup" in Compilenv.reset startup_comp_unit; Emit.begin_assembly (); let name_list = @@ -390,8 +374,6 @@ let link ~ppf_dump objfiles output_name = else stdlib :: (objfiles @ [stdexit]) in let obj_infos = List.map read_file objfiles in let units_tolink = List.fold_right scan_file obj_infos [] in - Array.iter (fun name -> remove_required (name |> Linkage_name.of_string)) - Runtimedef.builtin_exceptions; begin match extract_missing_globals() with [] -> () | mg -> raise(Error(Missing_implementations mg)) @@ -399,7 +381,7 @@ let link ~ppf_dump objfiles output_name = List.iter (fun (info, file_name, crc) -> check_consistency file_name info crc) units_tolink; - let crc_interfaces = extract_crc_interfaces0 () in + let crc_interfaces = extract_crc_interfaces () in Clflags.ccobjs := !Clflags.ccobjs @ !lib_ccobjs; Clflags.all_ccopts := !lib_ccopts @ !Clflags.all_ccopts; (* put user's opts first *) @@ -439,7 +421,7 @@ let report_error ppf = function List.iter (fun (md, rq) -> fprintf ppf "@ @[%a referenced from %a@]" - Linkage_name.print md + Compilation_unit.print md print_references rq) in fprintf ppf "@[No implementations provided for the following modules:%a@]" @@ -457,7 +439,7 @@ let report_error ppf = function over implementation %a@]" Location.print_filename file1 Location.print_filename file2 - CU.Name.print intf + CU.print intf | Assembler_error file -> fprintf ppf "Error while assembling %a" Location.print_filename file | Linking_error exitcode -> @@ -476,9 +458,9 @@ let report_error ppf = function Please recompile %a@ with the correct `-I' option@ \ so that %a.cmx@ is found.@]" Location.print_filename filename - CU.Name.print name + CU.print name Location.print_filename filename - CU.Name.print name + CU.Name.print (CU.name name) let () = Location.register_error_of_exn diff --git a/asmcomp/asmlink.mli b/asmcomp/asmlink.mli index 3d31acab22b0..2338442bef59 100644 --- a/asmcomp/asmlink.mli +++ b/asmcomp/asmlink.mli @@ -26,19 +26,19 @@ val call_linker_shared: string list -> string -> unit val reset : unit -> unit val check_consistency: filepath -> Cmx_format.unit_infos -> Digest.t -> unit -val extract_crc_interfaces: unit -> crcs -val extract_crc_implementations: unit -> crcs +val extract_crc_interfaces: unit -> Cmx_format.import_info_cmi list +val extract_crc_implementations: unit -> Cmx_format.import_info_cmx list type error = | File_not_found of filepath | Not_an_object_file of filepath - | Missing_implementations of (Linkage_name.t * string list) list + | Missing_implementations of (Compilation_unit.t * string list) list | Inconsistent_interface of Compilation_unit.Name.t * filepath * filepath - | Inconsistent_implementation of Compilation_unit.Name.t * filepath * filepath + | Inconsistent_implementation of Compilation_unit.t * filepath * filepath | Assembler_error of filepath | Linking_error of int | Multiple_definition of Compilation_unit.Name.t * filepath * filepath - | Missing_cmx of filepath * Compilation_unit.Name.t + | Missing_cmx of filepath * Compilation_unit.t exception Error of error diff --git a/asmcomp/asmpackager.ml b/asmcomp/asmpackager.ml index 6e84ef2f72ff..95cb25c39c61 100644 --- a/asmcomp/asmpackager.ml +++ b/asmcomp/asmpackager.ml @@ -23,7 +23,7 @@ module CU = Compilation_unit type error = Illegal_renaming of CU.Name.t * string * CU.Name.t - | Forward_reference of string * string + | Forward_reference of string * CU.Name.t | Wrong_for_pack of string * CU.t | Linking_error | Assembler_error of string @@ -72,8 +72,9 @@ let check_units members = | PM_impl infos -> List.iter (fun (unit, _) -> - if List.mem (unit |> Compilation_unit.Name.of_string) forbidden - then raise(Error(Forward_reference(mb.pm_file, unit)))) + let name = CU.name unit in + if List.mem name forbidden + then raise(Error(Forward_reference(mb.pm_file, name)))) infos.ui_imports_cmx end; check (list_remove mb.pm_name forbidden) tl in @@ -102,11 +103,13 @@ let make_package_object ~ppf_dump members targetobj targetname coercion (fun m -> match m.pm_kind with | PM_intf -> None - | PM_impl _ -> Some(CU.Name.persistent_ident m.pm_name)) + | PM_impl _ -> Some(CU.create_child (CU.get_current_exn ()) m.pm_name)) members in - let module_ident = Ident.create_persistent targetname in + let for_pack_prefix = CU.Prefix.from_clflags () in + let modname = targetname |> CU.Name.of_string in + let compilation_unit = CU.create for_pack_prefix modname in let prefixname = Filename.remove_extension objtemp in - let required_globals = Ident.Set.empty in + let required_globals = CU.Set.empty in let program, middle_end = if Config.flambda then let main_module_block_size, code = @@ -117,7 +120,7 @@ let make_package_object ~ppf_dump members targetobj targetname coercion { Lambda. code; main_module_block_size; - module_ident; + compilation_unit; required_globals; } in @@ -125,14 +128,14 @@ let make_package_object ~ppf_dump members targetobj targetname coercion else let main_module_block_size, code = Translmod.transl_store_package components - (Ident.create_persistent targetname) coercion + compilation_unit coercion in let code = Simplif.simplify_lambda code in let program = { Lambda. code; main_module_block_size; - module_ident; + compilation_unit; required_globals; } in @@ -171,9 +174,9 @@ let get_approx ui = let build_package_cmx members cmxfile = let unit_names = List.map (fun m -> m.pm_name) members in - let filter lst = + let filter ~get_name lst = List.filter (fun (name, _crc) -> - not (List.mem (name |> CU.Name.of_string) unit_names)) lst in + not (List.mem (get_name name) unit_names)) lst in let union lst = List.fold_left (List.fold_left @@ -184,39 +187,12 @@ let build_package_cmx members cmxfile = (fun m accu -> match m.pm_kind with PM_intf -> accu | PM_impl info -> info :: accu) members [] in - let pack_units = - List.map (fun info -> info.ui_unit) units - |> Compilation_unit.Set.of_list - in let ui = Compilenv.current_unit_infos() in - let pack = - (* CR-soon lmaurer: This is horrific, but the whole [import_for_pack] - business is about to go away. *) - Compilation_unit.Prefix.parse_for_pack - (Some (Compilation_unit.full_path_as_string ui.ui_unit)) - in - let units = - if Config.flambda then - List.map (fun info -> - { info with - ui_export_info = - Flambda - (Export_info_for_pack.import_for_pack ~pack_units - ~pack - (get_export_info info)); - }) - units - else - units - in let ui_export_info = if Config.flambda then let ui_export_info = List.fold_left (fun acc info -> - Export_info.merge acc - (Export_info_for_pack.import_for_pack ~pack_units - ~pack - (get_export_info info))) + Export_info.merge acc (get_export_info info)) (get_export_info ui) units in @@ -224,18 +200,17 @@ let build_package_cmx members cmxfile = else Clambda (get_approx ui) in - Export_info_for_pack.clear_import_state (); - let ui_unit_as_string = CU.Name.to_string (CU.name ui.ui_unit) in + let modname = Compilation_unit.name ui.ui_unit in let pkg_infos = { ui_unit = ui.ui_unit; ui_defines = List.flatten (List.map (fun info -> info.ui_defines) units) @ [ui.ui_unit]; ui_imports_cmi = - (ui_unit_as_string, Some (Env.crc_of_unit ui_unit_as_string)) :: - filter(Asmlink.extract_crc_interfaces()); + (modname, Some (ui.ui_unit, Env.crc_of_unit modname)) :: + filter(Asmlink.extract_crc_interfaces()) ~get_name:(fun name -> name); ui_imports_cmx = - filter(Asmlink.extract_crc_implementations()); + filter(Asmlink.extract_crc_implementations()) ~get_name:CU.name; ui_curry_fun = union(List.map (fun info -> info.ui_curry_fun) units); ui_apply_fun = @@ -285,7 +260,7 @@ let package_files ~ppf_dump initial_env files targetcmx ~backend = Compilenv.reset comp_unit; Misc.try_finally (fun () -> let coercion = - Typemod.package_units initial_env files targetcmi targetname in + Typemod.package_units initial_env files targetcmi comp_unit in package_object_files ~ppf_dump files targetcmx targetobj targetname coercion ~backend ) @@ -301,7 +276,7 @@ let report_error ppf = function @ %a when %a was expected" Location.print_filename file CU.Name.print name CU.Name.print id | Forward_reference(file, ident) -> - fprintf ppf "Forward reference to %s in file %a" ident + fprintf ppf "Forward reference to %a in file %a" CU.Name.print ident Location.print_filename file | Wrong_for_pack(file, path) -> fprintf ppf "File %a@ was not compiled with the `-for-pack %a' option" diff --git a/asmcomp/asmpackager.mli b/asmcomp/asmpackager.mli index c3bfdcd98801..9b3e8984eead 100644 --- a/asmcomp/asmpackager.mli +++ b/asmcomp/asmpackager.mli @@ -26,7 +26,7 @@ val package_files type error = Illegal_renaming of Compilation_unit.Name.t * string * Compilation_unit.Name.t - | Forward_reference of string * string + | Forward_reference of string * Compilation_unit.Name.t | Wrong_for_pack of string * Compilation_unit.t | Linking_error | Assembler_error of string diff --git a/asmcomp/cmm_helpers.ml b/asmcomp/cmm_helpers.ml index d2a3df7fefaa..6f31f302ffb1 100644 --- a/asmcomp/cmm_helpers.ml +++ b/asmcomp/cmm_helpers.ml @@ -2862,9 +2862,8 @@ let predef_exception i name = (* Header for a plugin *) let plugin_header units = - let module CU = Compilation_unit in let mk ((ui : Cmx_format.unit_infos),crc) : Cmxs_format.dynunit = - { dynu_name = CU.name ui.ui_unit; + { dynu_name = ui.ui_unit; dynu_crc = crc; dynu_imports_cmi = ui.ui_imports_cmi; dynu_imports_cmx = ui.ui_imports_cmx; diff --git a/asmcomp/cmm_helpers.mli b/asmcomp/cmm_helpers.mli index e3de31112837..fd5e6ad91c7c 100644 --- a/asmcomp/cmm_helpers.mli +++ b/asmcomp/cmm_helpers.mli @@ -595,7 +595,7 @@ val reference_symbols: string list -> phrase The runtime representation of the type here must match that of [type global_map] in the natdynlink code. *) val globals_map: - (Compilation_unit.Name.t * Digest.t option * Digest.t option * Symbol.t list) + (Compilation_unit.t * Digest.t option * Digest.t option * Symbol.t list) list -> phrase diff --git a/boot/ocamlc b/boot/ocamlc index 4caffd08c16d33822c7aef0cbca8893e234f272b..251e1ae7eeb2185c89fb39427c3f3ac882d526e3 100755 GIT binary patch delta 228363 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 m{iG~3CAXhQEbcEp&`&I+z*NA-Au8;M*7fY% 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 diff --git a/boot/ocamllex b/boot/ocamllex index 4e38c66bf13e1881b9f5a078b382dffe4678cd9f..de697666c751362900bec7ad4e3c63b40d698dcb 100755 GIT binary patch delta 2601 zcmZ`*dsq`!7N1-)3R)}p02f=zGX$b=lOQE1WguPN2ndSEC+rY|1R)8@@bp1d7I(2C z>guSd3`HIyY+;oJ{kj%)RZvP%flsVbDgq)OAXc`r=(?9zI@I02a?Z*5-TOP|p2uWA zGOp`3{vwN$1+w%ma)0VwV1r?E`!USJ7{de=wL`sJS0ECGQd<%fG11YX=~@R*jhx(O zr<3fR9E45|P!O-B>OWsgGBgcbw5ZG+P}!$t{qr`^Xd2Iz!DP{QI+i zn12()IJYotPBn(%`x(Y2jEqT;=P^}N0s-81?0X7tl@{mzd%0y!%`@(e&VYVbhT(;# zD=9J!IZjIiFv}i?aOJMwU3O0UvgYOXPxKbQ{3U@ND#nG8Ox4O69_wXsq=o?Y&5twS zUw@eI!poFV}4ZFwKOAU)`laqHk_-=fu5&5yaRnT1K3jY%Sa z!5qzAmRU!fSDq$u(Zm=lq&LWGfX46$q zue~-}NN*~|txycQh=WnUR4f5pyWi!&2;Rco9!~STQv-5d9qjUsU>MztPx{HzWQf&! zHUgL&m6gDpZ$;ai-L8&TtaGkTvWQG!7|~2#gXNkOQmaUjYYB#Nq?<}{Lp!EQS8vl* zN`U#D8+_nsy|?E6gEy<|dlSR(4Tfg)U@7h;XFX_8OgsTT^S>Sj`;yWu3c8t!>M_i` z-hk`?l-!~FKr1tKGe)Z+@wNH}IbawR#ESr`;q2tSN7aP`9futJM zj`7_9*z)1OO#G6M1X>N06&_1>lh7B+a30F!ikTP#6k7DKK#~**KeOMpPu8`f@nKNv zD5vc99EQ>5I{@{eax3EW8w+ZI({LC3_{qwS(oe6M*>s(M`!iPTz%aj_PiCYe+$=ql z07ga&(&5J)+5J6-gc|3+=(VJp`k_4Ndd62tIXfZTYy$!G4EM&sr^_8G$7|X&J1KGW z-=iFwX5+-7-{8a|0$|w#J#g1;lWT6y5yNXFE&dC+ph3VYU34LW>ADZ81i&jg#gO>U zI?B35z5T53xg}RQSv%;%=WsiA8TgReI4UNA09Jd~E8r+kuwVb(i$`-smvUay`Kx%v{5@~3(f7*nHS7`MnNFde0CsKk zX1HLWY(xrM-(9iVGrse@*H&mELUsbhm4v|JjXlT6P}iu}6sqrAk!D2w zaA8c`$x45TdrWVo+@O>bew#jd9_O=T@z7|HEvEz_4mrHSQWLF|kX2RS2+j;Q1}M_G(Y8?Ty#! zOvmAZHm+mGadh+)V1n$Fgf_$OTn!Yu4eqm5JxvOvhU0VT<$D;$I*?Q-r+LoJSh^4T z=U?f}6XF)Hj0JT9%^@*549$tH@(HJDi2(Dor-$J7FT$dn=9v6=`Q*>lXFu9xo{6?D za-EE5N+5vCo?ix`%gS2gAal|7BkmiDL}85YLzgItyGn$CS?<8oDoqR;>T(5am$GPCa_tU9}@YdC+B^|c^?&~)fOU4oGdTAAoO_S{&Q+=3MqLkX z*w9F;Dsf}LRMAP5_~HmuubbOV;pJ9a&fnaIOpk%Q5#v8KGiZ0Q@0@A`l#~BqMO*8r zei(dN7MhW76xjX2f#K16{{ce!AC)-YLJ}Gg=!s$6z0!5kPz;;@5JR7V6DJEL63Ip= G7XBCLk33KS delta 1619 zcmZ8iYfuws6x~1;!ox>UQ$&g=@=^$2!YiRZnm`#qUK&wQYY4E!)I2aGD9RK;1gD6s zLc0~ktSF#@Mv($4$g60jS}nzjAVQ!Z*a|`i5y9F`B{Qir`{(Yt=bruUchB9Lep=>J z+JOvGhCzm5C0R2##{+_lhare#2|=sMsz(ONJ_Z!PQ^biyF?5VEOkP0u@}M(_XH^`M z1YDVb$#ezou1r>gUnmE~KX?1+b@kR^vJ;8oJzJtW`vqAEQ`~i-$t&_Ml8xtV7%q?} ziljn%R1~sTr0~(n=8uup6sC?6JWk#+*O5LOa^ylfR}kl>7X~2W1YP{YefYsSUkVIC zq}32aE`T7zIvls(B#03sD2U8Gec;Q-U8XZHdUrBi3bSzBftM^*2==1D|H=NO@m{%o zbat>ouXL>^Hd72U7$78QL%~TO?==PDwr7fj_DeXv>Vq<$&r4230qZR18$%Z*+4A(e z+M~|$HtcW-ypjrj4Bej)piDQvNXb!TWeqB@&Jvil0aTRdH+&6e0d**L$T*Gy6On6;`ohgMqsi22GwEpx# z)|j7LRpOa>$Jb*2l)`piz(#IlV!KZK#kphsMv#4fJC4s@ET11P7fBV!-dGf*rk~A5 zyz4Va{S&+ihUzAkbsl!6f>QS3r_x{Jabjh;|yIpLIny@5<-+kf$&q_x!UxShY>1t8V!!m-Zh^eOpJw8hynvs%jE}WPEgi|1ZSE3 z*0UAIU39X+f_=#-n9F2jsTSUo*xY=`yx*7Gf#a^agg~jn%L4^*(MMSOXtimd40H0Y zZ0YjWW%$JK`9z9469tynlX5o?Hg;e3O80+rWSfCr_lXP?gr_)>g0>EHt3vpHzg?N{ zk8#Sht-4i9lWQUwjeW5O3%k26-NN$9;CL#Ki_OtVl4^UUL;IFNf`@pf%h2L_XJT zTSs#2wi~3*I&7jGUL66ttA0IsYH8PJ{WF`A5U$hCu zXqRE9RG_x1%uan?b5P}RW6?axp#r@=5$;4m*krfQaqbdTUG!^S#VLyxt;_yfC@A1dx!iCm%#Dm^un${}xyHZZ5`Bj4X0Y!n@mU_pSS41*( zxCS~n&#G~JMTkHoMFG98WlO}N$f2%+uX}1X?9L%L#JC9&0;;zINzT(1`z#%4-aF?b zi-`q7K-%wUt=N?cu?LC}`SkX|;ySM;qMUD{*1CRytMhN#{S{V7+SA^t+0};Qj=nNU zf*_W_HW$9M`7`VIF+1MR5%!a@#9%oPm_$ZMH8$bv-XXz0dHVMa>`ec8Z zTp}Rk7o{EBhzvT7p%a?Cpy^-keU!#g$Rr|S6L@NPsn=-h1 - Kgetglobal (cu |> Compilation_unit.to_global_ident_for_legacy_code) + Kgetglobal (cu |> Compilation_unit.to_global_ident_for_bytecode) | Psetglobal cu -> - Ksetglobal (cu |> Compilation_unit.to_global_ident_for_legacy_code) + Ksetglobal (cu |> Compilation_unit.to_global_ident_for_bytecode) | Pgetpredef id -> Kgetglobal id | Pintcomp cmp -> Kintcomp cmp | Pcompare_ints -> Kccall("caml_int_compare", 2) diff --git a/bytecomp/bytelink.ml b/bytecomp/bytelink.ml index 85f9f28dfbe9..275f9f398aa5 100644 --- a/bytecomp/bytelink.ml +++ b/bytecomp/bytelink.ml @@ -26,13 +26,13 @@ type error = | Not_an_object_file of filepath | Wrong_object_name of filepath | Symbol_error of filepath * Symtable.error - | Inconsistent_import of modname * filepath * filepath + | Inconsistent_import of Compilation_unit.Name.t * filepath * filepath | Custom_runtime | File_exists of filepath | Cannot_open_dll of filepath - | Required_module_unavailable of modname * modname + | Required_module_unavailable of string * Compilation_unit.t | Camlheader of string * filepath - | Wrong_link_order of (modname * modname) list + | Wrong_link_order of (string * string) list exception Error of error @@ -102,14 +102,17 @@ let is_required (rel, _pos) = let add_required compunit = let add id = if Ident.Set.mem id !provided_globals then begin - let cu_name = CU.Name.to_string compunit.cu_name in + let cu_name = CU.full_path_as_string compunit.cu_name in badly_ordered_dependencies := ((Ident.name id), cu_name) :: !badly_ordered_dependencies; end; missing_globals := Ident.Map.add id compunit.cu_name !missing_globals in + let add_unit unit = + add (unit |> Compilation_unit.to_global_ident_for_bytecode) + in List.iter add (Symtable.required_globals compunit.cu_reloc); - List.iter add compunit.cu_required_globals + List.iter add_unit compunit.cu_required_globals let remove_required (rel, _pos) = match rel with @@ -171,11 +174,11 @@ let scan_file obj_name tolink = (* Consistency check between interfaces *) -module Consistbl = Consistbl.Make (Misc.Stdlib.String) +module Consistbl = Consistbl.Make (CU.Name) (Compilation_unit) let crc_interfaces = Consistbl.create () -let interfaces = ref ([] : string list) -let implementations_defined = ref ([] : (string * string) list) +let interfaces = ref ([] : CU.Name.t list) +let implementations_defined = ref ([] : (CU.Name.t * string) list) let check_consistency file_name cu = begin try @@ -184,10 +187,10 @@ let check_consistency file_name cu = interfaces := name :: !interfaces; match crco with None -> () - | Some crc -> - if CU.Name.equal (CU.Name.of_string name) cu.cu_name - then Consistbl.set crc_interfaces name crc file_name - else Consistbl.check crc_interfaces name crc file_name) + | Some (full_name, crc) -> + if CU.Name.equal name (CU.name cu.cu_name) + then Consistbl.set crc_interfaces name full_name crc file_name + else Consistbl.check crc_interfaces name full_name crc file_name) cu.cu_imports with Consistbl.Inconsistency { unit_name = name; @@ -196,17 +199,16 @@ let check_consistency file_name cu = } -> raise(Error(Inconsistent_import(name, user, auth))) end; - let cu_name = CU.Name.to_string cu.cu_name in begin try - let source = List.assoc cu_name !implementations_defined in + let source = List.assoc (CU.name cu.cu_name) !implementations_defined in Location.prerr_warning (Location.in_file file_name) - (Warnings.Module_linked_twice(cu_name, + (Warnings.Module_linked_twice(cu.cu_name |> CU.full_path_as_string, Location.show_filename file_name, Location.show_filename source)) with Not_found -> () end; implementations_defined := - (cu_name, file_name) :: !implementations_defined + (CU.name cu.cu_name, file_name) :: !implementations_defined let extract_crc_interfaces () = Consistbl.extract !interfaces crc_interfaces @@ -261,7 +263,7 @@ let link_archive output_fun currpos_fun file_name units_required = try List.iter (fun cu -> - let name = file_name ^ "(" ^ (CU.Name.to_string cu.cu_name) ^ ")" in + let name = file_name ^ "(" ^ (CU.full_path_as_string cu.cu_name) ^ ")" in try link_compunit output_fun currpos_fun inchan name cu with Symtable.Error msg -> @@ -637,7 +639,6 @@ let link objfiles output_name = match Ident.Map.bindings missing_modules with | [] -> () | (id, cu_name) :: _ -> - let cu_name = CU.Name.to_string cu_name in match !badly_ordered_dependencies with | [] -> raise (Error (Required_module_unavailable (Ident.name id, cu_name))) @@ -762,10 +763,10 @@ let report_error ppf = function | Inconsistent_import(intf, file1, file2) -> fprintf ppf "@[Files %a@ and %a@ \ - make inconsistent assumptions over interface %s@]" + make inconsistent assumptions over interface %a@]" Location.print_filename file1 Location.print_filename file2 - intf + CU.Name.print intf | Custom_runtime -> fprintf ppf "Error while building custom runtime system" | File_exists file -> @@ -775,7 +776,9 @@ let report_error ppf = function fprintf ppf "Error on dynamically loaded library: %a" Location.print_filename file | Required_module_unavailable (s, m) -> - fprintf ppf "Module `%s' is unavailable (required by `%s')" s m + fprintf ppf "Module `%s' is unavailable (required by `%a')" + s + Compilation_unit.print m | Camlheader (msg, header) -> fprintf ppf "System error while copying file %s: %s" header msg | Wrong_link_order l -> diff --git a/bytecomp/bytelink.mli b/bytecomp/bytelink.mli index 8616170a229b..3a57ac3d711b 100644 --- a/bytecomp/bytelink.mli +++ b/bytecomp/bytelink.mli @@ -22,20 +22,20 @@ val reset : unit -> unit val check_consistency: filepath -> Cmo_format.compilation_unit_descr -> unit -val extract_crc_interfaces: unit -> crcs +val extract_crc_interfaces: unit -> Cmo_format.import_info list type error = | File_not_found of filepath | Not_an_object_file of filepath | Wrong_object_name of filepath | Symbol_error of filepath * Symtable.error - | Inconsistent_import of modname * filepath * filepath + | Inconsistent_import of Compilation_unit.Name.t * filepath * filepath | Custom_runtime | File_exists of filepath | Cannot_open_dll of filepath - | Required_module_unavailable of modname * modname + | Required_module_unavailable of string * Compilation_unit.t | Camlheader of string * filepath - | Wrong_link_order of (modname * modname) list + | Wrong_link_order of (string * string) list exception Error of error diff --git a/bytecomp/bytepackager.ml b/bytecomp/bytepackager.ml index aeb843b6c493..adc99dfaa48b 100644 --- a/bytecomp/bytepackager.ml +++ b/bytecomp/bytepackager.ml @@ -27,7 +27,7 @@ type error = Forward_reference of string * Ident.t | Multiple_definition of string * Ident.t | Not_an_object_file of string - | Illegal_renaming of string * string * string + | Illegal_renaming of Compilation_unit.Name.t * string * string | File_not_found of string exception Error of error @@ -40,52 +40,15 @@ let debug_dirs = ref String.Set.empty let primitives = ref ([] : string list) let force_link = ref false -(* Record a relocation. Update its offset, and rename GETGLOBAL and - SETGLOBAL relocations that correspond to one of the units being - consolidated. *) +(* Record a relocation, updating its offset. *) -let rename_relocation packagename objfile mapping defined base (rel, ofs) = - let rel' = - match rel with - Reloc_getglobal id -> - begin try - let id' = List.assoc id mapping in - if List.mem id defined - then Reloc_getglobal id' - else raise(Error(Forward_reference(objfile, id))) - with Not_found -> - (* PR#5276: unique-ize dotted global names, which appear - if one of the units being consolidated is itself a packed - module. *) - let name = Ident.name id in - if String.contains name '.' then - Reloc_getglobal (Ident.create_persistent (packagename ^ "." ^ name)) - else - rel - end - | Reloc_setglobal id -> - begin try - let id' = List.assoc id mapping in - if List.mem id defined - then raise(Error(Multiple_definition(objfile, id))) - else Reloc_setglobal id' - with Not_found -> - (* PR#5276, as above *) - let name = Ident.name id in - if String.contains name '.' then - Reloc_setglobal (Ident.create_persistent (packagename ^ "." ^ name)) - else - rel - end - | _ -> - rel in - relocs := (rel', base + ofs) :: !relocs +let record_relocation base (rel, ofs) = + relocs := (rel, base + ofs) :: !relocs -(* Record and relocate a debugging event *) +(* Record and update a debugging event *) -let relocate_debug base prefix subst ev = +let record_debug base subst ev = let ev' = { ev with ev_pos = base + ev.ev_pos; - ev_module = prefix ^ "." ^ ev.ev_module; ev_typsubst = Subst.compose ev.ev_typsubst subst } in events := ev' :: !events @@ -95,12 +58,13 @@ type pack_member_kind = PM_intf | PM_impl of compilation_unit_descr type pack_member = { pm_file: string; - pm_name: string; + pm_name: Compilation_unit.Name.t; pm_kind: pack_member_kind } let read_member_info file = ( let name = - String.capitalize_ascii(Filename.basename(chop_extensions file)) in + String.capitalize_ascii(Filename.basename(chop_extensions file)) + |> Compilation_unit.Name.of_string in let kind = (* PR#7479: make sure it is either a .cmi or a .cmo *) if Filename.check_suffix file ".cmi" then @@ -116,9 +80,9 @@ let read_member_info file = ( let compunit_pos = input_binary_int ic in seek_in ic compunit_pos; let compunit = (input_value ic : compilation_unit_descr) in - if not (CU.Name.equal compunit.cu_name (CU.Name.of_string name)) + if not (CU.Name.equal (CU.name compunit.cu_name) name) then raise(Error(Illegal_renaming(name, file, - CU.Name.to_string compunit.cu_name))); + CU.name_as_string compunit.cu_name))); close_in ic; PM_impl compunit with x -> @@ -130,25 +94,21 @@ let read_member_info file = ( (* Read the bytecode from a .cmo file. Write bytecode to channel [oc]. - Rename globals as indicated by [mapping] in reloc info. Accumulate relocs, debug info, etc. Return size of bytecode. *) -let rename_append_bytecode packagename oc mapping defined ofs prefix subst - objfile compunit = +let append_bytecode oc ofs subst objfile compunit = let ic = open_in_bin objfile in try Bytelink.check_consistency objfile compunit; - List.iter - (rename_relocation packagename objfile mapping defined ofs) - compunit.cu_reloc; + List.iter (record_relocation ofs) compunit.cu_reloc; primitives := compunit.cu_primitives @ !primitives; if compunit.cu_force_link then force_link := true; seek_in ic compunit.cu_pos; Misc.copy_file_chunk ic oc compunit.cu_codesize; if !Clflags.debug && compunit.cu_debug > 0 then begin seek_in ic compunit.cu_debug; - List.iter (relocate_debug ofs prefix subst) (input_value ic); + List.iter (record_debug ofs subst) (input_value ic); debug_dirs := List.fold_left (fun s e -> String.Set.add e s) !debug_dirs @@ -163,41 +123,47 @@ let rename_append_bytecode packagename oc mapping defined ofs prefix subst (* Same, for a list of .cmo and .cmi files. Return total size of bytecode. *) -let rec rename_append_bytecode_list packagename oc mapping defined ofs - prefix subst = +let rec append_bytecode_list oc ofs prefix subst = function [] -> ofs | m :: rem -> match m.pm_kind with | PM_intf -> - rename_append_bytecode_list packagename oc mapping defined ofs - prefix subst rem + append_bytecode_list oc ofs prefix subst rem | PM_impl compunit -> let size = - rename_append_bytecode packagename oc mapping defined ofs - prefix subst m.pm_file compunit in - let id = Ident.create_persistent m.pm_name in + append_bytecode oc ofs subst m.pm_file compunit + in + let id = + Ident.create_persistent + (m.pm_name |> Compilation_unit.Name.to_string) + in let root = Path.Pident (Ident.create_persistent prefix) in - rename_append_bytecode_list packagename oc mapping (id :: defined) - (ofs + size) prefix + append_bytecode_list oc (ofs + size) prefix (Subst.add_module id (Path.Pdot (root, Ident.name id)) subst) rem (* Generate the code that builds the tuple representing the package module *) -let build_global_target ~ppf_dump oc target_name members mapping pos coercion = +let build_global_target ~ppf_dump oc target_name members pos coercion = + let for_pack_prefix = Compilation_unit.Prefix.from_clflags () in + let compilation_unit = + Compilation_unit.create for_pack_prefix + (target_name |> Compilation_unit.Name.of_string) + in + let unit_of_name name = Compilation_unit.create_child compilation_unit name in let components = - List.map2 - (fun m (_id1, id2) -> + List.map + (fun m -> match m.pm_kind with | PM_intf -> None - | PM_impl _ -> Some id2) - members mapping in - let lam = - Translmod.transl_package - components (Ident.create_persistent target_name) coercion in + | PM_impl _ -> Some (m.pm_name |> unit_of_name)) + members in + let lam = Translmod.transl_package components compilation_unit coercion in + if !Clflags.dump_rawlambda then + Format.fprintf ppf_dump "%a@." Printlambda.lambda lam; let lam = Simplif.simplify_lambda lam in if !Clflags.dump_lambda then Format.fprintf ppf_dump "%a@." Printlambda.lambda lam; @@ -217,36 +183,36 @@ let package_object_files ~ppf_dump files targetfile targetname coercion = | { pm_kind = PM_intf } -> required_globals | { pm_kind = PM_impl { cu_required_globals; cu_reloc } } -> - let remove_required (rel, _pos) required_globals = + let ids_to_remove (rel, _pos) = match rel with - Reloc_setglobal id -> - Ident.Set.remove id required_globals - | _ -> - required_globals + Reloc_setglobal id -> [id] + | _ -> [] + in + let ids_to_remove = + List.concat_map ids_to_remove cu_reloc + |> Ident.Set.of_list in let required_globals = - List.fold_right remove_required cu_reloc required_globals + let keep cu = + not (Ident.Set.mem (cu |> CU.to_global_ident_for_bytecode) + ids_to_remove) + in + Compilation_unit.Set.filter keep required_globals in - List.fold_right Ident.Set.add cu_required_globals required_globals) - members Ident.Set.empty + List.fold_right Compilation_unit.Set.add cu_required_globals + required_globals) + members Compilation_unit.Set.empty in let unit_names = List.map (fun m -> m.pm_name) members in - let mapping = - List.map - (fun name -> - (Ident.create_persistent name, - Ident.create_persistent(targetname ^ "." ^ name))) - unit_names in let oc = open_out_bin targetfile in try output_string oc Config.cmo_magic_number; let pos_depl = pos_out oc in output_binary_int oc 0; let pos_code = pos_out oc in - let ofs = rename_append_bytecode_list targetname oc mapping [] 0 - targetname Subst.identity members in - build_global_target ~ppf_dump oc targetname members mapping ofs coercion; + let ofs = append_bytecode_list oc 0 targetname Subst.identity members in + build_global_target ~ppf_dump oc targetname members ofs coercion; let pos_debug = pos_out oc in if !Clflags.debug && !events <> [] then begin output_value oc (List.rev !events); @@ -257,15 +223,18 @@ let package_object_files ~ppf_dump files targetfile targetname coercion = List.filter (fun (name, _crc) -> not (List.mem name unit_names)) (Bytelink.extract_crc_interfaces()) in + let for_pack_prefix = CU.Prefix.from_clflags () in + let modname = targetname |> CU.Name.of_string in + let cu_name = CU.create for_pack_prefix modname in let compunit = - { cu_name = CU.Name.of_string targetname; + { cu_name; cu_pos = pos_code; cu_codesize = pos_debug - pos_code; cu_reloc = List.rev !relocs; cu_imports = - (targetname, Some (Env.crc_of_unit targetname)) :: imports; + (modname, Some (cu_name, Env.crc_of_unit modname)) :: imports; cu_primitives = !primitives; - cu_required_globals = Ident.Set.elements required_globals; + cu_required_globals = Compilation_unit.Set.elements required_globals; cu_force_link = !force_link; cu_debug = if pos_final > pos_debug then pos_debug else 0; cu_debugsize = pos_final - pos_debug } in @@ -291,9 +260,13 @@ let package_files ~ppf_dump initial_env files targetfile = let prefix = chop_extensions targetfile in let targetcmi = prefix ^ ".cmi" in let targetname = String.capitalize_ascii(Filename.basename prefix) in + let comp_unit = + Compilation_unit.create (Compilation_unit.Prefix.from_clflags ()) + (targetname |> Compilation_unit.Name.of_string) + in Misc.try_finally (fun () -> let coercion = - Typemod.package_units initial_env files targetcmi targetname in + Typemod.package_units initial_env files targetcmi comp_unit in package_object_files ~ppf_dump files targetfile targetname coercion ) ~exceptionally:(fun () -> remove_file targetfile) @@ -315,8 +288,10 @@ let report_error ppf = function Location.print_filename file | Illegal_renaming(name, file, id) -> fprintf ppf "Wrong file naming: %a@ contains the code for\ - @ %s when %s was expected" - Location.print_filename file name id + @ %a when %s was expected" + Location.print_filename file + Compilation_unit.Name.print name + id | File_not_found file -> fprintf ppf "File %s not found" file diff --git a/bytecomp/bytepackager.mli b/bytecomp/bytepackager.mli index 95177716b342..07b692716b54 100644 --- a/bytecomp/bytepackager.mli +++ b/bytecomp/bytepackager.mli @@ -23,7 +23,7 @@ type error = Forward_reference of string * Ident.t | Multiple_definition of string * Ident.t | Not_an_object_file of string - | Illegal_renaming of string * string * string + | Illegal_renaming of Compilation_unit.Name.t * string * string | File_not_found of string exception Error of error diff --git a/bytecomp/emitcode.ml b/bytecomp/emitcode.ml index ea185b3775f3..f5ebca5b12b2 100644 --- a/bytecomp/emitcode.ml +++ b/bytecomp/emitcode.ml @@ -408,14 +408,14 @@ let to_file outchan unit_name objfile ~required_globals code = end else (0, 0) in let compunit = - { cu_name = Compilation_unit.Name.of_string unit_name; + { cu_name = unit_name; cu_pos = pos_code; cu_codesize = !out_position; cu_reloc = List.rev !reloc_info; cu_imports = Env.imports(); cu_primitives = List.map Primitive.byte_name !Translmod.primitive_declarations; - cu_required_globals = Ident.Set.elements required_globals; + cu_required_globals = Compilation_unit.Set.elements required_globals; cu_force_link = !Clflags.link_everything; cu_debug = pos_debug; cu_debugsize = size_debug } in diff --git a/bytecomp/emitcode.mli b/bytecomp/emitcode.mli index 95da242e3083..eada12345971 100644 --- a/bytecomp/emitcode.mli +++ b/bytecomp/emitcode.mli @@ -18,8 +18,8 @@ open Cmo_format open Instruct -val to_file: out_channel -> string -> string -> - required_globals:Ident.Set.t -> instruction list -> unit +val to_file: out_channel -> Compilation_unit.t -> string -> + required_globals:Compilation_unit.Set.t -> instruction list -> unit (* Arguments: channel on output file name of compilation unit implemented diff --git a/bytecomp/symtable.ml b/bytecomp/symtable.ml index da36358cb967..f8d44b686724 100644 --- a/bytecomp/symtable.ml +++ b/bytecomp/symtable.ml @@ -316,7 +316,7 @@ let init_toplevel () = (* Recover CRC infos for interfaces *) let crcintfs = try - (Obj.magic (sect.read_struct "CRCS") : (string * Digest.t option) list) + (Obj.magic (sect.read_struct "CRCS") : Cmo_format.import_info list) with Not_found -> [] in (* Done *) sect.close_reader(); diff --git a/bytecomp/symtable.mli b/bytecomp/symtable.mli index 782a6086709b..78d210e550d0 100644 --- a/bytecomp/symtable.mli +++ b/bytecomp/symtable.mli @@ -32,7 +32,7 @@ val transl_const: Lambda.structured_constant -> Obj.t (* Functions for the toplevel *) -val init_toplevel: unit -> (string * Digest.t option) list +val init_toplevel: unit -> Cmo_format.import_info list val update_global_table: unit -> unit val get_global_value: Ident.t -> Obj.t val is_global_defined: Ident.t -> bool diff --git a/compilerlibs/Makefile.compilerlibs b/compilerlibs/Makefile.compilerlibs index 2a69c383b0b1..531c419a2f99 100644 --- a/compilerlibs/Makefile.compilerlibs +++ b/compilerlibs/Makefile.compilerlibs @@ -338,7 +338,6 @@ MIDDLE_END = \ middle_end/flambda/inlining_cost.cmo \ middle_end/flambda/simple_value_approx.cmo \ middle_end/flambda/export_info.cmo \ - middle_end/flambda/export_info_for_pack.cmo \ middle_end/compilenv.cmo \ $(MIDDLE_END_CLOSURE) \ $(MIDDLE_END_FLAMBDA) diff --git a/debugger/.depend b/debugger/.depend index b02d1d2460c1..5bcb8ac45929 100644 --- a/debugger/.depend +++ b/debugger/.depend @@ -180,6 +180,7 @@ eval.cmo : \ ../typing/env.cmi \ debugcom.cmi \ ../typing/ctype.cmi \ + ../utils/compilation_unit.cmi \ ../typing/btype.cmi \ eval.cmi eval.cmx : \ @@ -200,6 +201,7 @@ eval.cmx : \ ../typing/env.cmx \ debugcom.cmx \ ../typing/ctype.cmx \ + ../utils/compilation_unit.cmx \ ../typing/btype.cmx \ eval.cmi eval.cmi : \ @@ -286,6 +288,7 @@ loadprinter.cmo : \ ../typing/env.cmi \ ../otherlibs/dynlink/dynlink.cmi \ ../typing/ctype.cmi \ + ../utils/compilation_unit.cmi \ loadprinter.cmi loadprinter.cmx : \ ../typing/types.cmx \ @@ -301,6 +304,7 @@ loadprinter.cmx : \ ../typing/env.cmx \ ../otherlibs/dynlink/dynlink.cmx \ ../typing/ctype.cmx \ + ../utils/compilation_unit.cmx \ loadprinter.cmi loadprinter.cmi : \ ../parsing/longident.cmi \ @@ -419,6 +423,7 @@ printval.cmo : \ ../toplevel/genprintval.cmi \ ../typing/env.cmi \ debugcom.cmi \ + ../utils/compilation_unit.cmi \ printval.cmi printval.cmx : \ ../typing/types.cmx \ @@ -430,6 +435,7 @@ printval.cmx : \ ../toplevel/genprintval.cmx \ ../typing/env.cmx \ debugcom.cmx \ + ../utils/compilation_unit.cmx \ printval.cmi printval.cmi : \ ../typing/types.cmi \ diff --git a/debugger/eval.ml b/debugger/eval.ml index 9ba8e7ea1917..7ae3464b4eca 100644 --- a/debugger/eval.ml +++ b/debugger/eval.ml @@ -40,12 +40,16 @@ exception Error of error let abstract_type = Btype.newgenty (Tconstr (Pident (Ident.create_local ""), [], ref Mnil)) +let get_global_or_predef id = + try + Debugcom.Remote_value.global (Symtable.get_global_position id) + with Symtable.Error _ -> raise(Error(Unbound_identifier id)) + let rec address path event = function - | Env.Aident id -> - if Ident.is_global_or_predef id then - try - Debugcom.Remote_value.global (Symtable.get_global_position id) - with Symtable.Error _ -> raise(Error(Unbound_identifier id)) + | Env.Aunit cu -> + get_global_or_predef (cu |> Compilation_unit.to_global_ident_for_bytecode) + | Env.Alocal id -> + if Ident.is_predef id then get_global_or_predef id else begin match event with Some {ev_ev = ev} -> diff --git a/debugger/loadprinter.ml b/debugger/loadprinter.ml index 696ce3cd1e96..7eb6bfebe0f4 100644 --- a/debugger/loadprinter.ml +++ b/debugger/loadprinter.ml @@ -72,14 +72,16 @@ let loadfile ppf name = the debuggee. *) let rec eval_address = function - | Env.Aident id -> - assert (Ident.is_global id); - let bytecode_or_asm_symbol = Ident.name id in + | Env.Aunit cu -> + let bytecode_or_asm_symbol = + Ident.name (cu |> Compilation_unit.to_global_ident_for_bytecode) + in begin match Dynlink.unsafe_get_global_value ~bytecode_or_asm_symbol with | None -> raise (Symtable.Error (Symtable.Undefined_global bytecode_or_asm_symbol)) | Some obj -> obj end + | Env.Alocal _ -> assert false | Env.Adot(addr, pos) -> Obj.field (eval_address addr) pos let eval_value_path env path = @@ -95,7 +97,8 @@ let eval_value_path env path = let init () = let topdirs = Filename.concat !Parameters.topdirs_path "topdirs.cmi" in - ignore (Env.read_signature "Topdirs" topdirs) + let topdirs_unit = "Topdirs" |> Compilation_unit.of_string in + ignore (Env.read_signature topdirs_unit topdirs) let match_printer_type desc typename = let printer_type = diff --git a/debugger/printval.ml b/debugger/printval.ml index 6e634ad17741..ef9978471c7c 100644 --- a/debugger/printval.ml +++ b/debugger/printval.ml @@ -49,13 +49,16 @@ module EvalPath = struct type valu = Debugcom.Remote_value.t exception Error + + let eval_id id = + try + Debugcom.Remote_value.global (Symtable.get_global_position id) + with Symtable.Error _ -> + raise Error + let rec eval_address = function - | Env.Aident id -> - begin try - Debugcom.Remote_value.global (Symtable.get_global_position id) - with Symtable.Error _ -> - raise Error - end + | Env.Aunit cu -> eval_id (cu |> Compilation_unit.to_global_ident_for_bytecode) + | Env.Alocal id -> eval_id id | Env.Adot(root, pos) -> let v = eval_address root in if not (Debugcom.Remote_value.is_block v) diff --git a/driver/compile.ml b/driver/compile.ml index 7c45095f0de2..bb6ba05bcb0a 100644 --- a/driver/compile.ml +++ b/driver/compile.ml @@ -40,7 +40,8 @@ let to_bytecode i Typedtree.{structure; coercion; _} = |> print_if i.ppf_dump Clflags.dump_rawlambda Printlambda.lambda |> Simplif.simplify_lambda |> print_if i.ppf_dump Clflags.dump_lambda Printlambda.lambda - |> Bytegen.compile_implementation i.module_name + |> Bytegen.compile_implementation + (i.module_name |> Compilation_unit.name_as_string) |> print_if i.ppf_dump Clflags.dump_instr Printinstr.instrlist |> fun bytecode -> bytecode, required_globals ) diff --git a/driver/compile.mli b/driver/compile.mli index 34d72d21b31a..7dc804e25485 100644 --- a/driver/compile.mli +++ b/driver/compile.mli @@ -26,11 +26,12 @@ val implementation: val to_bytecode : Compile_common.info -> Typedtree.implementation -> - Instruct.instruction list * Ident.Set.t + Instruct.instruction list * Compilation_unit.Set.t (** [to_bytecode info typed] takes a typechecked implementation and returns its bytecode. *) val emit_bytecode : - Compile_common.info -> Instruct.instruction list * Ident.Set.t -> unit + Compile_common.info -> Instruct.instruction list * Compilation_unit.Set.t -> + unit (** [emit_bytecode bytecode] output the bytecode executable. *) diff --git a/driver/compile_common.ml b/driver/compile_common.ml index b2615c132ead..1b30f368886f 100644 --- a/driver/compile_common.ml +++ b/driver/compile_common.ml @@ -17,7 +17,7 @@ open Misc type info = { source_file : string; - module_name : string; + module_name : Compilation_unit.t; output_prefix : string; env : Env.t; ppf_dump : Format.formatter; @@ -33,12 +33,17 @@ let annot i = i.output_prefix ^ ".annot" let with_info ~native ~tool_name ~source_file ~output_prefix ~dump_ext k = Compmisc.init_path (); let module_name = Compenv.module_of_filename source_file output_prefix in - Env.set_unit_name module_name; + let for_pack_prefix = Compilation_unit.Prefix.from_clflags () in + let compilation_unit = + Compilation_unit.create for_pack_prefix + (module_name |> Compilation_unit.Name.of_string) + in + Compilation_unit.set_current (Some compilation_unit); let env = Compmisc.initial_env() in let dump_file = String.concat "." [output_prefix; dump_ext] in Compmisc.with_ppf_dump ~file_prefix:dump_file (fun ppf_dump -> k { - module_name; + module_name = compilation_unit; output_prefix; env; source_file; diff --git a/driver/compile_common.mli b/driver/compile_common.mli index ac6d5610b6a7..f160629eb828 100644 --- a/driver/compile_common.mli +++ b/driver/compile_common.mli @@ -18,7 +18,7 @@ type info = { source_file : string; - module_name : string; + module_name : Compilation_unit.t; output_prefix : string; env : Env.t; ppf_dump : Format.formatter; diff --git a/driver/optcompile.ml b/driver/optcompile.ml index 69dbb9cb1175..bdfc686bf116 100644 --- a/driver/optcompile.ml +++ b/driver/optcompile.ml @@ -39,16 +39,16 @@ let flambda i backend Typedtree.{structure; coercion; _} = |> Profile.(record transl) (Translmod.transl_implementation_flambda i.module_name) |> Profile.(record generate) - (fun {Lambda.module_ident; main_module_block_size; + (fun {Lambda.compilation_unit; main_module_block_size; required_globals; code } -> - ((module_ident, main_module_block_size), code) + ((compilation_unit, main_module_block_size), code) |>> print_if i.ppf_dump Clflags.dump_rawlambda Printlambda.lambda |>> Simplif.simplify_lambda |>> print_if i.ppf_dump Clflags.dump_lambda Printlambda.lambda - |> (fun ((module_ident, main_module_block_size), code) -> + |> (fun ((compilation_unit, main_module_block_size), code) -> let program : Lambda.program = { Lambda. - module_ident; + compilation_unit; main_module_block_size; required_globals; code; @@ -80,23 +80,15 @@ let clambda i backend Typedtree.{structure; coercion; _} = ~ppf_dump:i.ppf_dump; Compilenv.save_unit_info (cmx i)) -let reset_compilenv ~module_name = - let for_pack_prefix = Compilation_unit.Prefix.from_clflags () in - let comp_unit = - Compilation_unit.create for_pack_prefix - (Compilation_unit.Name.of_string module_name) - in - Compilenv.reset comp_unit - (* Emit assembly directly from Linear IR *) let emit i = - reset_compilenv ~module_name:i.module_name; + Compilenv.reset i.module_name; Asmgen.compile_implementation_linear i.output_prefix ~progname:i.source_file let implementation ~backend ~start_from ~source_file ~output_prefix ~keep_symbol_tables:_ = let backend info typed = - reset_compilenv ~module_name:info.module_name; + Compilenv.reset info.module_name; if Config.flambda then flambda info backend typed else clambda info backend typed diff --git a/driver/optmaindriver.ml b/driver/optmaindriver.ml index 9cf2e4a77785..35cb5b2d5dc2 100644 --- a/driver/optmaindriver.ml +++ b/driver/optmaindriver.ml @@ -18,9 +18,6 @@ open Clflags module Backend = struct (* See backend_intf.mli. *) - let pack_prefix_for_global_ident id = - Compilenv.pack_prefix_for_global_ident id - let really_import_approx = Import_approx.really_import_approx let import_symbol = Import_approx.import_symbol diff --git a/file_formats/cmi_format.ml b/file_formats/cmi_format.ml index eadf676e0883..888d654b2d2f 100644 --- a/file_formats/cmi_format.ml +++ b/file_formats/cmi_format.ml @@ -32,11 +32,14 @@ exception Error of error they are used to provide consistency across input_value and output_value usage. *) type signature = Types.signature_item list +type import_info = + Compilation_unit.Name.t * (Compilation_unit.t * Digest.t) option +type crcs = import_info list type flags = pers_flags list -type header = modname * signature +type header = Compilation_unit.t * signature type cmi_infos = { - cmi_name : modname; + cmi_name : Compilation_unit.t; cmi_sign : signature; cmi_crcs : crcs; cmi_flags : flags; @@ -88,7 +91,10 @@ let output_cmi filename oc cmi = output_value oc ((cmi.cmi_name, cmi.cmi_sign) : header); flush oc; let crc = Digest.file filename in - let crcs = (cmi.cmi_name, Some crc) :: cmi.cmi_crcs in + let crcs = + (Compilation_unit.name cmi.cmi_name, Some (cmi.cmi_name, crc)) + :: cmi.cmi_crcs + in output_value oc (crcs : crcs); output_value oc (cmi.cmi_flags : flags); crc diff --git a/file_formats/cmi_format.mli b/file_formats/cmi_format.mli index d4d665fdf5f7..6e5b0c4ecd9e 100644 --- a/file_formats/cmi_format.mli +++ b/file_formats/cmi_format.mli @@ -21,10 +21,13 @@ type pers_flags = | Opaque | Unsafe_string +type import_info = + Compilation_unit.Name.t * (Compilation_unit.t * Digest.t) option + type cmi_infos = { - cmi_name : modname; + cmi_name : Compilation_unit.t; cmi_sign : Types.signature_item list; - cmi_crcs : crcs; + cmi_crcs : import_info list; cmi_flags : pers_flags list; } diff --git a/file_formats/cmo_format.mli b/file_formats/cmo_format.mli index 64c5ad098e10..2a2a686348c3 100644 --- a/file_formats/cmo_format.mli +++ b/file_formats/cmo_format.mli @@ -15,8 +15,6 @@ (* Symbol table information for .cmo and .cma files *) -open Misc - (* Relocation information *) type reloc_info = @@ -27,13 +25,17 @@ type reloc_info = (* Descriptor for compilation units *) +type import_info = + Compilation_unit.Name.t * (Compilation_unit.t * Digest.t) option + type compilation_unit_descr = - { cu_name: Compilation_unit.Name.t; (* Name of compilation unit *) + { cu_name: Compilation_unit.t; (* Name of compilation unit *) mutable cu_pos: int; (* Absolute position in file *) cu_codesize: int; (* Size of code block *) cu_reloc: (reloc_info * int) list; (* Relocation information *) - cu_imports: crcs; (* Names and CRC of intfs imported *) - cu_required_globals: Ident.t list; (* Compilation units whose + cu_imports: import_info list; (* Names and CRC of intfs imported *) + cu_required_globals: Compilation_unit.t list; + (* Compilation units whose initialization side effects must occur before this one. *) cu_primitives: string list; (* Primitives declared inside *) diff --git a/file_formats/cmt_format.ml b/file_formats/cmt_format.ml index a493780e5a79..bf187a4e8683 100644 --- a/file_formats/cmt_format.ml +++ b/file_formats/cmt_format.ml @@ -45,8 +45,11 @@ and binary_part = | Partial_signature_item of signature_item | Partial_module_type of module_type +type import_info = + (Compilation_unit.Name.t * (Compilation_unit.t * Digest.t) option) + type cmt_infos = { - cmt_modname : string; + cmt_modname : Compilation_unit.t; cmt_annots : binary_annots; cmt_value_dependencies : (Types.value_description * Types.value_description) list; @@ -57,7 +60,7 @@ type cmt_infos = { cmt_loadpath : string list; cmt_source_digest : Digest.t option; cmt_initial_env : Env.t; - cmt_imports : (string * Digest.t option) list; + cmt_imports : import_info list; cmt_interface_digest : Digest.t option; cmt_use_summaries : bool; cmt_uid_to_loc : Location.t Shape.Uid.Tbl.t; @@ -175,6 +178,9 @@ let save_cmt filename modname binary_annots sourcefile initial_env cmi shape = | Some cmi -> Some (output_cmi temp_file_name oc cmi) in let source_digest = Option.map Digest.file sourcefile in + let compare_imports (modname1, _crc1) (modname2, _crc2) = + Compilation_unit.Name.compare modname1 modname2 + in let cmt = { cmt_modname = modname; cmt_annots = clear_env binary_annots; @@ -187,7 +193,7 @@ let save_cmt filename modname binary_annots sourcefile initial_env cmi shape = cmt_source_digest = source_digest; cmt_initial_env = if need_to_clear_env then keep_only_summary initial_env else initial_env; - cmt_imports = List.sort compare (Env.imports ()); + cmt_imports = List.sort compare_imports (Env.imports ()); cmt_interface_digest = this_crc; cmt_use_summaries = need_to_clear_env; cmt_uid_to_loc = Env.get_uid_to_loc_tbl (); diff --git a/file_formats/cmt_format.mli b/file_formats/cmt_format.mli index 43e09f123647..1a62f7c791c2 100644 --- a/file_formats/cmt_format.mli +++ b/file_formats/cmt_format.mli @@ -15,8 +15,6 @@ (** cmt and cmti files format. *) -open Misc - (** The layout of a cmt file is as follows: := \{\} \{cmt infos\} \{\} where is the cmi file format: @@ -50,8 +48,11 @@ and binary_part = | Partial_signature_item of signature_item | Partial_module_type of module_type +type import_info = + (Compilation_unit.Name.t * (Compilation_unit.t * Digest.t) option) + type cmt_infos = { - cmt_modname : modname; + cmt_modname : Compilation_unit.t; cmt_annots : binary_annots; cmt_value_dependencies : (Types.value_description * Types.value_description) list; @@ -62,7 +63,7 @@ type cmt_infos = { cmt_loadpath : string list; cmt_source_digest : string option; cmt_initial_env : Env.t; - cmt_imports : crcs; + cmt_imports : import_info list; cmt_interface_digest : Digest.t option; cmt_use_summaries : bool; cmt_uid_to_loc : Location.t Shape.Uid.Tbl.t; @@ -91,7 +92,7 @@ val read_cmi : string -> Cmi_format.cmi_infos writes a cmt(i) file. *) val save_cmt : string -> (* filename.cmt to generate *) - string -> (* module name *) + Compilation_unit.t -> (* module name *) binary_annots -> string option -> (* source file *) Env.t -> (* initial env *) diff --git a/file_formats/cmx_format.mli b/file_formats/cmx_format.mli index 840695b4eaf7..4b5b321fb0c0 100644 --- a/file_formats/cmx_format.mli +++ b/file_formats/cmx_format.mli @@ -19,7 +19,10 @@ (* Format of .cmx, .cmxa and .cmxs files *) -open Misc +type import_info_cmi = + Compilation_unit.Name.t * (Compilation_unit.t * Digest.t) option +type import_info_cmx = + Compilation_unit.t * Digest.t option (* Each .o file has a matching .cmx file that provides the following infos on the compilation unit: @@ -37,15 +40,15 @@ type export_info = type apply_fn := int * Lambda.alloc_mode type unit_infos = - (* CR lmaurer: Consider renaming [ui_name], say to [ui_unit]. Code like - [Compilation_unit.name ui_name] makes me wonder what a name's name is. *) { mutable ui_unit: Compilation_unit.t; (* Compilation unit implemented *) mutable ui_defines: Compilation_unit.t list; (* All compilation units in the .cmx file (i.e. [ui_name] and any produced via [Asmpackager]) *) - mutable ui_imports_cmi: crcs; (* Interfaces imported *) - mutable ui_imports_cmx: crcs; (* Infos imported *) + mutable ui_imports_cmi: import_info_cmi list; + (* Interfaces imported *) + mutable ui_imports_cmx: import_info_cmx list; + (* Infos imported *) mutable ui_curry_fun: Clambda.arity list; (* Currying functions needed *) mutable ui_apply_fun: apply_fn list; (* Apply functions needed *) mutable ui_send_fun: apply_fn list; (* Send functions needed *) diff --git a/file_formats/cmxs_format.mli b/file_formats/cmxs_format.mli index f375a341ef41..6e3f703997c7 100644 --- a/file_formats/cmxs_format.mli +++ b/file_formats/cmxs_format.mli @@ -15,17 +15,16 @@ (* Format of .cmxs files *) -open Misc - (* Each .cmxs dynamically-loaded plugin contains a symbol "caml_plugin_header" containing the following info (as an externed record) *) type dynunit = { - dynu_name: Compilation_unit.Name.t; + dynu_name: Compilation_unit.t; dynu_crc: Digest.t; - dynu_imports_cmi: crcs; - dynu_imports_cmx: crcs; + dynu_imports_cmi: + (Compilation_unit.Name.t * (Compilation_unit.t * Digest.t) option) list; + dynu_imports_cmx: (Compilation_unit.t * Digest.t option) list; dynu_defines: Compilation_unit.t list; } diff --git a/jst.dune b/jst.dune index f5cfca3e38e7..8947ecc8cfda 100644 --- a/jst.dune +++ b/jst.dune @@ -63,7 +63,7 @@ ;; middle_end/flambda/ alias_analysis allocated_const augment_specialised_args build_export_info closure_conversion closure_conversion_aux closure_offsets effect_analysis - export_info export_info_for_pack extract_projections find_recursive_functions + export_info extract_projections find_recursive_functions flambda flambda_invariants flambda_iterators flambda_middle_end flambda_to_clambda flambda_utils freshening import_approx inconstant_idents initialize_symbol_to_let_symbol inline_and_simplify inline_and_simplify_aux diff --git a/lambda/debuginfo.ml b/lambda/debuginfo.ml index 4f0b7bc5b3b5..435f28fae673 100644 --- a/lambda/debuginfo.ml +++ b/lambda/debuginfo.ml @@ -68,6 +68,10 @@ module Scoped_location = struct let enter_value_definition ~scopes id = cons scopes Sc_value_definition (dot scopes (Ident.name id)) (Ident.name id) + let enter_compilation_unit ~scopes cu = + let name = Compilation_unit.name_as_string cu in + cons scopes Sc_module_definition (dot scopes name) name + let enter_module_definition ~scopes id = cons scopes Sc_module_definition (dot scopes (Ident.name id)) (Ident.name id) diff --git a/lambda/debuginfo.mli b/lambda/debuginfo.mli index 9677e65c92ce..c811b901a970 100644 --- a/lambda/debuginfo.mli +++ b/lambda/debuginfo.mli @@ -32,6 +32,7 @@ module Scoped_location : sig val empty_scopes : scopes val enter_anonymous_function : scopes:scopes -> scopes val enter_value_definition : scopes:scopes -> Ident.t -> scopes + val enter_compilation_unit : scopes:scopes -> Compilation_unit.t -> scopes val enter_module_definition : scopes:scopes -> Ident.t -> scopes val enter_class_definition : scopes:scopes -> Ident.t -> scopes val enter_method_definition : scopes:scopes -> Asttypes.label -> scopes diff --git a/lambda/lambda.ml b/lambda/lambda.ml index bb0c4164b5dc..9ee7cffc92f5 100644 --- a/lambda/lambda.ml +++ b/lambda/lambda.ml @@ -497,9 +497,9 @@ and lambda_event_kind = | Lev_module_definition of Ident.t type program = - { module_ident : Ident.t; + { compilation_unit : Compilation_unit.t; main_module_block_size : int; - required_globals : Ident.Set.t; + required_globals : Compilation_unit.Set.t; code : lambda } let const_int n = Const_base (Const_int n) @@ -839,17 +839,10 @@ let rec patch_guarded patch = function (* Translate an access path *) let rec transl_address loc = function - | Env.Aident id -> + | Env.Aunit cu -> Lprim(Pgetglobal cu, [], loc) + | Env.Alocal id -> if Ident.is_predef id then Lprim (Pgetpredef id, [], loc) - else if Ident.is_global id - then - (* Prefixes are currently always empty *) - let cu = - Compilation_unit.create Compilation_unit.Prefix.empty - (Ident.name id |> Compilation_unit.Name.of_string) - in - Lprim(Pgetglobal cu, [], loc) else Lvar id | Env.Adot(addr, pos) -> Lprim(Pfield (pos, Reads_agree), [transl_address loc addr], loc) diff --git a/lambda/lambda.mli b/lambda/lambda.mli index ad08167efb41..c1377f132b7b 100644 --- a/lambda/lambda.mli +++ b/lambda/lambda.mli @@ -432,15 +432,16 @@ and lambda_event_kind = | Lev_module_definition of Ident.t type program = - { module_ident : Ident.t; + { compilation_unit : Compilation_unit.t; main_module_block_size : int; - required_globals : Ident.Set.t; (* Modules whose initializer side effects - must occur before [code]. *) + required_globals : Compilation_unit.Set.t; + (* Modules whose initializer side effects + must occur before [code]. *) code : lambda } (* Lambda code for the middle-end. * In the closure case the code is a sequence of assignments to a preallocated block of size [main_module_block_size] using - (Setfield(Getglobal(module_ident))). The size is used to preallocate + (Setfield(Getpredef(compilation_unit))). The size is used to preallocate the block. * In the flambda case the code is an expression returning a block value of size [main_module_block_size]. The size is used to build diff --git a/lambda/translcore.ml b/lambda/translcore.ml index 7866a2615113..3a292ec3261a 100644 --- a/lambda/translcore.ml +++ b/lambda/translcore.ml @@ -36,7 +36,7 @@ let use_dup_for_constant_arrays_bigger_than = 4 (* Forward declaration -- to be filled in by Translmod.transl_module *) let transl_module = ref((fun ~scopes:_ _cc _rootpath _modl -> assert false) : - scopes:scopes -> module_coercion -> Path.t option -> + scopes:scopes -> module_coercion -> Longident.t option -> module_expr -> lambda) let transl_object = @@ -61,13 +61,12 @@ let prim_fresh_oo_id = let transl_extension_constructor ~scopes env path ext = let path = Printtyp.wrap_printing_env env ~error:true (fun () -> - Option.map (Printtyp.rewrite_double_underscore_paths env) path) + Option.map (Printtyp.rewrite_double_underscore_longidents env) path) in let name = - match path, !Clflags.for_package with - None, _ -> Ident.name ext.ext_id - | Some p, None -> Path.name p - | Some p, Some pack -> Printf.sprintf "%s.%s" pack (Path.name p) + match path with + | None -> Ident.name ext.ext_id + | Some path -> Format.asprintf "%a" Pprintast.longident path in let loc = of_location ~scopes ext.ext_loc in match ext.ext_kind with diff --git a/lambda/translcore.mli b/lambda/translcore.mli index 77981e11e571..72901a70fd70 100644 --- a/lambda/translcore.mli +++ b/lambda/translcore.mli @@ -38,7 +38,7 @@ val transl_let: scopes:scopes -> ?in_structure:bool -> rec_flag -> value_binding list -> value_kind -> lambda -> lambda val transl_extension_constructor: scopes:scopes -> - Env.t -> Path.t option -> + Env.t -> Longident.t option -> extension_constructor -> lambda val transl_scoped_exp : scopes:scopes -> expression -> lambda @@ -57,7 +57,7 @@ val report_error: formatter -> error -> unit (* Forward declaration -- to be filled in by Translmod.transl_module *) val transl_module : - (scopes:scopes -> module_coercion -> Path.t option -> + (scopes:scopes -> module_coercion -> Longident.t option -> module_expr -> lambda) ref val transl_object : (scopes:scopes -> Ident.t -> string list -> diff --git a/lambda/translmod.ml b/lambda/translmod.ml index 8005d73a0c0a..db6602023d29 100644 --- a/lambda/translmod.ml +++ b/lambda/translmod.ml @@ -18,7 +18,6 @@ open Misc open Asttypes -open Path open Types open Typedtree open Lambda @@ -47,30 +46,32 @@ let cons_opt x_opt xs = | None -> xs | Some x -> x :: xs -(* Hacky shims. Note that we only ever create compilation units with - empty prefixes, so these are indeed safe. *) -let compilation_unit_of_modname modname = - Compilation_unit.create Compilation_unit.Prefix.empty - (modname |> Compilation_unit.Name.of_string) -let compilation_unit_of_ident ident = - Ident.name ident |> compilation_unit_of_modname -let ident_of_compilation_unit compilation_unit = - assert (Compilation_unit.Prefix.is_empty - (Compilation_unit.for_pack_prefix compilation_unit)); - compilation_unit |> Compilation_unit.to_global_ident_for_legacy_code - (* Keep track of the root path (from the root of the namespace to the currently compiled module expression). Useful for naming extensions. *) -let global_path glob = Some(Pident glob) +let longident_of_comp_unit cu = + let rec of_names names_rev = + match names_rev with + | [] -> fatal_error "empty sequence of names" + | [name] -> Longident.Lident name + | name :: names_rev -> Longident.Ldot (of_names names_rev, name) + in + let names_rev = + Compilation_unit.full_path cu + |> List.rev_map Compilation_unit.Name.to_string + in + of_names names_rev + +let global_path cu = + Some(longident_of_comp_unit cu) let functor_path path param = match path with None -> None - | Some p -> Some(Papply(p, Pident param)) + | Some p -> Some(Longident.Lapply(p, Lident (Ident.name param))) let field_path path field = match path with None -> None - | Some p -> Some(Pdot(p, Ident.name field)) + | Some p -> Some(Longident.Ldot(p, Ident.name field)) (* Compile type extensions *) @@ -871,31 +872,29 @@ let _ = (* Introduce dependencies on modules referenced only by "external". *) let scan_used_globals lam = - let globals = ref Ident.Set.empty in + let globals = ref Compilation_unit.Set.empty in let rec scan lam = Lambda.iter_head_constructor scan lam; match lam with Lprim ((Pgetglobal cu | Psetglobal cu), _, _) -> - globals := Ident.Set.add (cu |> ident_of_compilation_unit) !globals - | Lprim (Pgetpredef id, _, _) -> - globals := Ident.Set.add id !globals + globals := Compilation_unit.Set.add cu !globals | _ -> () in scan lam; !globals let required_globals ~flambda body = let globals = scan_used_globals body in - let add_global id req = - if not flambda && Ident.Set.mem id globals then + let add_global comp_unit req = + if not flambda && Compilation_unit.Set.mem comp_unit globals then req else - Ident.Set.add id req + Compilation_unit.Set.add comp_unit req in let required = List.fold_left - (fun acc path -> add_global (Path.head path) acc) - (if flambda then globals else Ident.Set.empty) - (Translprim.get_used_primitives ()) + (fun acc cu -> add_global cu acc) + (if flambda then globals else Compilation_unit.Set.empty) + (Translprim.get_units_with_used_primitives ()) in let required = List.fold_right add_global (Env.get_required_globals ()) required @@ -906,21 +905,20 @@ let required_globals ~flambda body = (* Compile an implementation *) -let transl_implementation_flambda module_name (str, cc) = +let transl_implementation_flambda compilation_unit (str, cc) = reset_labels (); primitive_declarations := []; Translprim.clear_used_primitives (); Translcore.clear_probe_handlers (); - let module_id = Ident.create_persistent module_name in - let scopes = enter_module_definition ~scopes:empty_scopes module_id in + let scopes = enter_compilation_unit ~scopes:empty_scopes compilation_unit in let body, size = Translobj.transl_label_init (fun () -> let body, size = transl_struct ~scopes Loc_unknown [] cc - (global_path module_id) str in + (global_path compilation_unit) str in Translcore.declare_probe_handlers body, size) in - { module_ident = module_id; + { compilation_unit; main_module_block_size = size; required_globals = required_globals ~flambda:true body; code = body } @@ -929,11 +927,8 @@ let transl_implementation module_name (str, cc) = let implementation = transl_implementation_flambda module_name (str, cc) in - let compilation_unit = - implementation.module_ident |> compilation_unit_of_ident - in let code = - Lprim (Psetglobal compilation_unit, [implementation.code], + Lprim (Psetglobal implementation.compilation_unit, [implementation.code], Loc_unknown) in { implementation with code } @@ -1080,8 +1075,7 @@ let transl_store_subst = ref Ident.Map.empty let nat_toplevel_name id = try match Ident.Map.find id !transl_store_subst with | Lprim(Pfield (pos, _), - [Lprim(Pgetglobal glob, [], _)], _) -> - ((glob |> ident_of_compilation_unit),pos) + [Lprim(Pgetglobal glob, [], _)], _) -> (glob,pos) | _ -> raise Not_found with Not_found -> fatal_error("Translmod.nat_toplevel_name: " ^ Ident.unique_name id) @@ -1443,9 +1437,7 @@ let transl_store_structure ~scopes glob map prims aliases str = in let aliases = make_sequence store_alias aliases in List.fold_right store_primitive prims - (transl_store ~scopes - (global_path (glob |> ident_of_compilation_unit)) - !transl_store_subst aliases str) + (transl_store ~scopes (global_path glob) !transl_store_subst aliases str) (* Transform a coercion and the list of value identifiers defined by a toplevel structure into a table [id -> (pos, coercion)], @@ -1502,8 +1494,6 @@ let transl_store_gen ~scopes module_name ({ str_items = str }, restr) topl = primitive_declarations := []; Translcore.clear_probe_handlers (); Translprim.clear_used_primitives (); - let module_id = Ident.create_persistent module_name in - let compilation_unit = module_id |> compilation_unit_of_ident in let (map, prims, aliases, size) = build_ident_map restr (defined_idents str) (more_idents str) in let f str = @@ -1514,32 +1504,30 @@ let transl_store_gen ~scopes module_name ({ str_items = str }, restr) topl = Lambda.subst (fun _ _ env -> env) !transl_store_subst (transl_exp ~scopes expr) | str -> - transl_store_structure ~scopes compilation_unit map prims aliases str + transl_store_structure ~scopes module_name map prims aliases str in Translcore.declare_probe_handlers expr in - transl_store_label_init compilation_unit size f str + transl_store_label_init module_name size f str (*size, transl_label_init (transl_store_structure module_id map prims str)*) let transl_store_phrases module_name str = let scopes = - enter_module_definition ~scopes:empty_scopes - (Ident.create_persistent module_name) + enter_compilation_unit ~scopes:empty_scopes module_name in transl_store_gen ~scopes module_name (str,Tcoerce_none) true -let transl_store_implementation module_name (str, restr) = +let transl_store_implementation compilation_unit (str, restr) = let s = !transl_store_subst in transl_store_subst := Ident.Map.empty; - let module_ident = Ident.create_persistent module_name in - let scopes = enter_module_definition ~scopes:empty_scopes module_ident in - let (i, code) = transl_store_gen ~scopes module_name (str, restr) false in + let scopes = enter_compilation_unit ~scopes:empty_scopes compilation_unit in + let i, code = transl_store_gen ~scopes compilation_unit (str, restr) false in transl_store_subst := s; { Lambda.main_module_block_size = i; code; - (* module_ident is not used by closure, but this allow to share + (* compilation_unit is not used by closure, but this allow to share the type with the flambda version *) - module_ident; + compilation_unit; required_globals = required_globals ~flambda:true code } (* Compile a toplevel phrase *) @@ -1636,7 +1624,7 @@ let transl_toplevel_item ~scopes item = set_toplevel_unique_name id; let lam = transl_module ~scopes:(enter_module_definition ~scopes id) - Tcoerce_none (Some(Pident id)) modl in + Tcoerce_none (Some(Lident (Ident.name id))) modl in toploop_setvalue id lam | Tstr_recmodule bindings -> let idents = List.filter_map (fun mb -> mb.mb_id) bindings in @@ -1648,7 +1636,7 @@ let transl_toplevel_item ~scopes item = | Some id -> transl_module ~scopes:(enter_module_definition ~scopes id) - Tcoerce_none (Some (Pident id)) modl) + Tcoerce_none (Some (Lident (Ident.name id))) modl) bindings (make_sequence toploop_setvalue_id idents) | Tstr_class cl_list -> @@ -1739,9 +1727,7 @@ let transl_toplevel_definition str = let get_component = function None -> Lconst const_unit - | Some id -> - let cu = id |> compilation_unit_of_ident in - Lprim(Pgetglobal cu, [], Loc_unknown) + | Some id -> Lprim(Pgetglobal id, [], Loc_unknown) let transl_package_flambda component_names coercion = let size = @@ -1762,7 +1748,7 @@ let transl_package component_names target_name coercion = let components = Lprim(Pmakeblock(0, Immutable, None, alloc_heap), List.map get_component component_names, Loc_unknown) in - Lprim(Psetglobal (target_name |> compilation_unit_of_ident), + Lprim(Psetglobal target_name, [apply_coercion Loc_unknown Strict coercion components], Loc_unknown) (* @@ -1782,7 +1768,6 @@ let transl_package component_names target_name coercion = *) let transl_store_package component_names target_name coercion = - let target_unit = target_name |> compilation_unit_of_ident in let rec make_sequence fn pos arg = match arg with [] -> lambda_unit @@ -1793,7 +1778,7 @@ let transl_store_package component_names target_name coercion = make_sequence (fun pos id -> Lprim(mod_setfield pos, - [Lprim(Pgetglobal target_unit, [], Loc_unknown); + [Lprim(Pgetglobal target_name, [], Loc_unknown); get_component id], Loc_unknown)) 0 component_names) @@ -1810,7 +1795,7 @@ let transl_store_package component_names target_name coercion = make_sequence (fun pos _id -> Lprim(mod_setfield pos, - [Lprim(Pgetglobal target_unit, [], Loc_unknown); + [Lprim(Pgetglobal target_name, [], Loc_unknown); Lprim(mod_field pos, [Lvar blk], Loc_unknown)], Loc_unknown)) 0 pos_cc_list)) diff --git a/lambda/translmod.mli b/lambda/translmod.mli index af042d6a539b..926ca2aa30ec 100644 --- a/lambda/translmod.mli +++ b/lambda/translmod.mli @@ -20,25 +20,27 @@ open Typedtree open Lambda val transl_implementation: - string -> structure * module_coercion -> Lambda.program -val transl_store_phrases: string -> structure -> int * lambda + Compilation_unit.t -> structure * module_coercion -> Lambda.program +val transl_store_phrases: Compilation_unit.t -> structure -> int * lambda val transl_store_implementation: - string -> structure * module_coercion -> Lambda.program + Compilation_unit.t -> structure * module_coercion -> Lambda.program val transl_implementation_flambda: - string -> structure * module_coercion -> Lambda.program + Compilation_unit.t -> structure * module_coercion -> Lambda.program val transl_toplevel_definition: structure -> lambda val transl_package: - Ident.t option list -> Ident.t -> module_coercion -> lambda + Compilation_unit.t option list -> Compilation_unit.t -> module_coercion + -> lambda val transl_store_package: - Ident.t option list -> Ident.t -> module_coercion -> int * lambda + Compilation_unit.t option list -> Compilation_unit.t -> module_coercion + -> int * lambda val transl_package_flambda: - Ident.t option list -> module_coercion -> int * lambda + Compilation_unit.t option list -> module_coercion -> int * lambda val toplevel_name: Ident.t -> string -val nat_toplevel_name: Ident.t -> Ident.t * int +val nat_toplevel_name: Ident.t -> Compilation_unit.t * int val primitive_declarations: Primitive.description list ref diff --git a/lambda/translprim.ml b/lambda/translprim.ml index c7bf980c4be2..a023b5567cec 100644 --- a/lambda/translprim.ml +++ b/lambda/translprim.ml @@ -93,20 +93,22 @@ type prim = | Apply of Lambda.region_close | Revapply of Lambda.region_close -let used_primitives = Hashtbl.create 7 +let units_with_used_primitives = Hashtbl.create 7 let add_used_primitive loc env path = match path with - Some (Path.Pdot _ as path) -> - let path = Env.normalize_path_prefix (Some loc) env path in - let unit = Path.head path in - if Ident.is_global_or_predef unit - && not (Hashtbl.mem used_primitives path) - then Hashtbl.add used_primitives path loc + Some (Path.Pdot (path, _)) -> + let address = Env.find_module_address path env in + begin match Env.address_head address with + | AHunit cu -> + if not (Hashtbl.mem units_with_used_primitives cu) + then Hashtbl.add units_with_used_primitives cu loc + | AHlocal _ -> () + end | _ -> () -let clear_used_primitives () = Hashtbl.clear used_primitives -let get_used_primitives () = - Hashtbl.fold (fun path _ acc -> path :: acc) used_primitives [] +let clear_used_primitives () = Hashtbl.clear units_with_used_primitives +let get_units_with_used_primitives () = + Hashtbl.fold (fun path _ acc -> path :: acc) units_with_used_primitives [] let gen_array_kind = if Config.flat_float_array then Pgenarray else Paddrarray @@ -642,8 +644,13 @@ let lambda_of_loc kind sloc = | Loc_FILE -> Lconst (Const_immstring file) | Loc_MODULE -> let filename = Filename.basename file in - let name = Env.get_unit_name () in - let module_name = if name = "" then "//"^filename^"//" else name in + let name = Compilation_unit.get_current () in + let module_name = + match name with + | None -> "//"^filename^"//" + | Some comp_unit -> + Compilation_unit.name_as_string comp_unit + in Lconst (Const_immstring module_name) | Loc_LOC -> let loc = Printf.sprintf "File %S, line %d, characters %d-%d" diff --git a/lambda/translprim.mli b/lambda/translprim.mli index f35c0bb3af37..5f3c1cb8020a 100644 --- a/lambda/translprim.mli +++ b/lambda/translprim.mli @@ -27,7 +27,7 @@ val add_exception_ident : Ident.t -> unit val remove_exception_ident : Ident.t -> unit val clear_used_primitives : unit -> unit -val get_used_primitives: unit -> Path.t list +val get_units_with_used_primitives: unit -> Compilation_unit.t list val check_primitive_arity : Location.t -> Primitive.description -> unit diff --git a/middle_end/backend_intf.mli b/middle_end/backend_intf.mli index ee5257387e2b..3d2fcba9b971 100644 --- a/middle_end/backend_intf.mli +++ b/middle_end/backend_intf.mli @@ -19,10 +19,6 @@ (** Knowledge that the middle end needs about the backend. *) module type S = sig - (** Compute the pack prefix for the given identifier. *) - (* CR mshinwell: rename to pack_prefix_for_global_ident *) - val pack_prefix_for_global_ident : (Ident.t -> Compilation_unit.Prefix.t) - (** If the given approximation is that of a symbol (Value_symbol) or an external (Value_extern), attempt to find a more informative approximation from a previously-written compilation artifact. In the diff --git a/middle_end/closure/closure.ml b/middle_end/closure/closure.ml index 067152c10212..667fd51b53e2 100644 --- a/middle_end/closure/closure.ml +++ b/middle_end/closure/closure.ml @@ -62,10 +62,16 @@ let rec build_closure_env env_param pos = function and no longer in Cmmgen so that approximations stored in .cmx files contain the right names if the -for-pack option is active. *) -let getglobal dbg id = - let symbol = Compilenv.symbol_for_global id |> Linkage_name.to_string in +let getsymbol dbg symbol = + let symbol = Symbol.linkage_name symbol |> Linkage_name.to_string in Uprim (P.Pread_symbol symbol, [], dbg) +let getglobal dbg cu = + getsymbol dbg (Symbol.for_compilation_unit cu) + +let getpredef dbg id = + getsymbol dbg (Symbol.for_predef_ident id) + let region ulam = let is_trivial = match ulam with @@ -1219,14 +1225,12 @@ let rec close ({ backend; fenv; cenv ; mutable_vars } as env) lam = [arg], _loc) -> close env arg | Lprim(Pgetglobal cu, [], loc) -> - let id = Compilation_unit.to_global_ident_for_legacy_code cu in let dbg = Debuginfo.from_location loc in - check_constant_result (getglobal dbg id) - (Compilenv.global_approx id) + check_constant_result (getglobal dbg cu) + (Compilenv.global_approx cu) | Lprim(Pgetpredef id, [], loc) -> let dbg = Debuginfo.from_location loc in - check_constant_result (getglobal dbg id) - (Compilenv.global_approx id) + getpredef dbg id, Value_unknown | Lprim(Pfield (n, _), [lam], loc) -> let (ulam, approx) = close env lam in let dbg = Debuginfo.from_location loc in @@ -1238,8 +1242,7 @@ let rec close ({ backend; fenv; cenv ; mutable_vars } as env) lam = if approx <> Value_unknown then (!global_approx).(n) <- approx; let dbg = Debuginfo.from_location loc in - let id = cu |> Compilation_unit.to_global_ident_for_legacy_code in - (Uprim(P.Psetfield(n, is_ptr, init), [getglobal dbg id; ulam], dbg), + (Uprim(P.Psetfield(n, is_ptr, init), [getglobal dbg cu; ulam], dbg), Value_unknown) | Lprim(Praise k, [arg], loc) -> let (ulam, _approx) = close env arg in @@ -1663,8 +1666,7 @@ let intro ~backend ~size lam = let opaque = !Clflags.opaque || Env.is_imported_opaque - (Compilation_unit.get_current_exn () - |> Compilation_unit.full_path_as_string) + (Compilation_unit.name (Compilation_unit.get_current_exn ())) in if opaque then Compilenv.set_global_approx(Value_unknown) diff --git a/middle_end/closure/closure_middle_end.ml b/middle_end/closure/closure_middle_end.ml index 1ba1795034e0..230d96f8e28b 100644 --- a/middle_end/closure/closure_middle_end.ml +++ b/middle_end/closure/closure_middle_end.ml @@ -38,7 +38,8 @@ let lambda_to_clambda ~backend ~prefixname:_ ~ppf_dump let current_unit_ident = Compilation_unit.get_current_exn () |> Compilation_unit.name - |> Compilation_unit.Name.persistent_ident + |> Compilation_unit.Name.to_string + |> Ident.create_persistent in { original_idents = []; module_path = Path.Pident current_unit_ident; diff --git a/middle_end/compilenv.ml b/middle_end/compilenv.ml index 01dae651ca05..f126fdc45df0 100644 --- a/middle_end/compilenv.ml +++ b/middle_end/compilenv.ml @@ -29,7 +29,7 @@ module CU = Compilation_unit type error = Not_a_unit_info of string | Corrupted_unit_info of string - | Illegal_renaming of CU.Name.t * CU.Name.t * string + | Illegal_renaming of CU.t * CU.t * string exception Error of error @@ -92,7 +92,7 @@ let current_unit = let reset compilation_unit = CU.Name.Tbl.clear global_infos_table; Set_of_closures_id.Tbl.clear imported_sets_of_closures_table; - CU.set_current compilation_unit; + CU.set_current (Some compilation_unit); current_unit.ui_unit <- compilation_unit; current_unit.ui_defines <- [compilation_unit]; current_unit.ui_imports_cmi <- []; @@ -137,44 +137,44 @@ let read_library_info filename = (* Read and cache info on global identifiers *) -let get_unit_info modname = - if CU.Name.equal modname (CU.name current_unit.ui_unit) +let get_unit_info comp_unit ~cmx_name = + if CU.Name.equal cmx_name (CU.name current_unit.ui_unit) then Some current_unit else begin try - CU.Name.Tbl.find global_infos_table modname + CU.Name.Tbl.find global_infos_table cmx_name with Not_found -> let (infos, crc) = - if Env.is_imported_opaque (modname |> CU.Name.to_string) - then (None, None) + if Env.is_imported_opaque cmx_name then (None, None) else begin try let filename = - Load_path.find_uncap ((modname |> CU.Name.to_string) ^ ".cmx") in + Load_path.find_uncap ((cmx_name |> CU.Name.to_string) ^ ".cmx") in let (ui, crc) = read_unit_info filename in - if not (CU.Name.equal (CU.name ui.ui_unit) modname) - then - raise(Error(Illegal_renaming(modname, CU.name ui.ui_unit, filename))); + if not (CU.equal ui.ui_unit comp_unit) then + raise(Error(Illegal_renaming(comp_unit, ui.ui_unit, filename))); (Some ui, Some crc) with Not_found -> - let warn = Warnings.No_cmx_file (modname |> CU.Name.to_string) in + let warn = Warnings.No_cmx_file (cmx_name |> CU.Name.to_string) in Location.prerr_warning Location.none warn; (None, None) end in current_unit.ui_imports_cmx <- - (modname |> CU.Name.to_string, crc) :: current_unit.ui_imports_cmx; - CU.Name.Tbl.add global_infos_table modname infos; + (comp_unit, crc) :: current_unit.ui_imports_cmx; + CU.Name.Tbl.add global_infos_table cmx_name infos; infos end +let which_cmx_file desired_comp_unit = + CU.which_cmx_file desired_comp_unit ~accessed_by:(CU.get_current_exn ()) + let get_global_info global_ident = - assert (Ident.is_global global_ident); - get_unit_info (global_ident |> Ident.name |> CU.Name.of_string) + get_unit_info global_ident ~cmx_name:(which_cmx_file global_ident) let cache_unit_info ui = - CU.Name.Tbl.add global_infos_table (CU.name ui.ui_unit) (Some ui) + CU.Name.Tbl.add global_infos_table (which_cmx_file ui.ui_unit) (Some ui) (* Return the approximation of a global identifier *) @@ -185,49 +185,20 @@ let get_clambda_approx ui = | Clambda approx -> approx let toplevel_approx : - (string, Clambda.value_approximation) Hashtbl.t = Hashtbl.create 16 + (CU.t, Clambda.value_approximation) Hashtbl.t = Hashtbl.create 16 let record_global_approx_toplevel () = Hashtbl.add toplevel_approx - (CU.Name.to_string (CU.name current_unit.ui_unit)) + current_unit.ui_unit (get_clambda_approx current_unit) let global_approx id = - if Ident.is_predef id then Clambda.Value_unknown - else try Hashtbl.find toplevel_approx (Ident.name id) + try Hashtbl.find toplevel_approx id with Not_found -> match get_global_info id with | None -> Clambda.Value_unknown | Some ui -> get_clambda_approx ui -(* Determination of pack prefixes for units and identifiers *) - -let pack_prefix_for_current_unit () = - CU.for_pack_prefix current_unit.ui_unit - -let pack_prefix_for_global_ident id = - if not (Ident.is_global id) then - Misc.fatal_errorf "Identifier %a is not global" Ident.print id - else if Hashtbl.mem toplevel_approx (Ident.name id) then - CU.for_pack_prefix (CU.get_current_exn ()) - else - match get_global_info id with - | Some ui -> CU.for_pack_prefix ui.ui_unit - | None -> - (* If the .cmx file is missing, the prefix is assumed to be empty. *) - CU.Prefix.empty - -let symbol_for_global' id = - assert (Ident.is_global_or_predef id); - let pack_prefix = - if Ident.is_global id then pack_prefix_for_global_ident id - else CU.Prefix.empty - in - Symbol.for_global_or_predef_ident pack_prefix id - -let symbol_for_global id = - symbol_for_global' id |> Symbol.linkage_name - (* Register the approximation of the module being compiled *) let set_global_approx approx = @@ -246,67 +217,18 @@ let set_export_info export_info = assert(Config.flambda); current_unit.ui_export_info <- Flambda export_info -(* Determine which .cmx file to load for a given compilation unit. - This is tricky in the case of packs. It can be done by lining up the - desired compilation unit's full path (i.e. pack prefix then unit name) - against the current unit's full path and observing when/if they diverge. *) -let which_cmx_file desired_comp_unit = - let desired_prefix = CU.for_pack_prefix desired_comp_unit in - if CU.Prefix.is_empty desired_prefix then - (* If the unit we're looking for is not in a pack, then the correct .cmx - file is the one with the same name as the unit, irrespective of any - current pack. *) - CU.name desired_comp_unit - else - let current_comp_unit = Compilation_unit.get_current_exn () in - (* This lines up the full paths as described above. *) - let rec match_components ~current ~desired = - match current, desired with - | current_name::current, desired_name::desired -> - if CU.Name.equal current_name desired_name then - (* The full paths are equal up to the current point; keep going. *) - match_components ~current ~desired - else - (* The paths have diverged. The next component of the desired - path is the .cmx file to load. *) - desired_name - | [], desired_name::_desired -> - (* The whole of the current unit's full path (including the name of - the unit itself) is now known to be a prefix of the desired unit's - pack *prefix*. This means we must be making a pack. The .cmx - file to load is named after the next component of the desired - unit's path (which may in turn be a pack). *) - desired_name - | [], [] -> - (* The paths were equal, so the desired compilation unit is just the - current one. *) - CU.name desired_comp_unit - | _::_, [] -> - (* The current path is longer than the desired unit's path, which - means we're attempting to go back up the pack hierarchy. This is - an error. *) - Misc.fatal_errorf "Compilation unit@ %a@ is inaccessible when \ - compiling compilation unit@ %a" - CU.print desired_comp_unit - CU.print current_comp_unit - in - match_components ~current:(CU.full_path current_comp_unit) - ~desired:(CU.full_path desired_comp_unit) - let approx_for_global comp_unit = if CU.equal comp_unit CU.predef_exn then invalid_arg "approx_for_global with predef_exn compilation unit"; - let comp_unit_name = which_cmx_file comp_unit in - let id = Ident.create_persistent (comp_unit_name |> CU.Name.to_string) in - let modname = Ident.name id |> CU.Name.of_string in - match CU.Name.Tbl.find export_infos_table modname with + let cmx_name = which_cmx_file comp_unit in + match CU.Name.Tbl.find export_infos_table cmx_name with | otherwise -> Some otherwise | exception Not_found -> - match get_global_info id with + match get_unit_info comp_unit ~cmx_name with | None -> None | Some ui -> let exported = get_flambda_export_info ui in - CU.Name.Tbl.add export_infos_table modname exported; + CU.Name.Tbl.add export_infos_table cmx_name exported; merged_environment := Export_info.merge !merged_environment exported; Some exported @@ -402,8 +324,7 @@ let structured_constants () = }) let require_global global_ident = - if not (Ident.is_predef global_ident) then - ignore (get_global_info global_ident : Cmx_format.unit_infos option) + ignore (get_global_info global_ident : Cmx_format.unit_infos option) (* Error report *) @@ -420,8 +341,8 @@ let report_error ppf = function fprintf ppf "%a@ contains the description for unit\ @ %a when %a was expected" Location.print_filename filename - CU.Name.print name - CU.Name.print modname + CU.print name + CU.print modname let () = Location.register_error_of_exn diff --git a/middle_end/compilenv.mli b/middle_end/compilenv.mli index df4b60b530b8..70cb09b95e47 100644 --- a/middle_end/compilenv.mli +++ b/middle_end/compilenv.mli @@ -36,19 +36,7 @@ val reset : Compilation_unit.t -> unit val current_unit_infos: unit -> unit_infos (* Return the infos for the unit being compiled *) -val pack_prefix_for_current_unit : unit -> Compilation_unit.Prefix.t - (* Return the pack prefix for the unit being compiled *) - -val pack_prefix_for_global_ident : Ident.t -> Compilation_unit.Prefix.t - (* Find the pack prefix for an identifier by reading the .cmx file. - The identifier must be [Global]. *) - -val symbol_for_global: Ident.t -> Linkage_name.t - (* Return the asm symbol that refers to the given global identifier - flambda-only *) -val symbol_for_global': Ident.t -> Symbol.t - (* flambda-only *) -val global_approx: Ident.t -> Clambda.value_approximation +val global_approx: Compilation_unit.t -> Clambda.value_approximation (* Return the approximation for the given global identifier clambda-only *) val set_global_approx: Clambda.value_approximation -> unit @@ -107,7 +95,7 @@ val cache_unit_info: unit_infos -> unit honored by [symbol_for_global] and [global_approx] without looking at the corresponding .cmx file. *) -val require_global: Ident.t -> unit +val require_global: Compilation_unit.t -> unit (* Enforce a link dependency of the current compilation unit to the required module *) @@ -116,8 +104,7 @@ val read_library_info: string -> library_infos type error = Not_a_unit_info of string | Corrupted_unit_info of string - | Illegal_renaming of - Compilation_unit.Name.t * Compilation_unit.Name.t * string + | Illegal_renaming of Compilation_unit.t * Compilation_unit.t * string exception Error of error diff --git a/middle_end/flambda/closure_conversion.ml b/middle_end/flambda/closure_conversion.ml index 16c9d363d617..2be7a810c4b1 100644 --- a/middle_end/flambda/closure_conversion.ml +++ b/middle_end/flambda/closure_conversion.ml @@ -26,16 +26,12 @@ let name_expr = Flambda_utils.name_expr let name_expr_from_var = Flambda_utils.name_expr_from_var type t = { - current_unit_id : Ident.t; + current_unit : Compilation_unit.t; backend : (module Backend_intf.S); mutable imported_symbols : Symbol.Set.t; mutable declared_symbols : (Symbol.t * Flambda.constant_defining_value) list; } -let pack_prefix_for_global_ident t = - let module B = (val t.backend : Backend_intf.S) in - B.pack_prefix_for_global_ident - let add_default_argument_wrappers lam = let defs_are_all_functions (defs : (_ * Lambda.lambda) list) = List.for_all (function (_, Lambda.Lfunction _) -> true | _ -> false) defs @@ -458,8 +454,7 @@ let rec close t env (lam : Lambda.lambda) : Flambda.t = (Lambda.Llet(Strict, Pgenval, Ident.create_local "dummy", arg, Lconst const)) | Lprim (Pfield _, [Lprim (Pgetglobal cu, [],_)], _) - when Ident.same (cu |> Compilation_unit.to_global_ident_for_legacy_code) - t.current_unit_id -> + when Compilation_unit.equal cu t.current_unit -> Misc.fatal_errorf "[Pfield (Pgetglobal ...)] for the current compilation \ unit is forbidden upon entry to the middle end" | Lprim (Psetfield (_, _, _), [Lprim (Pgetglobal _, [], _); _], _) -> @@ -471,12 +466,7 @@ let rec close t env (lam : Lambda.lambda) : Flambda.t = t.imported_symbols <- Symbol.Set.add symbol t.imported_symbols; name_expr (Symbol symbol) ~name:Names.predef_exn | Lprim (Pgetglobal cu, [], _) -> - let id = cu |> Compilation_unit.to_global_ident_for_legacy_code in - assert (not (Ident.same id t.current_unit_id)); - let cu = - Compilation_unit.with_for_pack_prefix cu - (pack_prefix_for_global_ident t id) - in + assert (not (Compilation_unit.equal cu t.current_unit)); let symbol = Symbol.for_compilation_unit cu in t.imported_symbols <- Symbol.Set.add symbol t.imported_symbols; name_expr (Symbol symbol) ~name:Names.pgetglobal @@ -708,26 +698,18 @@ and close_let_bound_expression t ?let_rec_ident let_bound_var env ~var:let_bound_var)) | lam -> Expr (close t env lam) -let lambda_to_flambda ~backend ~module_ident ~size lam +let lambda_to_flambda ~backend ~compilation_unit ~size lam : Flambda.program = let lam = add_default_argument_wrappers lam in - let compilation_unit = Compilation_unit.get_current_exn () in - let current_unit_id = - Compilation_unit.name compilation_unit - |> Compilation_unit.Name.to_string - |> Ident.create_persistent - in + let current_unit = Compilation_unit.get_current_exn () in let t = - { current_unit_id; + { current_unit; backend; imported_symbols = Symbol.Set.empty; declared_symbols = []; } in - let module_symbol = - let pack_prefix = Compilation_unit.Prefix.from_clflags () in - Symbol.for_global_or_predef_ident pack_prefix module_ident - in + let module_symbol = Symbol.for_compilation_unit compilation_unit in let block_symbol = let var = Variable.create Internal_variable_names.module_as_block in Symbol_utils.Flambda.for_variable var diff --git a/middle_end/flambda/closure_conversion.mli b/middle_end/flambda/closure_conversion.mli index 67b57145fe64..1125ffeac4e0 100644 --- a/middle_end/flambda/closure_conversion.mli +++ b/middle_end/flambda/closure_conversion.mli @@ -46,7 +46,7 @@ *) val lambda_to_flambda : backend:(module Backend_intf.S) - -> module_ident:Ident.t + -> compilation_unit:Compilation_unit.t -> size:int -> Lambda.lambda -> Flambda.program diff --git a/middle_end/flambda/export_info_for_pack.mli b/middle_end/flambda/export_info_for_pack.mli deleted file mode 100644 index c1dbfb7015f6..000000000000 --- a/middle_end/flambda/export_info_for_pack.mli +++ /dev/null @@ -1,34 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42"] - -(** Transformations on export information that are only used for the - building of packs. *) - -(** Transform the information from [exported] to be - suitable to be reexported as the information for a pack named [pack] - containing units [pack_units]. - It mainly changes symbols of units [pack_units] to refer to - [pack] instead. *) -val import_for_pack - : pack_units:Compilation_unit.Set.t - -> pack:Compilation_unit.Prefix.t - -> Export_info.t - -> Export_info.t - -(** Drops the state after importing several units in the same pack. *) -val clear_import_state : unit -> unit diff --git a/middle_end/flambda/flambda_middle_end.ml b/middle_end/flambda/flambda_middle_end.ml index f9372ba2d8dc..8454db00f25d 100644 --- a/middle_end/flambda/flambda_middle_end.ml +++ b/middle_end/flambda/flambda_middle_end.ml @@ -31,7 +31,7 @@ let _dump_function_sizes flam = set_of_closures.function_decls.funs) let lambda_to_flambda ~ppf_dump ~prefixname ~backend ~size - ~module_ident ~module_initializer = + ~compilation_unit ~module_initializer = Profile.record_call "flambda" (fun () -> let previous_warning_reporter = !Location.warning_reporter in let module WarningSet = @@ -82,7 +82,7 @@ let lambda_to_flambda ~ppf_dump ~prefixname ~backend ~size (fun () -> module_initializer |> Closure_conversion.lambda_to_flambda ~backend - ~module_ident ~size) + ~compilation_unit ~size) in if !Clflags.dump_rawflambda then @@ -216,7 +216,7 @@ let lambda_to_clambda ~backend ~prefixname ~ppf_dump let program = lambda_to_flambda ~ppf_dump ~prefixname ~backend ~size:program.main_module_block_size - ~module_ident:program.module_ident + ~compilation_unit:program.compilation_unit ~module_initializer:program.code in let export = Build_export_info.build_transient program in diff --git a/ocamldoc/.depend b/ocamldoc/.depend index 3ec61c60c210..64f6ff697055 100644 --- a/ocamldoc/.depend +++ b/ocamldoc/.depend @@ -40,6 +40,7 @@ odoc_analyse.cmo : \ ../typing/env.cmi \ ../utils/config.cmi \ ../driver/compmisc.cmi \ + ../utils/compilation_unit.cmi \ ../utils/clflags.cmi \ odoc_analyse.cmi odoc_analyse.cmx : \ @@ -68,6 +69,7 @@ odoc_analyse.cmx : \ ../typing/env.cmx \ ../utils/config.cmx \ ../driver/compmisc.cmx \ + ../utils/compilation_unit.cmx \ ../utils/clflags.cmx \ odoc_analyse.cmi odoc_analyse.cmi : \ diff --git a/ocamldoc/odoc_analyse.ml b/ocamldoc/odoc_analyse.ml index f9ec3cb69cb8..9751b476df01 100644 --- a/ocamldoc/odoc_analyse.ml +++ b/ocamldoc/odoc_analyse.ml @@ -28,7 +28,11 @@ let init_path () = Compmisc.init_path () (** Return the initial environment in which compilation proceeds. *) let initial_env () = - let current = Env.get_unit_name () in + let current = + match Env.get_unit_name () with + | Some cu -> cu |> Compilation_unit.full_path_as_string + | None -> "" + in let initial = !Odoc_global.initially_opened_module in let initially_opened_module = if initial = current then @@ -71,7 +75,11 @@ let process_implementation_file sourcefile = init_path (); let prefixname = Filename.chop_extension sourcefile in let modulename = String.capitalize_ascii(Filename.basename prefixname) in - Env.set_unit_name modulename; + let compilation_unit = + Compilation_unit.create (Compilation_unit.Prefix.from_clflags ()) + (modulename |> Compilation_unit.Name.of_string) + in + Env.set_unit_name (Some compilation_unit); let inputfile = preprocess sourcefile in let env = initial_env () in try @@ -81,7 +89,7 @@ let process_implementation_file sourcefile = in let typedtree = Typemod.type_implementation - sourcefile prefixname modulename env parsetree + sourcefile prefixname compilation_unit env parsetree in (Some (parsetree, typedtree), inputfile) with @@ -105,7 +113,11 @@ let process_interface_file sourcefile = init_path (); let prefixname = Filename.chop_extension sourcefile in let modulename = String.capitalize_ascii(Filename.basename prefixname) in - Env.set_unit_name modulename; + let compilation_unit = + Compilation_unit.create (Compilation_unit.Prefix.from_clflags ()) + (modulename |> Compilation_unit.Name.of_string) + in + Env.set_unit_name (Some compilation_unit); let inputfile = preprocess sourcefile in let ast = Pparse.file ~tool_name inputfile diff --git a/otherlibs/dynlink/dynlink.ml b/otherlibs/dynlink/dynlink.ml index bad7b68eda25..a74e5b19d7ac 100644 --- a/otherlibs/dynlink/dynlink.ml +++ b/otherlibs/dynlink/dynlink.ml @@ -1,4 +1,4 @@ -#3 "otherlibs/dynlink/dynlink.ml" +#2 "otherlibs/dynlink/dynlink.ml" (**************************************************************************) (* *) (* OCaml *) @@ -23,19 +23,29 @@ open! Dynlink_compilerlibs module DC = Dynlink_common module DT = Dynlink_types +let convert_cmi_import (name, data) = + (name |> Compilation_unit.Name.to_string), + Option.map (fun (_unit, crc) -> crc) data + module Bytecode = struct type filename = string module Unit_header = struct type t = Cmo_format.compilation_unit_descr - let name (t : t) = Compilation_unit.Name.to_string t.cu_name + let name (t : t) = Compilation_unit.full_path_as_string t.cu_name let crc _t = None - let interface_imports (t : t) = t.cu_imports + let interface_imports (t : t) = + List.map convert_cmi_import t.cu_imports + let implementation_imports (t : t) = - let required = + let required_from_unit = t.cu_required_globals + |> List.map Compilation_unit.to_global_ident_for_bytecode + in + let required = + required_from_unit @ Symtable.required_globals t.cu_reloc in let required = @@ -75,20 +85,30 @@ module Bytecode = struct let num_globals_inited () = Misc.fatal_error "Should never be called for bytecode dynlink" + let assume_no_prefix modname = + Compilation_unit.create Compilation_unit.Prefix.empty modname + let fold_initial_units ~init ~f = - List.fold_left (fun acc (comp_unit, interface) -> - let id = Ident.create_persistent comp_unit in + List.fold_left (fun acc (modname, interface) -> + let id = + Compilation_unit.to_global_ident_for_bytecode + (assume_no_prefix modname) + in let defined = Symtable.is_defined_in_global_map !default_global_map id in + let interface = + Option.map (fun (_unit, crc) -> crc) interface + in let implementation = if defined then Some (None, DT.Loaded) else None in let defined_symbols = - if defined then [comp_unit] + if defined then [Ident.name id] else [] in + let comp_unit = modname |> Compilation_unit.Name.to_string in f acc ~comp_unit ~interface ~implementation ~defined_symbols) init !default_crcs @@ -126,7 +146,7 @@ module Bytecode = struct fragments. *) let digest = Digest.string - (file_digest ^ Compilation_unit.Name.to_string compunit.cu_name) + (file_digest ^ Compilation_unit.full_path_as_string compunit.cu_name) in let events = if compunit.cu_debug = 0 then [| |] @@ -189,7 +209,7 @@ end module B = DC.Make (Bytecode) type global_map = { - name : Compilation_unit.Name.t; + name : Compilation_unit.t; crc_intf : Digest.t option; crc_impl : Digest.t option; syms : Symbol.t list; @@ -213,11 +233,16 @@ module Native = struct module Unit_header = struct type t = Cmxs_format.dynunit - let name (t : t) = t.dynu_name |> Compilation_unit.Name.to_string + let name (t : t) = t.dynu_name |> Compilation_unit.name_as_string let crc (t : t) = Some t.dynu_crc - let interface_imports (t : t) = t.dynu_imports_cmi - let implementation_imports (t : t) = t.dynu_imports_cmx + let convert_cmx_import (name, crc) = + (name |> Compilation_unit.name_as_string), crc + + let interface_imports (t : t) = + List.map convert_cmi_import t.dynu_imports_cmi + let implementation_imports (t : t) = + List.map convert_cmx_import t.dynu_imports_cmx let defined_symbols (t : t) = List.map (fun comp_unit -> @@ -239,7 +264,7 @@ module Native = struct let fold_initial_units ~init ~f = let rank = ref 0 in List.fold_left (fun acc { name; crc_intf; crc_impl; syms; } -> - let name = Compilation_unit.Name.to_string name in + let name = Compilation_unit.full_path_as_string name in let syms = List.map (fun sym -> Symbol.linkage_name sym |> Linkage_name.to_string) diff --git a/otherlibs/dynlink/extract_crc.ml b/otherlibs/dynlink/extract_crc.ml index 49c483942f89..3864e73eaef3 100644 --- a/otherlibs/dynlink/extract_crc.ml +++ b/otherlibs/dynlink/extract_crc.ml @@ -44,7 +44,7 @@ let digest_interface unit loadpath = close_in ic; let crc = match cmi.Cmi_format.cmi_crcs with - (_, Some crc) :: _ -> crc + (_, Some (_unit, crc)) :: _ -> crc | _ -> raise Corrupted_interface in crc diff --git a/testsuite/tests/lib-dynlink-initializers/test10_main.byte.reference b/testsuite/tests/lib-dynlink-initializers/test10_main.byte.reference index d5efe697e95e..f8b2d961439e 100755 --- a/testsuite/tests/lib-dynlink-initializers/test10_main.byte.reference +++ b/testsuite/tests/lib-dynlink-initializers/test10_main.byte.reference @@ -3,8 +3,8 @@ Raised at Stdlib.failwith in file "stdlib.ml", line 32, characters 17-33 Called from Test10_plugin.g in file "test10_plugin.ml", line 3, characters 2-21 Called from Test10_plugin.f in file "test10_plugin.ml", line 6, characters 2-6 Called from Test10_plugin in file "test10_plugin.ml", line 10, characters 2-6 -Called from Dynlink.Bytecode.run in file "otherlibs/dynlink/dynlink.ml", line 140, characters 16-25 -Re-raised at Dynlink.Bytecode.run in file "otherlibs/dynlink/dynlink.ml", line 142, characters 6-137 +Called from Dynlink.Bytecode.run in file "otherlibs/dynlink/dynlink.ml", line 159, characters 16-25 +Re-raised at Dynlink.Bytecode.run in file "otherlibs/dynlink/dynlink.ml", line 161, characters 6-137 Called from Dynlink_common.Make.load.(fun) in file "otherlibs/dynlink/dynlink_common.ml", line 337, characters 13-54 Called from Stdlib__List.iter in file "list.ml", line 114, characters 12-15 Called from Dynlink_common.Make.load in file "otherlibs/dynlink/dynlink_common.ml", line 335, characters 8-250 diff --git a/testsuite/tests/lib-dynlink-initializers/test10_main.native.reference b/testsuite/tests/lib-dynlink-initializers/test10_main.native.reference index 9a06a1525c5c..49e82b6e5f96 100755 --- a/testsuite/tests/lib-dynlink-initializers/test10_main.native.reference +++ b/testsuite/tests/lib-dynlink-initializers/test10_main.native.reference @@ -3,9 +3,9 @@ Raised at Stdlib.failwith in file "stdlib.ml", line 32, characters 17-33 Called from Test10_plugin.g in file "test10_plugin.ml" (inlined), line 2, characters 15-38 Called from Test10_plugin.f in file "test10_plugin.ml", line 6, characters 2-6 Called from Test10_plugin in file "test10_plugin.ml", line 10, characters 2-6 -Called from Dynlink.Native.ndl_run in file "otherlibs/dynlink/dynlink.ml", line 266, characters 8-25 -Called from Dynlink.Native.ndl_run in file "otherlibs/dynlink/dynlink.ml", line 266, characters 8-25 -Re-raised at Dynlink.Native.ndl_run in file "otherlibs/dynlink/dynlink.ml", line 278, characters 6-137 +Called from Dynlink.Native.ndl_run in file "otherlibs/dynlink/dynlink.ml", line 290, characters 8-25 +Called from Dynlink.Native.ndl_run in file "otherlibs/dynlink/dynlink.ml", line 290, characters 8-25 +Re-raised at Dynlink.Native.ndl_run in file "otherlibs/dynlink/dynlink.ml", line 302, characters 6-137 Called from Stdlib__List.iter in file "list.ml", line 114, characters 12-15 Called from Dynlink_common.Make.load.(fun) in file "otherlibs/dynlink/dynlink_common.ml", line 337, characters 13-54 Called from Stdlib__List.iter in file "list.ml", line 114, characters 12-15 diff --git a/testsuite/tests/lib-dynlink-native/main.ml b/testsuite/tests/lib-dynlink-native/main.ml index d2eb8a7db73d..5e246a471720 100644 --- a/testsuite/tests/lib-dynlink-native/main.ml +++ b/testsuite/tests/lib-dynlink-native/main.ml @@ -94,7 +94,7 @@ program = "packed1.so" flags = "-shared" all_modules = "packed1.cmx" **************************** ocamlopt.opt -flags = "" +flags = "-for-pack Mypack" module = "packed1_client.ml" ***************************** ocamlopt.opt module = "" diff --git a/testsuite/tests/packs/basic/main.ml b/testsuite/tests/packs/basic/main.ml new file mode 100644 index 000000000000..3f785af3c6eb --- /dev/null +++ b/testsuite/tests/packs/basic/main.ml @@ -0,0 +1,54 @@ +(* TEST + +readonly_files = "main.ml member.ml" + +* setup-ocamlc.byte-build-env +** ocamlc.byte +flags = "-for-pack Pack" +module = "member.ml" +*** ocamlc.byte +module = "" +flags = "-pack" +program = "pack.cmo" +all_modules = "member.cmo" +**** ocamlc.byte +flags = "" +module = "main.ml" +***** ocamlc.byte +module = "" +program = "${test_build_directory}/main.byte" +all_modules = "pack.cmo main.cmo" +****** run +exit_status = "0" +******* check-program-output + +* setup-ocamlopt.byte-build-env +** ocamlopt.byte +flags = "-for-pack Pack" +module = "member.ml" +*** ocamlopt.byte +module = "" +flags = "-pack" +program = "pack.cmx" +all_modules = "member.cmx" +**** ocamlopt.byte +flags = "" +module = "main.ml" +***** ocamlopt.byte +module = "" +program = "${test_build_directory}/main.exe" +all_modules = "pack.cmx main.cmx" +****** run +exit_status = "0" +******* check-program-output +*) + +let say_hello () = + Pack.Member.say_hello () + +let () = + say_hello (); + + let ctor = Obj.Extension_constructor.of_val Pack.Member.A in + print_endline (Obj.Extension_constructor.name ctor) + diff --git a/testsuite/tests/packs/basic/main.reference b/testsuite/tests/packs/basic/main.reference new file mode 100644 index 000000000000..49783581a992 --- /dev/null +++ b/testsuite/tests/packs/basic/main.reference @@ -0,0 +1,2 @@ +Hello! +Pack.Member.A diff --git a/testsuite/tests/packs/basic/member.ml b/testsuite/tests/packs/basic/member.ml new file mode 100644 index 000000000000..e02ba60c4340 --- /dev/null +++ b/testsuite/tests/packs/basic/member.ml @@ -0,0 +1,5 @@ +type t = .. + +type t += A + +let [@inline always] say_hello () = print_endline "Hello!" diff --git a/testsuite/tests/packs/inconsistent/main.compilers.reference b/testsuite/tests/packs/inconsistent/main.compilers.reference new file mode 100644 index 000000000000..ed3cf5ec86fc --- /dev/null +++ b/testsuite/tests/packs/inconsistent/main.compilers.reference @@ -0,0 +1,3 @@ +File "main.ml", line 1: +Error: The file subdir/use_member_directly.cmi + is imported both as Pack.Member and as Member. diff --git a/testsuite/tests/packs/inconsistent/main.ml b/testsuite/tests/packs/inconsistent/main.ml new file mode 100644 index 000000000000..c8a459e83507 --- /dev/null +++ b/testsuite/tests/packs/inconsistent/main.ml @@ -0,0 +1,30 @@ +(* TEST + +readonly_files = "member.ml member2.ml use_member_directly.ml" + +* setup-ocamlopt.byte-build-env +** ocamlopt.byte +flags = "-for-pack Pack" +module = "member.ml" +*** script +script = "mkdir subdir/" +**** script +script = "cp use_member_directly.ml member.ml subdir/" +***** cd +cwd = "subdir" +****** ocamlopt.byte +flags = "" +module = "member.ml" +******* ocamlopt.byte +module = "use_member_directly.ml" +******** cd +cwd = ".." +********* ocamlopt.byte +flags = "-for-pack Pack -I subdir" +module = "main.ml" +ocamlopt_byte_exit_status = "2" +********** check-ocamlopt.byte-output +*) + +module _ = Member +module _ = Use_member_directly diff --git a/testsuite/tests/packs/inconsistent/member.ml b/testsuite/tests/packs/inconsistent/member.ml new file mode 100644 index 000000000000..dd2f672b3edc --- /dev/null +++ b/testsuite/tests/packs/inconsistent/member.ml @@ -0,0 +1 @@ +let () = print_endline "Hello!" diff --git a/testsuite/tests/packs/inconsistent/use_member_directly.ml b/testsuite/tests/packs/inconsistent/use_member_directly.ml new file mode 100644 index 000000000000..3b2e0f231aba --- /dev/null +++ b/testsuite/tests/packs/inconsistent/use_member_directly.ml @@ -0,0 +1 @@ +module _ = Member diff --git a/testsuite/tests/self-contained-toplevel/main.ml b/testsuite/tests/self-contained-toplevel/main.ml index 51d44e09cd1d..557220af3ea7 100644 --- a/testsuite/tests/self-contained-toplevel/main.ml +++ b/testsuite/tests/self-contained-toplevel/main.ml @@ -24,7 +24,7 @@ let () = let module Persistent_signature = Persistent_env.Persistent_signature in let old_loader = !Persistent_signature.load in Persistent_signature.load := (fun ~unit_name -> - match unit_name with + match unit_name |> Compilation_unit.Name.to_string with | "Foo" -> Some { Persistent_signature. filename = Sys.executable_name diff --git a/tools/.depend b/tools/.depend index f2095bfb9757..68308ca2204f 100644 --- a/tools/.depend +++ b/tools/.depend @@ -126,6 +126,7 @@ ocamlcmt.cmo : \ ../utils/load_path.cmi \ ../typing/envaux.cmi \ ../driver/compmisc.cmi \ + ../utils/compilation_unit.cmi \ ../file_formats/cmt_format.cmi \ ../typing/cmt2annot.cmo \ ../utils/clflags.cmi \ @@ -138,6 +139,7 @@ ocamlcmt.cmx : \ ../utils/load_path.cmx \ ../typing/envaux.cmx \ ../driver/compmisc.cmx \ + ../utils/compilation_unit.cmx \ ../file_formats/cmt_format.cmx \ ../typing/cmt2annot.cmx \ ../utils/clflags.cmx \ diff --git a/tools/objinfo.ml b/tools/objinfo.ml index af8464412acb..6dfc32f465df 100644 --- a/tools/objinfo.ml +++ b/tools/objinfo.ml @@ -56,7 +56,14 @@ let print_name_crc (name, crco) = None -> dummy_crc | Some crc -> string_of_crc crc in - printf "\t%s\t%s\n" crc name + printf "\t%s\t%a\n" crc Compilation_unit.Name.output name + +let print_intf_import (name, data) = + let crco = data |> Option.map (fun (_unit, crc) -> crc) in + print_name_crc (name, crco) + +let print_impl_import (unit, crco) = + print_name_crc (Compilation_unit.name unit, crco) let print_line name = printf "\t%s\n" name @@ -65,12 +72,12 @@ let print_name_line cu = printf "\t%a\n" Compilation_unit.Name.output (Compilation_unit.name cu) let print_required_global id = - printf "\t%s\n" (Ident.name id) + printf "\t%a\n" Compilation_unit.output id let print_cmo_infos cu = - printf "Unit name: %a\n" Compilation_unit.Name.output cu.cu_name; + printf "Unit name: %a\n" Compilation_unit.output cu.cu_name; print_string "Interfaces imported:\n"; - List.iter print_name_crc cu.cu_imports; + List.iter print_intf_import cu.cu_imports; print_string "Required globals:\n"; List.iter print_required_global cu.cu_required_globals; printf "Uses unsafe features: "; @@ -99,15 +106,15 @@ let print_cma_infos (lib : Cmo_format.library) = List.iter print_cmo_infos lib.lib_units let print_cmi_infos name crcs = - printf "Unit name: %s\n" name; + printf "Unit name: %a\n" Compilation_unit.output name; printf "Interfaces imported:\n"; - List.iter print_name_crc crcs + List.iter print_intf_import crcs let print_cmt_infos cmt = let open Cmt_format in - printf "Cmt unit name: %s\n" cmt.cmt_modname; + printf "Cmt unit name: %a\n" Compilation_unit.output cmt.cmt_modname; print_string "Cmt interfaces imported:\n"; - List.iter print_name_crc cmt.cmt_imports; + List.iter print_intf_import cmt.cmt_imports; printf "Source file: %s\n" (match cmt.cmt_sourcefile with None -> "(none)" | Some f -> f); printf "Compilation flags:"; @@ -136,9 +143,9 @@ let print_general_infos name crc defines cmi cmx = printf "Globals defined:\n"; List.iter print_line (List.map linkage_name defines); printf "Interfaces imported:\n"; - List.iter print_name_crc cmi; + List.iter print_intf_import cmi; printf "Implementations imported:\n"; - List.iter print_name_crc cmx + List.iter print_impl_import cmx let print_global_table table = printf "Globals defined:\n"; @@ -172,7 +179,7 @@ let print_cmx_infos (ui, crc) = else printf "Flambda unit\n"; if not !no_approx then begin - Compilation_unit.set_current ui.ui_unit; + Compilation_unit.set_current (Some ui.ui_unit); let root_symbols = List.map Symbol.for_compilation_unit ui.ui_defines in Format.printf "approximations@ %a@.@." Export_info.print_approx (export, root_symbols) @@ -205,7 +212,7 @@ let print_cmxs_infos header = List.iter (fun ui -> print_general_infos - (ui.dynu_name |> Compilation_unit.Name.to_string) + (ui.dynu_name |> Compilation_unit.full_path_as_string) ui.dynu_crc ui.dynu_defines ui.dynu_imports_cmi @@ -214,12 +221,6 @@ let print_cmxs_infos header = let p_title title = printf "%s:\n" title -let p_section title = function - | [] -> () - | l -> - p_title title; - List.iter print_name_crc l - let p_list title print = function | [] -> () | l -> @@ -236,9 +237,10 @@ let dump_byte ic = let len = Bytesections.seek_section ic section in if len > 0 then match section with | "CRCS" -> - p_section + p_list "Imported units" - (input_value ic : (string * Digest.t option) list) + print_intf_import + (input_value ic : Cmo_format.import_info list) | "DLLS" -> p_list "Used DLLs" diff --git a/tools/ocamlcmt.ml b/tools/ocamlcmt.ml index 73057bd3fa4c..8d5c116bf775 100644 --- a/tools/ocamlcmt.ml +++ b/tools/ocamlcmt.ml @@ -51,7 +51,7 @@ let print_info cmt = | Some filename -> open_out filename in let open Cmt_format in - Printf.fprintf oc "module name: %s\n" cmt.cmt_modname; + Printf.fprintf oc "module name: %a\n" Compilation_unit.output cmt.cmt_modname; begin match cmt.cmt_annots with Packed (_, list) -> Printf.fprintf oc "pack: %s\n" (String.concat " " list) @@ -82,14 +82,17 @@ let print_info cmt = | Some digest -> Printf.fprintf oc "interface digest: %s\n" (Digest.to_hex digest); end; + let compare_imports (name1, _crco1) (name2, _crco2) = + Compilation_unit.Name.compare name1 name2 + in List.iter (fun (name, crco) -> let crc = match crco with None -> dummy_crc - | Some crc -> Digest.to_hex crc + | Some (_unit, crc) -> Digest.to_hex crc in - Printf.fprintf oc "import: %s %s\n" name crc; - ) (List.sort compare cmt.cmt_imports); + Printf.fprintf oc "import: %a %s\n" Compilation_unit.Name.output name crc; + ) (List.sort compare_imports cmt.cmt_imports); Printf.fprintf oc "%!"; begin match !target_filename with | None -> () diff --git a/toplevel/byte/topeval.ml b/toplevel/byte/topeval.ml index d08cad0be1b7..73ea933a6baf 100644 --- a/toplevel/byte/topeval.ml +++ b/toplevel/byte/topeval.ml @@ -45,19 +45,19 @@ let implementation_label = "" module EvalBase = struct + let eval_compilation_unit cu = + try + Symtable.get_global_value + (cu |> Compilation_unit.to_global_ident_for_bytecode) + with Symtable.Error (Undefined_global name) -> + raise (Undefined_global name) + let eval_ident id = - if Ident.is_global_or_predef id then begin - try - Symtable.get_global_value id - with Symtable.Error (Undefined_global name) -> - raise (Undefined_global name) - end else begin - let name = Translmod.toplevel_name id in - try - String.Map.find name !toplevel_value_bindings - with Not_found -> - raise (Undefined_global name) - end + let name = Translmod.toplevel_name id in + try + String.Map.find name !toplevel_value_bindings + with Not_found -> + raise (Undefined_global name) end @@ -201,8 +201,8 @@ let check_consistency ppf filename cu = original_source = auth; } -> fprintf ppf "@[The files %s@ and %s@ \ - disagree over interface %s@]@." - user auth name; + disagree over interface %a@]@." + user auth Compilation_unit.Name.print name; raise Load_failed (* This is basically Dynlink.Bytecode.run with no digest *) diff --git a/toplevel/expunge.ml b/toplevel/expunge.ml index 22eb46f67377..268ec8521dce 100644 --- a/toplevel/expunge.ml +++ b/toplevel/expunge.ml @@ -36,7 +36,9 @@ let expunge_map tbl = Symtable.filter_global_map (fun id -> keep (Ident.name id)) tbl let expunge_crcs tbl = - List.filter (fun (unit, _crc) -> keep unit) tbl + List.filter + (fun (unit, _crc) -> keep (unit |> Compilation_unit.Name.to_string)) + tbl let main () = let input_name = Sys.argv.(1) in @@ -63,7 +65,7 @@ let main () = let global_map = (input_value ic : Symtable.global_map) in output_value oc (expunge_map global_map) | "CRCS" -> - let crcs = (input_value ic : (string * Digest.t option) list) in + let crcs = (input_value ic : Cmo_format.import_info list) in output_value oc (expunge_crcs crcs) | _ -> copy_file_chunk ic oc len diff --git a/toplevel/native/topeval.ml b/toplevel/native/topeval.ml index a65fe1f7a9f1..56071bd004ff 100644 --- a/toplevel/native/topeval.ml +++ b/toplevel/native/topeval.ml @@ -25,11 +25,16 @@ open Topcommon let implementation_label = "native toplevel" -let global_symbol id = - let sym = Compilenv.symbol_for_global id |> Linkage_name.to_string in +let global_symbol comp_unit = + let sym = + Symbol.for_compilation_unit comp_unit + |> Symbol.linkage_name + |> Linkage_name.to_string + in match Tophooks.lookup sym with | None -> - fatal_error ("Toploop.global_symbol " ^ (Ident.unique_name id)) + fatal_error ("Toploop.global_symbol " ^ + (Compilation_unit.full_path_as_string comp_unit)) | Some obj -> obj let remembered = ref Ident.empty @@ -52,7 +57,6 @@ let close_phrase lam = let open Lambda in Ident.Set.fold (fun id l -> let glb, pos = toplevel_value id in - let glb = Compilation_unit.of_string (Ident.name glb) in let glob = Lprim (Pfield (pos, Reads_agree), [Lprim (Pgetglobal glb, [], Loc_unknown)], @@ -71,11 +75,13 @@ let toplevel_value id = module EvalBase = struct + let eval_compilation_unit cu = + try global_symbol cu + with _ -> + raise (Undefined_global (cu |> Compilation_unit.full_path_as_string)) + let eval_ident id = - try - if Ident.is_global_or_predef id - then global_symbol id - else toplevel_value id + try toplevel_value id with _ -> raise (Undefined_global (Ident.name id)) @@ -87,7 +93,7 @@ include Topcommon.MakeEvalPrinter(EvalBase) let may_trace = ref false (* Global lock on tracing *) -let load_lambda ppf ~module_ident ~required_globals phrase_name lam size = +let load_lambda ppf ~compilation_unit ~required_globals phrase_name lam size = if !Clflags.dump_rawlambda then fprintf ppf "%a@." Printlambda.lambda lam; let slam = Simplif.simplify_lambda lam in if !Clflags.dump_lambda then fprintf ppf "%a@." Printlambda.lambda slam; @@ -96,7 +102,7 @@ let load_lambda ppf ~module_ident ~required_globals phrase_name lam size = { Lambda. code = slam; main_module_block_size = size; - module_ident; + compilation_unit; required_globals; } in @@ -197,32 +203,33 @@ let execute_phrase print_outcome ppf phr = str, sg', true | None -> str, sg', false in - let module_ident, res, required_globals, size = + let compilation_unit, res, required_globals, size = if Config.flambda then - let { Lambda.module_ident; main_module_block_size = size; + let { Lambda.compilation_unit; main_module_block_size = size; required_globals; code = res } = - Translmod.transl_implementation_flambda phrase_name + Translmod.transl_implementation_flambda phrase_comp_unit (str, Tcoerce_none) in - remember module_ident 0 sg'; - module_ident, close_phrase res, required_globals, size + remember compilation_unit 0 sg'; + compilation_unit, close_phrase res, required_globals, size else - let size, res = Translmod.transl_store_phrases phrase_name str in - Ident.create_persistent phrase_name, res, Ident.Set.empty, size + let size, res = Translmod.transl_store_phrases phrase_comp_unit str in + phrase_comp_unit, res, Compilation_unit.Set.empty, size in Warnings.check_fatal (); begin try toplevel_env := newenv; toplevel_sig := List.rev_append sg' oldsig; let res = - load_lambda ppf ~required_globals ~module_ident phrase_name res size + load_lambda ppf ~required_globals ~compilation_unit phrase_name res size in let out_phr = match res with | Result _ -> if Config.flambda then (* CR-someday trefis: *) - Env.register_import_as_opaque (Ident.name module_ident) + Env.register_import_as_opaque + (Compilation_unit.name compilation_unit) else Compilenv.record_global_approx_toplevel (); if print_outcome then diff --git a/toplevel/native/tophooks.ml b/toplevel/native/tophooks.ml index 572cd92b0427..fcfcbef1accc 100644 --- a/toplevel/native/tophooks.ml +++ b/toplevel/native/tophooks.ml @@ -46,8 +46,6 @@ let dll_run dll entry = module Backend = struct (* See backend_intf.mli. *) - let pack_prefix_for_global_ident = Compilenv.pack_prefix_for_global_ident - let really_import_approx = Import_approx.really_import_approx let import_symbol = Import_approx.import_symbol diff --git a/toplevel/topcommon.ml b/toplevel/topcommon.ml index 34632e540f4a..3ff2b4c339fb 100644 --- a/toplevel/topcommon.ml +++ b/toplevel/topcommon.ml @@ -90,16 +90,18 @@ exception Undefined_global of string module type EVAL_BASE = sig + val eval_compilation_unit: Compilation_unit.t -> Obj.t + (* Return the value referred to by a base ident. @raise [Undefined_global] if not found *) val eval_ident: Ident.t -> Obj.t - end module MakeEvalPrinter (E: EVAL_BASE) = struct let rec eval_address = function - | Env.Aident id -> E.eval_ident id + | Env.Aunit cu -> E.eval_compilation_unit cu + | Env.Alocal id -> E.eval_ident id | Env.Adot(p, pos) -> Obj.field (eval_address p) pos let eval_path find env path = diff --git a/toplevel/topcommon.mli b/toplevel/topcommon.mli index a30369cc7359..257a20cf6abd 100644 --- a/toplevel/topcommon.mli +++ b/toplevel/topcommon.mli @@ -76,6 +76,8 @@ exception Undefined_global of string module type EVAL_BASE = sig + val eval_compilation_unit: Compilation_unit.t -> Obj.t + (* Return the value referred to by a base ident @raise [Undefined_global] if not found *) val eval_ident: Ident.t -> Obj.t diff --git a/toplevel/toploop.ml b/toplevel/toploop.ml index 715609a78c95..028bed28635e 100644 --- a/toplevel/toploop.ml +++ b/toplevel/toploop.ml @@ -1,4 +1,4 @@ -# 1 "toplevel/toploop.ml" +# 2 "toplevel/toploop.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/typing/datarepr.mli b/typing/datarepr.mli index 38f05f74f08a..67b32a4c3cb6 100644 --- a/typing/datarepr.mli +++ b/typing/datarepr.mli @@ -19,14 +19,14 @@ open Types val extension_descr: - current_unit:string -> Path.t -> extension_constructor -> + current_unit:Compilation_unit.t option -> Path.t -> extension_constructor -> constructor_description val labels_of_type: Path.t -> type_declaration -> (Ident.t * label_description) list val constructors_of_type: - current_unit:string -> Path.t -> type_declaration -> + current_unit:Compilation_unit.t option -> Path.t -> type_declaration -> (Ident.t * constructor_description) list diff --git a/typing/env.ml b/typing/env.ml index 96d0f5e31140..d285a0089ee9 100644 --- a/typing/env.ml +++ b/typing/env.ml @@ -181,7 +181,8 @@ let map_summary f = function | Env_module_unbound (s, u, r) -> Env_module_unbound (f s, u, r) type address = - | Aident of Ident.t + | Aunit of Compilation_unit.t + | Alocal of Ident.t | Adot of address * int module TycompTbl = @@ -811,26 +812,38 @@ let md md_type = (* Print addresses *) let rec print_address ppf = function - | Aident id -> Format.fprintf ppf "%s" (Ident.name id) + | Aunit cu -> Format.fprintf ppf "%s" (Compilation_unit.full_path_as_string cu) + | Alocal id -> Format.fprintf ppf "%s" (Ident.name id) | Adot(a, pos) -> Format.fprintf ppf "%a.[%i]" print_address a pos -(* The name of the compilation unit currently compiled. - "" if outside a compilation unit. *) +type address_head = + | AHunit of Compilation_unit.t + | AHlocal of Ident.t + +let rec address_head = function + | Aunit cu -> AHunit cu + | Alocal id -> AHlocal id + | Adot (a, _) -> address_head a + +(* The name of the compilation unit currently compiled. *) module Current_unit_name : sig - val get : unit -> modname - val set : modname -> unit - val is : modname -> bool + val get : unit -> Compilation_unit.t option + val set : Compilation_unit.t option -> unit + val is : string -> bool val is_ident : Ident.t -> bool val is_path : Path.t -> bool end = struct - let current_unit = - ref "" let get () = - !current_unit - let set name = - current_unit := name + Compilation_unit.get_current () + let set comp_unit = + Compilation_unit.set_current comp_unit + let get_name () = + Option.map Compilation_unit.name (get ()) let is name = - !current_unit = name + let current_name_string = + Option.map Compilation_unit.Name.to_string (get_name ()) + in + Option.equal String.equal current_name_string (Some name) let is_ident id = Ident.is_global id && is (Ident.name id) let is_path = function @@ -904,7 +917,7 @@ let sign_of_cmi ~freshen { Persistent_env.Persistent_signature.cmi; _ } = let name = cmi.cmi_name in let sign = cmi.cmi_sign in let flags = cmi.cmi_flags in - let id = Ident.create_persistent name in + let id = Ident.create_persistent (Compilation_unit.name_as_string name) in let path = Pident id in let alerts = List.fold_left (fun acc -> function Alerts s -> s | _ -> acc) @@ -915,14 +928,16 @@ let sign_of_cmi ~freshen { Persistent_env.Persistent_signature.cmi; _ } = { md_type = Mty_signature sign; md_loc = Location.none; md_attributes = []; - md_uid = Uid.of_compilation_unit_id id; + md_uid = Uid.of_compilation_unit_id name; } in - let mda_address = Lazy_backtrack.create_forced (Aident id) in + let mda_address = Lazy_backtrack.create_forced (Aunit name) in let mda_declaration = Subst.(Lazy.module_decl Make_local identity (Lazy.of_module_decl md)) in - let mda_shape = Shape.for_persistent_unit name in + let mda_shape = + Shape.for_persistent_unit (name |> Compilation_unit.full_path_as_string) + in let mda_components = let mty = Subst.Lazy.of_modtype (Mty_signature sign) in let mty = @@ -985,7 +1000,7 @@ let reset_declaration_caches () = () let reset_cache ~preserve_persistent_env = - Current_unit_name.set ""; + Compilation_unit.set_current None; if not preserve_persistent_env then Persistent_env.clear !persistent_env; reset_declaration_caches (); @@ -1043,13 +1058,15 @@ let check_functor_appl ~arg_path ~arg_mty ~param_mty env +let modname_of_ident id = Ident.name id |> Compilation_unit.Name.of_string + (* Lookup by identifier *) let find_ident_module id env = match find_same_module id env.modules with | Mod_local data -> data | Mod_unbound _ -> raise Not_found - | Mod_persistent -> find_pers_mod (Ident.name id) + | Mod_persistent -> find_pers_mod (id |> modname_of_ident) let rec find_module_components path env = match path with @@ -1239,12 +1256,15 @@ let find_type_descrs p env = let rec find_module_address path env = match path with - | Pident id -> get_address (find_ident_module id env).mda_address + | Pident id -> find_ident_module_address id env | Pdot(p, s) -> let c = find_structure_components p env in get_address (NameMap.find s c.comp_modules).mda_address | Papply _ -> raise Not_found +and find_ident_module_address id env = + get_address (find_ident_module id env).mda_address + and force_address = function | Projection { parent; pos } -> Adot(get_address parent, pos) | ModAlias { env; path } -> find_module_address path env @@ -1342,10 +1362,17 @@ let shape_or_leaf uid = function let required_globals = s_ref [] let reset_required_globals () = required_globals := [] let get_required_globals () = !required_globals -let add_required_global id = - if Ident.is_global_or_predef id && not !Clflags.transparent_modules - && not (List.exists (Ident.same id) !required_globals) - then required_globals := id :: !required_globals +let add_required_unit cu = + if not (List.exists (Compilation_unit.equal cu) !required_globals) + then required_globals := cu :: !required_globals +let add_required_ident id env = + if not !Clflags.transparent_modules && Ident.is_global id then + let address = find_ident_module_address id env in + match address_head address with + | AHlocal _ -> () + | AHunit cu -> add_required_unit cu +let add_required_global path env = + add_required_ident (Path.head path) env let rec normalize_module_path lax env = function | Pident id as path when lax && Ident.is_global id -> @@ -1366,10 +1393,11 @@ and expand_module_path lax env path = try match find_module_lazy ~alias:true path env with {mdl_type=MtyL_alias path1} -> let path' = normalize_module_path lax env path1 in - if lax || !Clflags.transparent_modules then path' else - let id = Path.head path in - if Ident.is_global_or_predef id && not (Ident.same id (Path.head path')) - then add_required_global id; + if not (lax || !Clflags.transparent_modules) then begin + let id = Path.head path in + if Ident.is_global_or_predef id && not (Ident.same id (Path.head path')) + then add_required_global (Pident id) env + end; path' | _ -> path with Not_found when lax @@ -1516,7 +1544,7 @@ let rec scrape_alias_for_visit env mty = match path with | Pident id when Ident.is_global id - && not (Persistent_env.looked_up !persistent_env (Ident.name id)) -> + && not (Persistent_env.looked_up !persistent_env (id |> modname_of_ident)) -> false | path -> (* PR#6600: find_module may raise Not_found *) try @@ -1556,7 +1584,7 @@ let iter_env wrap proj1 proj2 f env () = | Mod_local data -> iter_components (Pident id) path data.mda_components | Mod_persistent -> - let modname = Ident.name id in + let modname = modname_of_ident id in match Persistent_env.find_in_cache !persistent_env modname with | None -> () | Some data -> @@ -1579,8 +1607,8 @@ let same_types env1 env2 = let used_persistent () = Persistent_env.fold !persistent_env - (fun s _m r -> String.Set.add s r) - String.Set.empty + (fun s _m r -> Compilation_unit.Name.Set.add s r) + Compilation_unit.Name.Set.empty let find_all_comps wrap proj s (p, mda) = match get_components mda.mda_components with @@ -1708,16 +1736,19 @@ let add_to_tbl id decl tbl = let decls = try NameMap.find id tbl with Not_found -> [] in NameMap.add id (decl :: decls) tbl +let primitive_address_error = + Invalid_argument "Primitives don't have addresses" + let value_declaration_address (_ : t) id decl = match decl.val_kind with - | Val_prim _ -> Lazy_backtrack.create_failed Not_found - | _ -> Lazy_backtrack.create_forced (Aident id) + | Val_prim _ -> Lazy_backtrack.create_failed primitive_address_error + | _ -> Lazy_backtrack.create_forced (Alocal id) let extension_declaration_address (_ : t) id (_ : extension_constructor) = - Lazy_backtrack.create_forced (Aident id) + Lazy_backtrack.create_forced (Alocal id) let class_declaration_address (_ : t) id (_ : class_declaration) = - Lazy_backtrack.create_forced (Aident id) + Lazy_backtrack.create_forced (Alocal id) let module_declaration_address env id presence md = match presence with @@ -1728,7 +1759,7 @@ let module_declaration_address env id presence md = | _ -> assert false end | Mp_present -> - Lazy_backtrack.create_forced (Aident id) + Lazy_backtrack.create_forced (Alocal id) let is_identchar c = (* This should be kept in sync with the [identchar_latin1] character class @@ -1770,7 +1801,7 @@ let rec components_of_module_maker let decl' = Subst.value_description sub decl in let addr = match decl.val_kind with - | Val_prim _ -> Lazy_backtrack.create_failed Not_found + | Val_prim _ -> Lazy_backtrack.create_failed primitive_address_error | _ -> next_address () in let vda_shape = Shape.proj cm_shape (Shape.Item.value id) in @@ -2569,7 +2600,7 @@ let open_signature (* Read a signature from a file *) let read_signature modname filename = - let mda = read_pers_mod modname filename in + let mda = read_pers_mod (Compilation_unit.name modname) filename in let md = Subst.Lazy.force_module_decl mda.mda_declaration in match md.md_type with | Mty_signature sg -> sg @@ -2830,12 +2861,13 @@ let lookup_ident_module (type a) (load : a load) ~errors ~use ~loc s env = | Mod_unbound reason -> report_module_unbound ~errors ~loc env reason | Mod_persistent -> begin + let name = s |> Compilation_unit.Name.of_string in match load with | Don't_load -> - check_pers_mod ~loc s; + check_pers_mod ~loc name; path, (() : a) | Load -> begin - match find_pers_mod s with + match find_pers_mod name with | mda -> use_module ~use ~loc path mda; path, (mda : a) @@ -3341,7 +3373,7 @@ let bound_module name env = | exception Not_found -> if Current_unit_name.is name then false else begin - match find_pers_mod name with + match find_pers_mod (name |> Compilation_unit.Name.of_string) with | _ -> true | exception Not_found -> false end @@ -3424,7 +3456,8 @@ let fold_modules f lid env acc = in f name p md acc | Mod_persistent -> - match Persistent_env.find_in_cache !persistent_env name with + let modname = name |> Compilation_unit.Name.of_string in + match Persistent_env.find_in_cache !persistent_env modname with | None -> acc | Some mda -> let md = @@ -3488,7 +3521,8 @@ let filter_non_loaded_persistent f env = | Mod_local _ -> acc | Mod_unbound _ -> acc | Mod_persistent -> - match Persistent_env.find_in_cache !persistent_env name with + let modname = name |> Compilation_unit.Name.of_string in + match Persistent_env.find_in_cache !persistent_env modname with | Some _ -> acc | None -> if f (Ident.create_persistent name) then diff --git a/typing/env.mli b/typing/env.mli index 1fc2ac3fc635..4ba47ba33ee2 100644 --- a/typing/env.mli +++ b/typing/env.mli @@ -51,7 +51,8 @@ type summary = | Env_module_unbound of summary * string * module_unbound_reason type address = - | Aident of Ident.t + | Aunit of Compilation_unit.t + | Alocal of Ident.t | Adot of address * int type t @@ -74,7 +75,7 @@ val iter_types: t -> iter_cont val run_iter_cont: iter_cont list -> (Path.t * iter_cont) list val same_types: t -> t -> bool -val used_persistent: unit -> Stdlib.String.Set.t +val used_persistent: unit -> Compilation_unit.Name.Set.t val find_shadowed_types: Path.t -> t -> Path.t list val without_cmis: ('a -> 'b) -> 'a -> 'b (* [without_cmis f arg] applies [f] to [arg], but does not @@ -136,8 +137,8 @@ val normalize_modtype_path: t -> Path.t -> Path.t (* Normalize a module type path *) val reset_required_globals: unit -> unit -val get_required_globals: unit -> Ident.t list -val add_required_global: Ident.t -> unit +val get_required_globals: unit -> Compilation_unit.t list +val add_required_global: Path.t -> t -> unit val reset_probes: unit -> unit val add_probe: string -> unit @@ -396,36 +397,37 @@ val reset_cache: preserve_persistent_env:bool -> unit val reset_cache_toplevel: unit -> unit (* Remember the name of the current compilation unit. *) -val set_unit_name: string -> unit -val get_unit_name: unit -> string +val set_unit_name: Compilation_unit.t option -> unit +val get_unit_name: unit -> Compilation_unit.t option (* Read, save a signature to/from a file *) -val read_signature: modname -> filepath -> signature +val read_signature: Compilation_unit.t -> filepath -> signature (* Arguments: module name, file name. Results: signature. *) val save_signature: - alerts:alerts -> signature -> modname -> filepath + alerts:alerts -> signature -> Compilation_unit.t -> filepath -> Cmi_format.cmi_infos (* Arguments: signature, module name, file name. *) val save_signature_with_imports: - alerts:alerts -> signature -> modname -> filepath -> crcs + alerts:alerts -> signature -> Compilation_unit.t -> filepath + -> Cmi_format.import_info list -> Cmi_format.cmi_infos (* Arguments: signature, module name, file name, imported units with their CRCs. *) (* Return the CRC of the interface of the given compilation unit *) -val crc_of_unit: modname -> Digest.t +val crc_of_unit: Compilation_unit.Name.t -> Digest.t (* Return the set of compilation units imported, with their CRC *) -val imports: unit -> crcs +val imports: unit -> Cmi_format.import_info list (* may raise Persistent_env.Consistbl.Inconsistency *) -val import_crcs: source:string -> crcs -> unit +val import_crcs: source:string -> Cmi_format.import_info list -> unit (* [is_imported_opaque md] returns true if [md] is an opaque imported module *) -val is_imported_opaque: modname -> bool +val is_imported_opaque: Compilation_unit.Name.t -> bool (* [register_import_as_opaque md] registers [md] as an opaque imported module *) -val register_import_as_opaque: modname -> unit +val register_import_as_opaque: Compilation_unit.Name.t -> unit (* Summaries -- compact representation of an environment, to be exported in debugging information. *) @@ -524,3 +526,9 @@ val scrape_alias: t -> module_type -> module_type val check_value_name: string -> Location.t -> unit val print_address : Format.formatter -> address -> unit + +type address_head = + | AHunit of Compilation_unit.t + | AHlocal of Ident.t + +val address_head : address -> address_head diff --git a/typing/persistent_env.ml b/typing/persistent_env.ml index 65f6066376b2..2a4aae4f39bb 100644 --- a/typing/persistent_env.ml +++ b/typing/persistent_env.ml @@ -19,15 +19,20 @@ open Misc open Cmi_format -module Consistbl = Consistbl.Make (Misc.Stdlib.String) +module Consistbl = Consistbl.Make (Compilation_unit.Name) (Compilation_unit) let add_delayed_check_forward = ref (fun _ -> assert false) type error = - | Illegal_renaming of modname * modname * filepath - | Inconsistent_import of modname * filepath * filepath - | Need_recursive_types of modname - | Depend_on_unsafe_string_unit of modname + | Illegal_renaming of Compilation_unit.Name.t * Compilation_unit.Name.t * filepath + | Inconsistent_import of Compilation_unit.Name.t * filepath * filepath + | Need_recursive_types of Compilation_unit.t + | Depend_on_unsafe_string_unit of Compilation_unit.t + | Inconsistent_package_declaration of Compilation_unit.t * filepath + | Inconsistent_package_declaration_between_imports of + filepath * Compilation_unit.t * Compilation_unit.t + | Direct_reference_from_wrong_package of + Compilation_unit.t * filepath * Compilation_unit.Prefix.t exception Error of error let error err = raise (Error err) @@ -38,6 +43,7 @@ module Persistent_signature = struct cmi : Cmi_format.cmi_infos } let load = ref (fun ~unit_name -> + let unit_name = Compilation_unit.Name.to_string unit_name in match Load_path.find_uncap (unit_name ^ ".cmi") with | filename -> Some { filename; cmi = read_cmi filename } | exception Not_found -> None) @@ -48,14 +54,12 @@ type can_load_cmis = | Cannot_load_cmis of Lazy_backtrack.log type pers_struct = { - ps_name: string; - ps_crcs: (string * Digest.t option) list; + ps_name: Compilation_unit.t; + ps_crcs: Cmi_format.import_info list; ps_filename: string; ps_flags: pers_flags list; } -module String = Misc.Stdlib.String - (* If a .cmi file is missing (or invalid), we store it as Missing in the cache. *) type 'a pers_struct_info = @@ -63,17 +67,18 @@ type 'a pers_struct_info = | Found of pers_struct * 'a type 'a t = { - persistent_structures : (string, 'a pers_struct_info) Hashtbl.t; - imported_units: String.Set.t ref; - imported_opaque_units: String.Set.t ref; + persistent_structures : + (Compilation_unit.Name.t, 'a pers_struct_info) Hashtbl.t; + imported_units: Compilation_unit.Name.Set.t ref; + imported_opaque_units: Compilation_unit.Name.Set.t ref; crc_units: Consistbl.t; can_load_cmis: can_load_cmis ref; } let empty () = { persistent_structures = Hashtbl.create 17; - imported_units = ref String.Set.empty; - imported_opaque_units = ref String.Set.empty; + imported_units = ref Compilation_unit.Name.Set.empty; + imported_opaque_units = ref Compilation_unit.Name.Set.empty; crc_units = Consistbl.create (); can_load_cmis = ref Can_load_cmis; } @@ -87,8 +92,8 @@ let clear penv = can_load_cmis; } = penv in Hashtbl.clear persistent_structures; - imported_units := String.Set.empty; - imported_opaque_units := String.Set.empty; + imported_units := Compilation_unit.Name.Set.empty; + imported_opaque_units := Compilation_unit.Name.Set.empty; Consistbl.clear crc_units; can_load_cmis := Can_load_cmis; () @@ -102,10 +107,10 @@ let clear_missing {persistent_structures; _} = List.iter (Hashtbl.remove persistent_structures) missing_entries let add_import {imported_units; _} s = - imported_units := String.Set.add s !imported_units + imported_units := Compilation_unit.Name.Set.add s !imported_units let register_import_as_opaque {imported_opaque_units; _} s = - imported_opaque_units := String.Set.add s !imported_opaque_units + imported_opaque_units := Compilation_unit.Name.Set.add s !imported_opaque_units let find_in_cache {persistent_structures; _} s = match Hashtbl.find persistent_structures s with @@ -118,9 +123,9 @@ let import_crcs penv ~source crcs = let import_crc (name, crco) = match crco with | None -> () - | Some crc -> + | Some (unit, crc) -> add_import penv name; - Consistbl.check crc_units name crc source + Consistbl.check crc_units name unit crc source in List.iter import_crc crcs let check_consistency penv ps = @@ -129,8 +134,13 @@ let check_consistency penv ps = unit_name = name; inconsistent_source = source; original_source = auth; + inconsistent_data = source_unit; + original_data = auth_unit; } -> - error (Inconsistent_import(name, auth, source)) + if Compilation_unit.equal source_unit auth_unit + then error (Inconsistent_import(name, auth, source)) + else error (Inconsistent_package_declaration_between_imports( + ps.ps_filename, auth_unit, source_unit)) let can_load_cmis penv = !(penv.can_load_cmis) @@ -157,7 +167,7 @@ let fold {persistent_structures; _} f x = let save_pers_struct penv crc ps pm = let {persistent_structures; crc_units; _} = penv in - let modname = ps.ps_name in + let modname = Compilation_unit.name ps.ps_name in Hashtbl.add persistent_structures modname (Found (ps, pm)); List.iter (function @@ -166,7 +176,7 @@ let save_pers_struct penv crc ps pm = | Unsafe_string -> () | Opaque -> register_import_as_opaque penv modname) ps.ps_flags; - Consistbl.set crc_units modname crc ps.ps_filename; + Consistbl.set crc_units modname ps.ps_name crc ps.ps_filename; add_import penv modname let acknowledge_pers_struct penv check modname pers_sig pm = @@ -179,8 +189,9 @@ let acknowledge_pers_struct penv check modname pers_sig pm = ps_filename = filename; ps_flags = flags; } in - if ps.ps_name <> modname then - error (Illegal_renaming(modname, ps.ps_name, filename)); + let found_name = Compilation_unit.name name in + if not (Compilation_unit.Name.equal modname found_name) then + error (Illegal_renaming(modname, found_name, filename)); List.iter (function | Rectypes -> @@ -193,6 +204,16 @@ let acknowledge_pers_struct penv check modname pers_sig pm = | Opaque -> register_import_as_opaque penv modname) ps.ps_flags; if check then check_consistency penv ps; + begin match Compilation_unit.get_current () with + | Some current_unit -> + let access_allowed = + Compilation_unit.can_access_by_name name ~accessed_by:current_unit + in + if not access_allowed then + let prefix = Compilation_unit.for_pack_prefix current_unit in + error (Direct_reference_from_wrong_package (name, filename, prefix)); + | None -> () + end; let {persistent_structures; _} = penv in Hashtbl.add persistent_structures modname (Found (ps, pm)); ps @@ -207,7 +228,7 @@ let read_pers_struct penv val_of_pers_sig check modname filename = let find_pers_struct penv val_of_pers_sig check name = let {persistent_structures; _} = penv in - if name = "*predef*" then raise Not_found; + if Compilation_unit.Name.equal name Compilation_unit.Name.predef_exn then raise Not_found; match Hashtbl.find persistent_structures name with | Found (ps, pm) -> (ps, pm) | Missing -> raise Not_found @@ -227,17 +248,24 @@ let find_pers_struct penv val_of_pers_sig check name = let ps = acknowledge_pers_struct penv check name psig pm in (ps, pm) +let describe_prefix ppf prefix = + if Compilation_unit.Prefix.is_empty prefix then + Format.fprintf ppf "outside of any package" + else + Format.fprintf ppf "package %a" Compilation_unit.Prefix.print prefix + (* Emits a warning if there is no valid cmi for name *) let check_pers_struct penv f ~loc name = + let name_as_string = Compilation_unit.Name.to_string name in try ignore (find_pers_struct penv f false name) with | Not_found -> - let warn = Warnings.No_cmi_file(name, None) in + let warn = Warnings.No_cmi_file(name_as_string, None) in Location.prerr_warning loc warn | Cmi_format.Error err -> let msg = Format.asprintf "%a" Cmi_format.report_error err in - let warn = Warnings.No_cmi_file(name, Some msg) in + let warn = Warnings.No_cmi_file(name_as_string, Some msg) in Location.prerr_warning loc warn | Error err -> let msg = @@ -245,18 +273,26 @@ let check_pers_struct penv f ~loc name = | Illegal_renaming(name, ps_name, filename) -> Format.asprintf " %a@ contains the compiled interface for @ \ - %s when %s was expected" - Location.print_filename filename ps_name name + %a when %a was expected" + Location.print_filename filename + Compilation_unit.Name.print ps_name + Compilation_unit.Name.print name | Inconsistent_import _ -> assert false | Need_recursive_types name -> - Format.sprintf - "%s uses recursive types" - name + Format.asprintf + "%a uses recursive types" + Compilation_unit.print name | Depend_on_unsafe_string_unit name -> - Printf.sprintf "%s uses -unsafe-string" - name + Format.asprintf "%a uses -unsafe-string" + Compilation_unit.print name + | Inconsistent_package_declaration _ -> assert false + | Inconsistent_package_declaration_between_imports _ -> assert false + | Direct_reference_from_wrong_package (unit, _filename, prefix) -> + Format.asprintf "%a is inaccessible from %a" + Compilation_unit.print unit + describe_prefix prefix in - let warn = Warnings.No_cmi_file(name, Some msg) in + let warn = Warnings.No_cmi_file(name_as_string, Some msg) in Location.prerr_warning loc warn let read penv f modname filename = @@ -287,19 +323,20 @@ let crc_of_unit penv f name = in match crco with None -> assert false - | Some crc -> crc + | Some (_, crc) -> crc let imports {imported_units; crc_units; _} = - Consistbl.extract (String.Set.elements !imported_units) crc_units + Consistbl.extract (Compilation_unit.Name.Set.elements !imported_units) + crc_units let looked_up {persistent_structures; _} modname = Hashtbl.mem persistent_structures modname let is_imported {imported_units; _} s = - String.Set.mem s !imported_units + Compilation_unit.Name.Set.mem s !imported_units let is_imported_opaque {imported_opaque_units; _} s = - String.Set.mem s !imported_opaque_units + Compilation_unit.Name.Set.mem s !imported_opaque_units let make_cmi penv modname sign alerts = let flags = @@ -335,7 +372,9 @@ let save_cmi penv psig pm = will also return its crc *) let ps = { ps_name = modname; - ps_crcs = (cmi.cmi_name, Some crc) :: imports; + ps_crcs = + (Compilation_unit.name cmi.cmi_name, Some (cmi.cmi_name, crc)) + :: imports; ps_filename = filename; ps_flags = flags; } in @@ -348,21 +387,44 @@ let report_error ppf = function | Illegal_renaming(modname, ps_name, filename) -> fprintf ppf "Wrong file naming: %a@ contains the compiled interface for@ \ - %s when %s was expected" - Location.print_filename filename ps_name modname + %a when %a was expected" + Location.print_filename filename + Compilation_unit.Name.print ps_name + Compilation_unit.Name.print modname | Inconsistent_import(name, source1, source2) -> fprintf ppf "@[The files %a@ and %a@ \ - make inconsistent assumptions@ over interface %s@]" - Location.print_filename source1 Location.print_filename source2 name + make inconsistent assumptions@ over interface %a@]" + Location.print_filename source1 Location.print_filename source2 + Compilation_unit.Name.print name | Need_recursive_types(import) -> fprintf ppf - "@[Invalid import of %s, which uses recursive types.@ %s@]" - import "The compilation flag -rectypes is required" + "@[Invalid import of %a, which uses recursive types.@ %s@]" + Compilation_unit.print import + "The compilation flag -rectypes is required" | Depend_on_unsafe_string_unit(import) -> fprintf ppf - "@[Invalid import of %s, compiled with -unsafe-string.@ %s@]" - import "This compiler has been configured in strict \ - safe-string mode (-force-safe-string)" + "@[Invalid import of %a, compiled with -unsafe-string.@ %s@]" + Compilation_unit.print import + "This compiler has been configured in strict \ + safe-string mode (-force-safe-string)" + | Inconsistent_package_declaration(intf_package, intf_filename) -> + fprintf ppf + "@[The interface %a@ is compiled for package %s.@ %s@]" + Compilation_unit.print intf_package intf_filename + "The compilation flag -for-pack with the same package is required" + | Inconsistent_package_declaration_between_imports (filename, unit1, unit2) -> + fprintf ppf + "@[The file %s@ is imported both as %a@ and as %a.@]" + filename + Compilation_unit.print unit1 + Compilation_unit.print unit2 + | Direct_reference_from_wrong_package(unit, filename, prefix) -> + fprintf ppf + "@[Invalid reference to %a (in file %s) from %a.@ %s]" + Compilation_unit.print unit + filename + describe_prefix prefix + "Can only access members of this library's package or a containing package" let () = Location.register_error_of_exn diff --git a/typing/persistent_env.mli b/typing/persistent_env.mli index b2e139312db5..3f4cf4e1cb2d 100644 --- a/typing/persistent_env.mli +++ b/typing/persistent_env.mli @@ -17,14 +17,19 @@ open Misc module Consistbl : module type of struct - include Consistbl.Make (Misc.Stdlib.String) + include Consistbl.Make (Compilation_unit.Name) (Compilation_unit) end type error = - | Illegal_renaming of modname * modname * filepath - | Inconsistent_import of modname * filepath * filepath - | Need_recursive_types of modname - | Depend_on_unsafe_string_unit of modname + | Illegal_renaming of Compilation_unit.Name.t * Compilation_unit.Name.t * filepath + | Inconsistent_import of Compilation_unit.Name.t * filepath * filepath + | Need_recursive_types of Compilation_unit.t + | Depend_on_unsafe_string_unit of Compilation_unit.t + | Inconsistent_package_declaration of Compilation_unit.t * filepath + | Inconsistent_package_declaration_between_imports of + filepath * Compilation_unit.t * Compilation_unit.t + | Direct_reference_from_wrong_package of + Compilation_unit.t * filepath * Compilation_unit.Prefix.t exception Error of error @@ -38,7 +43,7 @@ module Persistent_signature : sig (** Function used to load a persistent signature. The default is to look for the .cmi file in the load path. This function can be overridden to load it from memory, for instance to build a self-contained toplevel. *) - val load : (unit_name:string -> t option) ref + val load : (unit_name:Compilation_unit.Name.t -> t option) ref end type can_load_cmis = @@ -52,36 +57,36 @@ val empty : unit -> 'a t val clear : 'a t -> unit val clear_missing : 'a t -> unit -val fold : 'a t -> (modname -> 'a -> 'b -> 'b) -> 'b -> 'b +val fold : 'a t -> (Compilation_unit.Name.t -> 'a -> 'b -> 'b) -> 'b -> 'b val read : 'a t -> (Persistent_signature.t -> 'a) - -> modname -> filepath -> 'a + -> Compilation_unit.Name.t -> filepath -> 'a val find : 'a t -> (Persistent_signature.t -> 'a) - -> modname -> 'a + -> Compilation_unit.Name.t -> 'a -val find_in_cache : 'a t -> modname -> 'a option +val find_in_cache : 'a t -> Compilation_unit.Name.t -> 'a option val check : 'a t -> (Persistent_signature.t -> 'a) - -> loc:Location.t -> modname -> unit + -> loc:Location.t -> Compilation_unit.Name.t -> unit (* [looked_up penv md] checks if one has already tried to read the signature for [md] in the environment [penv] (it may have failed) *) -val looked_up : 'a t -> modname -> bool +val looked_up : 'a t -> Compilation_unit.Name.t -> bool (* [is_imported penv md] checks if [md] has been successfully imported in the environment [penv] *) -val is_imported : 'a t -> modname -> bool +val is_imported : 'a t -> Compilation_unit.Name.t -> bool (* [is_imported_opaque penv md] checks if [md] has been imported in [penv] as an opaque module *) -val is_imported_opaque : 'a t -> modname -> bool +val is_imported_opaque : 'a t -> Compilation_unit.Name.t -> bool (* [register_import_as_opaque penv md] registers [md] in [penv] as an opaque module *) -val register_import_as_opaque : 'a t -> modname -> unit +val register_import_as_opaque : 'a t -> Compilation_unit.Name.t -> unit -val make_cmi : 'a t -> modname -> Types.signature -> alerts +val make_cmi : 'a t -> Compilation_unit.t -> Types.signature -> alerts -> Cmi_format.cmi_infos val save_cmi : 'a t -> Persistent_signature.t -> 'a -> unit @@ -93,13 +98,14 @@ val without_cmis : 'a t -> ('b -> 'c) -> 'b -> 'c allow [penv] to openi cmis during its execution *) (* may raise Consistbl.Inconsistency *) -val import_crcs : 'a t -> source:filepath -> crcs -> unit +val import_crcs : 'a t -> source:filepath -> Cmi_format.import_info list -> unit (* Return the set of compilation units imported, with their CRC *) -val imports : 'a t -> crcs +val imports : 'a t -> Cmi_format.import_info list (* Return the CRC of the interface of the given compilation unit *) -val crc_of_unit: 'a t -> (Persistent_signature.t -> 'a) -> modname -> Digest.t +val crc_of_unit: 'a t -> (Persistent_signature.t -> 'a) + -> Compilation_unit.Name.t -> Digest.t (* Forward declaration to break mutual recursion with Typecore. *) val add_delayed_check_forward: ((unit -> unit) -> unit) ref diff --git a/typing/printtyp.ml b/typing/printtyp.ml index b220de012b1f..db4b0b41dee9 100644 --- a/typing/printtyp.ml +++ b/typing/printtyp.ml @@ -380,6 +380,16 @@ let rec module_path_is_an_alias_of env path ~alias_of = | _ -> false | exception Not_found -> false +let expand_longident_head name = + match find_double_underscore name with + | None -> None + | Some i -> + Some + (Ldot + (Lident (String.sub name 0 i), + String.capitalize_ascii + (String.sub name (i + 2) (String.length name - i - 2)))) + (* Simple heuristic to print Foo__bar.* as Foo.Bar.* when Foo.Bar is an alias for Foo__bar. This pattern is used by the stdlib. *) let rec rewrite_double_underscore_paths env p = @@ -391,15 +401,9 @@ let rec rewrite_double_underscore_paths env p = rewrite_double_underscore_paths env b) | Pident id -> let name = Ident.name id in - match find_double_underscore name with + match expand_longident_head name with | None -> p - | Some i -> - let better_lid = - Ldot - (Lident (String.sub name 0 i), - String.capitalize_ascii - (String.sub name (i + 2) (String.length name - i - 2))) - in + | Some better_lid -> match Env.find_module_by_name better_lid env with | exception Not_found -> p | p', _ -> @@ -414,6 +418,25 @@ let rewrite_double_underscore_paths env p = else rewrite_double_underscore_paths env p +let rec rewrite_double_underscore_longidents env (l : Longident.t) = + match l with + | Ldot (l, s) -> + Ldot (rewrite_double_underscore_longidents env l, s) + | Lapply (a, b) -> + Lapply (rewrite_double_underscore_longidents env a, + rewrite_double_underscore_longidents env b) + | Lident name -> + match expand_longident_head name with + | None -> l + | Some l' -> + match Env.find_module_by_name l env, Env.find_module_by_name l' env with + | exception Not_found -> l + | (p, _), (p', _) -> + if module_path_is_an_alias_of env p' ~alias_of:p then + l' + else + l + let rec tree_of_path namespace = function | Pident id -> Oide_ident (ident_name namespace id) @@ -607,7 +630,7 @@ type best_path = Paths of Path.t list | Best of Path.t cache for short-paths *) let printing_old = ref Env.empty -let printing_pers = ref String.Set.empty +let printing_pers = ref Compilation_unit.Name.Set.empty (** {!printing_old} and {!printing_pers} are the keys of the one-slot cache *) let printing_depth = ref 0 @@ -671,7 +694,8 @@ let rec path_size = function let same_printing_env env = let used_pers = Env.used_persistent () in - Env.same_types !printing_old env && String.Set.equal !printing_pers used_pers + Env.same_types !printing_old env + && Compilation_unit.Name.Set.equal !printing_pers used_pers let set_printing_env env = printing_env := env; diff --git a/typing/printtyp.mli b/typing/printtyp.mli index 13b2ed95e872..8d7a33a38b24 100644 --- a/typing/printtyp.mli +++ b/typing/printtyp.mli @@ -236,6 +236,8 @@ val print_items: (Env.t -> signature_item -> 'a option) -> for Foo__bar. This pattern is used by the stdlib. *) val rewrite_double_underscore_paths: Env.t -> Path.t -> Path.t +val rewrite_double_underscore_longidents: Env.t -> Longident.t -> Longident.t + (** [printed_signature sourcefile ppf sg] print the signature [sg] of [sourcefile] with potential warnings for name collisions *) val printed_signature: string -> formatter -> signature -> unit diff --git a/typing/shape.ml b/typing/shape.ml index 27b8dbb5ca70..73a39e203f6e 100644 --- a/typing/shape.ml +++ b/typing/shape.ml @@ -44,12 +44,15 @@ module Uid = struct let mk ~current_unit = incr id; - Item { comp_unit = current_unit; id = !id } + let comp_unit = + match current_unit with + | Some cu -> cu |> Compilation_unit.full_path_as_string + | None -> "" + in + Item { comp_unit; id = !id } let of_compilation_unit_id id = - if not (Ident.is_global id) then - Misc.fatal_errorf "Types.Uid.of_compilation_unit_id %S" (Ident.name id); - Compilation_unit (Ident.name id) + Compilation_unit (id |> Compilation_unit.full_path_as_string) let of_predef_id id = if not (Ident.is_predef id) then @@ -464,7 +467,7 @@ let of_path ~find_shape ~namespace = aux namespace let for_persistent_unit s = - { uid = Some (Uid.of_compilation_unit_id (Ident.create_persistent s)); + { uid = Some (Compilation_unit s); desc = Comp_unit s } let leaf_for_unpack = { uid = None; desc = Leaf } diff --git a/typing/shape.mli b/typing/shape.mli index 8a5aaca4fbbf..e1dc6bed331c 100644 --- a/typing/shape.mli +++ b/typing/shape.mli @@ -22,8 +22,8 @@ module Uid : sig val reinit : unit -> unit - val mk : current_unit:string -> t - val of_compilation_unit_id : Ident.t -> t + val mk : current_unit:Compilation_unit.t option -> t + val of_compilation_unit_id : Compilation_unit.t -> t val of_predef_id : Ident.t -> t val internal_not_actually_unique : t @@ -91,6 +91,7 @@ val leaf : Uid.t -> t val decompose_abs : t -> (var * t) option +(* CR lmaurer: Should really take a [Compilation_unit.t] *) val for_persistent_unit : string -> t val leaf_for_unpack : t diff --git a/typing/typemod.ml b/typing/typemod.ml index f8d8ec9aeec9..12f47839087a 100644 --- a/typing/typemod.ml +++ b/typing/typemod.ml @@ -2232,7 +2232,7 @@ and type_module_aux ~alias sttn funct_body anchor env smod = in let md = if alias && aliasable then - (Env.add_required_global (Path.head path); md) + (Env.add_required_global path env; md) else begin let mty = if sttn then @@ -3133,7 +3133,7 @@ let type_implementation sourcefile outputprefix modulename initial_env ast = type_structure initial_env ast in let shape = Shape.set_uid_if_none shape - (Uid.of_compilation_unit_id (Ident.create_persistent modulename)) + (Uid.of_compilation_unit_id modulename) in let simple_sg = Signature_names.simplify finalenv names sg in if !Clflags.print_types then begin @@ -3155,9 +3155,10 @@ let type_implementation sourcefile outputprefix modulename initial_env ast = let sourceintf = Filename.remove_extension sourcefile ^ !Config.interface_suffix in if Sys.file_exists sourceintf then begin + let basename = modulename |> Compilation_unit.name_as_string in let intf_file = try - Load_path.find_uncap (modulename ^ ".cmi") + Load_path.find_uncap (basename ^ ".cmi") with Not_found -> raise(Error(Location.in_file sourcefile, Env.empty, Interface_not_compiled sourceintf)) in @@ -3240,6 +3241,7 @@ let package_signatures units = let units_with_ids = List.map (fun (name, sg) -> + let name = name |> Compilation_unit.Name.to_string in let oldid = Ident.create_persistent name in let newid = Ident.create_local name in (oldid, newid, sg)) @@ -3272,22 +3274,30 @@ let package_units initial_env objfiles cmifile modulename = List.map (fun f -> let pref = chop_extensions f in - let modname = String.capitalize_ascii(Filename.basename pref) in + let unit = + pref + |> Filename.basename + |> String.capitalize_ascii + |> Compilation_unit.Name.of_string + in + let modname = Compilation_unit.create_child modulename unit in let sg = Env.read_signature modname (pref ^ ".cmi") in if Filename.check_suffix f ".cmi" && not(Mtype.no_code_needed_sig Env.initial_safe_string sg) then raise(Error(Location.none, Env.empty, Implementation_is_required f)); - (modname, Env.read_signature modname (pref ^ ".cmi"))) + Compilation_unit.name modname, + Env.read_signature modname (pref ^ ".cmi")) objfiles in (* Compute signature of packaged unit *) Ident.reinit(); let sg = package_signatures units in (* Compute the shape of the package *) let prefix = Filename.remove_extension cmifile in - let pack_uid = Uid.of_compilation_unit_id (Ident.create_persistent prefix) in + let pack_uid = Uid.of_compilation_unit_id modulename in let shape = List.fold_left (fun map (name, _sg) -> + let name = Compilation_unit.Name.to_string name in let id = Ident.create_persistent name in Shape.Map.add_module map id (Shape.for_persistent_unit name) ) Shape.Map.empty units diff --git a/typing/typemod.mli b/typing/typemod.mli index 5933c8e5875b..6c74a038a302 100644 --- a/typing/typemod.mli +++ b/typing/typemod.mli @@ -39,7 +39,7 @@ val type_toplevel_phrase: Typedtree.structure * Types.signature * Signature_names.t * Shape.t * Env.t val type_implementation: - string -> string -> string -> Env.t -> + string -> string -> Compilation_unit.t -> Env.t -> Parsetree.structure -> Typedtree.implementation val type_interface: Env.t -> Parsetree.signature -> Typedtree.signature @@ -60,11 +60,11 @@ val modtype_of_package: val path_of_module : Typedtree.module_expr -> Path.t option val save_signature: - string -> Typedtree.signature -> string -> string -> + Compilation_unit.t -> Typedtree.signature -> string -> string -> Env.t -> Cmi_format.cmi_infos -> unit val package_units: - Env.t -> string list -> string -> string -> Typedtree.module_coercion + Env.t -> string list -> string -> Compilation_unit.t -> Typedtree.module_coercion (* Should be in Envaux, but it breaks the build of the debugger *) val initial_env: diff --git a/utils/compilation_unit.ml b/utils/compilation_unit.ml index ff6360700d1b..34f3bf59a086 100644 --- a/utils/compilation_unit.ml +++ b/utils/compilation_unit.ml @@ -22,7 +22,7 @@ module List = Misc.Stdlib.List module String = Misc.Stdlib.String type error = - | Invalid_character of char + | Invalid_character of char * string | Bad_compilation_unit_name of string exception Error of error @@ -43,9 +43,9 @@ module Name : sig type t include Identifiable.S with type t := t val dummy : t + val predef_exn : t val of_string : string -> t val to_string : t -> string - val persistent_ident : t -> Ident.t val check_as_path_component : t -> unit end = struct (* Be VERY careful changing this. Anything not equivalent to [string] will @@ -84,16 +84,17 @@ end = struct let dummy = "*dummy*" - let to_string t = t + let predef_exn = "*predef*" - let persistent_ident t = Ident.create_persistent t + let to_string t = t end module Prefix : sig type t include Identifiable.S with type t := t - val parse_for_pack : string option -> t + val parse_for_pack : string -> t val from_clflags : unit -> t + val of_list : Name.t list -> t val to_list : t -> Name.t list val to_string : t -> string val empty : t @@ -130,20 +131,19 @@ end = struct || code >= 65 && code <= 90 (* [A-Z] *) || code >= 97 && code <= 122 (* [a-z] *) - let parse pack = + let parse_for_pack pack = let prefix = String.split_on_char '.' pack in ListLabels.iter prefix ~f:(fun module_name -> String.iteri (fun i c -> if not (is_valid_character (i=0) c) then - raise (Error (Invalid_character c))) + raise (Error (Invalid_character (c, module_name)))) module_name); ListLabels.map prefix ~f:Name.of_string - let parse_for_pack = function + let from_clflags () = + match !Clflags.for_package with | None -> [] - | Some pack -> parse pack - - let from_clflags () = parse_for_pack !Clflags.for_package + | Some pack -> parse_for_pack pack let to_string p = Format.asprintf "%a" print p @@ -155,6 +155,8 @@ end = struct | [] -> true | _::_ -> false + let of_list t = t + let to_list t = t end @@ -176,6 +178,13 @@ let create for_pack_prefix name = hash = Hashtbl.hash (name, for_pack_prefix) } +let create_child parent name = + let prefix = + (parent.for_pack_prefix |> Prefix.to_list) @ [ parent.name ] + |> Prefix.of_list + in + create prefix name + let of_string str = let for_pack_prefix, name = match String.rindex_opt str '.' with @@ -184,15 +193,14 @@ let of_string str = (* See [Name.check_as_path_component]; this allows ".cinaps" as a compilation unit *) Prefix.empty, Name.of_string str - | Some pos -> - Prefix.parse_for_pack (Some (String.sub str 0 (pos+1))), - Name.of_string (String.sub str (pos+1) (String.length str - pos - 1)) + | Some _ -> + Misc.fatal_errorf "[of_string] does not parse qualified names" in create for_pack_prefix name let dummy = create Prefix.empty (Name.of_string "*none*") -let predef_exn = create Prefix.empty (Name.of_string "*predef*") +let predef_exn = create Prefix.empty Name.predef_exn let name t = t.name @@ -244,13 +252,73 @@ let full_path t = let is_parent t ~child = List.equal Name.equal (full_path t) (Prefix.to_list child.for_pack_prefix) +let is_strict_prefix list1 ~of_:list2 ~equal = + not (List.equal equal list1 list2) && List.is_prefix list1 ~of_:list2 ~equal + +let can_access_by_name t ~accessed_by:me = + let my_path = full_path me in + (* Criterion 1 in .mli *) + let t's_prefix_is_my_ancestor = + List.is_prefix + (t.for_pack_prefix |> Prefix.to_list) + ~of_:my_path + ~equal:Name.equal + in + (* Criterion 2 *) + let t_is_not_my_strict_ancestor = + not (is_strict_prefix (full_path t) ~of_:my_path ~equal:Name.equal) + in + t's_prefix_is_my_ancestor && t_is_not_my_strict_ancestor + +let which_cmx_file desired_comp_unit ~accessed_by : Name.t = + let desired_prefix = for_pack_prefix desired_comp_unit in + if Prefix.is_empty desired_prefix then + (* If the unit we're looking for is not in a pack, then the correct .cmx + file is the one with the same name as the unit, irrespective of any + current pack. *) + name desired_comp_unit + else + (* This lines up the full paths as described above. *) + let rec match_components ~current ~desired = + match current, desired with + | current_name::current, desired_name::desired -> + if Name.equal current_name desired_name then + (* The full paths are equal up to the current point; keep going. *) + match_components ~current ~desired + else + (* The paths have diverged. The next component of the desired + path is the .cmx file to load. *) + desired_name + | [], desired_name::_desired -> + (* The whole of the current unit's full path (including the name of + the unit itself) is now known to be a prefix of the desired unit's + pack *prefix*. This means we must be making a pack. The .cmx + file to load is named after the next component of the desired + unit's path (which may in turn be a pack). *) + desired_name + | [], [] -> + (* The paths were equal, so the desired compilation unit is just the + current one. *) + name desired_comp_unit + | _::_, [] -> + (* The current path is longer than the desired unit's path, which + means we're attempting to go back up the pack hierarchy. This is + an error. *) + Misc.fatal_errorf "Compilation unit@ %a@ is inaccessible when \ + compiling compilation unit@ %a" + print desired_comp_unit + print accessed_by + in + match_components ~current:(full_path accessed_by) + ~desired:(full_path desired_comp_unit) + let print_name ppf t = Format.fprintf ppf "%a" Name.print t.name let full_path_as_string t = Format.asprintf "%a" print t -let to_global_ident_for_legacy_code t = +let to_global_ident_for_bytecode t = Ident.create_persistent (full_path_as_string t) let print_debug ppf { for_pack_prefix; hash = _; name } = @@ -267,11 +335,13 @@ let print_debug ppf { for_pack_prefix; hash = _; name } = let current = ref None -let set_current t = - current := Some t +let set_current t_opt = + current := t_opt let get_current () = !current +let get_current_or_dummy () = Option.value !current ~default:dummy + let get_current_exn () = match !current with | Some t -> t diff --git a/utils/compilation_unit.mli b/utils/compilation_unit.mli index f9662cebf8c7..f347891b4aff 100644 --- a/utils/compilation_unit.mli +++ b/utils/compilation_unit.mli @@ -43,7 +43,8 @@ module Name : sig val to_string : t -> string - val persistent_ident : t -> Ident.t + (** The name of the distinguished compilation unit for predefined exceptions. *) + val predef_exn : t end module Prefix : sig @@ -56,10 +57,12 @@ module Prefix : sig val empty : t - (** [parse_for_pack p] returns the list of nested packed modules from a - "-for-pack" argument. *) - val parse_for_pack : string option -> t + (** [parse_for_pack p] returns the list of nested packed modules, as expressed + in the syntax of the "-for-pack" argument. *) + val parse_for_pack : string -> t + (** Return the prefix specified to "-for-pack". Returns the empty prefix if + no "-for-pack" was passed. *) val from_clflags : unit -> t (** Return the list of names comprising the prefix, outermost first. *) @@ -89,20 +92,63 @@ val print_debug : Format.formatter -> t -> unit mangled in any way). *) val create : Prefix.t -> Name.t -> t -(** Create a compilation unit from the given [name]. The "-for-pack" of - prefix is extracted if there is any. *) +(** Create a compilation unit contained by another. Effectively uses the + parent compilation unit as the prefix. *) +val create_child : t -> Name.t -> t + +(** Create a compilation unit from the given [name]. No prefix is allowed; + throws a fatal error if there is a "." in the name. (As a special case, + a "." is allowed as the first character, to handle compilation units + which take their names from hidden files.) *) val of_string : string -> t -(** Create a global [Ident.t] representing this compilation unit. DO NOT USE - if you can possibly avoid it. Most uses of [Ident.t]s that are known to be - global should simply use [t] instead. *) -(* CR mshinwell: Delete this as soon as the functor packs work is finished. *) -val to_global_ident_for_legacy_code : t -> Ident.t +(** Create a global [Ident.t] representing this compilation unit. Only intended + for use in bytecode; most uses of [Ident.t]s that are known to be global + should simply use [t] instead. *) +val to_global_ident_for_bytecode : t -> Ident.t (** Find whether one compilation unit has another as a child. That is, whether the other unit has this one as its path prefix. *) val is_parent : t -> child:t -> bool +(** Find whether one compilation unit can access another directly, without going + through a pack. Equivalently, find whether one unit's .cmx file is visible + while compiling another. Access to a packed unit is allowed only "from + inside the pack," which is to say, a unit can only access its own members + and those of its ancestors, though not the ancestors themselves. Thought of + as a node in a tree, this means a module can access its own children, its + own siblings, and its ancestors' siblings. + + In terms of paths, in order for [X] to access [Y], + + (1) [Y]'s prefix must be equal to or a prefix of [X]'s full path, and + (2) [Y] itself must not be (strictly) a prefix of [X] (though [X] and [Y] may + be equal). + + For example: + + * [A.B.C] _can_ access [A.Q] because [A.Q] is a member of [A] and [A] is + an ancestor of [A.B.C]. In other words, [A.Q]'s prefix is [A] and [A] is a + prefix of [A.B.C]. + * [A.Q] _cannot_ access [A.B.C] because [A.B] is not a prefix of [A.Q]. + * [A.Q] _can_ however access [A.B], because [A] _is_ a prefix of [A.Q]. + * [A.Q] _can_ also access its own member, [A.Q.R], because [A.Q.R]'s prefix + is exactly [A.Q]. + * [A.Q] _cannot_ access [A.Q.R.S], because [A.Q.R] is not a prefix of [A.Q]. + * [A.Q] _can_ access [F], since [F]'s prefix is the empty path, which is + trivially a prefix of [A.Q]. + * [A.Q] _cannot_ access [F.G] (by criterion 1) or [A] (by criterion 2). *) +val can_access_by_name : t -> accessed_by:t -> bool + +(** Determine which .cmx file to load for a given compilation unit. + This is tricky in the case of packs. It can be done by lining up the + desired compilation unit's full path (i.e. pack prefix then unit name) + against the accessing unit's full path and observing when/if they + diverge. + + This is only used for native code compilation. *) +val which_cmx_file : t -> accessed_by:t -> Name.t + (** A distinguished compilation unit for initialisation of mutable state. *) val dummy : t @@ -138,13 +184,14 @@ val full_path : t -> Name.t list val full_path_as_string : t -> string type error = private - | Invalid_character of char + | Invalid_character of char * string | Bad_compilation_unit_name of string (** The exception raised by conversion functions in this module. *) exception Error of error -val set_current : t -> unit +val set_current : t option -> unit val get_current : unit -> t option +val get_current_or_dummy : unit -> t val get_current_exn : unit -> t val is_current : t -> bool diff --git a/utils/consistbl.ml b/utils/consistbl.ml index 311c0e413ab5..5fd05939b3bf 100644 --- a/utils/consistbl.ml +++ b/utils/consistbl.ml @@ -23,8 +23,10 @@ module Make (Module_name : sig module Map : Map.S with type key = t module Tbl : Hashtbl.S with type key = t val compare : t -> t -> int +end) (Data : sig + type t end) = struct - type t = (Digest.t * filepath) Module_name.Tbl.t + type t = (Data.t * Digest.t * filepath) Module_name.Tbl.t let create () = Module_name.Tbl.create 13 @@ -34,36 +36,41 @@ end) = struct unit_name : Module_name.t; inconsistent_source : string; original_source : string; + inconsistent_data : Data.t; + original_data : Data.t; } exception Not_available of Module_name.t - let check_ tbl name crc source = - let (old_crc, old_source) = Module_name.Tbl.find tbl name in - if crc <> old_crc then raise(Inconsistency { + let check_ tbl name data crc source = + let (old_data, old_crc, old_source) = Module_name.Tbl.find tbl name in + if not (Digest.equal crc old_crc) + then raise(Inconsistency { unit_name = name; inconsistent_source = source; original_source = old_source; + inconsistent_data = data; + original_data = old_data; }) - let check tbl name crc source = - try check_ tbl name crc source + let check tbl name data crc source = + try check_ tbl name data crc source with Not_found -> - Module_name.Tbl.add tbl name (crc, source) + Module_name.Tbl.add tbl name (data, crc, source) - let check_noadd tbl name crc source = - try check_ tbl name crc source + let check_noadd tbl name data crc source = + try check_ tbl name data crc source with Not_found -> raise (Not_available name) - let set tbl name crc source = Module_name.Tbl.add tbl name (crc, source) + let set tbl name data crc source = Module_name.Tbl.add tbl name (data, crc, source) - let source tbl name = snd (Module_name.Tbl.find tbl name) + let source tbl name = thd3 (Module_name.Tbl.find tbl name) let find t name = match Module_name.Tbl.find t name with | exception Not_found -> None - | (crc, _) -> Some crc + | (data, crc, _) -> Some (data, crc) let extract l tbl = let l = List.sort_uniq Module_name.compare l in diff --git a/utils/consistbl.mli b/utils/consistbl.mli index 6ca571bd8916..8deb715aa401 100644 --- a/utils/consistbl.mli +++ b/utils/consistbl.mli @@ -28,6 +28,8 @@ module Make (Module_name : sig module Map : Map.S with type key = t module Tbl : Hashtbl.S with type key = t val compare : t -> t -> int +end) (Data : sig + type t end) : sig type t @@ -35,21 +37,21 @@ end) : sig val clear: t -> unit - val check: t -> Module_name.t -> Digest.t -> filepath -> unit - (* [check tbl name crc source] + val check: t -> Module_name.t -> Data.t -> Digest.t -> filepath -> unit + (* [check tbl name data crc source] checks consistency of ([name], [crc]) with infos previously stored in [tbl]. If no CRC was previously associated with - [name], record ([name], [crc]) in [tbl]. + [name], record ([name], [data], [crc]) in [tbl]. [source] is the name of the file from which the information comes from. This is used for error reporting. *) - val check_noadd: t -> Module_name.t -> Digest.t -> filepath -> unit + val check_noadd: t -> Module_name.t -> Data.t -> Digest.t -> filepath -> unit (* Same as [check], but raise [Not_available] if no CRC was previously associated with [name]. *) - val set: t -> Module_name.t -> Digest.t -> filepath -> unit - (* [set tbl name crc source] forcefully associates [name] with - [crc] in [tbl], even if [name] already had a different CRC + val set: t -> Module_name.t -> Data.t -> Digest.t -> filepath -> unit + (* [set tbl name data crc source] forcefully associates [name] with + ([data], [crc]) in [tbl], even if [name] already had a different CRC associated with [name] in [tbl]. *) val source: t -> Module_name.t -> filepath @@ -57,14 +59,16 @@ end) : sig if the latter has an associated CRC in [tbl]. Raise [Not_found] otherwise. *) - val find: t -> Module_name.t -> Digest.t option + val find: t -> Module_name.t -> (Data.t * Digest.t) option - val extract: Module_name.t list -> t -> (Module_name.t * Digest.t option) list + val extract: + Module_name.t list -> t -> (Module_name.t * (Data.t * Digest.t) option) list (* [extract tbl names] returns an associative list mapping each string - in [names] to the CRC associated with it in [tbl]. If no CRC is - associated with a name then it is mapped to [None]. *) + in [names] to the data and CRC associated with it in [tbl]. If no CRC + is associated with a name then it is mapped to [None]. *) - val extract_map : Module_name.Set.t -> t -> Digest.t option Module_name.Map.t + val extract_map : + Module_name.Set.t -> t -> (Data.t * Digest.t) option Module_name.Map.t (* Like [extract] but with a more sophisticated type. *) val filter: (Module_name.t -> bool) -> t -> unit @@ -75,6 +79,8 @@ end) : sig unit_name : Module_name.t; inconsistent_source : string; original_source : string; + inconsistent_data : Data.t; + original_data : Data.t; } (* Raised by [check] when a CRC mismatch is detected. *) diff --git a/utils/misc.ml b/utils/misc.ml index db98ce1bc749..36b7cadd4f18 100644 --- a/utils/misc.ml +++ b/utils/misc.ml @@ -944,8 +944,6 @@ let print_if ppf flag printer arg = type filepath = string -type modname = string -type crcs = (modname * Digest.t option) list type alerts = string Stdlib.String.Map.t diff --git a/utils/misc.mli b/utils/misc.mli index a4aeea84f76e..2b2250e381a1 100644 --- a/utils/misc.mli +++ b/utils/misc.mli @@ -489,11 +489,6 @@ val print_if : type filepath = string -(* CR-someday lmaurer: Retire [modname] in favor of [Compilation_unit.Name.t] - and alter [crcs] accordingly (move it into [Compilation_unit] somewhere?). *) -type modname = string -type crcs = (modname * Digest.t option) list - type alerts = string Stdlib.String.Map.t module Bitmap : sig diff --git a/utils/symbol.ml b/utils/symbol.ml index b0f993a5d28c..f3e03ee8ec1a 100644 --- a/utils/symbol.ml +++ b/utils/symbol.ml @@ -81,26 +81,15 @@ let linkage_name_for_compilation_unit comp_unit = caml_symbol_prefix ^ suffix |> Linkage_name.of_string -let for_global_or_predef_ident pack_prefix id = - assert (Ident.is_global_or_predef id); - let linkage_name, compilation_unit = - if Ident.is_predef id then - "caml_exn_" ^ Ident.name id |> Linkage_name.of_string, CU.predef_exn - else - let compilation_unit = - Compilation_unit.create pack_prefix - (Ident.name id |> Compilation_unit.Name.of_string) - in - linkage_name_for_compilation_unit compilation_unit, compilation_unit - in +let for_predef_ident id = + assert (Ident.is_predef id); + let linkage_name = "caml_exn_" ^ Ident.name id |> Linkage_name.of_string in + let compilation_unit = CU.predef_exn in { compilation_unit; linkage_name; hash = Hashtbl.hash linkage_name; } -let for_predef_ident id = - for_global_or_predef_ident Compilation_unit.Prefix.empty id - let unsafe_create compilation_unit linkage_name = { compilation_unit; linkage_name; diff --git a/utils/symbol.mli b/utils/symbol.mli index a5d4a7e97be8..3984ef03822d 100644 --- a/utils/symbol.mli +++ b/utils/symbol.mli @@ -20,12 +20,9 @@ type t +(* For predefined exception identifiers. *) val for_predef_ident : Ident.t -> t -(* CR mshinwell: Insist on -for-pack for .mli files; then this function - will not need to take a pack prefix. *) -val for_global_or_predef_ident : Compilation_unit.Prefix.t -> Ident.t -> t - (** It is assumed that the provided [Ident.t] is in the current unit. *) val for_local_ident : Ident.t -> t From 27132d8005c85a0a97ad047e1fcc7fe55e4ed9ab Mon Sep 17 00:00:00 2001 From: Chris Casinghino Date: Wed, 30 Nov 2022 13:03:12 -0500 Subject: [PATCH 34/39] flambda-backend: Fix for spurious typing error related to expanding through functor arguments (#997) --- testsuite/tests/typing-modules/functors.ml | 44 ++++++++++++++++++++++ typing/env.ml | 8 ++++ typing/env.mli | 2 + typing/mtype.ml | 3 ++ 4 files changed, 57 insertions(+) diff --git a/testsuite/tests/typing-modules/functors.ml b/testsuite/tests/typing-modules/functors.ml index b3f4226b2f25..02aa1cd72f4e 100644 --- a/testsuite/tests/typing-modules/functors.ml +++ b/testsuite/tests/typing-modules/functors.ml @@ -1701,3 +1701,47 @@ Error: The functor application Bar(A)(FiveArgsExt)(TY)(TY)(TY)(TY)(TY) is ill-ty 8. Module TY matches the expected module type ty 9. Module TY matches the expected module type ty |}] + +module Shape_arg = struct + module M1 (Arg1 : sig end) = struct + module type S1 = sig + type t + end + end + + module type S2 = sig + module Make (Arg2 : sig end) : M1(Arg2).S1 + end + + module M2 : S2 = struct + module Make (Arg3 : sig end) = struct + type t = T + end + end + + module M3 (Arg4 : sig end) = struct + module type S3 = sig + type t = M2.Make(Arg4).t + end + end + + module M4 (Arg5 : sig end) : M3(Arg5).S3 = struct + module M5 = M2.Make (Arg5) + + type t = M5.t + end +end +[%%expect{| +module Shape_arg : + sig + module M1 : + functor (Arg1 : sig end) -> sig module type S1 = sig type t end end + module type S2 = + sig module Make : functor (Arg2 : sig end) -> M1(Arg2).S1 end + module M2 : S2 + module M3 : + functor (Arg4 : sig end) -> + sig module type S3 = sig type t = M2.Make(Arg4).t end end + module M4 : functor (Arg5 : sig end) -> M3(Arg5).S3 + end +|}] diff --git a/typing/env.ml b/typing/env.ml index d285a0089ee9..85d482fcd790 100644 --- a/typing/env.ml +++ b/typing/env.ml @@ -2311,6 +2311,14 @@ and add_cltype ?shape id ty env = let shape = shape_or_leaf ty.clty_uid shape in store_cltype id ty shape env +let add_module_lazy ~update_summary id presence mty env = + let md = Subst.Lazy.{mdl_type = mty; + mdl_attributes = []; + mdl_loc = Location.none; + mdl_uid = Uid.internal_not_actually_unique} + in + add_module_declaration_lazy ~update_summary id presence md env + let add_module ?arg ?shape id presence mty env = add_module_declaration ~check:false ?arg ?shape id presence (md mty) env diff --git a/typing/env.mli b/typing/env.mli index 4ba47ba33ee2..ffdd514b1dd5 100644 --- a/typing/env.mli +++ b/typing/env.mli @@ -302,6 +302,8 @@ val add_extension: check:bool -> rebind:bool -> Ident.t -> extension_constructor -> t -> t val add_module: ?arg:bool -> ?shape:Shape.t -> Ident.t -> module_presence -> module_type -> t -> t +val add_module_lazy: update_summary:bool -> + Ident.t -> module_presence -> Subst.Lazy.modtype -> t -> t val add_module_declaration: ?arg:bool -> ?shape:Shape.t -> check:bool -> Ident.t -> module_presence -> module_declaration -> t -> t val add_module_declaration_lazy: update_summary:bool -> diff --git a/typing/mtype.ml b/typing/mtype.ml index f57c9a22a9ec..7145f871ce53 100644 --- a/typing/mtype.ml +++ b/typing/mtype.ml @@ -46,6 +46,9 @@ let rec strengthen_lazy ~aliasable env mty p = MtyL_signature(strengthen_lazy_sig ~aliasable env sg p) | MtyL_functor(Named (Some param, arg), res) when !Clflags.applicative_functors -> + let env = + Env.add_module_lazy ~update_summary:false param Mp_present arg env + in MtyL_functor(Named (Some param, arg), strengthen_lazy ~aliasable:false env res (Papply(p, Pident param))) | MtyL_functor(Named (None, arg), res) From 0f1ce0eeab303e6dfe2df69c7fde57a9f46271c5 Mon Sep 17 00:00:00 2001 From: Greta Yorsh <45005955+gretay-js@users.noreply.github.com> Date: Fri, 2 Dec 2022 11:16:36 +0000 Subject: [PATCH 35/39] flambda-backend: Regenerate ocaml/configure autoconf 2.69 (instead of 2.71) (#1012) --- configure | 7943 +++++++++++++++++++++++------------------------------ 1 file changed, 3415 insertions(+), 4528 deletions(-) diff --git a/configure b/configure index 5168b7aecc5a..dd0c06f216f7 100755 --- a/configure +++ b/configure @@ -1,12 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for OCaml 4.14.0+jst. +# Generated by GNU Autoconf 2.69 for OCaml 4.14.0+jst. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, -# Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -17,16 +16,14 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +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 $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -36,46 +33,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# 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 ${PATH_SEPARATOR+false} :; then +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 || @@ -84,6 +81,13 @@ if ${PATH_SEPARATOR+false} :; then 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. as_myself= case $0 in #(( @@ -92,12 +96,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -109,10 +109,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $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 # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -134,22 +154,20 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -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 \$as_nop +else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -169,15 +187,12 @@ 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 : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : -else \$as_nop +else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 -blah=\$(echo \$(echo blah)) -test x\"\$blah\" = xblah || exit 1 test -x / || 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 @@ -192,38 +207,30 @@ test -x / || exit 1" 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 : + if (eval "$as_required") 2>/dev/null; then : as_have_required=yes -else $as_nop +else as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null -then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -else $as_nop +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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + 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 + as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : + { $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_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null -then : + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi @@ -231,21 +238,14 @@ fi esac as_found=false done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : +$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 -fi +fi; } +IFS=$as_save_IFS - if test "x$CONFIG_SHELL" != x -then : + if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -263,19 +263,18 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno -then : - printf "%s\n" "$0: This script requires a shell more modern than all" - printf "%s\n" "$0: the shells that I found on your system." - if test ${ZSH_VERSION+y} ; then - printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" - printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." + 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 - printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and caml-list@inria.fr + $as_echo "$0: Please tell bug-autoconf@gnu.org and caml-list@inria.fr $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 @@ -303,7 +302,6 @@ as_fn_unset () } as_unset=as_fn_unset - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -321,14 +319,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -343,7 +333,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -352,7 +342,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -391,13 +381,12 @@ as_fn_executable_p () # 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 : +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_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -409,27 +398,18 @@ fi # as_fn_append # 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 : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -441,9 +421,9 @@ 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 - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -470,7 +450,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -514,7 +494,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -528,10 +508,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -545,13 +521,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -629,36 +598,40 @@ PACKAGE_URL='http://www.ocaml.org' ac_unique_file="runtime/interp.c" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_STDIO_H -# include +#include +#ifdef HAVE_SYS_TYPES_H +# include #endif -#ifdef HAVE_STDLIB_H +#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_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif #ifdef HAVE_UNISTD_H # include #endif" -ac_header_c_list= ac_subst_vars='LTLIBOBJS LIBOBJS PTHREAD_CFLAGS @@ -671,9 +644,9 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM flexlink -CPP ac_ct_DEP_CC DEP_CC +CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -840,7 +813,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -965,7 +937,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -995,6 +966,8 @@ do *) ac_optarg=yes ;; esac + # Accept the important Cygnus configure options, so we can diagnose typos. + case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -1035,9 +1008,9 @@ do 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'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1061,9 +1034,9 @@ do 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'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1216,15 +1189,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1274,9 +1238,9 @@ do 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'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1290,9 +1254,9 @@ do 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'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1336,9 +1300,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1354,7 +1318,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1362,7 +1326,7 @@ fi 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 runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1418,7 +1382,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_myself" | +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1515,7 +1479,6 @@ Fine tuning of the installation directories: --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] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1666,9 +1629,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + 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/ ;; @@ -1696,8 +1659,7 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for configure.gnu first; this name is used for a wrapper for - # Metaconfig's "Configure" on case-insensitive file systems. + # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1705,7 +1667,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1715,9 +1677,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF OCaml configure 4.14.0+jst -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.69 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1734,14 +1696,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam + 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\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1749,15 +1711,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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 : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1773,14 +1734,14 @@ fi 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.beam conftest$ac_exeext + 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\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1788,18 +1749,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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 || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1821,94 +1781,30 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; 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 : +if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile -# 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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. */ - -#include -#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 (void) -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1921,7 +1817,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1929,15 +1825,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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 : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1949,8 +1844,8 @@ fi # ac_fn_c_try_run LINENO # ---------------------- -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. +# 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 @@ -1960,26 +1855,25 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 +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 @@ -1990,6 +1884,164 @@ fi } # 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 \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# 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 \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; 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 caml-list@inria.fr ## +## --------------------------------- ##" + ) | 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 \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -1997,18 +2049,17 @@ fi ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof ($2)) return 0; @@ -2016,13 +2067,12 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof (($2))) return 0; @@ -2030,19 +2080,18 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -else $as_nop +else eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type @@ -2061,7 +2110,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; @@ -2071,15 +2120,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +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 (void) +main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2089,10 +2137,9 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break -else $as_nop +else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= @@ -2100,14 +2147,14 @@ else $as_nop fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; @@ -2117,15 +2164,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +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 (void) +main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; @@ -2135,10 +2181,9 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break -else $as_nop +else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= @@ -2146,14 +2191,14 @@ else $as_nop fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done -else $as_nop +else ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +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 @@ -2161,7 +2206,7 @@ while test "x$ac_lo" != "x$ac_hi"; do /* end confdefs.h. */ $4 int -main (void) +main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2171,13 +2216,12 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid -else $as_nop +else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; @@ -2187,12 +2231,12 @@ esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -static long int longval (void) { return $2; } -static unsigned long int ulongval (void) { return $2; } +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } #include #include int -main (void) +main () { FILE *f = fopen ("conftest.val", "w"); @@ -2220,10 +2264,9 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 -printf %s "checking whether $as_decl_name is declared... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - eval ac_save_FLAGS=\$$6 - as_fn_append $6 " $5" + { $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 \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { #ifndef $as_decl_name #ifdef __cplusplus @@ -2271,22 +2311,19 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - eval $6=\$ac_save_FLAGS - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_check_decl +} # ac_fn_c_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- @@ -2295,17 +2332,16 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -printf %s "checking for $2.$3... " >&6; } -if eval test \${$4+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main (void) +main () { static $2 ac_aggr; if (ac_aggr.$3) @@ -2314,15 +2350,14 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main (void) +main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) @@ -2331,50 +2366,29 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" -else $as_nop +else eval "$4=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member -ac_configure_args_raw= -for ac_arg -do - case $ac_arg in - *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_configure_args_raw " '$ac_arg'" -done - -case $ac_configure_args_raw in - *$as_nl*) - ac_safe_unquote= ;; - *) - ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. - ac_unsafe_a="$ac_unsafe_z#~" - ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" - ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; -esac - 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 OCaml $as_me 4.14.0+jst, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was - $ $0$ac_configure_args_raw + $ $0 $@ _ACEOF exec 5>>config.log @@ -2407,12 +2421,8 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - printf "%s\n" "PATH: $as_dir" + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" done IFS=$as_save_IFS @@ -2447,7 +2457,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2482,13 +2492,11 @@ done # 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=$? - # Sanitize IFS. - IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - printf "%s\n" "## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2499,8 +2507,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_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) ;; #( @@ -2524,7 +2532,7 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ) echo - printf "%s\n" "## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2532,14 +2540,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - printf "%s\n" "## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2547,15 +2555,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - printf "%s\n" "## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2563,8 +2571,8 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} echo fi test "$ac_signal" != 0 && - printf "%s\n" "$as_me: caught signal $ac_signal" - printf "%s\n" "$as_me: exit $exit_status" + $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 && @@ -2578,48 +2586,63 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -printf "%s\n" "/* confdefs.h */" > confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF -printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF -printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF -printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF -printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF -printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h +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_files="$CONFIG_SITE" + # 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_files="$prefix/share/config.site $prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + 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_files +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - case $ac_site_file in #( - */*) : - ;; #( - *) : - ac_site_file=./$ac_site_file ;; -esac - if test -f "$ac_site_file" && test -r "$ac_site_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} + 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" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { $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 @@ -2629,434 +2652,19 @@ 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -printf "%s\n" "$as_me: loading cache $cache_file" >&6;} + { $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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -printf "%s\n" "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Test code for whether the C compiler supports C89 (global declarations) -ac_c_conftest_c89_globals=' -/* Does the compiler advertise C89 conformance? - Do not test the value of __STDC__, because some compilers set it to 0 - while being otherwise adequately conformant. */ -#if !defined __STDC__ -# error "Compiler does not advertise C89 conformance" -#endif - -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ -struct buf { int x; }; -struct buf * (*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 do not provoke an error unfortunately, instead are silently treated - as an "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 is necessary to write \x00 == 0 to get something - that is 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 **, int *(*)(struct buf *, struct stat *, int), - int, int);' - -# Test code for whether the C compiler supports C89 (body of main). -ac_c_conftest_c89_main=' -ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); -' - -# Test code for whether the C compiler supports C99 (global declarations) -ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif - -#include -extern int puts (const char *); -extern int printf (const char *, ...); -extern int dprintf (int, const char *, ...); -extern void *malloc (size_t); - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -// dprintf is used instead of fprintf to avoid needing to declare -// FILE and stderr. -#define debug(...) dprintf (2, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - #error "your preprocessor is broken" -#endif -#if BIG_OK -#else - #error "your preprocessor is broken" -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static bool -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str = ""; - int number = 0; - float fnumber = 0; - - while (*format) - { - switch (*format++) - { - case '\''s'\'': // string - str = va_arg (args_copy, const char *); - break; - case '\''d'\'': // int - number = va_arg (args_copy, int); - break; - case '\''f'\'': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); - - return *str && number && fnumber; -} -' - -# Test code for whether the C compiler supports C99 (body of main). -ac_c_conftest_c99_main=' - // Check bool. - _Bool success = false; - success |= (argc != 0); - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[0] = argv[0][0]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' - || dynamic_array[ni.number - 1] != 543); -' - -# Test code for whether the C compiler supports C11 (global declarations) -ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L -# error "Compiler does not advertise C11 conformance" -#endif - -// Check _Alignas. -char _Alignas (double) aligned_as_double; -char _Alignas (0) no_special_alignment; -extern char aligned_as_int; -char _Alignas (0) _Alignas (int) aligned_as_int; - -// Check _Alignof. -enum -{ - int_alignment = _Alignof (int), - int_array_alignment = _Alignof (int[100]), - char_alignment = _Alignof (char) -}; -_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); - -// Check _Noreturn. -int _Noreturn does_not_return (void) { for (;;) continue; } - -// Check _Static_assert. -struct test_static_assert -{ - int x; - _Static_assert (sizeof (int) <= sizeof (long int), - "_Static_assert does not work in struct"); - long int y; -}; - -// Check UTF-8 literals. -#define u8 syntax error! -char const utf8_literal[] = u8"happens to be ASCII" "another string"; - -// Check duplicate typedefs. -typedef long *long_ptr; -typedef long int *long_ptr; -typedef long_ptr long_ptr; - -// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. -struct anonymous -{ - union { - struct { int i; int j; }; - struct { int k; long int l; } w; - }; - int m; -} v1; -' - -# Test code for whether the C compiler supports C11 (body of main). -ac_c_conftest_c11_main=' - _Static_assert ((offsetof (struct anonymous, i) - == offsetof (struct anonymous, w.k)), - "Anonymous union alignment botch"); - v1.i = 2; - v1.w.k = 5; - ok |= v1.i != 5; -' - -# Test code for whether the C compiler supports C11 (complete). -ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} -${ac_c_conftest_c11_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - ${ac_c_conftest_c11_main} - return ok; -} -" - -# Test code for whether the C compiler supports C99 (complete). -ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - return ok; -} -" - -# Test code for whether the C compiler supports C89 (complete). -ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - return ok; -} -" - -as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" -as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" -as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" -as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" -as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" -as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" -as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" -as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" -as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" - -# Auxiliary files required by this configure script. -ac_aux_files="install-sh ltmain.sh config.guess config.sub" - -# Locations in which to look for auxiliary files. -ac_aux_dir_candidates="${srcdir}/build-aux" - -# Search for a directory containing all of the required auxiliary files, -# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. -# If we don't find one directory that contains all the files we need, -# we report the set of missing files from the *first* directory in -# $ac_aux_dir_candidates and give up. -ac_missing_aux_files="" -ac_first_candidate=: -printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in $ac_aux_dir_candidates -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - as_found=: - - printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 - ac_aux_dir_found=yes - ac_install_sh= - for ac_aux in $ac_aux_files - do - # As a special case, if "install-sh" is required, that requirement - # can be satisfied by any of "install-sh", "install.sh", or "shtool", - # and $ac_install_sh is set appropriately for whichever one is found. - if test x"$ac_aux" = x"install-sh" - then - if test -f "${as_dir}install-sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 - ac_install_sh="${as_dir}install-sh -c" - elif test -f "${as_dir}install.sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 - ac_install_sh="${as_dir}install.sh -c" - elif test -f "${as_dir}shtool"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 - ac_install_sh="${as_dir}shtool install -c" - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} install-sh" - else - break - fi - fi - else - if test -f "${as_dir}${ac_aux}"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" - else - break - fi - fi - fi - done - if test "$ac_aux_dir_found" = yes; then - ac_aux_dir="$as_dir" - break - fi - ac_first_candidate=false - - as_found=false -done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$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. -if test -f "${ac_aux_dir}config.guess"; then - ac_config_guess="$SHELL ${ac_aux_dir}config.guess" -fi -if test -f "${ac_aux_dir}config.sub"; then - ac_config_sub="$SHELL ${ac_aux_dir}config.sub" -fi -if test -f "$ac_aux_dir/configure"; then - ac_configure="$SHELL ${ac_aux_dir}configure" -fi - # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -3067,12 +2675,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $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) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $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=: ;; ,);; *) @@ -3081,24 +2689,24 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { $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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { $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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { $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=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) 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 @@ -3108,12 +2716,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' - and start over" "$LINENO" 5 + { $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. ## @@ -3127,8 +2734,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configuring OCaml version 4.14.0+jst" >&5 -printf "%s\n" "$as_me: Configuring OCaml version 4.14.0+jst" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring OCaml version 4.14.0+jst" >&5 +$as_echo "$as_me: Configuring OCaml version 4.14.0+jst" >&6;} # Configuration variables @@ -3170,6 +2777,34 @@ bootstrapping_flexdll=false ## Directory containing auxiliary scripts used during build +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; 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 build-aux \"$srcdir\"/build-aux" "$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. + ## Output variables @@ -3310,47 +2945,43 @@ ac_config_headers="$ac_config_headers runtime/caml/version.h" # Definitions related to the version of OCaml -printf "%s\n" "#define OCAML_VERSION_MAJOR 4" >>confdefs.h +$as_echo "#define OCAML_VERSION_MAJOR 4" >>confdefs.h -printf "%s\n" "#define OCAML_VERSION_MINOR 14" >>confdefs.h +$as_echo "#define OCAML_VERSION_MINOR 14" >>confdefs.h -printf "%s\n" "#define OCAML_VERSION_PATCHLEVEL 0" >>confdefs.h +$as_echo "#define OCAML_VERSION_PATCHLEVEL 0" >>confdefs.h -printf "%s\n" "#define OCAML_VERSION_ADDITIONAL \"jst\"" >>confdefs.h +$as_echo "#define OCAML_VERSION_ADDITIONAL \"jst\"" >>confdefs.h - printf "%s\n" "#define OCAML_VERSION_EXTRA \"jst\"" >>confdefs.h + $as_echo "#define OCAML_VERSION_EXTRA \"jst\"" >>confdefs.h -printf "%s\n" "#define OCAML_VERSION 41400" >>confdefs.h +$as_echo "#define OCAML_VERSION 41400" >>confdefs.h -printf "%s\n" "#define OCAML_VERSION_STRING \"4.14.0+jst\"" >>confdefs.h +$as_echo "#define OCAML_VERSION_STRING \"4.14.0+jst\"" >>confdefs.h # Checks for system types +# 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 - - - # 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 - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -printf %s "checking build system type... " >&6; } -if test ${ac_cv_build+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; 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"` + 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 +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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -printf "%s\n" "$ac_cv_build" >&6; } +{ $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;; @@ -3369,22 +3000,21 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -printf %s "checking host system type... " >&6; } -if test ${ac_cv_host+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; 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 + 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -printf "%s\n" "$ac_cv_host" >&6; } +{ $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;; @@ -3403,22 +3033,21 @@ IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -printf %s "checking target system type... " >&6; } -if test ${ac_cv_target+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else - ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -printf "%s\n" "$ac_cv_target" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; @@ -3474,12 +3103,11 @@ esac # Extract the first word of "dune", so it can be a program name with args. set dummy dune; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_dune+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_dune+:} false; then : + $as_echo_n "(cached) " >&6 +else case $dune in [\\/]* | ?:[\\/]*) ac_cv_path_dune="$dune" # Let the user override the test with a path. @@ -3489,15 +3117,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_dune="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_dune="$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 @@ -3509,43 +3133,39 @@ esac fi dune=$ac_cv_path_dune if test -n "$dune"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dune" >&5 -printf "%s\n" "$dune" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dune" >&5 +$as_echo "$dune" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Check whether --with-dune was given. -if test ${with_dune+y} -then : +if test "${with_dune+set}" = set; then : withval=$with_dune; dune=$with_dune fi # Check whether --enable-debug-runtime was given. -if test ${enable_debug_runtime+y} -then : +if test "${enable_debug_runtime+set}" = set; then : enableval=$enable_debug_runtime; fi # Check whether --enable-debugger was given. -if test ${enable_debugger+y} -then : +if test "${enable_debugger+set}" = set; then : enableval=$enable_debugger; -else $as_nop +else enable_debugger=auto fi # Check whether --enable-dependency-generation was given. -if test ${enable_dependency_generation+y} -then : +if test "${enable_dependency_generation+set}" = set; then : enableval=$enable_dependency_generation; -else $as_nop +else enable_dependency_generation=auto fi @@ -3553,32 +3173,28 @@ fi # Check whether --enable-instrumented-runtime was given. -if test ${enable_instrumented_runtime+y} -then : +if test "${enable_instrumented_runtime+set}" = set; then : enableval=$enable_instrumented_runtime; -else $as_nop +else enable_instrumented_runtime=auto fi # Check whether --enable-vmthreads was given. -if test ${enable_vmthreads+y} -then : +if test "${enable_vmthreads+set}" = set; then : enableval=$enable_vmthreads; as_fn_error $? "The vmthreads library is no longer available. \ It was deleted in OCaml 4.09." "$LINENO" 5 fi # Check whether --enable-systhreads was given. -if test ${enable_systhreads+y} -then : +if test "${enable_systhreads+set}" = set; then : enableval=$enable_systhreads; fi # Check whether --enable-graph-lib was given. -if test ${enable_graph_lib+y} -then : +if test "${enable_graph_lib+set}" = set; then : enableval=$enable_graph_lib; as_fn_error $? "The graphics library is no longer distributed with OCaml \ since version 4.09. It is now distributed as a separate \"graphics\" package: \ https://github.com/ocaml/graphics" "$LINENO" 5 @@ -3586,166 +3202,143 @@ fi # Check whether --enable-str-lib was given. -if test ${enable_str_lib+y} -then : +if test "${enable_str_lib+set}" = set; then : enableval=$enable_str_lib; fi # Check whether --enable-unix-lib was given. -if test ${enable_unix_lib+y} -then : +if test "${enable_unix_lib+set}" = set; then : enableval=$enable_unix_lib; fi # Check whether --enable-bigarray-lib was given. -if test ${enable_bigarray_lib+y} -then : +if test "${enable_bigarray_lib+set}" = set; then : enableval=$enable_bigarray_lib; fi # Check whether --enable-ocamldoc was given. -if test ${enable_ocamldoc+y} -then : +if test "${enable_ocamldoc+set}" = set; then : enableval=$enable_ocamldoc; -else $as_nop +else ocamldoc=auto fi # Check whether --with-odoc was given. -if test ${with_odoc+y} -then : +if test "${with_odoc+set}" = set; then : withval=$with_odoc; fi # Check whether --enable-ocamltest was given. -if test ${enable_ocamltest+y} -then : +if test "${enable_ocamltest+set}" = set; then : enableval=$enable_ocamltest; fi # Check whether --enable-native-toplevel was given. -if test ${enable_native_toplevel+y} -then : +if test "${enable_native_toplevel+set}" = set; then : enableval=$enable_native_toplevel; fi # Check whether --enable-frame-pointers was given. -if test ${enable_frame_pointers+y} -then : +if test "${enable_frame_pointers+set}" = set; then : enableval=$enable_frame_pointers; fi # Check whether --enable-cpp-mangling was given. -if test ${enable_cpp_mangling+y} -then : +if test "${enable_cpp_mangling+set}" = set; then : enableval=$enable_cpp_mangling; fi # Check whether --enable-naked-pointers was given. -if test ${enable_naked_pointers+y} -then : +if test "${enable_naked_pointers+set}" = set; then : enableval=$enable_naked_pointers; fi # Check whether --enable-naked-pointers-checker was given. -if test ${enable_naked_pointers_checker+y} -then : +if test "${enable_naked_pointers_checker+set}" = set; then : enableval=$enable_naked_pointers_checker; fi # Check whether --enable-spacetime was given. -if test ${enable_spacetime+y} -then : +if test "${enable_spacetime+set}" = set; then : enableval=$enable_spacetime; as_fn_error $? "spacetime profiling was deleted in OCaml 4.12." "$LINENO" 5 fi # Check whether --enable-cfi was given. -if test ${enable_cfi+y} -then : +if test "${enable_cfi+set}" = set; then : enableval=$enable_cfi; fi # Check whether --enable-imprecise-c99-float-ops was given. -if test ${enable_imprecise_c99_float_ops+y} -then : +if test "${enable_imprecise_c99_float_ops+set}" = set; then : enableval=$enable_imprecise_c99_float_ops; fi # Check whether --enable-installing-source-artifacts was given. -if test ${enable_installing_source_artifacts+y} -then : +if test "${enable_installing_source_artifacts+set}" = set; then : enableval=$enable_installing_source_artifacts; fi # Check whether --enable-installing-bytecode-programs was given. -if test ${enable_installing_bytecode_programs+y} -then : +if test "${enable_installing_bytecode_programs+set}" = set; then : enableval=$enable_installing_bytecode_programs; fi # Check whether --enable-native-compiler was given. -if test ${enable_native_compiler+y} -then : +if test "${enable_native_compiler+set}" = set; then : enableval=$enable_native_compiler; fi # Check whether --enable-flambda was given. -if test ${enable_flambda+y} -then : +if test "${enable_flambda+set}" = set; then : enableval=$enable_flambda; fi # Check whether --enable-flambda-invariants was given. -if test ${enable_flambda_invariants+y} -then : +if test "${enable_flambda_invariants+set}" = set; then : enableval=$enable_flambda_invariants; fi # Check whether --enable-flambda2 was given. -if test ${enable_flambda2+y} -then : +if test "${enable_flambda2+set}" = set; then : enableval=$enable_flambda2; fi # Check whether --enable-cmm-invariants was given. -if test ${enable_cmm_invariants+y} -then : +if test "${enable_cmm_invariants+set}" = set; then : enableval=$enable_cmm_invariants; fi # Check whether --with-target-bindir was given. -if test ${with_target_bindir+y} -then : +if test "${with_target_bindir+set}" = set; then : withval=$with_target_bindir; fi # Check whether --enable-reserved-header-bits was given. -if test ${enable_reserved_header_bits+y} -then : +if test "${enable_reserved_header_bits+set}" = set; then : enableval=$enable_reserved_header_bits; case $enable_reserved_header_bits in #( 0) : with_profinfo=false @@ -3760,15 +3353,13 @@ fi # Check whether --enable-stdlib-manpages was given. -if test ${enable_stdlib_manpages+y} -then : +if test "${enable_stdlib_manpages+set}" = set; then : enableval=$enable_stdlib_manpages; fi # Check whether --enable-warn-error was given. -if test ${enable_warn_error+y} -then : +if test "${enable_warn_error+set}" = set; then : enableval=$enable_warn_error; fi @@ -3801,8 +3392,7 @@ fi # to be removed in the future. # Check whether --enable-force-safe-string was given. -if test ${enable_force_safe_string+y} -then : +if test "${enable_force_safe_string+set}" = set; then : enableval=$enable_force_safe_string; fi @@ -3810,71 +3400,60 @@ fi # Check whether --enable-flat-float-array was given. -if test ${enable_flat_float_array+y} -then : +if test "${enable_flat_float_array+set}" = set; then : enableval=$enable_flat_float_array; fi # Check whether --enable-function-sections was given. -if test ${enable_function_sections+y} -then : +if test "${enable_function_sections+set}" = set; then : enableval=$enable_function_sections; -else $as_nop +else enable_function_sections=auto fi # Check whether --with-afl was given. -if test ${with_afl+y} -then : +if test "${with_afl+set}" = set; then : withval=$with_afl; fi # Check whether --enable-stack-allocation was given. -if test ${enable_stack_allocation+y} -then : +if test "${enable_stack_allocation+set}" = set; then : enableval=$enable_stack_allocation; fi # Check whether --with-flexdll was given. -if test ${with_flexdll+y} -then : - withval=$with_flexdll; if test x"$withval" = 'xyes' -then : +if test "${with_flexdll+set}" = set; then : + withval=$with_flexdll; if test x"$withval" = 'xyes'; then : with_flexdll=flexdll fi fi -if test x"$enable_unix_lib" = "xno" -then : - if test x"$enable_debugger" = "xyes" -then : +if test x"$enable_unix_lib" = "xno"; then : + if test x"$enable_debugger" = "xyes"; then : as_fn_error $? "replay debugger requires the unix library" "$LINENO" 5 -else $as_nop +else enable_debugger="no" fi - if test x"$enable_bigarray_lib" = "xyes" -then : + if test x"$enable_bigarray_lib" = "xyes"; then : as_fn_error $? "legacy bigarray library requires the unix library" "$LINENO" 5 fi fi -if test x"$enable_unix_lib" = "xno" -o x"$enable_str_lib" = "xno" -then : - if test x"$enable_ocamldoc" = "xyes" -then : +if test x"$enable_unix_lib" = "xno" -o x"$enable_str_lib" = "xno"; then : + if test x"$enable_ocamldoc" = "xyes"; then : as_fn_error $? "ocamldoc requires the unix and str libraries" "$LINENO" 5 -else $as_nop +else enable_ocamldoc="no" with_camltex="" fi -else $as_nop +else with_camltex="true" fi @@ -3886,12 +3465,11 @@ if test -n "$ac_tool_prefix"; then 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. else @@ -3899,15 +3477,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LD="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3918,11 +3492,11 @@ fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -printf "%s\n" "$LD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -3935,12 +3509,11 @@ if test -z "$LD"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_LD"; then ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. else @@ -3948,15 +3521,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LD="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3967,11 +3536,11 @@ fi fi ac_ct_LD=$ac_cv_prog_ac_ct_LD if test -n "$ac_ct_LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 -printf "%s\n" "$ac_ct_LD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 +$as_echo "$ac_ct_LD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -3983,8 +3552,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 LD=$ac_ct_LD @@ -3996,16 +3565,14 @@ fi # alters the CFLAGS variable, so we save its value before calling the macro # and restore it after the call old_host_os=$host_os -if test x"$host_os" = "xwindows" -then : +if test x"$host_os" = "xwindows"; then : host_os=mingw fi saved_CFLAGS="$CFLAGS" - case `pwd` in *\ * | *\ *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + { $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 @@ -4025,7 +3592,6 @@ macro_revision='2.4.6' - ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within @@ -4049,8 +3615,8 @@ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -printf %s "checking how to print strings... " >&6; } +{ $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 @@ -4076,12 +3642,12 @@ func_echo_all () } case $ECHO in - printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -printf "%s\n" "printf" >&6; } ;; - print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -printf "%s\n" "print -r" >&6; } ;; - *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -printf "%s\n" "cat" >&6; } ;; + 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 @@ -4094,15 +3660,6 @@ esac - - - - - - - - - @@ -4114,12 +3671,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4127,15 +3683,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4146,11 +3698,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4159,12 +3711,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; 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 @@ -4172,15 +3723,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4191,11 +3738,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -4203,8 +3750,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -4217,12 +3764,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4230,15 +3776,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4249,11 +3791,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4262,12 +3804,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4276,19 +3817,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$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" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4304,18 +3841,18 @@ if test $ac_prog_rejected = yes; then # 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+' '}$@" + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4326,12 +3863,11 @@ if test -z "$CC"; then 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4339,15 +3875,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4358,11 +3890,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4375,12 +3907,11 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; 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 @@ -4388,15 +3919,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4407,11 +3934,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4423,8 +3950,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -4432,129 +3959,25 @@ esac fi fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$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 - -fi - - -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +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. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +$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 -version; do +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\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -4564,7 +3987,7 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -4572,7 +3995,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -4584,9 +4007,9 @@ 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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -printf %s "checking whether the C compiler works... " >&6; } -ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ $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.*" @@ -4607,12 +4030,11 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $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, @@ -4629,7 +4051,7 @@ do # certainly right. break;; *.* ) - if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -4645,46 +4067,44 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop +else ac_file='' fi -if test -z "$ac_file" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -printf "%s\n" "$as_me: failed program was:" >&5 +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 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $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_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -printf %s "checking for C compiler default output file name... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -printf "%s\n" "$ac_file" >&6; } +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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -printf %s "checking for suffix of executables... " >&6; } +{ $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\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $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 @@ -4698,15 +4118,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -printf "%s\n" "$ac_cv_exeext" >&6; } +{ $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 @@ -4715,7 +4135,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -4727,8 +4147,8 @@ _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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -printf %s "checking whether we are cross compiling... " >&6; } +{ $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 @@ -4736,10 +4156,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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 @@ -4747,40 +4167,39 @@ printf "%s\n" "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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 - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot run C compiled programs. + { { $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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -printf "%s\n" "$cross_compiling" >&6; } +{ $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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -printf %s "checking for suffix of object files... " >&6; } -if test ${ac_cv_objext+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -4794,12 +4213,11 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $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 @@ -4808,32 +4226,31 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -printf "%s\n" "$ac_cv_objext" >&6; } +{ $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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { #ifndef __GNUC__ choke me @@ -4843,33 +4260,29 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes -else $as_nop +else ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu - +{ $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+y} +ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; 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 @@ -4878,60 +4291,57 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else $as_nop +else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -else $as_nop +else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then +{ $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 @@ -4946,144 +4356,94 @@ else CFLAGS= fi fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +{ $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 ${ac_cv_prog_cc_c89+:} false; 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. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi +#include +#include +struct stat; +/* 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; +} -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi +/* 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]; -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program +/* 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__" +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 : + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext conftest.beam +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 -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 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 @@ -5092,12 +4452,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${ac_cv_path_SED+:} false; 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" @@ -5111,15 +4470,10 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do + 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" + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -5128,13 +4482,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - printf %s 0123456789 >"conftest.in" + $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" - printf "%s\n" '' >> "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 @@ -5162,8 +4516,8 @@ else fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } +{ $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 @@ -5180,12 +4534,11 @@ Xsed="$SED -e 1s/^X//" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${ac_cv_path_GREP+:} false; 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 @@ -5193,15 +4546,10 @@ else $as_nop for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do + 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" + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -5210,13 +4558,13 @@ case `"$ac_path_GREP" --version 2>&1` in ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - printf %s 0123456789 >"conftest.in" + $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" - printf "%s\n" 'GREP' >> "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 @@ -5244,17 +4592,16 @@ else fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } +{ $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" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; 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 @@ -5265,15 +4612,10 @@ else $as_nop for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do + 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" + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP @@ -5282,13 +4624,13 @@ case `"$ac_path_EGREP" --version 2>&1` in ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - printf %s 0123456789 >"conftest.in" + $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" - printf "%s\n" 'EGREP' >> "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 @@ -5317,17 +4659,16 @@ fi fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } +{ $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" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -printf %s "checking for fgrep... " >&6; } -if test ${ac_cv_path_FGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; 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 @@ -5338,15 +4679,10 @@ else $as_nop for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in fgrep - do + 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" + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP @@ -5355,13 +4691,13 @@ case `"$ac_path_FGREP" --version 2>&1` in ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 - printf %s 0123456789 >"conftest.in" + $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" - printf "%s\n" 'FGREP' >> "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 @@ -5390,8 +4726,8 @@ fi fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -printf "%s\n" "$ac_cv_path_FGREP" >&6; } +{ $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" @@ -5416,18 +4752,17 @@ test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. -if test ${with_gnu_ld+y} -then : +if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop +else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -printf %s "checking for ld used by $CC... " >&6; } + { $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 @@ -5456,16 +4791,15 @@ printf %s "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -printf %s "checking for non-GNU ld... " >&6; } + { $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+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ${lt_cv_path_LD+:} false; 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 @@ -5494,19 +4828,18 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -printf "%s\n" "$LD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -printf %s "checking if the linker ($LD) is GNU ld... " >&6; } -if test ${lt_cv_prog_gnu_ld+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_prog_gnu_ld+:} false; 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 &1 &5 -printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -5529,12 +4862,11 @@ with_gnu_ld=$lt_cv_prog_gnu_ld -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test ${lt_cv_path_NM+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM @@ -5584,8 +4916,8 @@ else : ${lt_cv_path_NM=no} fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -printf "%s\n" "$lt_cv_path_NM" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else @@ -5598,12 +4930,11 @@ else 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DUMPBIN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else @@ -5611,15 +4942,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5630,11 +4957,11 @@ fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -printf "%s\n" "$DUMPBIN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5647,12 +4974,11 @@ if test -z "$DUMPBIN"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DUMPBIN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; 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 @@ -5660,15 +4986,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5679,11 +5001,11 @@ fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -printf "%s\n" "$ac_ct_DUMPBIN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5695,8 +5017,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -5724,12 +5046,11 @@ test -z "$NM" && NM=nm -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -printf %s "checking the name lister ($NM) interface... " >&6; } -if test ${lt_cv_nm_interface+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_nm_interface+:} false; 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) @@ -5745,27 +5066,26 @@ else $as_nop fi rm -f conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -printf "%s\n" "$lt_cv_nm_interface" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -printf %s "checking whether ln -s works... " >&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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -printf "%s\n" "no, using $LN_S" >&6; } + { $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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -printf %s "checking the maximum length of command line arguments... " >&6; } -if test ${lt_cv_sys_max_cmd_len+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else i=0 teststring=ABCD @@ -5892,11 +5212,11 @@ else $as_nop fi if test -n "$lt_cv_sys_max_cmd_len"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } + { $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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -5940,12 +5260,11 @@ esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -printf %s "checking how to convert $build file names to $host format... " >&6; } -if test ${lt_cv_to_host_file_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else case $host in *-*-mingw* ) case $build in @@ -5981,19 +5300,18 @@ esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -printf %s "checking how to convert $build file names to toolchain format... " >&6; } -if test ${lt_cv_to_tool_file_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in @@ -6009,23 +5327,22 @@ esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -printf %s "checking for $LD option to reload object files... " >&6; } -if test ${lt_cv_ld_reload_flag+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_reload_flag='-r' fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } +{ $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 "" | " "*) ;; @@ -6058,12 +5375,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else @@ -6071,15 +5387,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6090,11 +5402,11 @@ fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -printf "%s\n" "$OBJDUMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6103,12 +5415,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OBJDUMP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; 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 @@ -6116,15 +5427,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6135,11 +5442,11 @@ fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -printf "%s\n" "$ac_ct_OBJDUMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -6147,8 +5454,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -6167,12 +5474,11 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -printf %s "checking how to recognize dependent libraries... " >&6; } -if test ${lt_cv_deplibs_check_method+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_deplibs_check_method+:} false; 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' @@ -6368,8 +5674,8 @@ os2*) esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no @@ -6413,12 +5719,11 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DLLTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else @@ -6426,15 +5731,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6445,11 +5746,11 @@ fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -printf "%s\n" "$DLLTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6458,12 +5759,11 @@ if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DLLTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else @@ -6471,15 +5771,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6490,11 +5786,11 @@ fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -printf "%s\n" "$ac_ct_DLLTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -6502,8 +5798,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 DLLTOOL=$ac_ct_DLLTOOL @@ -6523,12 +5819,11 @@ test -z "$DLLTOOL" && DLLTOOL=dlltool -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -printf %s "checking how to associate runtime and link libraries... " >&6; } -if test ${lt_cv_sharedlib_from_linklib_cmd+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in @@ -6551,8 +5846,8 @@ cygwin* | mingw* | pw32* | cegcc*) esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -6568,12 +5863,11 @@ if test -n "$ac_tool_prefix"; then 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -6581,15 +5875,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6600,11 +5890,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -printf "%s\n" "$AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6617,12 +5907,11 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; 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 @@ -6630,15 +5919,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6649,11 +5934,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -printf "%s\n" "$ac_ct_AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6665,8 +5950,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -6686,32 +5971,30 @@ fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -printf %s "checking for archiver @FILE support... " >&6; } -if test ${lt_cv_ar_at_file+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -6719,7 +6002,7 @@ then : { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -6728,11 +6011,11 @@ then : rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -printf "%s\n" "$lt_cv_ar_at_file" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -6749,12 +6032,11 @@ fi 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_STRIP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -6762,15 +6044,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6781,11 +6059,11 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -printf "%s\n" "$STRIP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6794,12 +6072,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_STRIP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; 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 @@ -6807,15 +6084,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6826,11 +6099,11 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -printf "%s\n" "$ac_ct_STRIP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -6838,8 +6111,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -6858,12 +6131,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -6871,15 +6143,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6890,11 +6158,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -printf "%s\n" "$RANLIB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6903,12 +6171,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; 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 @@ -6916,15 +6183,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6935,11 +6198,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -printf "%s\n" "$ac_ct_RANLIB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -6947,8 +6210,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -7012,12 +6275,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AWK+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -7025,15 +6287,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7044,11 +6302,11 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -printf "%s\n" "$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7084,12 +6342,11 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -printf %s "checking command to parse $NM output from $compiler object... " >&6; } -if test ${lt_cv_sys_global_symbol_pipe+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_sys_global_symbol_pipe+:} false; 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?!! ;)] @@ -7241,14 +6498,14 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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 @@ -7317,7 +6574,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -7352,11 +6609,11 @@ 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -printf "%s\n" "failed" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -printf "%s\n" "ok" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } fi # Response file support. @@ -7402,14 +6659,13 @@ fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -printf %s "checking for sysroot... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test ${with_sysroot+y} -then : +if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; -else $as_nop +else with_sysroot=no fi @@ -7427,25 +6683,24 @@ case $with_sysroot in #( no|'') ;; #( *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -printf "%s\n" "$with_sysroot" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -printf "%s\n" "${lt_sysroot:-no}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -printf %s "checking for a working dd... " >&6; } -if test ${ac_cv_path_lt_DD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -7456,15 +6711,10 @@ if test -z "$lt_DD"; then for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in dd - do + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -7484,16 +6734,15 @@ fi rm -f conftest.i conftest2.i conftest.out fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -printf "%s\n" "$ac_cv_path_lt_DD" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -printf %s "checking how to truncate binary pipes... " >&6; } -if test ${lt_cv_truncate_bin+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -7504,8 +6753,8 @@ fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -printf "%s\n" "$lt_cv_truncate_bin" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } @@ -7528,8 +6777,7 @@ func_cc_basename () } # Check whether --enable-libtool-lock was given. -if test ${enable_libtool_lock+y} -then : +if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi @@ -7545,7 +6793,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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*) @@ -7565,7 +6813,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in @@ -7603,7 +6851,7 @@ mips64*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in @@ -7644,7 +6892,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) @@ -7707,12 +6955,11 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -printf %s "checking whether the C compiler needs -belf... " >&6; } -if test ${lt_cv_cc_needs_belf+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7723,20 +6970,19 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes -else $as_nop +else lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7745,8 +6991,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -7759,7 +7005,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) @@ -7796,12 +7042,11 @@ need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_MANIFEST_TOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -7809,15 +7054,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7828,11 +7069,11 @@ fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -printf "%s\n" "$MANIFEST_TOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7841,12 +7082,11 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -7854,15 +7094,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7873,11 +7109,11 @@ fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -7885,8 +7121,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -7896,12 +7132,11 @@ else fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if test ${lt_cv_path_mainfest_tool+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -7911,8 +7146,8 @@ else $as_nop fi rm -f conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -7927,12 +7162,11 @@ fi 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DSYMUTIL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -7940,15 +7174,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7959,11 +7189,11 @@ fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -printf "%s\n" "$DSYMUTIL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7972,12 +7202,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; 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 @@ -7985,15 +7214,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8004,11 +7229,11 @@ fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -8016,8 +7241,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -8029,12 +7254,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_NMEDIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -8042,15 +7266,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8061,11 +7281,11 @@ fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -printf "%s\n" "$NMEDIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8074,12 +7294,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_NMEDIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; 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 @@ -8087,15 +7306,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8106,11 +7321,11 @@ fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -printf "%s\n" "$ac_ct_NMEDIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -8118,8 +7333,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -8131,12 +7346,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_LIPO+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -8144,15 +7358,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8163,11 +7373,11 @@ fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -printf "%s\n" "$LIPO" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8176,12 +7386,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_LIPO+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; 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 @@ -8189,15 +7398,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8208,11 +7413,11 @@ fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -printf "%s\n" "$ac_ct_LIPO" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -8220,8 +7425,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -8233,12 +7438,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -8246,15 +7450,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8265,11 +7465,11 @@ fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -printf "%s\n" "$OTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8278,12 +7478,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OTOOL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; 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 @@ -8291,15 +7490,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8310,11 +7505,11 @@ fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -printf "%s\n" "$ac_ct_OTOOL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -8322,8 +7517,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -8335,12 +7530,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_OTOOL64+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -8348,15 +7542,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8367,11 +7557,11 @@ fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -printf "%s\n" "$OTOOL64" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8380,12 +7570,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_OTOOL64+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; 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 @@ -8393,15 +7582,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8412,11 +7597,11 @@ fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -printf "%s\n" "$ac_ct_OTOOL64" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -8424,8 +7609,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 @@ -8460,12 +7645,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -printf %s "checking for -single_module linker flag... " >&6; } -if test ${lt_cv_apple_cc_single_mod+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_apple_cc_single_mod+:} false; 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 @@ -8494,15 +7678,14 @@ else $as_nop rm -f conftest.* fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -printf %s "checking for -exported_symbols_list linker flag... " >&6; } -if test ${lt_cv_ld_exported_symbols_list+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -8511,33 +7694,31 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes -else $as_nop +else lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -printf %s "checking for -force_load linker flag... " >&6; } -if test ${lt_cv_ld_force_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -8565,8 +7746,8 @@ _LT_EOF rm -rf conftest.dSYM fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -printf "%s\n" "$lt_cv_ld_force_load" >&6; } +{ $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' ;; @@ -8637,43 +7818,286 @@ func_munge_path_list () esac } -ac_header= ac_cache= -for ac_item in $ac_header_c_list +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 ${ac_cv_prog_CPP+:} false; 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 - if test $ac_cache; then - ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" - if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then - printf "%s\n" "#define $ac_item 1" >> confdefs.h - fi - ac_header= ac_cache= - elif test $ac_header; then - ac_cache=$ac_item - else - ac_header=$ac_item - fi + # 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 ${ac_cv_header_stdc+:} false; 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 -if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes -then : +done -printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +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" = xyes -then : - printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF fi +done + @@ -8689,8 +8113,7 @@ fi # Check whether --enable-shared was given. -if test ${enable_shared+y} -then : +if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -8708,7 +8131,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_shared=yes fi @@ -8721,8 +8144,7 @@ fi # Check whether --enable-static was given. -if test ${enable_static+y} -then : +if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -8740,7 +8162,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_static=yes fi @@ -8754,8 +8176,7 @@ fi # Check whether --with-pic was given. -if test ${with_pic+y} -then : +if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -8772,7 +8193,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else pic_mode=default fi @@ -8784,8 +8205,7 @@ fi # Check whether --enable-fast-install was given. -if test ${enable_fast_install+y} -then : +if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -8803,7 +8223,7 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop +else enable_fast_install=yes fi @@ -8817,12 +8237,11 @@ fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -printf %s "checking which variant of shared library versioning to provide... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test ${with_aix_soname+y} -then : +if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -8831,19 +8250,18 @@ then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else $as_nop - if test ${lt_cv_with_aix_soname+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -printf "%s\n" "$with_aix_soname" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -8925,12 +8343,11 @@ if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -printf %s "checking for objdir... " >&6; } -if test ${lt_cv_objdir+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -8941,15 +8358,17 @@ else fi rmdir .libs 2>/dev/null fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -printf "%s\n" "$lt_cv_objdir" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF @@ -8995,12 +8414,11 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -printf %s "checking for ${ac_tool_prefix}file... " >&6; } -if test ${lt_cv_path_MAGIC_CMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_path_MAGIC_CMD+:} false; 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. @@ -9049,11 +8467,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -printf "%s\n" "$MAGIC_CMD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -9062,12 +8480,11 @@ fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -printf %s "checking for file... " >&6; } -if test ${lt_cv_path_MAGIC_CMD+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; 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. @@ -9116,11 +8533,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -printf "%s\n" "$MAGIC_CMD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -9205,12 +8622,11 @@ if test yes = "$GCC"; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test ${lt_cv_prog_compiler_rtti_exceptions+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_prog_compiler_rtti_exceptions+:} false; 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 @@ -9241,8 +8657,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ $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 yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -9599,28 +9015,26 @@ case $host_os in ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -printf %s "checking for $compiler option to produce PIC... " >&6; } -if test ${lt_cv_prog_compiler_pic+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test ${lt_cv_prog_compiler_pic_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_prog_compiler_pic_works+:} false; 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 @@ -9651,8 +9065,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } +{ $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 yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -9680,12 +9094,11 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test ${lt_cv_prog_compiler_static_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $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 ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -9709,8 +9122,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } +{ $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 yes = "$lt_cv_prog_compiler_static_works"; then : @@ -9724,12 +9137,11 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9772,20 +9184,19 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test ${lt_cv_prog_compiler_c_o+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9828,8 +9239,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } @@ -9837,19 +9248,19 @@ printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -printf %s "checking if we can lock with hard links... " >&6; } + { $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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -printf "%s\n" "$hard_links" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test no = "$hard_links"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { $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 @@ -9861,8 +9272,8 @@ fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { $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= @@ -10420,23 +9831,21 @@ _LT_EOF if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath_+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10451,7 +9860,7 @@ then : lt_cv_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.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10475,23 +9884,21 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if test ${lt_cv_aix_libpath_+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10506,7 +9913,7 @@ then : lt_cv_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.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10757,12 +10164,11 @@ fi # 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) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -printf %s "checking if $CC understands -b... " >&6; } -if test ${lt_cv_prog_compiler__b+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -10786,8 +10192,8 @@ else $as_nop LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -10827,30 +10233,28 @@ fi # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if test ${lt_cv_irix_exported_symbol+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else 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) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes -else $as_nop +else lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_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 $wl-exports_file $wl$export_symbols -o $lib' fi @@ -11131,8 +10535,8 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -printf "%s\n" "$ld_shlibs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -11168,19 +10572,18 @@ x|xyes) # 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. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -printf %s "checking whether -lc should be explicitly linked in... " >&6; } -if test ${lt_cv_archive_cmds_need_lc+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_archive_cmds_need_lc+:} false; 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=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -11198,7 +10601,7 @@ else $as_nop 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=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -11212,8 +10615,8 @@ else $as_nop $RM conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } +{ $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 @@ -11372,8 +10775,8 @@ esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -printf %s "checking dynamic linker characteristics... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -11934,10 +11337,9 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if test ${lt_cv_shlibpath_overrides_runpath+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -11947,21 +11349,19 @@ else $as_nop /* end confdefs.h. */ int -main (void) +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 : +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.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -12205,8 +11605,8 @@ uts4*) dynamic_linker=no ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -printf "%s\n" "$dynamic_linker" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -12327,8 +11727,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -printf %s "checking how to hardcode library paths into programs... " >&6; } + { $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" || @@ -12352,8 +11752,8 @@ else # directories. hardcode_action=unsupported fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -printf "%s\n" "$hardcode_action" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -12397,12 +11797,11 @@ else darwin*) # if libdl is installed we need to link against it - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12411,31 +11810,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $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" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop +else lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -12455,16 +11855,14 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes -then : +if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -printf %s "checking for shl_load in -ldld... " >&6; } -if test ${ac_cv_lib_dld_shl_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop +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 ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12473,42 +11871,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 (void) +main () { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes -else $as_nop +else ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes -then : +{ $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" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else $as_nop +else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes -then : +if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12517,37 +11914,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $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" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -printf %s "checking for dlopen in -lsvld... " >&6; } -if test ${ac_cv_lib_svld_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12556,37 +11953,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes -else $as_nop +else ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes -then : +{ $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" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -printf %s "checking for dld_link in -ldld... " >&6; } -if test ${ac_cv_lib_dld_dld_link+y} -then : - printf %s "(cached) " >&6 -else $as_nop +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 ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12595,29 +11992,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 (void) +main () { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes -else $as_nop +else ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes -then : +{ $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" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -12656,12 +12054,11 @@ fi save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -printf %s "checking whether a program can dlopen itself... " >&6; } -if test ${lt_cv_dlopen_self+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -12740,7 +12137,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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=$? @@ -12758,17 +12155,16 @@ rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -printf "%s\n" "$lt_cv_dlopen_self" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -printf %s "checking whether a statically linked program can dlopen itself... " >&6; } -if test ${lt_cv_dlopen_self_static+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $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 ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -12847,7 +12243,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $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=$? @@ -12865,8 +12261,8 @@ rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } +{ $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 @@ -12904,13 +12300,13 @@ fi striplib= old_striplib= -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -printf %s "checking whether stripping libraries is possible... " >&6; } +{ $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" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $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 @@ -12918,16 +12314,16 @@ else if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -12944,13 +12340,13 @@ fi # Report what library types will actually be built - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -printf %s "checking if libtool supports shared libraries... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -printf "%s\n" "$can_build_shared" >&6; } + { $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; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -printf %s "checking whether to build shared libraries... " >&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 no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -12974,15 +12370,15 @@ printf %s "checking whether to build shared libraries... " >&6; } fi ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -printf "%s\n" "$enable_shared" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -printf %s "checking whether to build static libraries... " >&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 yes = "$enable_shared" || enable_static=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -printf "%s\n" "$enable_static" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } @@ -13030,12 +12426,11 @@ case $host in #( 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DEP_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DEP_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$DEP_CC"; then ac_cv_prog_DEP_CC="$DEP_CC" # Let the user override the test. else @@ -13043,15 +12438,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DEP_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13062,11 +12453,11 @@ fi fi DEP_CC=$ac_cv_prog_DEP_CC if test -n "$DEP_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DEP_CC" >&5 -printf "%s\n" "$DEP_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEP_CC" >&5 +$as_echo "$DEP_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -13079,12 +12470,11 @@ if test -z "$DEP_CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DEP_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DEP_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_DEP_CC"; then ac_cv_prog_ac_ct_DEP_CC="$ac_ct_DEP_CC" # Let the user override the test. else @@ -13092,15 +12482,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DEP_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13111,11 +12497,11 @@ fi fi ac_ct_DEP_CC=$ac_cv_prog_ac_ct_DEP_CC if test -n "$ac_ct_DEP_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DEP_CC" >&5 -printf "%s\n" "$ac_ct_DEP_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DEP_CC" >&5 +$as_echo "$ac_ct_DEP_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -13127,8 +12513,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 DEP_CC=$ac_ct_DEP_CC @@ -13141,24 +12527,21 @@ esac case $enable_dependency_generation in #( yes) : - if test "$DEP_CC" = "false" -then : + if test "$DEP_CC" = "false"; then : as_fn_error $? "The MSVC ports cannot generate dependency information. Install gcc (or another CC-like compiler)" "$LINENO" 5 -else $as_nop +else compute_deps=true fi ;; #( no) : compute_deps=false ;; #( *) : - if test -e .git -then : - if test "$DEP_CC" = "false" -then : + if test -e .git; then : + if test "$DEP_CC" = "false"; then : compute_deps=false -else $as_nop +else compute_deps=true fi -else $as_nop +else compute_deps=false fi ;; esac @@ -13174,10 +12557,9 @@ case $host in #( libext=lib AR="" - if test "$host_cpu" = "x86_64" -then : + if test "$host_cpu" = "x86_64" ; then : machine="-machine:AMD64 " -else $as_nop +else machine="" fi mklib="link -lib -nologo $machine /out:\$(1) \$(2)" @@ -13189,144 +12571,11 @@ fi esac ## Find vendor of the C compiler -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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -printf %s "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+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CC needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" 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. - # 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. */ -#include - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - -else $as_nop - # 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 $as_nop - # 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -printf "%s\n" "$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. - # 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. */ -#include - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - -else $as_nop - # 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 $as_nop - # 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_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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 - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking C compiler vendor" >&5 -printf %s "checking C compiler vendor... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking C compiler vendor" >&5 +$as_echo_n "checking C compiler vendor... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13347,52 +12596,48 @@ unknown #endif _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - if test ${ocaml_cv_cc_vendor+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ac_fn_c_try_cpp "$LINENO"; then : + if ${ocaml_cv_cc_vendor+:} false; then : + $as_echo_n "(cached) " >&6 +else ocaml_cv_cc_vendor=`grep '^[a-z]' conftest.i | tr -s ' ' '-' \ | tr -d '\r'` fi -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +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 $? "unexpected preprocessor failure See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.err conftest.i conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ocaml_cv_cc_vendor" >&5 -printf "%s\n" "$ocaml_cv_cc_vendor" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ocaml_cv_cc_vendor" >&5 +$as_echo "$ocaml_cv_cc_vendor" >&6; } ## In cross-compilation mode, can we run executables produced? # At the moment, it's required, but the fact is used in C99 function detection - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether host executables can be run in the build" >&5 -printf %s "checking whether host executables can be run in the build... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host executables can be run in the build" >&5 +$as_echo_n "checking whether host executables can be run in the build... " >&6; } old_cross_compiling="$cross_compiling" cross_compiling='no' - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : # autoconf displays a warning if this parameter is missing, but # cross-compilation mode was disabled above. assert=false -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) {return 0;} _ACEOF -if ac_fn_c_try_run "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +if ac_fn_c_try_run "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } host_runnable=true -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } host_runnable=false fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -13445,18 +12690,15 @@ case $host in #( esac otherlibraries="dynlink" -if test x"$enable_unix_lib" != "xno" -then : +if test x"$enable_unix_lib" != "xno"; then : enable_unix_lib=yes - if test x"$enable_bigarray_lib" != "xno" -then : + if test x"$enable_bigarray_lib" != "xno"; then : otherlibraries="$otherlibraries $unixlib bigarray" -else $as_nop +else otherlibraries="$otherlibraries $unixlib" fi fi -if test x"$enable_str_lib" != "xno" -then : +if test x"$enable_str_lib" != "xno"; then : otherlibraries="$otherlibraries str" fi @@ -13464,12 +12706,11 @@ fi ## Test whether #! scripts are supported ## TODO: have two values, one for host and one for target -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether #! works in shell scripts" >&5 -printf %s "checking whether #! works in shell scripts... " >&6; } -if test ${ac_cv_sys_interpreter+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether #! works in shell scripts" >&5 +$as_echo_n "checking whether #! works in shell scripts... " >&6; } +if ${ac_cv_sys_interpreter+:} false; then : + $as_echo_n "(cached) " >&6 +else echo '#! /bin/cat exit 69 ' >conftest @@ -13482,46 +12723,42 @@ else fi rm -f conftest fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5 -printf "%s\n" "$ac_cv_sys_interpreter" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5 +$as_echo "$ac_cv_sys_interpreter" >&6; } interpval=$ac_cv_sys_interpreter long_shebang=false -if test "x$interpval" = "xyes" -then : +if test "x$interpval" = "xyes"; then : case $host in #( *-cygwin|*-*-mingw32|*-pc-windows) : shebangscripts=false ;; #( *) : shebangscripts=true prev_exec_prefix="$exec_prefix" - if test "x$exec_prefix" = "xNONE" -then : + if test "x$exec_prefix" = "xNONE"; then : exec_prefix="$prefix" fi eval "expanded_bindir=\"$bindir\"" exec_prefix="$prev_exec_prefix" # Assume maximum shebang is 128 chars; less #!, /ocamlrun, an optional # 1 char suffix and the \0 leaving 115 characters - if test "${#expanded_bindir}" -gt 115 -then : + if test "${#expanded_bindir}" -gt 115; then : long_shebang=true fi ;; esac -else $as_nop +else shebangscripts=false fi # Are we building a cross-compiler -if test x"$host" = x"$target" -then : +if test x"$host" = x"$target"; then : cross_compiler=false -else $as_nop +else cross_compiler=true fi @@ -13603,10 +12840,10 @@ esac ;; #( gcc-3-*|gcc-4-[01]) : # No -fwrapv option before GCC 3.4. # Known problems with -fwrapv fixed in 4.2 only. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This version of GCC is rather old. Reducing optimization level.\"" >&5 -printf "%s\n" "$as_me: WARNING: This version of GCC is rather old. Reducing optimization level.\"" >&2;}; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Consider using GCC version 4.2 or above." >&5 -printf "%s\n" "$as_me: WARNING: Consider using GCC version 4.2 or above." >&2;}; + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This version of GCC is rather old. Reducing optimization level.\"" >&5 +$as_echo "$as_me: WARNING: This version of GCC is rather old. Reducing optimization level.\"" >&2;}; + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Consider using GCC version 4.2 or above." >&5 +$as_echo "$as_me: WARNING: Consider using GCC version 4.2 or above." >&2;}; common_cflags="-std=gnu99 -O"; internal_cflags="$cc_warnings" ;; #( gcc-4-[234]) : @@ -13627,29 +12864,27 @@ printf "%s\n" "$as_me: WARNING: Consider using GCC version 4.2 or above." >&2;}; common_cppflags="-D_CRT_SECURE_NO_DEPRECATE" internal_cppflags='-DUNICODE -D_UNICODE' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -d2VolatileMetadata-" >&5 -printf %s "checking whether the C compiler supports -d2VolatileMetadata-... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -d2VolatileMetadata-" >&5 +$as_echo_n "checking whether the C compiler supports -d2VolatileMetadata-... " >&6; } saved_CFLAGS="$CFLAGS" CFLAGS="-d2VolatileMetadata- $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : cl_has_volatile_metadata=true - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else cl_has_volatile_metadata=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$saved_CFLAGS" - if test "x$cl_has_volatile_metadata" = "xtrue" -then : + if test "x$cl_has_volatile_metadata" = "xtrue"; then : internal_cflags='-d2VolatileMetadata-' fi internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" @@ -13695,8 +12930,7 @@ esac # [*-pc-windows], # [enable_shared=yes]) -if test x"$enable_shared" = "xno" -then : +if test x"$enable_shared" = "xno"; then : supports_shared_libraries=false case $host in #( *-pc-windows|*-w64-mingw32) : @@ -13704,7 +12938,7 @@ then : *) : ;; esac -else $as_nop +else supports_shared_libraries=true fi @@ -13734,66 +12968,58 @@ case $host in #( ;; esac -if test x"$supports_shared_libraries" != 'xfalse' -then : +if test x"$supports_shared_libraries" != 'xfalse'; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexdll sources" >&5 -printf %s "checking for flexdll sources... " >&6; } - if test x"$with_flexdll" = "xno" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexdll sources" >&5 +$as_echo_n "checking for flexdll sources... " >&6; } + if test x"$with_flexdll" = "xno"; then : flexdir='' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 -printf "%s\n" "disabled" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +else flexmsg='' case $target in #( *-*-cygwin*|*-w64-mingw32|*-pc-windows) : - if test x"$with_flexdll" = 'x' -o x"$with_flexdll" = 'xflexdll' -then : - if test -f 'flexdll/flexdll.h' -then : + if test x"$with_flexdll" = 'x' -o x"$with_flexdll" = 'xflexdll'; then : + if test -f 'flexdll/flexdll.h'; then : flexdir=flexdll iflexdir='$(ROOTDIR)/flexdll' with_flexdll="$iflexdir" -else $as_nop - if test x"$with_flexdll" != 'x' -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: requested but not available" >&5 -printf "%s\n" "requested but not available" >&6; } +else + if test x"$with_flexdll" != 'x'; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: requested but not available" >&5 +$as_echo "requested but not available" >&6; } as_fn_error $? "exiting" "$LINENO" 5 fi fi -else $as_nop +else rm -rf flexdll-sources - if test -f "$with_flexdll/flexdll.h" -then : + if test -f "$with_flexdll/flexdll.h"; then : mkdir -p flexdll-sources cp -r "$with_flexdll"/* flexdll-sources/ flexdir='flexdll-sources' iflexdir='$(ROOTDIR)/flexdll-sources' flexmsg=" (from $with_flexdll)" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: requested but not available" >&5 -printf "%s\n" "requested but not available" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: requested but not available" >&5 +$as_echo "requested but not available" >&6; } as_fn_error $? "exiting" "$LINENO" 5 fi fi - if test x"$flexdir" = 'x' -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $iflexdir$flexmsg" >&5 -printf "%s\n" "$iflexdir$flexmsg" >&6; } + if test x"$flexdir" = 'x'; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $iflexdir$flexmsg" >&5 +$as_echo "$iflexdir$flexmsg" >&6; } bootstrapping_flexdll=true # The submodule should be searched *before* any other -I paths internal_cppflags="-I $iflexdir $internal_cppflags" fi ;; #( *) : - if test x"$with_flexdll" != 'x' -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: requested but not supported" >&5 -printf "%s\n" "requested but not supported" >&6; } + if test x"$with_flexdll" != 'x'; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: requested but not supported" >&5 +$as_echo "requested but not supported" >&6; } as_fn_error $? "exiting" "$LINENO" 5 fi ;; esac @@ -13801,12 +13027,11 @@ fi # Extract the first word of "flexlink", so it can be a program name with args. set dummy flexlink; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_flexlink+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_flexlink+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$flexlink"; then ac_cv_prog_flexlink="$flexlink" # Let the user override the test. else @@ -13814,15 +13039,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_flexlink="flexlink" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13833,17 +13054,16 @@ fi fi flexlink=$ac_cv_prog_flexlink if test -n "$flexlink"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $flexlink" >&5 -printf "%s\n" "$flexlink" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flexlink" >&5 +$as_echo "$flexlink" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test -n "$flexlink" -a -z "$flexdir" -then : + if test -n "$flexlink" -a -z "$flexdir"; then : @@ -13859,15 +13079,14 @@ then : touch confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $flexlink works" >&5 -printf %s "checking whether $flexlink works... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $flexlink works" >&5 +$as_echo_n "checking whether $flexlink works... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int answer = 42; _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : # Create conftest1.$ac_objext as a symlink on Cygwin to ensure that native # flexlink can cope. The reverse test is unnecessary (a Cygwin-compiled # flexlink can read anything). @@ -13887,23 +13106,22 @@ esac /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +if ac_fn_c_try_link "$LINENO"; 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" >&5 +$as_echo "no" >&6; } as_fn_error $? "$flexlink does not work" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unexpected compile error" >&5 -printf "%s\n" "unexpected compile error" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unexpected compile error" >&5 +$as_echo "unexpected compile error" >&6; } as_fn_error $? "error calling the C compiler" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Restore the content of confdefs.h @@ -13920,8 +13138,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext case $host in #( *-w64-mingw32|*-pc-windows) : flexlink_where="$(cmd /c "$flexlink" -where 2>/dev/null)" - if test -z "$flexlink_where" -then : + if test -z "$flexlink_where"; then : as_fn_error $? "$flexlink is not executable from a native Win32 process" "$LINENO" 5 fi ;; #( @@ -13945,23 +13162,20 @@ fi touch confdefs.h - if test -n "$flexdir" -then : + if test -n "$flexdir"; then : CPPFLAGS="-I $flexdir $CPPFLAGS" fi have_flexdll_h=no - ac_fn_c_check_header_compile "$LINENO" "flexdll.h" "ac_cv_header_flexdll_h" "$ac_includes_default" -if test "x$ac_cv_header_flexdll_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "flexdll.h" "ac_cv_header_flexdll_h" "$ac_includes_default" +if test "x$ac_cv_header_flexdll_h" = xyes; then : have_flexdll_h=yes -else $as_nop +else have_flexdll_h=no fi - if test x"$have_flexdll_h" = 'xno' -then : - if test -n "$flexdir" -then : + + if test x"$have_flexdll_h" = 'xno'; then : + if test -n "$flexdir"; then : as_fn_error $? "$flexdir/flexdll.h appears unusable" "$LINENO" 5 fi fi @@ -13978,8 +13192,7 @@ fi - if test -n "$flexlink" -a x"$have_flexdll_h" = 'xno' -then : + if test -n "$flexlink" -a x"$have_flexdll_h" = 'xno'; then : saved_CC="$CC" @@ -13994,8 +13207,8 @@ then : touch confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if \"$flexlink -where\" includes flexdll.h" >&5 -printf %s "checking if \"$flexlink -where\" includes flexdll.h... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if \"$flexlink -where\" includes flexdll.h" >&5 +$as_echo_n "checking if \"$flexlink -where\" includes flexdll.h... " >&6; } flexlink_where="$($flexlink -where | tr -d '\r')" CPPFLAGS="$CPPFLAGS -I \"$flexlink_where\"" cat > conftest.c <<"EOF" @@ -14006,14 +13219,13 @@ EOF all: $CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS EOF - if make -f conftest.Makefile >/dev/null 2>/dev/null -then : + if make -f conftest.Makefile >/dev/null 2>/dev/null; then : have_flexdll_h=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $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 @@ -14027,8 +13239,7 @@ fi LIBS="$saved_LIBS" - if test "x$have_flexdll_h" = 'xyes' -then : + if test "x$have_flexdll_h" = 'xyes'; then : internal_cppflags="$internal_cppflags -I \"$flexlink_where\"" fi @@ -14039,8 +13250,8 @@ fi case $have_flexdll_h,$supports_shared_libraries,$host in #( no,true,*-*-cygwin*) : supports_shared_libraries=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: flexdll.h not found: shared library support disabled." >&5 -printf "%s\n" "$as_me: WARNING: flexdll.h not found: shared library support disabled." >&2;} ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: flexdll.h not found: shared library support disabled." >&5 +$as_echo "$as_me: WARNING: flexdll.h not found: shared library support disabled." >&2;} ;; #( no,*,*-w64-mingw32|no,*,*-pc-windows) : as_fn_error $? "flexdll.h is required for native Win32" "$LINENO" 5 ;; #( *) : @@ -14050,8 +13261,8 @@ esac case $flexdir,$supports_shared_libraries,$flexlink,$host in #( ,true,,*-*-cygwin*) : supports_shared_libraries=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: flexlink not found: shared library support disabled." >&5 -printf "%s\n" "$as_me: WARNING: flexlink not found: shared library support disabled." >&2;} ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: flexlink not found: shared library support disabled." >&5 +$as_echo "$as_me: WARNING: flexlink not found: shared library support disabled." >&2;} ;; #( ,*,,*-w64-mingw32|,*,,*-pc-windows) : as_fn_error $? "flexlink is required for native Win32" "$LINENO" 5 ;; #( *) : @@ -14061,17 +13272,16 @@ esac case $cc_basename,$host in #( *,*-*-darwin*) : mkexe="$mkexe -Wl,-no_compact_unwind"; - printf "%s\n" "#define HAS_ARCH_CODE32 1" >>confdefs.h + $as_echo "#define HAS_ARCH_CODE32 1" >>confdefs.h ;; #( *,*-*-haiku*) : mathlib="" ;; #( *,*-*-cygwin*) : common_cppflags="$common_cppflags -U_WIN32" - if $supports_shared_libraries -then : + if $supports_shared_libraries; then : mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' mkexedebugflag="-link -g" -else $as_nop +else mkexe="$mkexe -Wl,--stack,16777216" oc_ldflags="-Wl,--stack,16777216" @@ -14097,12 +13307,12 @@ esac oc_ldflags='/ENTRY:wmainCRTStartup' mkexedebugflag='' ;; #( *,x86_64-*-linux*) : - printf "%s\n" "#define HAS_ARCH_CODE32 1" >>confdefs.h + $as_echo "#define HAS_ARCH_CODE32 1" >>confdefs.h ;; #( xlc*,powerpc-ibm-aix*) : mkexe="$mkexe " oc_ldflags="-brtl -bexpfull" - printf "%s\n" "#define HAS_ARCH_CODE32 1" >>confdefs.h + $as_echo "#define HAS_ARCH_CODE32 1" >>confdefs.h ;; #( gcc*,powerpc-*-linux*) : oc_ldflags="-mbss-plt" ;; #( @@ -14112,8 +13322,7 @@ esac ## Program to use to install files - - # Find a good install program. We prefer a C program (faster), +# 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 @@ -14127,25 +13336,20 @@ esac # 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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -printf %s "checking for a BSD-compatible install... " >&6; } +{ $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+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - # Account for fact that we put trailing slashes in our PATH walk. -case $as_dir in #(( - ./ | /[cC]/* | \ + 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/* ) ;; @@ -14155,13 +13359,13 @@ case $as_dir in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$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 + 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 + 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 @@ -14169,12 +13373,12 @@ case $as_dir in #(( 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/" && + 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" + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -14190,7 +13394,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test ${ac_cv_path_install+y}; then + 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 @@ -14200,8 +13404,8 @@ fi INSTALL=$ac_install_sh fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -printf "%s\n" "$INSTALL" >&6; } +{ $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. @@ -14215,12 +13419,11 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Checks for libraries ## Mathematical library -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 -printf %s "checking for cos in -lm... " >&6; } -if test ${ac_cv_lib_m_cos+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 +$as_echo_n "checking for cos in -lm... " >&6; } +if ${ac_cv_lib_m_cos+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14229,97 +13432,102 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 cos (); int -main (void) +main () { return cos (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_cos=yes -else $as_nop +else ac_cv_lib_m_cos=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 -printf "%s\n" "$ac_cv_lib_m_cos" >&6; } -if test "x$ac_cv_lib_m_cos" = xyes -then : - printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 +$as_echo "$ac_cv_lib_m_cos" >&6; } +if test "x$ac_cv_lib_m_cos" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF LIBS="-lm $LIBS" fi -if test "x$ac_cv_lib_m_cos" = xyes -then : +if test "x$ac_cv_lib_m_cos" = xyes ; then : mathlib="-lm" -else $as_nop +else mathlib="" fi # Checks for header files -ac_fn_c_check_header_compile "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" -if test "x$ac_cv_header_math_h" = xyes -then : +ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" +if test "x$ac_cv_header_math_h" = xyes; then : fi - for ac_header in unistd.h + +for ac_header in unistd.h do : - ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" -if test "x$ac_cv_header_unistd_h" = xyes -then : - printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h - printf "%s\n" "#define HAS_UNISTD 1" >>confdefs.h + ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UNISTD_H 1 +_ACEOF + $as_echo "#define HAS_UNISTD 1" >>confdefs.h fi done -ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" -if test "x$ac_cv_header_stdint_h" = xyes -then : - printf "%s\n" "#define HAS_STDINT_H 1" >>confdefs.h + +ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes; then : + $as_echo "#define HAS_STDINT_H 1" >>confdefs.h fi + ac_fn_c_check_header_compile "$LINENO" "dirent.h" "ac_cv_header_dirent_h" "#include " -if test "x$ac_cv_header_dirent_h" = xyes -then : - printf "%s\n" "#define HAS_DIRENT 1" >>confdefs.h +if test "x$ac_cv_header_dirent_h" = xyes; then : + $as_echo "#define HAS_DIRENT 1" >>confdefs.h fi + ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "#include " -if test "x$ac_cv_header_sys_select_h" = xyes -then : - printf "%s\n" "#define HAS_SYS_SELECT_H 1" >>confdefs.h +if test "x$ac_cv_header_sys_select_h" = xyes; then : + $as_echo "#define HAS_SYS_SELECT_H 1" >>confdefs.h fi + # Checks for types ## off_t ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" -if test "x$ac_cv_type_off_t" = xyes -then : +if test "x$ac_cv_type_off_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define off_t long int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF fi @@ -14332,19 +13540,17 @@ fi # 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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -printf %s "checking size of int... " >&6; } -if test ${ac_cv_sizeof_int+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if ${ac_cv_sizeof_int+:} false; 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 - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $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 @@ -14353,31 +13559,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -printf "%s\n" "$ac_cv_sizeof_int" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } -printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h +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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -printf %s "checking size of long... " >&6; } -if test ${ac_cv_sizeof_long+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if ${ac_cv_sizeof_long+:} false; 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 - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $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 @@ -14386,31 +13592,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -printf "%s\n" "$ac_cv_sizeof_long" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h +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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long *" >&5 -printf %s "checking size of long *... " >&6; } -if test ${ac_cv_sizeof_long_p+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long *))" "ac_cv_sizeof_long_p" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long *" >&5 +$as_echo_n "checking size of long *... " >&6; } +if ${ac_cv_sizeof_long_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long *))" "ac_cv_sizeof_long_p" "$ac_includes_default"; then : + +else if test "$ac_cv_type_long_p" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $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 @@ -14419,31 +13625,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_p" >&5 -printf "%s\n" "$ac_cv_sizeof_long_p" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_p" >&5 +$as_echo "$ac_cv_sizeof_long_p" >&6; } -printf "%s\n" "#define SIZEOF_LONG_P $ac_cv_sizeof_long_p" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_P $ac_cv_sizeof_long_p +_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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 -printf %s "checking size of short... " >&6; } -if test ${ac_cv_sizeof_short+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if ${ac_cv_sizeof_short+:} false; 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 - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $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 @@ -14452,31 +13658,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 -printf "%s\n" "$ac_cv_sizeof_short" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } -printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h +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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -printf %s "checking size of long long... " >&6; } -if test ${ac_cv_sizeof_long_long+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if ${ac_cv_sizeof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : + +else if test "$ac_cv_type_long_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $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 long) See \`config.log' for more details" "$LINENO" 5; } else @@ -14485,56 +13691,57 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -printf "%s\n" "$ac_cv_sizeof_long_long" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } -printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long +_ACEOF -if test "x$ac_cv_sizeof_long_p" = "x4" -then : +if test "x$ac_cv_sizeof_long_p" = "x4" ; then : bits=32; arch64=false -elif test "x$ac_cv_sizeof_long_p" = "x8" -then : +elif test "x$ac_cv_sizeof_long_p" = "x8" ; then : bits=64; arch64=true - printf "%s\n" "#define ARCH_SIXTYFOUR 1" >>confdefs.h + $as_echo "#define ARCH_SIXTYFOUR 1" >>confdefs.h -else $as_nop +else as_fn_error $? "Neither 32 nor 64 bits architecture." "$LINENO" 5 fi if test "x$ac_cv_sizeof_int" != "x4" && test "x$ac_cv_sizeof_long" != "x4" \ - && test "x$ac_cv_sizeof_short" != "x4" -then : + && test "x$ac_cv_sizeof_short" != "x4"; then : as_fn_error $? "Sorry, we can't find a 32-bit integer type." "$LINENO" 5 fi if test "x$ac_cv_sizeof_long" != "x8" && - test "x$ac_cv_sizeof_long_long" != "x8" -then : + test "x$ac_cv_sizeof_long_long" != "x8"; then : as_fn_error $? "Sorry, we can't find a 64-bit integer type." "$LINENO" 5 fi -printf "%s\n" "#define SIZEOF_PTR $ac_cv_sizeof_long_p" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_PTR $ac_cv_sizeof_long_p +_ACEOF -printf "%s\n" "#define SIZEOF_LONGLONG $ac_cv_sizeof_long_long" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONGLONG $ac_cv_sizeof_long_long +_ACEOF -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Target is a $bits bits architecture" >&5 -printf "%s\n" "$as_me: Target is a $bits bits architecture" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: Target is a $bits bits architecture" >&5 +$as_echo "$as_me: Target is a $bits bits architecture" >&6;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -printf %s "checking whether byte ordering is bigendian... " >&6; } -if test ${ac_cv_c_bigendian+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14545,8 +13752,7 @@ else $as_nop typedef int dummy; _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. @@ -14570,7 +13776,7 @@ then : fi done fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14579,7 +13785,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext #include int -main (void) +main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ @@ -14591,8 +13797,7 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14600,7 +13805,7 @@ then : #include int -main (void) +main () { #if BYTE_ORDER != BIG_ENDIAN not big endian @@ -14610,15 +13815,14 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes -else $as_nop +else ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). @@ -14627,7 +13831,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext #include int -main (void) +main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros @@ -14637,15 +13841,14 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef _BIG_ENDIAN not big endian @@ -14655,33 +13858,31 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes -else $as_nop +else ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -unsigned short int ascii_mm[] = +short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - unsigned short int ascii_ii[] = + short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } - unsigned short int ebcdic_ii[] = + short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - unsigned short int ebcdic_mm[] = + short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; @@ -14689,15 +13890,14 @@ unsigned short int ascii_mm[] = extern int foo; int -main (void) +main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi @@ -14710,13 +13910,13 @@ then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else $as_nop +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main (void) +main () { /* Are we little or big endian? From Harbison&Steele. */ @@ -14732,10 +13932,9 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no -else $as_nop +else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14744,12 +13943,12 @@ fi fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -printf "%s\n" "$ac_cv_c_bigendian" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) - printf "%s\n" "#define ARCH_BIG_ENDIAN 1" >>confdefs.h + $as_echo "#define ARCH_BIG_ENDIAN 1" >>confdefs.h endianness="be" ;; #( @@ -14766,20 +13965,21 @@ printf "%s\n" "$ac_cv_c_bigendian" >&6; } # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of double" >&5 -printf %s "checking alignment of double... " >&6; } -if test ${ac_cv_alignof_double+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of double" >&5 +$as_echo_n "checking alignment of double... " >&6; } +if ${ac_cv_alignof_double+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_double" "$ac_includes_default -typedef struct { char x; double y; } ac__type_alignof_;" -then : +#ifndef offsetof +# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) +#endif +typedef struct { char x; double y; } ac__type_alignof_;"; then : -else $as_nop +else if test "$ac_cv_type_double" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $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 alignment of double See \`config.log' for more details" "$LINENO" 5; } else @@ -14788,30 +13988,33 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_double" >&5 -printf "%s\n" "$ac_cv_alignof_double" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_double" >&5 +$as_echo "$ac_cv_alignof_double" >&6; } -printf "%s\n" "#define ALIGNOF_DOUBLE $ac_cv_alignof_double" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ALIGNOF_DOUBLE $ac_cv_alignof_double +_ACEOF # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of long" >&5 -printf %s "checking alignment of long... " >&6; } -if test ${ac_cv_alignof_long+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of long" >&5 +$as_echo_n "checking alignment of long... " >&6; } +if ${ac_cv_alignof_long+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_long" "$ac_includes_default -typedef struct { char x; long y; } ac__type_alignof_;" -then : +#ifndef offsetof +# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) +#endif +typedef struct { char x; long y; } ac__type_alignof_;"; then : -else $as_nop +else if test "$ac_cv_type_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $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 alignment of long See \`config.log' for more details" "$LINENO" 5; } else @@ -14820,30 +14023,33 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long" >&5 -printf "%s\n" "$ac_cv_alignof_long" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long" >&5 +$as_echo "$ac_cv_alignof_long" >&6; } -printf "%s\n" "#define ALIGNOF_LONG $ac_cv_alignof_long" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ALIGNOF_LONG $ac_cv_alignof_long +_ACEOF # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of long long" >&5 -printf %s "checking alignment of long long... " >&6; } -if test ${ac_cv_alignof_long_long+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of long long" >&5 +$as_echo_n "checking alignment of long long... " >&6; } +if ${ac_cv_alignof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_long_long" "$ac_includes_default -typedef struct { char x; long long y; } ac__type_alignof_;" -then : +#ifndef offsetof +# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) +#endif +typedef struct { char x; long long y; } ac__type_alignof_;"; then : -else $as_nop +else if test "$ac_cv_type_long_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $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 alignment of long long See \`config.log' for more details" "$LINENO" 5; } else @@ -14852,36 +14058,34 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long_long" >&5 -printf "%s\n" "$ac_cv_alignof_long_long" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long_long" >&5 +$as_echo "$ac_cv_alignof_long_long" >&6; } -printf "%s\n" "#define ALIGNOF_LONG_LONG $ac_cv_alignof_long_long" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ALIGNOF_LONG_LONG $ac_cv_alignof_long_long +_ACEOF -if ! $arch64 -then : +if ! $arch64; then : case $target_cpu in #( i686) : ;; #( *) : - if test "$ac_cv_alignof_double" -gt 4 -then : - printf "%s\n" "#define ARCH_ALIGN_DOUBLE 1" >>confdefs.h + if test "$ac_cv_alignof_double" -gt 4; then : + $as_echo "#define ARCH_ALIGN_DOUBLE 1" >>confdefs.h fi if test "x$ac_cv_sizeof_long" = "x8" && - test "$ac_cv_alignof_long" -gt 4 -then : - printf "%s\n" "#define ARCH_ALIGN_INT64 1" >>confdefs.h + test "$ac_cv_alignof_long" -gt 4; then : + $as_echo "#define ARCH_ALIGN_INT64 1" >>confdefs.h -else $as_nop +else if test "x$ac_cv_sizeof_long_long" = "x8" && - test "$ac_cv_alignof_long_long" -gt 4 -then : - printf "%s\n" "#define ARCH_ALIGN_INT64 1" >>confdefs.h + test "$ac_cv_alignof_long_long" -gt 4; then : + $as_echo "#define ARCH_ALIGN_INT64 1" >>confdefs.h fi fi @@ -14897,8 +14101,7 @@ rpath='' mksharedlibrpath='' natdynlinkopts="" -if test x"$enable_shared" != "xno" -then : +if test x"$enable_shared" != "xno"; then : case $host in #( *-apple-darwin*) : mksharedlib="$CC -shared \ @@ -14908,8 +14111,7 @@ then : *-*-mingw32) : mksharedlib='$(FLEXLINK)' mkmaindll='$(FLEXLINK) -maindll' - if test -n "$oc_dll_ldflags" -then : + if test -n "$oc_dll_ldflags"; then : mksharedlib="$mksharedlib -link \"$oc_dll_ldflags\"" mkmaindll="$mkmaindll -link \"$oc_dll_ldflags\"" @@ -14957,8 +14159,7 @@ esac esac fi -if test -z "$mkmaindll" -then : +if test -z "$mkmaindll"; then : mkmaindll=$mksharedlib fi @@ -14966,8 +14167,7 @@ fi natdynlink=false -if test x"$supports_shared_libraries" = 'xtrue' -then : +if test x"$supports_shared_libraries" = 'xtrue'; then : case "$host" in #( *-*-cygwin*) : natdynlink=true ;; #( @@ -15047,29 +14247,27 @@ esac case "$cc_basename,$host" in #( *gcc*,x86_64-*|*gcc*,i686-*) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -fno-tree-vrp" >&5 -printf %s "checking whether the C compiler supports -fno-tree-vrp... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -fno-tree-vrp" >&5 +$as_echo_n "checking whether the C compiler supports -fno-tree-vrp... " >&6; } saved_CFLAGS="$CFLAGS" CFLAGS="-Werror -fno-tree-vrp $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : cc_has_fno_tree_vrp=true - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else cc_has_fno_tree_vrp=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$saved_CFLAGS" - if $cc_has_fno_tree_vrp -then : + if $cc_has_fno_tree_vrp; then : internal_cflags="$internal_cflags -fno-tree-vrp" fi ;; #( *) : @@ -15077,28 +14275,27 @@ fi ;; #( esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __attribute__((aligned(n)))" >&5 -printf %s "checking whether the C compiler supports __attribute__((aligned(n)))... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __attribute__((aligned(n)))" >&5 +$as_echo_n "checking whether the C compiler supports __attribute__((aligned(n)))... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef struct {__attribute__((aligned(8))) int t;} t; _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - printf "%s\n" "#define SUPPORTS_ALIGNED_ATTRIBUTE 1" >>confdefs.h +if ac_fn_c_try_compile "$LINENO"; then : + $as_echo "#define SUPPORTS_ALIGNED_ATTRIBUTE 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $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 -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ## Check whether __attribute__((optimize("tree-vectorize")))) is supported - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __attribute__((optimize(\"tree-vectorize\")))" >&5 -printf %s "checking whether the C compiler supports __attribute__((optimize(\"tree-vectorize\")))... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __attribute__((optimize(\"tree-vectorize\")))" >&5 +$as_echo_n "checking whether the C compiler supports __attribute__((optimize(\"tree-vectorize\")))... " >&6; } saved_CFLAGS="$CFLAGS" CFLAGS="-Werror $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15108,17 +14305,16 @@ printf %s "checking whether the C compiler supports __attribute__((optimize(\"tr int main() { f(); return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - printf "%s\n" "#define SUPPORTS_TREE_VECTORIZE 1" >>confdefs.h +if ac_fn_c_try_compile "$LINENO"; then : + $as_echo "#define SUPPORTS_TREE_VECTORIZE 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $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 -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$saved_CFLAGS" @@ -15148,10 +14344,9 @@ case $host in #( powerpc64le*-*-linux*) : arch=power; model=ppc64le; system=elf ;; #( powerpc*-*-linux*) : - arch=power; if $arch64 -then : + arch=power; if $arch64; then : model=ppc64 -else $as_nop +else model=ppc fi; system=elf ;; #( s390x*-*-linux*) : @@ -15228,39 +14423,37 @@ fi; system=elf ;; #( ;; esac -if test x"$enable_native_compiler" = "xno" -then : +if test x"$enable_native_compiler" = "xno"; then : native_compiler=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the native compiler is disabled" >&5 -printf "%s\n" "$as_me: the native compiler is disabled" >&6;} -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: the native compiler is disabled" >&5 +$as_echo "$as_me: the native compiler is disabled" >&6;} +else native_compiler=true fi -if ! $native_compiler -then : +if ! $native_compiler; then : natdynlink=false fi -if $natdynlink -then : +if $natdynlink; then : cmxs="cmxs" -else $as_nop +else cmxs="cmx" fi -printf "%s\n" "#define OCAML_OS_TYPE \"$ostype\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define OCAML_OS_TYPE "$ostype" +_ACEOF if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. set dummy ${ac_tool_prefix}ld; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_DIRECT_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DIRECT_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$DIRECT_LD"; then ac_cv_prog_DIRECT_LD="$DIRECT_LD" # Let the user override the test. else @@ -15268,15 +14461,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DIRECT_LD="${ac_tool_prefix}ld" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15287,11 +14476,11 @@ fi fi DIRECT_LD=$ac_cv_prog_DIRECT_LD if test -n "$DIRECT_LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DIRECT_LD" >&5 -printf "%s\n" "$DIRECT_LD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIRECT_LD" >&5 +$as_echo "$DIRECT_LD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -15300,12 +14489,11 @@ if test -z "$ac_cv_prog_DIRECT_LD"; then ac_ct_DIRECT_LD=$DIRECT_LD # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_DIRECT_LD+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DIRECT_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_DIRECT_LD"; then ac_cv_prog_ac_ct_DIRECT_LD="$ac_ct_DIRECT_LD" # Let the user override the test. else @@ -15313,15 +14501,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DIRECT_LD="ld" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15332,11 +14516,11 @@ fi fi ac_ct_DIRECT_LD=$ac_cv_prog_ac_ct_DIRECT_LD if test -n "$ac_ct_DIRECT_LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DIRECT_LD" >&5 -printf "%s\n" "$ac_ct_DIRECT_LD" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DIRECT_LD" >&5 +$as_echo "$ac_ct_DIRECT_LD" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_DIRECT_LD" = x; then @@ -15344,8 +14528,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $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 DIRECT_LD=$ac_ct_DIRECT_LD @@ -15354,8 +14538,7 @@ else DIRECT_LD="$ac_cv_prog_DIRECT_LD" fi -if test -z "$PARTIALLD" -then : +if test -z "$PARTIALLD"; then : case "$arch,$cc_basename,$system,$model" in #( amd64,*gcc*,macosx,*) : PACKLD_FLAGS=' -arch x86_64' ;; #( @@ -15372,15 +14555,14 @@ esac # output filename. Don't assume that all C compilers understand GNU -ofoo # form, so ensure that the definition includes a space at the end (which is # achieved using the $(EMPTY) expansion trick). - if test x"$cc_basename" = "xcl" -then : + if test x"$cc_basename" = "xcl"; then : # For the Microsoft C compiler there must be no space at the end of the # string. PACKLD="link -lib -nologo $machine -out:" -else $as_nop +else PACKLD="$DIRECT_LD -r$PACKLD_FLAGS -o \$(EMPTY)" fi -else $as_nop +else PACKLD="$PARTIALLD -o \$(EMPTY)" fi @@ -15417,12 +14599,11 @@ esac intel_jcc_bug_cflags='' case $arch in #( amd64) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wa,-mbranches-within-32B-boundaries" >&5 -printf %s "checking whether C compiler accepts -Wa,-mbranches-within-32B-boundaries... " >&6; } -if test ${ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wa,-mbranches-within-32B-boundaries" >&5 +$as_echo_n "checking whether C compiler accepts -Wa,-mbranches-within-32B-boundaries... " >&6; } +if ${ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS -Wa,-mbranches-within-32B-boundaries" @@ -15430,28 +14611,26 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries=yes -else $as_nop +else ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries" >&5 -printf "%s\n" "$ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries" >&6; } -if test "x$ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries" >&5 +$as_echo "$ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries" >&6; } +if test "x$ax_cv_check_cflags___Wa__mbranches_within_32B_boundaries" = xyes; then : intel_jcc_bug_cflags=-Wa,-mbranches-within-32B-boundaries -else $as_nop +else : fi ;; #( @@ -15461,18 +14640,16 @@ esac # Assembler -if test -n "$target_alias" -then : +if test -n "$target_alias"; then : toolpref="${target_alias}-" as_target="$target" as_cpu="$target_cpu" -else $as_nop - if test -n "$host_alias" -then : +else + if test -n "$host_alias"; then : toolpref="${host_alias}-" as_target="$host" as_cpu="$host_cpu" -else $as_nop +else toolpref="" as_target="$build" as_cpu="$build_cpu" @@ -15513,36 +14690,32 @@ esac ;; #( ;; esac -if test "$with_pic" -then : +if test "$with_pic"; then : fpic=true - printf "%s\n" "#define CAML_WITH_FPIC 1" >>confdefs.h + $as_echo "#define CAML_WITH_FPIC 1" >>confdefs.h internal_cflags="$internal_cflags $sharedlib_cflags" default_aspp="$default_aspp $sharedlib_cflags" -else $as_nop +else fpic=false fi -if test -z "$AS" -then : +if test -z "$AS"; then : AS="$default_as" fi -if test -z "$ASPP" -then : +if test -z "$ASPP"; then : ASPP="$default_aspp" fi # Utilities # Extract the first word of "rlwrap", so it can be a program name with args. set dummy rlwrap; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_rlwrap+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_rlwrap+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$rlwrap"; then ac_cv_prog_rlwrap="$rlwrap" # Let the user override the test. else @@ -15550,15 +14723,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_rlwrap="rlwrap" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15569,18 +14738,18 @@ fi fi rlwrap=$ac_cv_prog_rlwrap if test -n "$rlwrap"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $rlwrap" >&5 -printf "%s\n" "$rlwrap" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rlwrap" >&5 +$as_echo "$rlwrap" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi case $rlwrap,$system in #( rlwrap,win*|rlwrap,mingw*) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: rlwrap doesn't work with native win32 - disabling" >&5 -printf "%s\n" "$as_me: rlwrap doesn't work with native win32 - disabling" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: rlwrap doesn't work with native win32 - disabling" >&5 +$as_echo "$as_me: rlwrap doesn't work with native win32 - disabling" >&6;} rlwrap='' ;; #( *) : ;; @@ -15590,33 +14759,30 @@ esac ## Check the semantics of signal handlers - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking semantics of signal handlers" >&5 -printf "%s\n" "$as_me: checking semantics of signal handlers" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: checking semantics of signal handlers" >&5 +$as_echo "$as_me: checking semantics of signal handlers" >&6;} ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" -if test "x$ac_cv_func_sigaction" = xyes -then : +if test "x$ac_cv_func_sigaction" = xyes; then : has_sigaction=true -else $as_nop +else has_sigaction=false fi ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" -if test "x$ac_cv_func_sigprocmask" = xyes -then : +if test "x$ac_cv_func_sigprocmask" = xyes; then : has_sigprocmask=true -else $as_nop +else has_sigprocmask=false fi - if $has_sigaction && $has_sigprocmask -then : - printf "%s\n" "#define POSIX_SIGNALS 1" >>confdefs.h + if $has_sigaction && $has_sigprocmask; then : + $as_echo "#define POSIX_SIGNALS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: POSIX signal handling found." >&5 -printf "%s\n" "$as_me: POSIX signal handling found." >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: assuming signals have the System V semantics." >&5 -printf "%s\n" "$as_me: assuming signals have the System V semantics." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: POSIX signal handling found." >&5 +$as_echo "$as_me: POSIX signal handling found." >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: assuming signals have the System V semantics." >&5 +$as_echo "$as_me: assuming signals have the System V semantics." >&6;} fi @@ -15625,50 +14791,45 @@ fi ## Check for C99 float ops has_c99_float_ops=true - - for ac_func in expm1 log1p hypot fma exp2 log2 cbrt acosh asinh atanh erf erfc trunc round copysign +for ac_func in expm1 log1p hypot fma exp2 log2 cbrt acosh asinh atanh erf erfc trunc round copysign do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes" -then : +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -else $as_nop +else has_c99_float_ops=false fi - done -if $has_c99_float_ops -then : - printf "%s\n" "#define HAS_C99_FLOAT_OPS 1" >>confdefs.h + +if $has_c99_float_ops; then : + $as_echo "#define HAS_C99_FLOAT_OPS 1" >>confdefs.h # Check whether round works (known bug in mingw-w64) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether round works" >&5 -printf %s "checking whether round works... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether round works" >&5 +$as_echo_n "checking whether round works... " >&6; } old_cross_compiling="$cross_compiling" - if test "x$host_runnable" = 'xtrue' -then : + if test "x$host_runnable" = 'xtrue'; then : cross_compiling='no' fi - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : case $target in #( x86_64-w64-mingw32) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume not" >&5 -printf "%s\n" "cross-compiling; assume not" >&6; } ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume not" >&5 +$as_echo "cross-compiling; assume not" >&6; } ;; #( *) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume yes" >&5 -printf "%s\n" "cross-compiling; assume yes" >&6; } - printf "%s\n" "#define HAS_WORKING_ROUND 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume yes" >&5 +$as_echo "cross-compiling; assume yes" >&6; } + $as_echo "#define HAS_WORKING_ROUND 1" >>confdefs.h ;; esac -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15679,15 +14840,14 @@ int main (void) { } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - printf "%s\n" "#define HAS_WORKING_ROUND 1" >>confdefs.h - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +if ac_fn_c_try_run "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + $as_echo "#define HAS_WORKING_ROUND 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } case $enable_imprecise_c99_float_ops,$target in #( no,*) : hard_error=true ;; #( @@ -15698,12 +14858,11 @@ printf "%s\n" "no" >&6; } *) : hard_error=true ;; esac - if test x"$hard_error" = "xtrue" -then : + if test x"$hard_error" = "xtrue"; then : as_fn_error $? "round does not work, enable emulation with --enable-imprecise-c99-float-ops" "$LINENO" 5 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: round does not work; emulation enabled" >&5 -printf "%s\n" "$as_me: WARNING: round does not work; emulation enabled" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: round does not work; emulation enabled" >&5 +$as_echo "$as_me: WARNING: round does not work; emulation enabled" >&2;} fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15716,27 +14875,25 @@ fi # Check whether fma works (regressed in mingw-w64 8.0.0; present, but broken, # in VS2013-2017 and present but unimplemented in Cygwin64) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fma works" >&5 -printf %s "checking whether fma works... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fma works" >&5 +$as_echo_n "checking whether fma works... " >&6; } old_cross_compiling="$cross_compiling" - if test "x$host_runnable" = 'xtrue' -then : + if test "x$host_runnable" = 'xtrue'; then : cross_compiling='no' fi - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : case $target in #( x86_64-w64-mingw32|x86_64-*-cygwin*) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume not" >&5 -printf "%s\n" "cross-compiling; assume not" >&6; } ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume not" >&5 +$as_echo "cross-compiling; assume not" >&6; } ;; #( *) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume yes" >&5 -printf "%s\n" "cross-compiling; assume yes" >&6; } - printf "%s\n" "#define HAS_WORKING_FMA 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume yes" >&5 +$as_echo "cross-compiling; assume yes" >&6; } + $as_echo "#define HAS_WORKING_FMA 1" >>confdefs.h ;; esac -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15769,15 +14926,14 @@ int main (void) { } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - printf "%s\n" "#define HAS_WORKING_FMA 1" >>confdefs.h - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +if ac_fn_c_try_run "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + $as_echo "#define HAS_WORKING_FMA 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } case $enable_imprecise_c99_float_ops,$target in #( no,*) : hard_error=true ;; #( @@ -15788,22 +14944,20 @@ printf "%s\n" "no" >&6; } *) : case $ocaml_cv_cc_vendor in #( msvc-*) : - if test "${ocaml_cv_cc_vendor#msvc-}" -lt 1920 -then : + if test "${ocaml_cv_cc_vendor#msvc-}" -lt 1920 ; then : hard_error=false -else $as_nop +else hard_error=true fi ;; #( *) : hard_error=true ;; esac ;; esac - if test x"$hard_error" = "xtrue" -then : + if test x"$hard_error" = "xtrue"; then : as_fn_error $? "fma does not work, enable emulation with --enable-imprecise-c99-float-ops" "$LINENO" 5 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: fma does not work; emulation enabled" >&5 -printf "%s\n" "$as_me: WARNING: fma does not work; emulation enabled" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fma does not work; emulation enabled" >&5 +$as_echo "$as_me: WARNING: fma does not work; emulation enabled" >&2;} fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15813,46 +14967,41 @@ fi cross_compiling="$old_cross_compiling" -else $as_nop - if test x"$enable_imprecise_c99_float_ops" != "xyes" -then : +else + if test x"$enable_imprecise_c99_float_ops" != "xyes" ; then : case $enable_imprecise_c99_float_ops,$ocaml_cv_cc_vendor in #( no,*) : hard_error=true ;; #( ,msvc-*) : - if test "${ocaml_cv_cc_vendor#msvc-}" -lt 1800 -then : + if test "${ocaml_cv_cc_vendor#msvc-}" -lt 1800 ; then : hard_error=false -else $as_nop +else hard_error=true fi ;; #( *) : hard_error=true ;; esac - if test x"$hard_error" = 'xtrue' -then : + if test x"$hard_error" = 'xtrue'; then : as_fn_error $? "C99 float ops unavailable, enable replacements with --enable-imprecise-c99-float-ops" "$LINENO" 5 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: C99 float ops unavailable, replacements enabled (ancient Visual Studio)" >&5 -printf "%s\n" "$as_me: WARNING: C99 float ops unavailable, replacements enabled (ancient Visual Studio)" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C99 float ops unavailable, replacements enabled (ancient Visual Studio)" >&5 +$as_echo "$as_me: WARNING: C99 float ops unavailable, replacements enabled (ancient Visual Studio)" >&2;} fi fi fi ## getrusage ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" -if test "x$ac_cv_func_getrusage" = xyes -then : - printf "%s\n" "#define HAS_GETRUSAGE 1" >>confdefs.h +if test "x$ac_cv_func_getrusage" = xyes; then : + $as_echo "#define HAS_GETRUSAGE 1" >>confdefs.h fi ## times ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = xyes -then : - printf "%s\n" "#define HAS_TIMES 1" >>confdefs.h +if test "x$ac_cv_func_times" = xyes; then : + $as_echo "#define HAS_TIMES 1" >>confdefs.h fi @@ -15863,15 +15012,13 @@ saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS" ac_fn_c_check_func "$LINENO" "secure_getenv" "ac_cv_func_secure_getenv" -if test "x$ac_cv_func_secure_getenv" = xyes -then : - printf "%s\n" "#define HAS_SECURE_GETENV 1" >>confdefs.h +if test "x$ac_cv_func_secure_getenv" = xyes; then : + $as_echo "#define HAS_SECURE_GETENV 1" >>confdefs.h -else $as_nop +else ac_fn_c_check_func "$LINENO" "__secure_getenv" "ac_cv_func___secure_getenv" -if test "x$ac_cv_func___secure_getenv" = xyes -then : - printf "%s\n" "#define HAS___SECURE_GETENV 1" >>confdefs.h +if test "x$ac_cv_func___secure_getenv" = xyes; then : + $as_echo "#define HAS___SECURE_GETENV 1" >>confdefs.h fi @@ -15883,9 +15030,8 @@ CPPFLAGS="$saved_CPPFLAGS" ## issetugid ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid" -if test "x$ac_cv_func_issetugid" = xyes -then : - printf "%s\n" "#define HAS_ISSETUGID 1" >>confdefs.h +if test "x$ac_cv_func_issetugid" = xyes; then : + $as_echo "#define HAS_ISSETUGID 1" >>confdefs.h fi @@ -15902,26 +15048,24 @@ case $host in #( has_monotonic_clock=true ;; #( *-apple-darwin*) : - - for ac_func in mach_timebase_info mach_absolute_time + for ac_func in mach_timebase_info mach_absolute_time do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes" -then : +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF has_monotonic_clock=true - printf "%s\n" "#define HAS_MACH_ABSOLUTE_TIME 1" >>confdefs.h + $as_echo "#define HAS_MACH_ABSOLUTE_TIME 1" >>confdefs.h -else $as_nop +else has_monotonic_clock=false fi - -done ;; #( +done + ;; #( *) : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15938,17 +15082,16 @@ done ;; #( } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : has_monotonic_clock=true - printf "%s\n" "#define HAS_POSIX_MONOTONIC_CLOCK 1" >>confdefs.h + $as_echo "#define HAS_POSIX_MONOTONIC_CLOCK 1" >>confdefs.h -else $as_nop +else has_monotonic_clock=false fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac @@ -15957,8 +15100,7 @@ esac # if the proper clock source is found. # If asked via --enable-instrumented-runtime, configuration fails if the proper # clock source is missing. -if test "x$enable_instrumented_runtime" != "xno" -then : +if test "x$enable_instrumented_runtime" != "xno" ; then : case $host in #( sparc-sun-solaris*) : @@ -15982,12 +15124,11 @@ but no proper monotonic clock source was found." "$LINENO" 5 ;; esac ;; #( *) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 -printf %s "checking for library containing clock_gettime... " >&6; } -if test ${ac_cv_search_clock_gettime+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 +$as_echo_n "checking for library containing clock_gettime... " >&6; } +if ${ac_cv_search_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15995,51 +15136,49 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 clock_gettime (); int -main (void) +main () { return clock_gettime (); ; return 0; } _ACEOF -for ac_lib in '' rt -do +for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_clock_gettime+y} -then : + if ${ac_cv_search_clock_gettime+:} false; then : break fi done -if test ${ac_cv_search_clock_gettime+y} -then : +if ${ac_cv_search_clock_gettime+:} false; then : -else $as_nop +else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 -printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 +$as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" has_clock_gettime=true -else $as_nop +else has_clock_gettime=false fi @@ -16051,10 +15190,9 @@ fi *,true,true) : instrumented_runtime=true - if test "x$ac_cv_search_clock_gettime" = "xnone required" -then : + if test "x$ac_cv_search_clock_gettime" = "xnone required"; then : instrumented_runtime_libs="" -else $as_nop +else instrumented_runtime_libs=$ac_cv_search_clock_gettime fi @@ -16087,12 +15225,11 @@ sockets=true case $host in #( *-*-mingw32|*-pc-windows) : cclibs="$cclibs -lws2_32" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 -printf %s "checking for library containing socket... " >&6; } -if test ${ac_cv_search_socket+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +$as_echo_n "checking for library containing socket... " >&6; } +if ${ac_cv_search_socket+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16100,67 +15237,63 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 socket (); int -main (void) +main () { return socket (); ; return 0; } _ACEOF -for ac_lib in '' ws2_32 -do +for ac_lib in '' ws2_32; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_socket=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_socket+y} -then : + if ${ac_cv_search_socket+:} false; then : break fi done -if test ${ac_cv_search_socket+y} -then : +if ${ac_cv_search_socket+:} false; then : -else $as_nop +else ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 -printf "%s\n" "$ac_cv_search_socket" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +$as_echo "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "socketpair" "ac_cv_func_socketpair" -if test "x$ac_cv_func_socketpair" = xyes -then : - printf "%s\n" "#define HAS_SOCKETPAIR 1" >>confdefs.h +if test "x$ac_cv_func_socketpair" = xyes; then : + $as_echo "#define HAS_SOCKETPAIR 1" >>confdefs.h fi ;; #( *-*-haiku) : cclibs="$cclibs -lnetwork" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 -printf %s "checking for library containing socket... " >&6; } -if test ${ac_cv_search_socket+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +$as_echo_n "checking for library containing socket... " >&6; } +if ${ac_cv_search_socket+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16168,60 +15301,57 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 socket (); int -main (void) +main () { return socket (); ; return 0; } _ACEOF -for ac_lib in '' network -do +for ac_lib in '' network; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_socket=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_socket+y} -then : + if ${ac_cv_search_socket+:} false; then : break fi done -if test ${ac_cv_search_socket+y} -then : +if ${ac_cv_search_socket+:} false; then : -else $as_nop +else ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 -printf "%s\n" "$ac_cv_search_socket" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +$as_echo "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ;; #( *-*-solaris*) : cclibs="$cclibs -lsocket -lnsl" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 -printf %s "checking for library containing socket... " >&6; } -if test ${ac_cv_search_socket+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +$as_echo_n "checking for library containing socket... " >&6; } +if ${ac_cv_search_socket+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16229,58 +15359,55 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 socket (); int -main (void) +main () { return socket (); ; return 0; } _ACEOF -for ac_lib in '' socket -do +for ac_lib in '' socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_socket=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_socket+y} -then : + if ${ac_cv_search_socket+:} false; then : break fi done -if test ${ac_cv_search_socket+y} -then : +if ${ac_cv_search_socket+:} false; then : -else $as_nop +else ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 -printf "%s\n" "$ac_cv_search_socket" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +$as_echo "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntop" >&5 -printf %s "checking for library containing inet_ntop... " >&6; } -if test ${ac_cv_search_inet_ntop+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntop" >&5 +$as_echo_n "checking for library containing inet_ntop... " >&6; } +if ${ac_cv_search_inet_ntop+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16288,77 +15415,72 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 inet_ntop (); int -main (void) +main () { return inet_ntop (); ; return 0; } _ACEOF -for ac_lib in '' nsl -do +for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_inet_ntop=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_inet_ntop+y} -then : + if ${ac_cv_search_inet_ntop+:} false; then : break fi done -if test ${ac_cv_search_inet_ntop+y} -then : +if ${ac_cv_search_inet_ntop+:} false; then : -else $as_nop +else ac_cv_search_inet_ntop=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_ntop" >&5 -printf "%s\n" "$ac_cv_search_inet_ntop" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_ntop" >&5 +$as_echo "$ac_cv_search_inet_ntop" >&6; } ac_res=$ac_cv_search_inet_ntop -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ;; #( *) : - - for ac_func in socket socketpair bind listen accept connect + for ac_func in socket socketpair bind listen accept connect do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes" -then : +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -else $as_nop +else sockets=false fi - done + ;; esac -if $sockets -then : - printf "%s\n" "#define HAS_SOCKETS 1" >>confdefs.h +if $sockets; then : + $as_echo "#define HAS_SOCKETS 1" >>confdefs.h fi @@ -16368,27 +15490,24 @@ case $host in #( *-*-mingw32|*-pc-windows) : ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include " -if test "x$ac_cv_type_socklen_t" = xyes -then : - printf "%s\n" "#define HAS_SOCKLEN_T 1" >>confdefs.h +if test "x$ac_cv_type_socklen_t" = xyes; then : + $as_echo "#define HAS_SOCKLEN_T 1" >>confdefs.h fi ;; #( *) : ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include " -if test "x$ac_cv_type_socklen_t" = xyes -then : - printf "%s\n" "#define HAS_SOCKLEN_T 1" >>confdefs.h +if test "x$ac_cv_type_socklen_t" = xyes; then : + $as_echo "#define HAS_SOCKLEN_T 1" >>confdefs.h fi ;; esac ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton" -if test "x$ac_cv_func_inet_aton" = xyes -then : - printf "%s\n" "#define HAS_INET_ATON 1" >>confdefs.h +if test "x$ac_cv_func_inet_aton" = xyes; then : + $as_echo "#define HAS_INET_ATON 1" >>confdefs.h fi @@ -16397,18 +15516,20 @@ fi case $host in #( *-*-mingw32|*-pc-windows) : - for ac_header in afunix.h + for ac_header in afunix.h do : ac_fn_c_check_header_compile "$LINENO" "afunix.h" "ac_cv_header_afunix_h" "#include " -if test "x$ac_cv_header_afunix_h" = xyes -then : - printf "%s\n" "#define HAVE_AFUNIX_H 1" >>confdefs.h - printf "%s\n" "#define HAS_AFUNIX_H 1" >>confdefs.h +if test "x$ac_cv_header_afunix_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_AFUNIX_H 1 +_ACEOF + $as_echo "#define HAS_AFUNIX_H 1" >>confdefs.h fi -done ;; #( +done + ;; #( *) : ;; esac @@ -16421,10 +15542,9 @@ case $host in #( *-*-mingw32|*-pc-windows) : ac_fn_c_check_type "$LINENO" "struct sockaddr_in6" "ac_cv_type_struct_sockaddr_in6" "#include " -if test "x$ac_cv_type_struct_sockaddr_in6" = xyes -then : +if test "x$ac_cv_type_struct_sockaddr_in6" = xyes; then : -else $as_nop +else ipv6=false fi ;; #( @@ -16436,182 +15556,89 @@ fi " -if test "x$ac_cv_type_struct_sockaddr_in6" = xyes -then : +if test "x$ac_cv_type_struct_sockaddr_in6" = xyes; then : -else $as_nop +else ipv6=false fi ;; esac -if $ipv6 -then : +if $ipv6; then : ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" -if test "x$ac_cv_func_getaddrinfo" = xyes -then : +if test "x$ac_cv_func_getaddrinfo" = xyes; then : -else $as_nop +else ipv6=false fi fi -if $ipv6 -then : +if $ipv6; then : ac_fn_c_check_func "$LINENO" "getnameinfo" "ac_cv_func_getnameinfo" -if test "x$ac_cv_func_getnameinfo" = xyes -then : +if test "x$ac_cv_func_getnameinfo" = xyes; then : -else $as_nop +else ipv6=false fi fi -if $ipv6 -then : +if $ipv6; then : ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" -if test "x$ac_cv_func_inet_pton" = xyes -then : +if test "x$ac_cv_func_inet_pton" = xyes; then : -else $as_nop +else ipv6=false fi fi -if $ipv6 -then : +if $ipv6; then : ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" -if test "x$ac_cv_func_inet_ntop" = xyes -then : - printf "%s\n" "#define HAS_IPV6 1" >>confdefs.h +if test "x$ac_cv_func_inet_ntop" = xyes; then : + $as_echo "#define HAS_IPV6 1" >>confdefs.h fi fi ac_fn_c_check_func "$LINENO" "rewinddir" "ac_cv_func_rewinddir" -if test "x$ac_cv_func_rewinddir" = xyes -then : - printf "%s\n" "#define HAS_REWINDDIR 1" >>confdefs.h +if test "x$ac_cv_func_rewinddir" = xyes; then : + $as_echo "#define HAS_REWINDDIR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "lockf" "ac_cv_func_lockf" -if test "x$ac_cv_func_lockf" = xyes -then : - printf "%s\n" "#define HAS_LOCKF 1" >>confdefs.h +if test "x$ac_cv_func_lockf" = xyes; then : + $as_echo "#define HAS_LOCKF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo" -if test "x$ac_cv_func_mkfifo" = xyes -then : - printf "%s\n" "#define HAS_MKFIFO 1" >>confdefs.h +if test "x$ac_cv_func_mkfifo" = xyes; then : + $as_echo "#define HAS_MKFIFO 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" -if test "x$ac_cv_func_getcwd" = xyes -then : - printf "%s\n" "#define HAS_GETCWD 1" >>confdefs.h +if test "x$ac_cv_func_getcwd" = xyes; then : + $as_echo "#define HAS_GETCWD 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 -printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } -if test ${ac_cv_c_undeclared_builtin_options+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_CFLAGS=$CFLAGS - ac_cv_c_undeclared_builtin_options='cannot detect' - for ac_arg in '' -fno-builtin; do - CFLAGS="$ac_save_CFLAGS $ac_arg" - # This test program should *not* compile successfully. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -(void) strchr; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - -else $as_nop - # This test program should compile successfully. - # No library function is consistently available on - # freestanding implementations, so test against a dummy - # declaration. Include always-available headers on the - # off chance that they somehow elicit warnings. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -extern void ac_decl (int, char *); - -int -main (void) -{ -(void) ac_decl (0, (char *) 0); - (void) ac_decl; +ac_fn_c_check_decl "$LINENO" "system" "ac_cv_have_decl_system" "#include +" +if test "x$ac_cv_have_decl_system" = xyes; then : + $as_echo "#define HAS_SYSTEM 1" >>confdefs.h - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - if test x"$ac_arg" = x -then : - ac_cv_c_undeclared_builtin_options='none needed' -else $as_nop - ac_cv_c_undeclared_builtin_options=$ac_arg fi - break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - done - CFLAGS=$ac_save_CFLAGS - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 -printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } - case $ac_cv_c_undeclared_builtin_options in #( - 'cannot detect') : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot make $CC report undeclared builtins -See \`config.log' for more details" "$LINENO" 5; } ;; #( - 'none needed') : - ac_c_undeclared_builtin_options='' ;; #( - *) : - ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; -esac - -ac_fn_check_decl "$LINENO" "system" "ac_cv_have_decl_system" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_system" = xyes -then : - printf "%s\n" "#define HAS_SYSTEM 1" >>confdefs.h -fi ## utime ## Note: this was defined in config/s-nt.h but the autoconf macros do not @@ -16619,43 +15646,39 @@ fi # of HAS_UTIME on Windows but this will probably need to be clarified case $host in #( *-*-mingw32|*-pc-windows) : - printf "%s\n" "#define HAS_UTIME 1" >>confdefs.h + $as_echo "#define HAS_UTIME 1" >>confdefs.h ;; #( *) : - ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_types_h" = xyes -then : - ac_fn_c_check_header_compile "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default" -if test "x$ac_cv_header_utime_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes; then : + ac_fn_c_check_header_mongrel "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default" +if test "x$ac_cv_header_utime_h" = xyes; then : ac_fn_c_check_func "$LINENO" "utime" "ac_cv_func_utime" -if test "x$ac_cv_func_utime" = xyes -then : - printf "%s\n" "#define HAS_UTIME 1" >>confdefs.h +if test "x$ac_cv_func_utime" = xyes; then : + $as_echo "#define HAS_UTIME 1" >>confdefs.h fi fi + fi + ;; esac ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" -if test "x$ac_cv_func_utimes" = xyes -then : - printf "%s\n" "#define HAS_UTIMES 1" >>confdefs.h +if test "x$ac_cv_func_utimes" = xyes; then : + $as_echo "#define HAS_UTIMES 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod" -if test "x$ac_cv_func_fchmod" = xyes -then : +if test "x$ac_cv_func_fchmod" = xyes; then : ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown" -if test "x$ac_cv_func_fchown" = xyes -then : - printf "%s\n" "#define HAS_FCHMOD 1" >>confdefs.h +if test "x$ac_cv_func_fchown" = xyes; then : + $as_echo "#define HAS_FCHMOD 1" >>confdefs.h fi @@ -16663,12 +15686,10 @@ fi ac_fn_c_check_func "$LINENO" "truncate" "ac_cv_func_truncate" -if test "x$ac_cv_func_truncate" = xyes -then : +if test "x$ac_cv_func_truncate" = xyes; then : ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" -if test "x$ac_cv_func_ftruncate" = xyes -then : - printf "%s\n" "#define HAS_TRUNCATE 1" >>confdefs.h +if test "x$ac_cv_func_ftruncate" = xyes; then : + $as_echo "#define HAS_TRUNCATE 1" >>confdefs.h fi @@ -16677,19 +15698,17 @@ fi ## select ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select" -if test "x$ac_cv_func_select" = xyes -then : +if test "x$ac_cv_func_select" = xyes; then : ac_fn_c_check_type "$LINENO" "fd_set" "ac_cv_type_fd_set" " #include #include " -if test "x$ac_cv_type_fd_set" = xyes -then : - printf "%s\n" "#define HAS_SELECT 1" >>confdefs.h +if test "x$ac_cv_type_fd_set" = xyes; then : + $as_echo "#define HAS_SELECT 1" >>confdefs.h select=true -else $as_nop +else select=false fi @@ -16697,23 +15716,19 @@ fi ac_fn_c_check_func "$LINENO" "nanosleep" "ac_cv_func_nanosleep" -if test "x$ac_cv_func_nanosleep" = xyes -then : - printf "%s\n" "#define HAS_NANOSLEEP 1" >>confdefs.h +if test "x$ac_cv_func_nanosleep" = xyes; then : + $as_echo "#define HAS_NANOSLEEP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "symlink" "ac_cv_func_symlink" -if test "x$ac_cv_func_symlink" = xyes -then : +if test "x$ac_cv_func_symlink" = xyes; then : ac_fn_c_check_func "$LINENO" "readlink" "ac_cv_func_readlink" -if test "x$ac_cv_func_readlink" = xyes -then : +if test "x$ac_cv_func_readlink" = xyes; then : ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" -if test "x$ac_cv_func_lstat" = xyes -then : - printf "%s\n" "#define HAS_SYMLINK 1" >>confdefs.h +if test "x$ac_cv_func_lstat" = xyes; then : + $as_echo "#define HAS_SYMLINK 1" >>confdefs.h fi @@ -16723,33 +15738,30 @@ fi ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath" -if test "x$ac_cv_func_realpath" = xyes -then : - printf "%s\n" "#define HAS_REALPATH 1" >>confdefs.h +if test "x$ac_cv_func_realpath" = xyes; then : + $as_echo "#define HAS_REALPATH 1" >>confdefs.h fi # wait ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" -if test "x$ac_cv_func_waitpid" = xyes -then : +if test "x$ac_cv_func_waitpid" = xyes; then : wait=true - printf "%s\n" "#define HAS_WAITPID 1" >>confdefs.h + $as_echo "#define HAS_WAITPID 1" >>confdefs.h -else $as_nop +else wait=false fi ac_fn_c_check_func "$LINENO" "wait4" "ac_cv_func_wait4" -if test "x$ac_cv_func_wait4" = xyes -then : +if test "x$ac_cv_func_wait4" = xyes; then : has_wait=true - printf "%s\n" "#define HAS_WAIT4 1" >>confdefs.h + $as_echo "#define HAS_WAIT4 1" >>confdefs.h fi @@ -16757,52 +15769,43 @@ fi ## getgroups ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" -if test "x$ac_cv_func_getgroups" = xyes -then : - printf "%s\n" "#define HAS_GETGROUPS 1" >>confdefs.h +if test "x$ac_cv_func_getgroups" = xyes; then : + $as_echo "#define HAS_GETGROUPS 1" >>confdefs.h fi ## setgroups ac_fn_c_check_func "$LINENO" "setgroups" "ac_cv_func_setgroups" -if test "x$ac_cv_func_setgroups" = xyes -then : - printf "%s\n" "#define HAS_SETGROUPS 1" >>confdefs.h +if test "x$ac_cv_func_setgroups" = xyes; then : + $as_echo "#define HAS_SETGROUPS 1" >>confdefs.h fi ## initgroups ac_fn_c_check_func "$LINENO" "initgroups" "ac_cv_func_initgroups" -if test "x$ac_cv_func_initgroups" = xyes -then : - printf "%s\n" "#define HAS_INITGROUPS 1" >>confdefs.h +if test "x$ac_cv_func_initgroups" = xyes; then : + $as_echo "#define HAS_INITGROUPS 1" >>confdefs.h fi ## termios -ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" -if test "x$ac_cv_header_termios_h" = xyes -then : +ac_fn_c_check_header_mongrel "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" +if test "x$ac_cv_header_termios_h" = xyes; then : ac_fn_c_check_func "$LINENO" "tcgetattr" "ac_cv_func_tcgetattr" -if test "x$ac_cv_func_tcgetattr" = xyes -then : +if test "x$ac_cv_func_tcgetattr" = xyes; then : ac_fn_c_check_func "$LINENO" "tcsetattr" "ac_cv_func_tcsetattr" -if test "x$ac_cv_func_tcsetattr" = xyes -then : +if test "x$ac_cv_func_tcsetattr" = xyes; then : ac_fn_c_check_func "$LINENO" "tcsendbreak" "ac_cv_func_tcsendbreak" -if test "x$ac_cv_func_tcsendbreak" = xyes -then : +if test "x$ac_cv_func_tcsendbreak" = xyes; then : ac_fn_c_check_func "$LINENO" "tcflush" "ac_cv_func_tcflush" -if test "x$ac_cv_func_tcflush" = xyes -then : +if test "x$ac_cv_func_tcflush" = xyes; then : ac_fn_c_check_func "$LINENO" "tcflow" "ac_cv_func_tcflow" -if test "x$ac_cv_func_tcflow" = xyes -then : - printf "%s\n" "#define HAS_TERMIOS 1" >>confdefs.h +if test "x$ac_cv_func_tcflow" = xyes; then : + $as_echo "#define HAS_TERMIOS 1" >>confdefs.h fi @@ -16817,17 +15820,17 @@ fi fi + ## setitimer ac_fn_c_check_func "$LINENO" "setitimer" "ac_cv_func_setitimer" -if test "x$ac_cv_func_setitimer" = xyes -then : +if test "x$ac_cv_func_setitimer" = xyes; then : setitimer=true - printf "%s\n" "#define HAS_SETITIMER 1" >>confdefs.h + $as_echo "#define HAS_SETITIMER 1" >>confdefs.h -else $as_nop +else setitimer=false fi @@ -16837,13 +15840,12 @@ fi # (should be debugged later) case $host in #( *-*-mingw32|*-pc-windows) : - printf "%s\n" "#define HAS_GETHOSTNAME 1" >>confdefs.h + $as_echo "#define HAS_GETHOSTNAME 1" >>confdefs.h ;; #( *) : ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname" -if test "x$ac_cv_func_gethostname" = xyes -then : - printf "%s\n" "#define HAS_GETHOSTNAME 1" >>confdefs.h +if test "x$ac_cv_func_gethostname" = xyes; then : + $as_echo "#define HAS_GETHOSTNAME 1" >>confdefs.h fi ;; @@ -16851,30 +15853,28 @@ esac ## uname -ac_fn_c_check_header_compile "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_utsname_h" = xyes -then : +ac_fn_c_check_header_mongrel "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_utsname_h" = xyes; then : ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname" -if test "x$ac_cv_func_uname" = xyes -then : - printf "%s\n" "#define HAS_UNAME 1" >>confdefs.h +if test "x$ac_cv_func_uname" = xyes; then : + $as_echo "#define HAS_UNAME 1" >>confdefs.h fi fi + ## gettimeofday ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" -if test "x$ac_cv_func_gettimeofday" = xyes -then : +if test "x$ac_cv_func_gettimeofday" = xyes; then : gettimeofday=true - printf "%s\n" "#define HAS_GETTIMEOFDAY 1" >>confdefs.h + $as_echo "#define HAS_GETTIMEOFDAY 1" >>confdefs.h -else $as_nop +else gettimeofday=false fi @@ -16882,9 +15882,8 @@ fi ## mktime ac_fn_c_check_func "$LINENO" "mktime" "ac_cv_func_mktime" -if test "x$ac_cv_func_mktime" = xyes -then : - printf "%s\n" "#define HAS_MKTIME 1" >>confdefs.h +if test "x$ac_cv_func_mktime" = xyes; then : + $as_echo "#define HAS_MKTIME 1" >>confdefs.h fi @@ -16896,9 +15895,8 @@ case $host in #( ;; #( *) : ac_fn_c_check_func "$LINENO" "setsid" "ac_cv_func_setsid" -if test "x$ac_cv_func_setsid" = xyes -then : - printf "%s\n" "#define HAS_SETSID 1" >>confdefs.h +if test "x$ac_cv_func_setsid" = xyes; then : + $as_echo "#define HAS_SETSID 1" >>confdefs.h fi ;; @@ -16907,9 +15905,8 @@ esac ## putenv ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" -if test "x$ac_cv_func_putenv" = xyes -then : - printf "%s\n" "#define HAS_PUTENV 1" >>confdefs.h +if test "x$ac_cv_func_putenv" = xyes; then : + $as_echo "#define HAS_PUTENV 1" >>confdefs.h fi @@ -16917,12 +15914,10 @@ fi ## setenv and unsetenv ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" -if test "x$ac_cv_func_setenv" = xyes -then : +if test "x$ac_cv_func_setenv" = xyes; then : ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" -if test "x$ac_cv_func_unsetenv" = xyes -then : - printf "%s\n" "#define HAS_SETENV_UNSETENV 1" >>confdefs.h +if test "x$ac_cv_func_unsetenv" = xyes; then : + $as_echo "#define HAS_SETENV_UNSETENV 1" >>confdefs.h fi @@ -16934,22 +15929,18 @@ fi # (should be debugged later) case $host in #( *-pc-windows) : - printf "%s\n" "#define HAS_LOCALE_H 1" >>confdefs.h + $as_echo "#define HAS_LOCALE_H 1" >>confdefs.h ;; #( *) : - ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" -if test "x$ac_cv_header_locale_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" +if test "x$ac_cv_header_locale_h" = xyes; then : ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" -if test "x$ac_cv_func_newlocale" = xyes -then : +if test "x$ac_cv_func_newlocale" = xyes; then : ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale" -if test "x$ac_cv_func_freelocale" = xyes -then : +if test "x$ac_cv_func_freelocale" = xyes; then : ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" -if test "x$ac_cv_func_uselocale" = xyes -then : - printf "%s\n" "#define HAS_LOCALE_H 1" >>confdefs.h +if test "x$ac_cv_func_uselocale" = xyes; then : + $as_echo "#define HAS_LOCALE_H 1" >>confdefs.h fi @@ -16958,22 +15949,19 @@ fi fi fi + ;; esac -ac_fn_c_check_header_compile "$LINENO" "xlocale.h" "ac_cv_header_xlocale_h" "$ac_includes_default" -if test "x$ac_cv_header_xlocale_h" = xyes -then : +ac_fn_c_check_header_mongrel "$LINENO" "xlocale.h" "ac_cv_header_xlocale_h" "$ac_includes_default" +if test "x$ac_cv_header_xlocale_h" = xyes; then : ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" -if test "x$ac_cv_func_newlocale" = xyes -then : +if test "x$ac_cv_func_newlocale" = xyes; then : ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale" -if test "x$ac_cv_func_freelocale" = xyes -then : +if test "x$ac_cv_func_freelocale" = xyes; then : ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" -if test "x$ac_cv_func_uselocale" = xyes -then : - printf "%s\n" "#define HAS_XLOCALE_H 1" >>confdefs.h +if test "x$ac_cv_func_uselocale" = xyes; then : + $as_echo "#define HAS_XLOCALE_H 1" >>confdefs.h fi @@ -16984,41 +15972,38 @@ fi fi + ## strtod_l # Note: not detected on MSVC so hardcoding the result # (should be debugged later) case $host in #( *-pc-windows) : - printf "%s\n" "#define HAS_STRTOD_L 1" >>confdefs.h + $as_echo "#define HAS_STRTOD_L 1" >>confdefs.h ;; #( *) : ac_fn_c_check_func "$LINENO" "strtod_l" "ac_cv_func_strtod_l" -if test "x$ac_cv_func_strtod_l" = xyes -then : - printf "%s\n" "#define HAS_STRTOD_L 1" >>confdefs.h +if test "x$ac_cv_func_strtod_l" = xyes; then : + $as_echo "#define HAS_STRTOD_L 1" >>confdefs.h fi ;; esac ## shared library support -if $supports_shared_libraries -then : +if $supports_shared_libraries; then : case $host in #( *-*-mingw32|*-pc-windows|*-*-cygwin*) : DLLIBS="" ;; #( *) : ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes -then : +if test "x$ac_cv_func_dlopen" = xyes; then : supports_shared_libraries=true DLLIBS="" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17027,64 +16012,61 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $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" = xyes; then : supports_shared_libraries=true DLLIBS="-ldl $DLLIBS" -else $as_nop +else supports_shared_libraries=false fi fi ;; esac -else $as_nop +else supports_shared_libraries=false fi -if $supports_shared_libraries -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Dynamic loading of shared libraries is supported." >&5 -printf "%s\n" "$as_me: Dynamic loading of shared libraries is supported." >&6;} - printf "%s\n" "#define SUPPORT_DYNAMIC_LINKING 1" >>confdefs.h +if $supports_shared_libraries; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic loading of shared libraries is supported." >&5 +$as_echo "$as_me: Dynamic loading of shared libraries is supported." >&6;} + $as_echo "#define SUPPORT_DYNAMIC_LINKING 1" >>confdefs.h -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Dynamic loading of shared libraries is not supported." >&5 -printf "%s\n" "$as_me: Dynamic loading of shared libraries is not supported." >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic loading of shared libraries is not supported." >&5 +$as_echo "$as_me: Dynamic loading of shared libraries is not supported." >&6;} fi ## mmap -ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes -then : +ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = xyes; then : ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes -then : +if test "x$ac_cv_func_mmap" = xyes; then : ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap" -if test "x$ac_cv_func_munmap" = xyes -then : - printf "%s\n" "#define HAS_MMAP 1" >>confdefs.h +if test "x$ac_cv_func_munmap" = xyes; then : + $as_echo "#define HAS_MMAP 1" >>confdefs.h fi @@ -17093,12 +16075,12 @@ fi fi + ## pwrite ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite" -if test "x$ac_cv_func_pwrite" = xyes -then : - printf "%s\n" "#define HAS_PWRITE 1" >>confdefs.h +if test "x$ac_cv_func_pwrite" = xyes; then : + $as_echo "#define HAS_PWRITE 1" >>confdefs.h fi @@ -17115,25 +16097,24 @@ case $ocaml_cv_cc_vendor,$host in #( cc_has_debug_prefix_map=false ;; #( *) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -fdebug-prefix-map" >&5 -printf %s "checking whether the C compiler supports -fdebug-prefix-map... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -fdebug-prefix-map" >&5 +$as_echo_n "checking whether the C compiler supports -fdebug-prefix-map... " >&6; } saved_CFLAGS="$CFLAGS" CFLAGS="-fdebug-prefix-map=old=new $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : cc_has_debug_prefix_map=true - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else cc_has_debug_prefix_map=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$saved_CFLAGS" ;; esac @@ -17145,54 +16126,48 @@ ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_str #include " -if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then : stat_has_ns_precision=true - printf "%s\n" "#define HAS_NANOSECOND_STAT 1" >>confdefs.h + $as_echo "#define HAS_NANOSECOND_STAT 1" >>confdefs.h fi -if ! $stat_has_ns_precision -then : +if ! $stat_has_ns_precision; then : ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" " $ac_includes_default #include " -if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then : stat_has_ns_precision=true - printf "%s\n" "#define HAS_NANOSECOND_STAT 2" >>confdefs.h + $as_echo "#define HAS_NANOSECOND_STAT 2" >>confdefs.h fi fi -if ! $stat_has_ns_precision -then : +if ! $stat_has_ns_precision; then : ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" " $ac_includes_default #include " -if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then : stat_has_ns_precision=true - printf "%s\n" "#define HAS_NANOSECOND_STAT 3" >>confdefs.h + $as_echo "#define HAS_NANOSECOND_STAT 3" >>confdefs.h fi fi -if $stat_has_ns_precision -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: stat supports nanosecond precision" >&5 -printf "%s\n" "$as_me: stat supports nanosecond precision" >&6;} -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: stat does not support nanosecond precision" >&5 -printf "%s\n" "$as_me: stat does not support nanosecond precision" >&6;} +if $stat_has_ns_precision; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: stat supports nanosecond precision" >&5 +$as_echo "$as_me: stat supports nanosecond precision" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: stat does not support nanosecond precision" >&5 +$as_echo "$as_me: stat does not support nanosecond precision" >&6;} fi # Number of arguments of gethostbyname_r @@ -17205,13 +16180,12 @@ 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyname_r() takes" >&5 -printf %s "checking how many arguments gethostbyname_r() takes... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyname_r() takes" >&5 +$as_echo_n "checking how many arguments gethostbyname_r() takes... " >&6; } - if test ${ac_cv_func_which_gethostbyname_r+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_func_which_gethostbyname_r+:} false; then : + $as_echo_n "(cached) " >&6 +else ################################################################ @@ -17231,7 +16205,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { char *name = "www.gnu.org"; @@ -17241,11 +16215,10 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_which_gethostbyname_r=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # # SIX ARGUMENTS @@ -17258,7 +16231,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { char *name = "www.gnu.org"; @@ -17272,11 +16245,10 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_which_gethostbyname_r=six fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -17291,7 +16263,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { char *name = "www.gnu.org"; @@ -17305,11 +16277,10 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_which_gethostbyname_r=five fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -17324,7 +16295,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { char *name = "www.gnu.org"; @@ -17336,11 +16307,10 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_which_gethostbyname_r=three fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -17352,44 +16322,44 @@ fi case "$ac_cv_func_which_gethostbyname_r" in three|five|six) -printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h +$as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h ;; esac case "$ac_cv_func_which_gethostbyname_r" in three) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: three" >&5 -printf "%s\n" "three" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: three" >&5 +$as_echo "three" >&6; } -printf "%s\n" "#define HAVE_FUNC_GETHOSTBYNAME_R_3 1" >>confdefs.h +$as_echo "#define HAVE_FUNC_GETHOSTBYNAME_R_3 1" >>confdefs.h ;; five) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: five" >&5 -printf "%s\n" "five" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: five" >&5 +$as_echo "five" >&6; } -printf "%s\n" "#define HAVE_FUNC_GETHOSTBYNAME_R_5 1" >>confdefs.h +$as_echo "#define HAVE_FUNC_GETHOSTBYNAME_R_5 1" >>confdefs.h ;; six) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: six" >&5 -printf "%s\n" "six" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: six" >&5 +$as_echo "six" >&6; } -printf "%s\n" "#define HAVE_FUNC_GETHOSTBYNAME_R_6 1" >>confdefs.h +$as_echo "#define HAVE_FUNC_GETHOSTBYNAME_R_6 1" >>confdefs.h ;; no) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot find function declaration in netdb.h" >&5 -printf "%s\n" "cannot find function declaration in netdb.h" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot find function declaration in netdb.h" >&5 +$as_echo "cannot find function declaration in netdb.h" >&6; } ;; unknown) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: can't tell" >&5 -printf "%s\n" "can't tell" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't tell" >&5 +$as_echo "can't tell" >&6; } ;; *) @@ -17408,14 +16378,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ac_cv_func_which_gethostbyname_r in #( six) : - printf "%s\n" "#define HAS_GETHOSTBYNAME_R 6" >>confdefs.h + $as_echo "#define HAS_GETHOSTBYNAME_R 6" >>confdefs.h ;; #( five) : - printf "%s\n" "#define HAS_GETHOSTBYNAME_R 5" >>confdefs.h + $as_echo "#define HAS_GETHOSTBYNAME_R 5" >>confdefs.h ;; #( three) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OCaml does not support this variant" >&5 -printf "%s\n" "$as_me: WARNING: OCaml does not support this variant" >&2;} ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OCaml does not support this variant" >&5 +$as_echo "$as_me: WARNING: OCaml does not support this variant" >&2;} ;; #( *) : ;; esac @@ -17430,13 +16400,12 @@ 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyaddr_r() takes" >&5 -printf %s "checking how many arguments gethostbyaddr_r() takes... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyaddr_r() takes" >&5 +$as_echo_n "checking how many arguments gethostbyaddr_r() takes... " >&6; } - if test ${ac_cv_func_which_gethostbyaddr_r+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_func_which_gethostbyaddr_r+:} false; then : + $as_echo_n "(cached) " >&6 +else ################################################################ @@ -17456,7 +16425,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { char *addr = "192.168.1.1"; @@ -17466,11 +16435,10 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_which_gethostbyaddr_r=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # # EIGHT ARGUMENTS @@ -17483,7 +16451,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { char *addr = "192.168.1.1"; @@ -17498,11 +16466,10 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_which_gethostbyaddr_r=eight fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -17517,7 +16484,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { char *addr = "192.168.1.1"; @@ -17532,11 +16499,10 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_which_gethostbyaddr_r=seven fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -17548,36 +16514,36 @@ fi case "$ac_cv_func_which_gethostbyaddr_r" in seven|eight) -printf "%s\n" "#define HAVE_GETHOSTBYADDR_R 1" >>confdefs.h +$as_echo "#define HAVE_GETHOSTBYADDR_R 1" >>confdefs.h ;; esac case "$ac_cv_func_which_gethostbyaddr_r" in eight) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: eight" >&5 -printf "%s\n" "eight" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: eight" >&5 +$as_echo "eight" >&6; } -printf "%s\n" "#define HAVE_FUNC_GETHOSTBYADDR_R_8 1" >>confdefs.h +$as_echo "#define HAVE_FUNC_GETHOSTBYADDR_R_8 1" >>confdefs.h ;; seven) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: seven" >&5 -printf "%s\n" "seven" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: seven" >&5 +$as_echo "seven" >&6; } -printf "%s\n" "#define HAVE_FUNC_GETHOSTBYADDR_R_7 1" >>confdefs.h +$as_echo "#define HAVE_FUNC_GETHOSTBYADDR_R_7 1" >>confdefs.h ;; no) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot find function declaration in netdb.h" >&5 -printf "%s\n" "cannot find function declaration in netdb.h" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot find function declaration in netdb.h" >&5 +$as_echo "cannot find function declaration in netdb.h" >&6; } ;; unknown) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: can't tell" >&5 -printf "%s\n" "can't tell" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't tell" >&5 +$as_echo "can't tell" >&6; } ;; *) @@ -17596,10 +16562,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ac_cv_func_which_gethostbyaddr_r in #( eight) : - printf "%s\n" "#define HAS_GETHOSTBYADDR_R 8" >>confdefs.h + $as_echo "#define HAS_GETHOSTBYADDR_R 8" >>confdefs.h ;; #( seven) : - printf "%s\n" "#define HAS_GETHOSTBYADDR_R 7" >>confdefs.h + $as_echo "#define HAS_GETHOSTBYADDR_R 7" >>confdefs.h ;; #( *) : ;; @@ -17608,9 +16574,8 @@ esac ## mkstemp ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" -if test "x$ac_cv_func_mkstemp" = xyes -then : - printf "%s\n" "#define HAS_MKSTEMP 1" >>confdefs.h +if test "x$ac_cv_func_mkstemp" = xyes; then : + $as_echo "#define HAS_MKSTEMP 1" >>confdefs.h fi @@ -17618,9 +16583,8 @@ fi ## nice ac_fn_c_check_func "$LINENO" "nice" "ac_cv_func_nice" -if test "x$ac_cv_func_nice" = xyes -then : - printf "%s\n" "#define HAS_NICE 1" >>confdefs.h +if test "x$ac_cv_func_nice" = xyes; then : + $as_echo "#define HAS_NICE 1" >>confdefs.h fi @@ -17628,9 +16592,8 @@ fi ## dup3 ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" -if test "x$ac_cv_func_dup3" = xyes -then : - printf "%s\n" "#define HAS_DUP3 1" >>confdefs.h +if test "x$ac_cv_func_dup3" = xyes; then : + $as_echo "#define HAS_DUP3 1" >>confdefs.h fi @@ -17638,9 +16601,8 @@ fi ## pipe2 ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" -if test "x$ac_cv_func_pipe2" = xyes -then : - printf "%s\n" "#define HAS_PIPE2 1" >>confdefs.h +if test "x$ac_cv_func_pipe2" = xyes; then : + $as_echo "#define HAS_PIPE2 1" >>confdefs.h fi @@ -17648,9 +16610,8 @@ fi ## accept4 ac_fn_c_check_func "$LINENO" "accept4" "ac_cv_func_accept4" -if test "x$ac_cv_func_accept4" = xyes -then : - printf "%s\n" "#define HAS_ACCEPT4 1" >>confdefs.h +if test "x$ac_cv_func_accept4" = xyes; then : + $as_echo "#define HAS_ACCEPT4 1" >>confdefs.h fi @@ -17658,24 +16619,21 @@ fi ## getauxval ac_fn_c_check_func "$LINENO" "getauxval" "ac_cv_func_getauxval" -if test "x$ac_cv_func_getauxval" = xyes -then : - printf "%s\n" "#define HAS_GETAUXVAL 1" >>confdefs.h +if test "x$ac_cv_func_getauxval" = xyes; then : + $as_echo "#define HAS_GETAUXVAL 1" >>confdefs.h fi ## shmat -ac_fn_c_check_header_compile "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_shm_h" = xyes -then : +ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_shm_h" = xyes; then : - printf "%s\n" "#define HAS_SYS_SHM_H 1" >>confdefs.h + $as_echo "#define HAS_SYS_SHM_H 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" -if test "x$ac_cv_func_shmat" = xyes -then : - printf "%s\n" "#define HAS_SHMAT 1" >>confdefs.h +if test "x$ac_cv_func_shmat" = xyes; then : + $as_echo "#define HAS_SHMAT 1" >>confdefs.h fi @@ -17683,28 +16641,25 @@ fi fi + ## execvpe ac_fn_c_check_func "$LINENO" "execvpe" "ac_cv_func_execvpe" -if test "x$ac_cv_func_execvpe" = xyes -then : - printf "%s\n" "#define HAS_EXECVPE 1" >>confdefs.h +if test "x$ac_cv_func_execvpe" = xyes; then : + $as_echo "#define HAS_EXECVPE 1" >>confdefs.h fi ## posix_spawn -ac_fn_c_check_header_compile "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default" -if test "x$ac_cv_header_spawn_h" = xyes -then : +ac_fn_c_check_header_mongrel "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default" +if test "x$ac_cv_header_spawn_h" = xyes; then : ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" -if test "x$ac_cv_func_posix_spawn" = xyes -then : +if test "x$ac_cv_func_posix_spawn" = xyes; then : ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp" -if test "x$ac_cv_func_posix_spawnp" = xyes -then : - printf "%s\n" "#define HAS_POSIX_SPAWN 1" >>confdefs.h +if test "x$ac_cv_func_posix_spawnp" = xyes; then : + $as_echo "#define HAS_POSIX_SPAWN 1" >>confdefs.h fi @@ -17713,19 +16668,18 @@ fi fi + ## ffs or _BitScanForward ac_fn_c_check_func "$LINENO" "ffs" "ac_cv_func_ffs" -if test "x$ac_cv_func_ffs" = xyes -then : - printf "%s\n" "#define HAS_FFS 1" >>confdefs.h +if test "x$ac_cv_func_ffs" = xyes; then : + $as_echo "#define HAS_FFS 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "_BitScanForward" "ac_cv_func__BitScanForward" -if test "x$ac_cv_func__BitScanForward" = xyes -then : - printf "%s\n" "#define HAS_BITSCANFORWARD 1" >>confdefs.h +if test "x$ac_cv_func__BitScanForward" = xyes; then : + $as_echo "#define HAS_BITSCANFORWARD 1" >>confdefs.h fi @@ -17735,18 +16689,17 @@ fi case $enable_debugger in #( no) : with_debugger="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: replay debugger disabled" >&5 -printf "%s\n" "$as_me: replay debugger disabled" >&6;} ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: replay debugger disabled" >&5 +$as_echo "$as_me: replay debugger disabled" >&6;} ;; #( *) : - if $sockets -then : + if $sockets; then : with_debugger="ocamldebugger" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: replay debugger supported" >&5 -printf "%s\n" "$as_me: replay debugger supported" >&6;} -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: replay debugger supported" >&5 +$as_echo "$as_me: replay debugger supported" >&6;} +else with_debugger="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: replay debugger not supported" >&5 -printf "%s\n" "$as_me: replay debugger not supported" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: replay debugger not supported" >&5 +$as_echo "$as_me: replay debugger not supported" >&6;} fi ;; esac @@ -17761,19 +16714,19 @@ esac ## Determine if system stack overflows can be detected -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stack overflows can be detected" >&5 -printf %s "checking whether stack overflows can be detected... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stack overflows can be detected" >&5 +$as_echo_n "checking whether stack overflows can be detected... " >&6; } case $arch,$system in #( i386,linux_elf|amd64,linux|amd64,macosx \ |amd64,openbsd|i386,bsd_elf|arm64,linux|arm64,macosx) : - printf "%s\n" "#define HAS_STACK_OVERFLOW_DETECTION 1" >>confdefs.h + $as_echo "#define HAS_STACK_OVERFLOW_DETECTION 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } ;; #( *) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac ## Determine if the POSIX threads library is supported @@ -17784,15 +16737,15 @@ case $enable_systhreads,$enable_unix_lib in #( as_fn_error $? "the Win32/POSIX threads library requires the unix library" "$LINENO" 5 ;; #( no,*|*,no) : systhread_support=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the Win32/POSIX threads library is disabled" >&5 -printf "%s\n" "$as_me: the Win32/POSIX threads library is disabled" >&6;} ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: the Win32/POSIX threads library is disabled" >&5 +$as_echo "$as_me: the Win32/POSIX threads library is disabled" >&6;} ;; #( *) : case $host in #( *-*-mingw32|*-pc-windows) : systhread_support=true otherlibraries="$otherlibraries systhreads" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the Win32 threads library is supported" >&5 -printf "%s\n" "$as_me: the Win32 threads library is supported" >&6;} ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: the Win32 threads library is supported" >&5 +$as_echo "$as_me: the Win32 threads library is supported" >&6;} ;; #( *) : @@ -17817,37 +16770,38 @@ if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" - if test "x$PTHREAD_CC" != "x" -then : + if test "x$PTHREAD_CC" != "x"; then : CC="$PTHREAD_CC" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 -printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 +$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } 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 pthread_join (); int -main (void) +main () { return pthread_join (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -printf "%s\n" "$ax_pthread_ok" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" @@ -17925,12 +16879,11 @@ case $host_os in _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 -printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} + $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 +$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} fi -rm -rf conftest* +rm -f conftest* ;; @@ -17950,12 +16903,11 @@ esac # Are we compiling with Clang? -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 -printf %s "checking whether $CC is Clang... " >&6; } -if test ${ax_cv_PTHREAD_CLANG+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 +$as_echo_n "checking whether $CC is Clang... " >&6; } +if ${ax_cv_PTHREAD_CLANG+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then @@ -17968,17 +16920,16 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 -then : + $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : ax_cv_PTHREAD_CLANG=yes fi -rm -rf conftest* +rm -f conftest* fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 -printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 +$as_echo "$ax_cv_PTHREAD_CLANG" >&6; } ax_pthread_clang="$ax_cv_PTHREAD_CLANG" @@ -17992,15 +16943,13 @@ ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC -if test "x$GCC" = "xyes" -then : +if test "x$GCC" = "xyes"; then : ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags" fi # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first -if test "x$ax_pthread_clang" = "xyes" -then : +if test "x$ax_pthread_clang" = "xyes"; then : ax_pthread_flags="-pthread,-lpthread -pthread" fi @@ -18022,10 +16971,9 @@ case $host_os in ax_pthread_check_macro="--" ;; esac -if test "x$ax_pthread_check_macro" = "x--" -then : +if test "x$ax_pthread_check_macro" = "x--"; then : ax_pthread_check_cond=0 -else $as_nop +else ax_pthread_check_cond="!defined($ax_pthread_check_macro)" fi @@ -18035,32 +16983,31 @@ for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -printf %s "checking whether pthreads work without any flags... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 -printf %s "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 +$as_echo_n "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } ;; -*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 -printf %s "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 +$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ax_pthread_config+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ax_pthread_config+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else @@ -18068,15 +17015,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18088,16 +17031,15 @@ fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 -printf "%s\n" "$ax_pthread_config" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 +$as_echo "$ax_pthread_config" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ax_pthread_config" = "xno" -then : + if test "x$ax_pthread_config" = "xno"; then : continue fi PTHREAD_CFLAGS="`pthread-config --cflags`" @@ -18105,8 +17047,8 @@ fi ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 -printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 +$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac @@ -18141,7 +17083,7 @@ printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } } static void *start_routine(void *a) { return a; } int -main (void) +main () { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); @@ -18153,20 +17095,18 @@ pthread_t th; pthread_attr_t attr; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -printf "%s\n" "$ax_pthread_ok" >&6; } - if test "x$ax_pthread_ok" = "xyes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xyes"; then : break fi @@ -18212,12 +17152,11 @@ if test "x$ax_pthread_clang" = "xyes"; then # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 -printf %s "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } -if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 +$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } +if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one @@ -18229,8 +17168,7 @@ else $as_nop ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do - if test "x$ax_pthread_try" = "xunknown" -then : + if test "x$ax_pthread_try" = "xunknown"; then : break fi CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" @@ -18239,35 +17177,32 @@ fi /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_link="$ax_pthread_2step_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" - if test "x$ax_pthread_try" = "x" -then : + if test "x$ax_pthread_try" = "x"; then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 -printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 +$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; @@ -18286,53 +17221,51 @@ if test "x$ax_pthread_ok" = "xyes"; then LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -printf %s "checking for joinable pthread attribute... " >&6; } -if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } +if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { int attr = $ax_pthread_attr; return attr /* ; */ ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 -printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 +$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ - test "x$ax_pthread_joinable_attr_defined" != "xyes" -then : + test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : -printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR +_ACEOF ax_pthread_joinable_attr_defined=yes fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 -printf %s "checking whether more special flags are required for pthreads... " >&6; } -if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 +$as_echo_n "checking whether more special flags are required for pthreads... " >&6; } +if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) @@ -18341,26 +17274,24 @@ else $as_nop esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 -printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 +$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ - test "x$ax_pthread_special_flags_added" != "xyes" -then : + test "x$ax_pthread_special_flags_added" != "xyes"; then : PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 -printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } -if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 +$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } +if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { int i = PTHREAD_PRIO_INHERIT; return i; @@ -18368,23 +17299,21 @@ int i = PTHREAD_PRIO_INHERIT; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_PRIO_INHERIT=yes -else $as_nop +else ax_cv_PTHREAD_PRIO_INHERIT=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 -printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 +$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ - test "x$ax_pthread_prio_inherit_defined" != "xyes" -then : + test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : -printf "%s\n" "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h +$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h ax_pthread_prio_inherit_defined=yes @@ -18402,8 +17331,7 @@ fi #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : - if as_fn_executable_p ${CC}_r -then : + if as_fn_executable_p ${CC}_r; then : PTHREAD_CC="${CC}_r" fi ;; #( *) : @@ -18411,12 +17339,11 @@ fi ;; #( do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_PTHREAD_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PTHREAD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else @@ -18424,15 +17351,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -18443,11 +17366,11 @@ fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -printf "%s\n" "$PTHREAD_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -18475,16 +17398,15 @@ if test "x$ax_pthread_ok" = "xyes"; then systhread_support=true otherlibraries="$otherlibraries systhreads" common_cflags="$common_cflags $PTHREAD_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the POSIX threads library is supported" >&5 -printf "%s\n" "$as_me: the POSIX threads library is supported" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: the POSIX threads library is supported" >&5 +$as_echo "$as_me: the POSIX threads library is supported" >&6;} saved_CFLAGS="$CFLAGS" saved_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$LIBS $PTHREAD_LIBS" ac_fn_c_check_func "$LINENO" "sigwait" "ac_cv_func_sigwait" -if test "x$ac_cv_func_sigwait" = xyes -then : - printf "%s\n" "#define HAS_SIGWAIT 1" >>confdefs.h +if test "x$ac_cv_func_sigwait" = xyes; then : + $as_echo "#define HAS_SIGWAIT 1" >>confdefs.h fi @@ -18493,13 +17415,12 @@ fi : else ax_pthread_ok=no - if test x"$enable_systhreads" = "xyes" -then : + if test x"$enable_systhreads" = "xyes"; then : as_fn_error $? "the POSIX thread library is not available" "$LINENO" 5 -else $as_nop +else systhread_support=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the POSIX threads library is not supported" >&5 -printf "%s\n" "$as_me: the POSIX threads library is not supported" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: the POSIX threads library is not supported" >&5 +$as_echo "$as_me: the POSIX threads library is not supported" >&6;} fi fi ac_ext=c @@ -18515,15 +17436,14 @@ esac ## Does the assembler support debug prefix map and CFI directives as_has_debug_prefix_map=false asm_cfi_supported=false -if $native_compiler -then : +if $native_compiler; then : case $host in #( *-*-mingw32|*-pc-windows) : ;; #( *) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the assembler supports --debug-prefix-map" >&5 -printf %s "checking whether the assembler supports --debug-prefix-map... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the assembler supports --debug-prefix-map" >&5 +$as_echo_n "checking whether the assembler supports --debug-prefix-map... " >&6; } saved_CC="$CC" @@ -18553,17 +17473,16 @@ camlPervasives__loop_1128: .loc 1 193 _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : as_has_debug_prefix_map=true - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else ashas_debug_prefix_map=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Restore the content of confdefs.h @@ -18577,14 +17496,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the assembler supports CFI directives" >&5 -printf %s "checking whether the assembler supports CFI directives... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the assembler supports CFI directives" >&5 +$as_echo_n "checking whether the assembler supports CFI directives... " >&6; } - if test x"$enable_cfi" = "xno" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 -printf "%s\n" "disabled" >&6; } -else $as_nop + if test x"$enable_cfi" = "xno"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +else saved_CC="$CC" saved_CFLAGS="$CFLAGS" @@ -18616,18 +17534,16 @@ camlPervasives__loop_1128: .cfi_endproc _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : aspp_ok=true -else $as_nop +else aspp_ok=false fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$AS" = "$ASPP" -then : + if test "$AS" = "$ASPP"; then : as_ok="$aspp_ok" -else $as_nop +else CC="$AS" ac_compile='$CC $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18641,13 +17557,12 @@ camlPervasives__loop_1128: .cfi_endproc _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : as_ok=true -else $as_nop +else as_ok=false fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -18661,24 +17576,22 @@ fi LIBS="$saved_LIBS" - if $aspp_ok && $as_ok -then : + if $aspp_ok && $as_ok; then : asm_cfi_supported=true - printf "%s\n" "#define ASM_CFI_SUPPORTED 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - if test x"$enable_cfi" = "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: requested but not available + $as_echo "#define ASM_CFI_SUPPORTED 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + if test x"$enable_cfi" = "xyes"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: requested but not available as_fn_error $? "exiting" "$LINENO" 5" >&5 -printf "%s\n" "requested but not available +$as_echo "requested but not available as_fn_error $? "exiting" "$LINENO" 5" >&6; } -else $as_nop +else asm_cfi_supported=false - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi @@ -18688,52 +17601,47 @@ fi ## Frame pointers -if test x"$enable_frame_pointers" = "xyes" -then : +if test x"$enable_frame_pointers" = "xyes"; then : case "$host,$cc_basename" in #( x86_64-*-linux*,gcc*|x86_64-*-linux*,clang*) : common_cflags="$common_cflags -g -fno-omit-frame-pointer" frame_pointers=true - printf "%s\n" "#define WITH_FRAME_POINTERS 1" >>confdefs.h + $as_echo "#define WITH_FRAME_POINTERS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using frame pointers" >&5 -printf "%s\n" "$as_me: using frame pointers" >&6;} ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: using frame pointers" >&5 +$as_echo "$as_me: using frame pointers" >&6;} ;; #( *) : as_fn_error $? "frame pointers not supported on this platform" "$LINENO" 5 ;; esac -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not using frame pointers" >&5 -printf "%s\n" "$as_me: not using frame pointers" >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: not using frame pointers" >&5 +$as_echo "$as_me: not using frame pointers" >&6;} frame_pointers=false fi ## CPP mangling -if test x"$enable_cpp_mangling" = "xyes" -then : +if test x"$enable_cpp_mangling" = "xyes"; then : cpp_mangling=true - printf "%s\n" "#define WITH_CPP_MANGLING 1" >>confdefs.h + $as_echo "#define WITH_CPP_MANGLING 1" >>confdefs.h -else $as_nop +else cpp_mangling=false fi ## No naked pointers -if test x"$enable_naked_pointers" = "xno" -then : +if test x"$enable_naked_pointers" = "xno" ; then : naked_pointers=false - printf "%s\n" "#define NO_NAKED_POINTERS 1" >>confdefs.h + $as_echo "#define NO_NAKED_POINTERS 1" >>confdefs.h -else $as_nop +else naked_pointers=true fi -if test x"$enable_naked_pointers_checker" = "xyes" -then : - if test x"$enable_naked_pointers" = "xno" -then : +if test x"$enable_naked_pointers_checker" = "xyes" ; then : + if test x"$enable_naked_pointers" = "xno" ; then : as_fn_error $? "--enable-naked-pointers-checker and --disable-naked-pointers are incompatible" "$LINENO" 5 fi case "$arch","$system" in #( @@ -18742,7 +17650,7 @@ fi |amd64,freebsd|amd64,solaris \ |arm64,linux|arm64,macosx) : naked_pointers_checker=true - printf "%s\n" "#define NAKED_POINTERS_CHECKER 1" >>confdefs.h + $as_echo "#define NAKED_POINTERS_CHECKER 1" >>confdefs.h ;; #( *) : as_fn_error $? "naked pointers checker not supported on this platform" "$LINENO" 5 @@ -18750,19 +17658,18 @@ fi *) : ;; esac -else $as_nop +else naked_pointers_checker=false fi ## Check for mmap support for huge pages and contiguous heap - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mmap supports huge pages" >&5 -printf %s "checking whether mmap supports huge pages... " >&6; } - if test "$cross_compiling" = yes -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no assumed" >&5 -printf "%s\n" "no assumed" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap supports huge pages" >&5 +$as_echo_n "checking whether mmap supports huge pages... " >&6; } + if test "$cross_compiling" = yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no assumed" >&5 +$as_echo "no assumed" >&6; } +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18804,17 +17711,18 @@ int main (int argc, char *argv[]){ } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : - printf "%s\n" "#define HAS_HUGE_PAGES 1" >>confdefs.h +if ac_fn_c_try_run "$LINENO"; then : + $as_echo "#define HAS_HUGE_PAGES 1" >>confdefs.h - printf "%s\n" "#define HUGE_PAGE_SIZE (4 * 1024 * 1024)" >>confdefs.h + cat >>confdefs.h <<_ACEOF +#define HUGE_PAGE_SIZE (4 * 1024 * 1024) +_ACEOF - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $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 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -18822,40 +17730,37 @@ fi -printf "%s\n" "#define PROFINFO_WIDTH $profinfo_width" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PROFINFO_WIDTH $profinfo_width +_ACEOF -if $profinfo -then : - printf "%s\n" "#define WITH_PROFINFO 1" >>confdefs.h +if $profinfo; then : + $as_echo "#define WITH_PROFINFO 1" >>confdefs.h fi -if test x"$enable_installing_bytecode_programs" = "xno" -then : +if test x"$enable_installing_bytecode_programs" = "xno"; then : install_bytecode_programs=false -else $as_nop +else install_bytecode_programs=true fi -if test x"$enable_installing_source_artifacts" = "xno" -then : +if test x"$enable_installing_source_artifacts" = "xno"; then : install_source_artifacts=false -else $as_nop +else install_source_artifacts=true fi -if test x"$enable_ocamldoc" = "xno" -then : +if test x"$enable_ocamldoc" = "xno"; then : ocamldoc="" -else $as_nop +else ocamldoc=ocamldoc fi documentation_tool_cmd='' # Check whether --with-odoc was given. -if test ${with_odoc+y} -then : +if test "${with_odoc+set}" = set; then : withval=$with_odoc; case $withval in #( yes) : documentation_tool='odoc' ;; #( @@ -18865,13 +17770,12 @@ then : documentation_tool_cmd="$withval" documentation_tool='odoc' ;; esac -else $as_nop +else documentation_tool='ocamldoc' fi if test "x$documentation_tool_cmd" = 'x' - documentation_tool_cmd="$documentation_tool" -then : + documentation_tool_cmd="$documentation_tool"; then : fi @@ -18884,92 +17788,84 @@ case $enable_ocamltest,true in #( ocamltest='' ;; esac -if test x"$enable_flambda" = "xyes" -then : +if test x"$enable_flambda" = "xyes"; then : flambda=true flambda2=false - if test x"$enable_flambda2" = "xyes" -then : + if test x"$enable_flambda2" = "xyes"; then : as_fn_error $? "please enable only one of Flambda 1 and Flambda 2" "$LINENO" 5 fi -else $as_nop +else flambda=false fi -if test x"$enable_flambda2" = "xyes" -then : +if test x"$enable_flambda2" = "xyes"; then : flambda2=true flambda=false -else $as_nop +else flambda2=false fi -if test x"$enable_flambda_invariants" = "xyes" -then : +if test x"$enable_flambda_invariants" = "xyes"; then : flambda_invariants=true -else $as_nop +else flambda_invariants=false fi -if test x"$enable_cmm_invariants" = "xyes" -then : +if test x"$enable_cmm_invariants" = "xyes"; then : cmm_invariants=true -else $as_nop +else cmm_invariants=false fi -if test x"$enable_cmm_invariants" = "xyes" -then : +if test x"$enable_cmm_invariants" = "xyes"; then : cmm_invariants=true -else $as_nop +else cmm_invariants=false fi -if test x"$enable_flat_float_array" = "xno" -then : +if test x"$enable_flat_float_array" = "xno"; then : flat_float_array=false -else $as_nop - printf "%s\n" "#define FLAT_FLOAT_ARRAY 1" >>confdefs.h +else + $as_echo "#define FLAT_FLOAT_ARRAY 1" >>confdefs.h flat_float_array=true fi -if test x"$enable_function_sections" = "xno" -then : +if test x"$enable_function_sections" = "xno"; then : function_sections=false -else $as_nop +else case $arch in #( amd64|i386|arm64) : # not supported on arm32, see issue #9124. case $target in #( *-cygwin*|*-mingw*|*-windows|*-apple-darwin*) : function_sections=false; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No support for function sections on $target." >&5 -printf "%s\n" "$as_me: No support for function sections on $target." >&6;} ;; #( + { $as_echo "$as_me:${as_lineno-$LINENO}: No support for function sections on $target." >&5 +$as_echo "$as_me: No support for function sections on $target." >&6;} ;; #( *) : case $ocaml_cv_cc_vendor in #( gcc-0123-*|gcc-4-01234567) : function_sections=false; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Function sections are not + { $as_echo "$as_me:${as_lineno-$LINENO}: Function sections are not supported in GCC prior to version 4.8." >&5 -printf "%s\n" "$as_me: Function sections are not +$as_echo "$as_me: Function sections are not supported in GCC prior to version 4.8." >&6;} ;; #( clang-012-*|clang-3-01234) : function_sections=false; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Function sections are not supported + { $as_echo "$as_me:${as_lineno-$LINENO}: Function sections are not supported in Clang prior to version 3.5." >&5 -printf "%s\n" "$as_me: Function sections are not supported +$as_echo "$as_me: Function sections are not supported in Clang prior to version 3.5." >&6;} ;; #( gcc-*|clang-*) : function_sections=true; internal_cflags="$internal_cflags -ffunction-sections"; - printf "%s\n" "#define FUNCTION_SECTIONS 1" >>confdefs.h + $as_echo "#define FUNCTION_SECTIONS 1" >>confdefs.h ;; #( *) : function_sections=false; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Function sections are not supported by + { $as_echo "$as_me:${as_lineno-$LINENO}: Function sections are not supported by $ocaml_cv_cc_vendor." >&5 -printf "%s\n" "$as_me: Function sections are not supported by +$as_echo "$as_me: Function sections are not supported by $ocaml_cv_cc_vendor." >&6;} ;; #( *) : ;; @@ -18980,14 +17876,12 @@ esac ;; #( *) : function_sections=false ;; esac; - if test x"$function_sections" = "xfalse" -then : - if test x"$enable_function_sections" = "xyes" -then : + if test x"$function_sections" = "xfalse"; then : + if test x"$enable_function_sections" = "xyes"; then : as_fn_error $? "Function sections are not supported." "$LINENO" 5 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling function sections." >&5 -printf "%s\n" "$as_me: Disabling function sections." >&6;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling function sections." >&5 +$as_echo "$as_me: Disabling function sections." >&6;} fi fi fi @@ -19008,41 +17902,36 @@ esac ;; #( ;; esac -if test x"$probes" = "xfalse" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling tracing probes: no support on $target." >&5 -printf "%s\n" "$as_me: Disabling tracing probes: no support on $target." >&6;} +if test x"$probes" = "xfalse"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling tracing probes: no support on $target." >&5 +$as_echo "$as_me: Disabling tracing probes: no support on $target." >&6;} fi -if test x"$with_afl" = "xyes" -then : +if test x"$with_afl" = "xyes"; then : afl=true -else $as_nop +else afl=false fi -if test x"$enable_force_safe_string" = "xno" -then : +if test x"$enable_force_safe_string" = "xno"; then : force_safe_string=false -else $as_nop - printf "%s\n" "#define CAML_SAFE_STRING 1" >>confdefs.h +else + $as_echo "#define CAML_SAFE_STRING 1" >>confdefs.h force_safe_string=true fi -if test x"$DEFAULT_STRING" = "xunsafe" -then : +if test x"$DEFAULT_STRING" = "xunsafe"; then : default_safe_string=false -else $as_nop +else default_safe_string=true fi -if test x"$enable_stack_allocation" = "xyes" -then : - printf "%s\n" "#define STACK_ALLOCATION 1" >>confdefs.h +if test x"$enable_stack_allocation" = "xyes"; then : + $as_echo "#define STACK_ALLOCATION 1" >>confdefs.h stack_allocation=true -else $as_nop +else stack_allocation=false fi @@ -19064,13 +17953,11 @@ case $host in #( nativecclibs="$cclibs $DLLIBS" ;; esac -if test x"$libdir" = x'${exec_prefix}/lib' -then : +if test x"$libdir" = x'${exec_prefix}/lib'; then : libdir="$libdir"/ocaml fi -if test x"$mandir" = x'${datarootdir}/man' -then : +if test x"$mandir" = x'${datarootdir}/man'; then : mandir='${prefix}/man' fi @@ -19089,8 +17976,7 @@ esac ;; #( esac # Define default prefix correctly for the different Windows ports -if test x"$prefix" = "xNONE" -then : +if test x"$prefix" = "xNONE"; then : case $host in #( i686-w64-mingw32) : prefix='C:/ocamlmgw' ;; #( @@ -19103,10 +17989,9 @@ then : *) : ;; esac -else $as_nop +else if test x"$unix_or_win32" = "xwin32" \ - && test "$host_vendor-$host_os" != "$build_vendor-$build_os" -then : + && test "$host_vendor-$host_os" != "$build_vendor-$build_os" ; then : case $build in #( *-pc-cygwin) : prefix="$(LC_ALL=C.UTF-8 cygpath -m "$prefix")" ;; #( @@ -19121,36 +18006,35 @@ fi # (all this should be understood and fixed) case $host in #( *-*-mingw32) : - printf "%s\n" "#define HAS_BROKEN_PRINTF 1" >>confdefs.h + $as_echo "#define HAS_BROKEN_PRINTF 1" >>confdefs.h - printf "%s\n" "#define HAS_STRERROR 1" >>confdefs.h + $as_echo "#define HAS_STRERROR 1" >>confdefs.h - printf "%s\n" "#define HAS_IPV6 1" >>confdefs.h + $as_echo "#define HAS_IPV6 1" >>confdefs.h - printf "%s\n" "#define HAS_NICE 1" >>confdefs.h + $as_echo "#define HAS_NICE 1" >>confdefs.h ;; #( *-pc-windows) : - printf "%s\n" "#define HAS_BROKEN_PRINTF 1" >>confdefs.h + $as_echo "#define HAS_BROKEN_PRINTF 1" >>confdefs.h - printf "%s\n" "#define HAS_STRERROR 1" >>confdefs.h + $as_echo "#define HAS_STRERROR 1" >>confdefs.h - printf "%s\n" "#define HAS_IPV6 1" >>confdefs.h + $as_echo "#define HAS_IPV6 1" >>confdefs.h - printf "%s\n" "#define HAS_NICE 1" >>confdefs.h + $as_echo "#define HAS_NICE 1" >>confdefs.h ;; #( *-*-solaris*) : # This is required as otherwise floats are printed # as "Infinity" and "Inf" instead of the expected "inf" - printf "%s\n" "#define HAS_BROKEN_PRINTF 1" >>confdefs.h + $as_echo "#define HAS_BROKEN_PRINTF 1" >>confdefs.h ;; #( *) : ;; esac -if test x"$enable_stdlib_manpages" != "xno" -then : +if test x"$enable_stdlib_manpages" != "xno"; then : stdlib_manpages=true -else $as_nop +else stdlib_manpages=false fi @@ -19184,8 +18068,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_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) ;; #( @@ -19215,15 +18099,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ + 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 if test "x$cache_file" != "x/dev/null"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -printf "%s\n" "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -19237,8 +18121,8 @@ printf "%s\n" "$as_me: updating cache $cache_file" >&6;} fi fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} + { $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 @@ -19255,7 +18139,7 @@ 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=`printf "%s\n" "$ac_i" | sed "$ac_script"` + 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" @@ -19271,8 +18155,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} +{ $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 @@ -19295,16 +18179,14 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +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 $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -19314,46 +18196,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# 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 ${PATH_SEPARATOR+false} :; then +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 || @@ -19362,6 +18244,13 @@ if ${PATH_SEPARATOR+false} :; then 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. as_myself= case $0 in #(( @@ -19370,12 +18259,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -19387,10 +18272,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $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] @@ -19403,14 +18308,13 @@ 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 - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $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. @@ -19437,20 +18341,18 @@ 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 : +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_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -19462,13 +18364,12 @@ fi # as_fn_append # 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 : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -19499,7 +18400,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -19521,10 +18422,6 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -19538,12 +18435,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -19585,7 +18476,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -19594,7 +18485,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -19657,7 +18548,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by OCaml $as_me 4.14.0+jst, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -19720,16 +18611,14 @@ Report bugs to . OCaml home page: ." _ACEOF -ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` -ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config='$ac_cs_config_escaped' +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ OCaml config.status 4.14.0+jst -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -19768,15 +18657,15 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - printf "%s\n" "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; + $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=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -19784,7 +18673,7 @@ do --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -19793,7 +18682,7 @@ do as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - printf "%s\n" "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -19821,7 +18710,7 @@ 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 - \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -19835,7 +18724,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - printf "%s\n" "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF @@ -20156,9 +19045,9 @@ done # 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+y} || CONFIG_FILES=$config_files - test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers - test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands + 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 @@ -20494,7 +19383,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -20502,17 +19391,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} + { $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=`printf "%s\n" "$configure_input" | + ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -20529,7 +19418,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$ac_file" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -20553,9 +19442,9 @@ printf "%s\n" X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + 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/ ;; @@ -20612,8 +19501,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $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=' @@ -20656,9 +19545,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $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 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$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 "$ac_tmp/stdin" @@ -20674,27 +19563,27 @@ which seems to be undefined. Please make sure it is defined" >&2;} # if test x"$ac_file" != x-; then { - printf "%s\n" "/* $configure_input */" >&1 \ + $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} + { $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 "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - printf "%s\n" "/* $configure_input */" >&1 \ + $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; - :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -printf "%s\n" "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -21227,7 +20116,6 @@ _LT_EOF esac - ltmain=$ac_aux_dir/ltmain.sh @@ -21277,8 +20165,7 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { $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 - From d07fce15aa02736db3545ead87b67939ff4188be Mon Sep 17 00:00:00 2001 From: Greta Yorsh <45005955+gretay-js@users.noreply.github.com> Date: Fri, 2 Dec 2022 14:40:06 +0000 Subject: [PATCH 36/39] flambda-backend: Disable poll insertion in Configure (#967) Add configure option --enable-poll-insertion Use the new configure option Add -enable-poll-insertion compilation flag Fix tests ocaml/configure updated Add --enable-poll-insertion to CI Add to build_ocaml_compiler.sexp Remove CR (it's done by this PR) Use Config.poll_insertion to set the default for the compile flag --- Makefile.config.in | 1 + configure | 18 ++++++++++++++++++ configure.ac | 10 ++++++++++ ocamltest/Makefile | 1 + ocamltest/ocaml_actions.ml | 14 ++++++++++++++ ocamltest/ocamltest_config.ml.in | 2 ++ ocamltest/ocamltest_config.mli | 3 +++ testsuite/tests/asmcomp/poll_attr_both.ml | 13 +++++++------ testsuite/tests/asmcomp/poll_attr_inserted.ml | 13 +++++++------ testsuite/tests/asmcomp/poll_attr_prologue.ml | 13 +++++++------ testsuite/tests/asmcomp/poll_attr_user.ml | 13 +++++++------ testsuite/tests/asmcomp/polling_insertion.ml | 5 +++-- utils/Makefile | 1 + utils/config.mli | 3 +++ utils/config.mlp | 1 + 15 files changed, 85 insertions(+), 26 deletions(-) diff --git a/Makefile.config.in b/Makefile.config.in index a4cb245fcb3a..c8c649a438e6 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -252,6 +252,7 @@ STDLIB_MANPAGES=@stdlib_manpages@ NAKED_POINTERS=@naked_pointers@ INTEL_JCC_BUG_CFLAGS=@intel_jcc_bug_cflags@ STACK_ALLOCATION=@stack_allocation@ +POLL_INSERTION=@poll_insertion@ DUNE=@dune@ ### Native command to build ocamlrun.exe diff --git a/configure b/configure index dd0c06f216f7..5a68bfb7d373 100755 --- a/configure +++ b/configure @@ -693,6 +693,7 @@ build_vendor build_cpu build dune +poll_insertion stack_allocation intel_jcc_bug_cflags naked_pointers_checker @@ -873,6 +874,7 @@ enable_flat_float_array enable_function_sections with_afl enable_stack_allocation +enable_poll_insertion with_flexdll enable_shared enable_static @@ -1564,6 +1566,7 @@ Optional Features: do not emit each function in a separate section --enable-stack-allocation enable stack allocation of local values + --enable-poll-insertion enable insertion of poll points --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] @@ -2921,6 +2924,7 @@ OCAML_VERSION_SHORT=4.14 + ## Generated files @@ -3426,6 +3430,12 @@ if test "${enable_stack_allocation+set}" = set; then : fi +# Check whether --enable-poll-insertion was given. +if test "${enable_poll_insertion+set}" = set; then : + enableval=$enable_poll_insertion; +fi + + # Check whether --with-flexdll was given. if test "${with_flexdll+set}" = set; then : @@ -17935,6 +17945,14 @@ else stack_allocation=false fi +if test x"$enable_poll_insertion" = "xyes"; then : + $as_echo "#define POLL_INSERTION 1" >>confdefs.h + + poll_insertion=true +else + poll_insertion=false +fi + oc_cflags="$common_cflags $internal_cflags" oc_cppflags="$common_cppflags $internal_cppflags" ocamlc_cflags="$common_cflags $sharedlib_cflags \$(CFLAGS)" diff --git a/configure.ac b/configure.ac index 56ae332ee38f..2fe739ee223f 100644 --- a/configure.ac +++ b/configure.ac @@ -173,6 +173,7 @@ AC_SUBST([naked_pointers]) AC_SUBST([naked_pointers_checker]) AC_SUBST([intel_jcc_bug_cflags]) AC_SUBST([stack_allocation]) +AC_SUBST([poll_insertion]) AC_SUBST([dune]) ## Generated files @@ -439,6 +440,10 @@ AC_ARG_ENABLE([stack-allocation], [AS_HELP_STRING([--enable-stack-allocation], [enable stack allocation of local values])]) +AC_ARG_ENABLE([poll-insertion], + [AS_HELP_STRING([--enable-poll-insertion], + [enable insertion of poll points])]) + AC_ARG_WITH([flexdll], [AS_HELP_STRING([--with-flexdll], [bootstrap FlexDLL from the given sources])], @@ -2035,6 +2040,11 @@ AS_IF([test x"$enable_stack_allocation" = "xyes"], stack_allocation=true], [stack_allocation=false]) +AS_IF([test x"$enable_poll_insertion" = "xyes"], + [AC_DEFINE([POLL_INSERTION]) + poll_insertion=true], + [poll_insertion=false]) + oc_cflags="$common_cflags $internal_cflags" oc_cppflags="$common_cppflags $internal_cppflags" ocamlc_cflags="$common_cflags $sharedlib_cflags \$(CFLAGS)" diff --git a/ocamltest/Makefile b/ocamltest/Makefile index 8e81c2ef1a7b..cb12063233b2 100644 --- a/ocamltest/Makefile +++ b/ocamltest/Makefile @@ -277,6 +277,7 @@ ocamltest_config.ml: ocamltest_config.ml.in Makefile ../Makefile.config $(call SUBST,NAKED_POINTERS) \ $(call SUBST,PROBES) \ $(call SUBST,STACK_ALLOCATION) \ + $(call SUBST,POLL_INSERTION) \ $< > $@ # Manual diff --git a/ocamltest/ocaml_actions.ml b/ocamltest/ocaml_actions.ml index 6c6046d9f3ef..6218c91b7925 100644 --- a/ocamltest/ocaml_actions.ml +++ b/ocamltest/ocaml_actions.ml @@ -1213,6 +1213,18 @@ let no_stack_allocation = Actions.make "Stack allocation disabled" "Stack allocation enabled") +let poll_insertion = Actions.make + "poll-insertion" + (Actions_helpers.pass_or_skip Ocamltest_config.poll_insertion + "Poll insertion enabled" + "Poll insertion disabled") + +let no_poll_insertion = Actions.make + "no-poll-insertion" + (Actions_helpers.pass_or_skip (not Ocamltest_config.poll_insertion) + "Stack allocation disabled" + "Stack allocation enabled") + let ocamldoc = Ocaml_tools.ocamldoc let ocamldoc_output_file env prefix = @@ -1410,6 +1422,8 @@ let _ = no_afl_instrument; stack_allocation; no_stack_allocation; + poll_insertion; + no_poll_insertion; setup_ocamldoc_build_env; run_ocamldoc; check_ocamldoc_output; diff --git a/ocamltest/ocamltest_config.ml.in b/ocamltest/ocamltest_config.ml.in index 44f2d1b1cab0..2664ffeb8199 100644 --- a/ocamltest/ocamltest_config.ml.in +++ b/ocamltest/ocamltest_config.ml.in @@ -94,3 +94,5 @@ let naked_pointers = %%NAKED_POINTERS%% let probes = %%PROBES%% let stack_allocation = %%STACK_ALLOCATION%% + +let poll_insertion = %%POLL_INSERTION%% diff --git a/ocamltest/ocamltest_config.mli b/ocamltest/ocamltest_config.mli index 57a4b487ceb3..3d10cfc2be26 100644 --- a/ocamltest/ocamltest_config.mli +++ b/ocamltest/ocamltest_config.mli @@ -133,3 +133,6 @@ val probes : bool val stack_allocation : bool (** Whether stack allocation is enabled *) + +val poll_insertion : bool +(** Whether poll insertion is enabled *) diff --git a/testsuite/tests/asmcomp/poll_attr_both.ml b/testsuite/tests/asmcomp/poll_attr_both.ml index d67d2fd9734d..0bef1f20463f 100644 --- a/testsuite/tests/asmcomp/poll_attr_both.ml +++ b/testsuite/tests/asmcomp/poll_attr_both.ml @@ -1,13 +1,14 @@ (* TEST - * setup-ocamlopt.byte-build-env - ** ocamlopt.byte + * poll-insertion + ** setup-ocamlopt.byte-build-env + *** ocamlopt.byte ocamlopt_byte_exit_status = "2" - *** check-ocamlopt.byte-output + **** check-ocamlopt.byte-output - * setup-ocamlopt.opt-build-env - ** ocamlopt.opt + ** setup-ocamlopt.opt-build-env + *** ocamlopt.opt ocamlopt_opt_exit_status = "2" - *** check-ocamlopt.opt-output + **** check-ocamlopt.opt-output *) let[@inline never][@local never] v x = x + 1 diff --git a/testsuite/tests/asmcomp/poll_attr_inserted.ml b/testsuite/tests/asmcomp/poll_attr_inserted.ml index 0ea17755b795..ea090f3e61d4 100644 --- a/testsuite/tests/asmcomp/poll_attr_inserted.ml +++ b/testsuite/tests/asmcomp/poll_attr_inserted.ml @@ -1,13 +1,14 @@ (* TEST - * setup-ocamlopt.byte-build-env - ** ocamlopt.byte + * poll-insertion + ** setup-ocamlopt.byte-build-env + *** ocamlopt.byte ocamlopt_byte_exit_status = "2" - *** check-ocamlopt.byte-output + **** check-ocamlopt.byte-output - * setup-ocamlopt.opt-build-env - ** ocamlopt.opt + ** setup-ocamlopt.opt-build-env + *** ocamlopt.opt ocamlopt_opt_exit_status = "2" - *** check-ocamlopt.opt-output + **** check-ocamlopt.opt-output *) let[@poll error] c x = diff --git a/testsuite/tests/asmcomp/poll_attr_prologue.ml b/testsuite/tests/asmcomp/poll_attr_prologue.ml index 41b3f6b92f9c..091c7702560a 100644 --- a/testsuite/tests/asmcomp/poll_attr_prologue.ml +++ b/testsuite/tests/asmcomp/poll_attr_prologue.ml @@ -1,13 +1,14 @@ (* TEST - * setup-ocamlopt.byte-build-env - ** ocamlopt.byte + * poll-insertion + ** setup-ocamlopt.byte-build-env + *** ocamlopt.byte ocamlopt_byte_exit_status = "2" - *** check-ocamlopt.byte-output + **** check-ocamlopt.byte-output - * setup-ocamlopt.opt-build-env - ** ocamlopt.opt + ** setup-ocamlopt.opt-build-env + *** ocamlopt.opt ocamlopt_opt_exit_status = "2" - *** check-ocamlopt.opt-output + **** check-ocamlopt.opt-output *) let[@poll error] rec c x l = diff --git a/testsuite/tests/asmcomp/poll_attr_user.ml b/testsuite/tests/asmcomp/poll_attr_user.ml index e807bd60d4cd..b48709a51a63 100644 --- a/testsuite/tests/asmcomp/poll_attr_user.ml +++ b/testsuite/tests/asmcomp/poll_attr_user.ml @@ -1,13 +1,14 @@ (* TEST - * setup-ocamlopt.byte-build-env - ** ocamlopt.byte + * poll-insertion + ** setup-ocamlopt.byte-build-env + *** ocamlopt.byte ocamlopt_byte_exit_status = "2" - *** check-ocamlopt.byte-output + **** check-ocamlopt.byte-output - * setup-ocamlopt.opt-build-env - ** ocamlopt.opt + ** setup-ocamlopt.opt-build-env + *** ocamlopt.opt ocamlopt_opt_exit_status = "2" - *** check-ocamlopt.opt-output + **** check-ocamlopt.opt-output *) let[@inline never][@local never] v x = x + 1 diff --git a/testsuite/tests/asmcomp/polling_insertion.ml b/testsuite/tests/asmcomp/polling_insertion.ml index b32df82f68b6..edbb11573ee0 100644 --- a/testsuite/tests/asmcomp/polling_insertion.ml +++ b/testsuite/tests/asmcomp/polling_insertion.ml @@ -1,8 +1,9 @@ (* TEST modules = "polling.c" compare_programs = "false" - * arch64 - ** native + * poll-insertion + ** arch64 + *** native *) (* This set of tests examine poll insertion behaviour. We do this by requesting diff --git a/utils/Makefile b/utils/Makefile index 591d8a2de0bc..92338486a441 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -99,6 +99,7 @@ config.ml: config.mlp $(ROOTDIR)/Makefile.config Makefile $(call SUBST,CC_HAS_DEBUG_PREFIX_MAP) \ $(call SUBST,AS_HAS_DEBUG_PREFIX_MAP) \ $(call SUBST,STACK_ALLOCATION) \ + $(call SUBST,POLL_INSERTION) \ $< > $@ # Test for the substitution functions above diff --git a/utils/config.mli b/utils/config.mli index c31f05bfbd4c..5c17c0854817 100644 --- a/utils/config.mli +++ b/utils/config.mli @@ -273,6 +273,9 @@ val afl_instrument : bool val stack_allocation : bool (** Whether to stack allocate local values *) +val poll_insertion : bool +(** Whether to insert poll points *) + (** Access to configuration values *) val print_config : out_channel -> unit diff --git a/utils/config.mlp b/utils/config.mlp index c0f963e1ff99..00d1fc0e5ee5 100644 --- a/utils/config.mlp +++ b/utils/config.mlp @@ -94,6 +94,7 @@ let probes = %%PROBES%% let afl_instrument = %%AFL_INSTRUMENT%% let stack_allocation = %%STACK_ALLOCATION%% +let poll_insertion = %%POLL_INSERTION%% (* When artifacts are incompatible with upstream OCaml, ocaml-jst uses magic numbers ending in 5xx. (The AST and bytecode executables remain From deb1714de3c1dfb8f4ae3e73644ef75ae45de0bd Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Mon, 5 Dec 2022 11:05:27 +0000 Subject: [PATCH 37/39] flambda-backend: Add is_last flag to closinfo words (#938) Co-authored-by: Guillaume Bury --- asmcomp/cmm_helpers.ml | 30 ++++++++++++++++++------------ asmcomp/cmm_helpers.mli | 5 +++-- asmcomp/cmmgen.ml | 5 +++-- runtime/alloc.c | 2 +- runtime/caml/mlvalues.h | 26 +++++++++++++++++--------- runtime/compact.c | 10 ++++++---- runtime/interp.c | 9 +++++---- runtime/meta.c | 2 +- runtime/obj.c | 2 +- utils/config.mlp | 1 + 10 files changed, 56 insertions(+), 36 deletions(-) diff --git a/asmcomp/cmm_helpers.ml b/asmcomp/cmm_helpers.ml index 6f31f302ffb1..8ea58ec42ef6 100644 --- a/asmcomp/cmm_helpers.ml +++ b/asmcomp/cmm_helpers.ml @@ -80,17 +80,20 @@ let caml_int64_ops = "caml_int64_ops" let pos_arity_in_closinfo = 8 * size_addr - 8 (* arity = the top 8 bits of the closinfo word *) -let closure_info ~arity ~startenv = +let closure_info ~arity ~startenv ~is_last = let arity = match arity with | Lambda.Tupled, n -> -n | Lambda.Curried _, n -> n in assert (-128 <= arity && arity <= 127); - assert (0 <= startenv && startenv < 1 lsl (pos_arity_in_closinfo - 1)); + assert (0 <= startenv && startenv < 1 lsl (pos_arity_in_closinfo - 2)); Nativeint.(add (shift_left (of_int arity) pos_arity_in_closinfo) - (add (shift_left (of_int startenv) 1) - 1n)) + (add + (shift_left + (Bool.to_int is_last |> Nativeint.of_int) + (pos_arity_in_closinfo - 1)) + (add (shift_left (of_int startenv) 1) 1n))) let alloc_float_header mode dbg = match mode with @@ -102,8 +105,8 @@ let alloc_closure_header ~mode sz dbg = | Alloc_heap -> Cconst_natint (white_closure_header sz, dbg) | Alloc_local -> Cconst_natint (local_closure_header sz, dbg) let alloc_infix_header ofs dbg = Cconst_natint (infix_header ofs, dbg) -let alloc_closure_info ~arity ~startenv dbg = - Cconst_natint (closure_info ~arity ~startenv, dbg) +let alloc_closure_info ~arity ~startenv ~is_last dbg = + Cconst_natint (closure_info ~arity ~startenv ~is_last, dbg) let alloc_boxedint32_header mode dbg = match mode with | Lambda.Alloc_heap -> Cconst_natint (boxedint32_header, dbg) @@ -2161,7 +2164,7 @@ let rec intermediate_curry_functions ~nlocal ~arity num = [alloc_closure_header ~mode 5 (dbg ()); Cconst_symbol(name1 ^ "_" ^ Int.to_string (num+1), dbg ()); alloc_closure_info ~arity:(curried (arity - num - 1)) - ~startenv:3 (dbg ()); + ~startenv:3 ~is_last:true (dbg ()); Cconst_symbol(name1 ^ "_" ^ Int.to_string (num+1) ^ "_app", dbg ()); Cvar arg; Cvar clos], @@ -2170,7 +2173,8 @@ let rec intermediate_curry_functions ~nlocal ~arity num = Cop(Calloc mode, [alloc_closure_header ~mode 4 (dbg ()); Cconst_symbol(name1 ^ "_" ^ Int.to_string (num+1), dbg ()); - alloc_closure_info ~arity:(curried 1) ~startenv:2 (dbg ()); + alloc_closure_info ~arity:(curried 1) ~startenv:2 + ~is_last:true (dbg ()); Cvar arg; Cvar clos], dbg ()); fun_codegen_options = []; @@ -2915,20 +2919,22 @@ let emit_constant_closure ((_, global_symb) as symb) fundecls clos_vars cont = let rec emit_others pos = function [] -> clos_vars @ cont | (f2 : Clambda.ufunction) :: rem -> + let is_last = match rem with [] -> true | _ :: _ -> false in match f2.arity with | Curried _, (0|1) as arity -> Cint(infix_header pos) :: (closure_symbol f2) @ Csymbol_address f2.label :: - Cint(closure_info ~arity ~startenv:(startenv - pos)) :: + Cint(closure_info ~arity ~startenv:(startenv - pos) ~is_last) :: emit_others (pos + 3) rem | arity -> Cint(infix_header pos) :: (closure_symbol f2) @ Csymbol_address(curry_function_sym f2.arity) :: - Cint(closure_info ~arity ~startenv:(startenv - pos)) :: + Cint(closure_info ~arity ~startenv:(startenv - pos) ~is_last) :: Csymbol_address f2.label :: emit_others (pos + 4) rem in + let is_last = match remainder with [] -> true | _ :: _ -> false in Cint(black_closure_header (fundecls_size fundecls + List.length clos_vars)) :: cdefine_symbol symb @ @@ -2936,11 +2942,11 @@ let emit_constant_closure ((_, global_symb) as symb) fundecls clos_vars cont = match f1.arity with | Curried _, (0|1) as arity -> Csymbol_address f1.label :: - Cint(closure_info ~arity ~startenv) :: + Cint(closure_info ~arity ~startenv ~is_last) :: emit_others 3 remainder | arity -> Csymbol_address(curry_function_sym f1.arity) :: - Cint(closure_info ~arity ~startenv) :: + Cint(closure_info ~arity ~startenv ~is_last) :: Csymbol_address f1.label :: emit_others 4 remainder diff --git a/asmcomp/cmm_helpers.mli b/asmcomp/cmm_helpers.mli index fd5e6ad91c7c..35e4d53e17da 100644 --- a/asmcomp/cmm_helpers.mli +++ b/asmcomp/cmm_helpers.mli @@ -59,12 +59,13 @@ val boxedint64_header : nativeint val boxedintnat_header : nativeint (** Closure info for a closure of given arity and distance to environment *) -val closure_info : arity:Clambda.arity -> startenv:int -> nativeint +val closure_info : arity:Clambda.arity -> startenv:int -> is_last:bool + -> nativeint (** Wrappers *) val alloc_infix_header : int -> Debuginfo.t -> expression val alloc_closure_info : - arity:(Lambda.function_kind * int) -> startenv:int -> + arity:(Lambda.function_kind * int) -> startenv:int -> is_last:bool -> Debuginfo.t -> expression (** Integers *) diff --git a/asmcomp/cmmgen.ml b/asmcomp/cmmgen.ml index c7183cb4a0f1..a9c8d486f5a2 100644 --- a/asmcomp/cmmgen.ml +++ b/asmcomp/cmmgen.ml @@ -395,6 +395,7 @@ let rec transl env e = [] -> List.map (transl env) clos_vars | f :: rem -> + let is_last = match rem with [] -> true | _::_ -> false in Cmmgen_state.add_function f; let dbg = f.dbg in let without_header = @@ -402,12 +403,12 @@ let rec transl env e = | Curried _, (1|0) as arity -> Cconst_symbol (f.label, dbg) :: alloc_closure_info ~arity - ~startenv:(startenv - pos) dbg :: + ~startenv:(startenv - pos) ~is_last dbg :: transl_fundecls (pos + 3) rem | arity -> Cconst_symbol (curry_function_sym f.arity, dbg) :: alloc_closure_info ~arity - ~startenv:(startenv - pos) dbg :: + ~startenv:(startenv - pos) ~is_last dbg :: Cconst_symbol (f.label, dbg) :: transl_fundecls (pos + 4) rem in diff --git a/runtime/alloc.c b/runtime/alloc.c index 21fcc5e4dae5..71900ec7e703 100644 --- a/runtime/alloc.c +++ b/runtime/alloc.c @@ -229,7 +229,7 @@ CAMLprim value caml_alloc_dummy_infix(value vsize, value voffset) block contains no pointers into the heap. However, the block cannot be marshaled or hashed, because not all closinfo fields and infix header fields are correctly initialized. */ - Closinfo_val(v) = Make_closinfo(0, wosize); + Closinfo_val(v) = Make_closinfo(0, wosize, 1); if (offset > 0) { v += Bsize_wsize(offset); Hd_val(v) = Make_header(offset, Infix_tag, Caml_white); diff --git a/runtime/caml/mlvalues.h b/runtime/caml/mlvalues.h index 677e44e183a5..e1d5cd84113c 100644 --- a/runtime/caml/mlvalues.h +++ b/runtime/caml/mlvalues.h @@ -245,20 +245,28 @@ CAMLextern value caml_get_public_method (value obj, value tag); #define Code_val(val) (((code_t *) (val)) [0]) /* Also an l-value. */ #define Closinfo_val(val) Field((val), 1) /* Arity and start env */ /* In the closure info field, the top 8 bits are the arity (signed). + The next least significant bit is set iff the current closure is the + last one to occur in the block. (This is used in the compactor.) The low bit is set to one, to look like an integer. - The remaining bits are the field number for the first word of the - environment, or, in other words, the offset (in words) from the closure - to the environment part. */ + The remaining bits are the field number for the first word of the scannable + part of the environment, or, in other words, the offset (in words) from the + closure to the scannable part of the environment. + The non-scannable part of the environment lives between the end of the + last closure and the start of the scannable environment within the block. */ #ifdef ARCH_SIXTYFOUR #define Arity_closinfo(info) ((intnat)(info) >> 56) -#define Start_env_closinfo(info) (((uintnat)(info) << 8) >> 9) -#define Make_closinfo(arity,delta) \ - (((uintnat)(arity) << 56) + ((uintnat)(delta) << 1) + 1) +#define Start_env_closinfo(info) (((uintnat)(info) << 9) >> 10) +#define Is_last_closinfo(info) (((uintnat)(info) << 8) >> 63) +#define Make_closinfo(arity,delta,is_last) \ + (((uintnat)(arity) << 56) + ((uintnat)(is_last) << 55) \ + + ((uintnat)(delta) << 1) + 1) #else #define Arity_closinfo(info) ((intnat)(info) >> 24) -#define Start_env_closinfo(info) (((uintnat)(info) << 8) >> 9) -#define Make_closinfo(arity,delta) \ - (((uintnat)(arity) << 24) + ((uintnat)(delta) << 1) + 1) +#define Start_env_closinfo(info) (((uintnat)(info) << 9) >> 10) +#define Is_last_closinfo(info) (((uintnat)(info) << 8) >> 31) +#define Make_closinfo(arity,delta,is_last) \ + (((uintnat)(arity) << 24) + ((uintnat)(is_last) << 23) \ + + ((uintnat)(delta) << 1) + 1) #endif /* This tag is used (with Forward_tag) to implement lazy values. diff --git a/runtime/compact.c b/runtime/compact.c index 8ba168e4d2bc..a181be0ee45e 100644 --- a/runtime/compact.c +++ b/runtime/compact.c @@ -261,16 +261,18 @@ static void do_compaction (intnat new_allocation_policy) if (t == Closure_tag){ /* Revert the infix pointers to this block. */ - mlsize_t i, startenv; + mlsize_t i; value v; v = Val_hp (p); - startenv = Start_env_closinfo (Closinfo_val (v)); i = 0; while (1){ - int arity = Arity_closinfo (Field (v, i+1)); + int arity; + uintnat closinfo = Field (v, i+1); + if (Is_last_closinfo (closinfo)) break; + arity = Arity_closinfo (closinfo); i += 2 + (arity != 0 && arity != 1); - if (i >= startenv) break; + CAMLassert (i < Start_env_closinfo (Closinfo_val (v))); /* Revert the inverted list for infix header at offset [i]. */ q = Field (v, i); diff --git a/runtime/interp.c b/runtime/interp.c index 20b92748d197..7c80153af44f 100644 --- a/runtime/interp.c +++ b/runtime/interp.c @@ -568,7 +568,7 @@ value caml_interprete(code_t prog, asize_t prog_size) Field(accu, 2) = env; for (i = 0; i < num_args; i++) Field(accu, i + 3) = sp[i]; Code_val(accu) = pc - 3; /* Point to the preceding RESTART instr. */ - Closinfo_val(accu) = Make_closinfo(0, 2); + Closinfo_val(accu) = Make_closinfo(0, 2, 1); sp += num_args; pc = (code_t)(sp[0]); env = sp[1]; @@ -596,7 +596,7 @@ value caml_interprete(code_t prog, asize_t prog_size) /* The code pointer is not in the heap, so no need to go through caml_initialize. */ Code_val(accu) = pc + *pc; - Closinfo_val(accu) = Make_closinfo(0, 2); + Closinfo_val(accu) = Make_closinfo(0, 2, 1); pc++; sp += nvars; Next; @@ -628,13 +628,14 @@ value caml_interprete(code_t prog, asize_t prog_size) *--sp = accu; p = &Field(accu, 0); *p++ = (value) (pc + pc[0]); - *p++ = Make_closinfo(0, envofs); + *p++ = Make_closinfo(0, envofs, nfuncs < 2); for (i = 1; i < nfuncs; i++) { *p++ = Make_header(i * 3, Infix_tag, Caml_white); /* color irrelevant */ *--sp = (value) p; *p++ = (value) (pc + pc[i]); envofs -= 3; - *p++ = Make_closinfo(0, envofs); + CAMLassert(i <= nfuncs - 1); + *p++ = Make_closinfo(0, envofs, i == nfuncs - 1); } pc += nfuncs; Next; diff --git a/runtime/meta.c b/runtime/meta.c index cbacc9a03d87..618f2a8553d7 100644 --- a/runtime/meta.c +++ b/runtime/meta.c @@ -126,7 +126,7 @@ CAMLprim value caml_reify_bytecode(value ls_prog, clos = caml_alloc_small (2, Closure_tag); Code_val(clos) = (code_t) prog; - Closinfo_val(clos) = Make_closinfo(0, 2); + Closinfo_val(clos) = Make_closinfo(0, 2, 1); bytecode = caml_alloc_small (2, Abstract_tag); Bytecode_val(bytecode)->prog = prog; Bytecode_val(bytecode)->len = len; diff --git a/runtime/obj.c b/runtime/obj.c index 31012443ef52..479b340e5a6a 100644 --- a/runtime/obj.c +++ b/runtime/obj.c @@ -108,7 +108,7 @@ CAMLprim value caml_obj_block(value tag, value size) /* Closinfo_val is the second field, so we need size at least 2 */ if (sz < 2) caml_invalid_argument ("Obj.new_block"); res = caml_alloc(sz, tg); - Closinfo_val(res) = Make_closinfo(0, 2); /* does not allocate */ + Closinfo_val(res) = Make_closinfo(0, 2, 1); /* does not allocate */ break; } case String_tag: { diff --git a/utils/config.mlp b/utils/config.mlp index 00d1fc0e5ee5..5f1bb19ab331 100644 --- a/utils/config.mlp +++ b/utils/config.mlp @@ -231,6 +231,7 @@ let configuration_variables = p_bool "flambda_backend" flambda_backend; p_bool "probes" probes; + p_bool "stack_allocation" stack_allocation; ] let print_config_value oc = function From 98debd51d5f9dc837bce2720f3b59e1e18818e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathana=C3=ABlle=20Courant?= Date: Tue, 6 Dec 2022 16:23:32 +0100 Subject: [PATCH 38/39] flambda-backend: Initial support for value slots not of value kind (#946) --- asmcomp/cmm_helpers.ml | 2 +- runtime/caml/mlvalues.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/asmcomp/cmm_helpers.ml b/asmcomp/cmm_helpers.ml index 8ea58ec42ef6..f0fb7855cac6 100644 --- a/asmcomp/cmm_helpers.ml +++ b/asmcomp/cmm_helpers.ml @@ -93,7 +93,7 @@ let closure_info ~arity ~startenv ~is_last = (shift_left (Bool.to_int is_last |> Nativeint.of_int) (pos_arity_in_closinfo - 1)) - (add (shift_left (of_int startenv) 1) 1n))) + (add (shift_left (of_int startenv) 1) 1n))) let alloc_float_header mode dbg = match mode with diff --git a/runtime/caml/mlvalues.h b/runtime/caml/mlvalues.h index e1d5cd84113c..139f3fd842d6 100644 --- a/runtime/caml/mlvalues.h +++ b/runtime/caml/mlvalues.h @@ -253,6 +253,7 @@ CAMLextern value caml_get_public_method (value obj, value tag); closure to the scannable part of the environment. The non-scannable part of the environment lives between the end of the last closure and the start of the scannable environment within the block. */ +/* CR ncourant: it might be cleaner to use a packed struct here */ #ifdef ARCH_SIXTYFOUR #define Arity_closinfo(info) ((intnat)(info) >> 56) #define Start_env_closinfo(info) (((uintnat)(info) << 9) >> 10) From 06c189a4c5505be62c8c658eee186a7aa6ba4c68 Mon Sep 17 00:00:00 2001 From: Mark Shinwell Date: Thu, 8 Dec 2022 11:19:12 +0000 Subject: [PATCH 39/39] flambda-backend: Make stack allocation the default (#1013) --- configure | 6 +++--- configure.ac | 6 +++--- testsuite/tests/typing-local/loop_regions.ml | 1 + .../tests/typing-local/loop_regions.stack.reference | 12 ++++++------ testsuite/tests/typing-local/pr902.ml | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/configure b/configure index 5a68bfb7d373..179aa5a4242c 100755 --- a/configure +++ b/configure @@ -17937,12 +17937,12 @@ else default_safe_string=true fi -if test x"$enable_stack_allocation" = "xyes"; then : +if test x"$enable_stack_allocation" = "xno"; then : + stack_allocation=false +else $as_echo "#define STACK_ALLOCATION 1" >>confdefs.h stack_allocation=true -else - stack_allocation=false fi if test x"$enable_poll_insertion" = "xyes"; then : diff --git a/configure.ac b/configure.ac index 2fe739ee223f..d09d05b2a417 100644 --- a/configure.ac +++ b/configure.ac @@ -2035,10 +2035,10 @@ AS_IF([test x"$DEFAULT_STRING" = "xunsafe"], [default_safe_string=false], [default_safe_string=true]) -AS_IF([test x"$enable_stack_allocation" = "xyes"], +AS_IF([test x"$enable_stack_allocation" = "xno"], + [stack_allocation=false], [AC_DEFINE([STACK_ALLOCATION]) - stack_allocation=true], - [stack_allocation=false]) + stack_allocation=true]) AS_IF([test x"$enable_poll_insertion" = "xyes"], [AC_DEFINE([POLL_INSERTION]) diff --git a/testsuite/tests/typing-local/loop_regions.ml b/testsuite/tests/typing-local/loop_regions.ml index 497fc4341b79..b346d100a09d 100644 --- a/testsuite/tests/typing-local/loop_regions.ml +++ b/testsuite/tests/typing-local/loop_regions.ml @@ -8,6 +8,7 @@ *) external local_stack_offset : unit -> int = "caml_local_stack_offset" +let local_stack_offset () = local_stack_offset () / (Sys.word_size / 8) external opaque_local : ('a[@local_opt]) -> ('a[@local_opt]) = "%opaque" let print_offsets (name,allocs) = diff --git a/testsuite/tests/typing-local/loop_regions.stack.reference b/testsuite/tests/typing-local/loop_regions.stack.reference index 14aa447d5451..0a56053d5d4e 100644 --- a/testsuite/tests/typing-local/loop_regions.stack.reference +++ b/testsuite/tests/typing-local/loop_regions.stack.reference @@ -1,6 +1,6 @@ - local for: [0; 16; 16] - non-local for: [0; 16; 0] - local while body: [0; 16; 16] - nonlocal while body: [0; 16; 0] - local while cond: [0; 16; 16] - nonlocal while cond: [0; 16; 0] + local for: [0; 2; 2] + non-local for: [0; 2; 0] + local while body: [0; 2; 2] + nonlocal while body: [0; 2; 0] + local while cond: [0; 2; 2] + nonlocal while cond: [0; 2; 0] diff --git a/testsuite/tests/typing-local/pr902.ml b/testsuite/tests/typing-local/pr902.ml index 7133578b7280..aeb74c9dd331 100644 --- a/testsuite/tests/typing-local/pr902.ml +++ b/testsuite/tests/typing-local/pr902.ml @@ -28,5 +28,5 @@ let () = let p = to_be_overapplied () () () 42 () in let end_offset = local_stack_offset () in assert (is_local p); - let ok = end_offset - start_offset = 64 in + let ok = end_offset - start_offset = Sys.word_size (* eight words *) in Printf.printf "PR902: %s\n" (if ok then "ok" else "FAIL")