Caml1999I037 @  'HarnessӠ&Import@+launch_mode;@@*Header_exe@@;testsuite/tools/harness.mliUU@@A@.Header_shebang@@ V V@@ B@@@A@@@@@T@@A@#@@A@*executable;@@(Tendered&header@@,@@@$Zq%Zq@@:D@$dlls@@$boolE@@@2[3[@@HE@'runtime@@&stringQ@@@@\A\@@VF@"idw@@&optionL$Misc)RuntimeID!t@@@@@@Y]Z]@@oG@&searchz@@(Byterntm-search_method@@@i^j^3@@H@@@mZqsn^4@@I@&Custom{@@vckmwcku@@J@'Vanilla|@@ff@@K@@@A@@@@@Y]_@@@@C@A@%phase;@@(Original~@@kk@@R@)Execution@@ll@@S@'Renamed@@o  o  @@T@@@A@@@@@j@@A@Q@A@$mode;@@(Bytecode@@s  s  @@V@&Native@@u ; =u ; E@@W@@@A@@@@@r  @@A@U@A@&config;@@,has_ocamlnat@@@@@z  z  @@Y@,has_ocamlopt@@@@@|  |  @@Z@3has_relative_libdir@@@@@@@@~ Y ]~ Y @@[@2has_runtime_search@@&Config-search_method@@@A  A  !@@\@>launcher_searches_for_ocamlrun@@@@@ C e i C e @@"]@ %target_launcher_searches_for_ocamlrun@@@@@G e iG e @@.^@ɠ+Stdlib__Sys0b'8=OIn.Stdlib__String0 w_OA4D"Q~~+Stdlib__Set0ܔ@Z8XWaa2+Stdlib__Seq0?72#[O.Stdlib__Result0p~ !ԥ//+Stdlib__Map0*4ɇ2.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Digest0#z25I*.Stdlib__Buffer0,I[?z&Stdlib0t0VoS%{<F:$Misc0]\/j*^e*Format_doc0uy@GmWUࠠ&Config0܈[P(N {~Š8CamlinternalFormatBasics0|.e1R$|o,Bytesections0@3\f(Byterntm0udTw|dxv 5Build_path_prefix_map0DGl}%Y5Lhi@@@Caml1999T037c 8Z2mC'Harness*ocaml.text&_none_@@A + Test harness support functions and types. ;testsuite/tools/harness.mliOO@@@@@@3@@@@#intA;@@A@@@@@9@A@$charB;@@A@@@@@>@A@&stringQ;@@A@@@@@C@@@%bytesC;@@A@@@@@H@@@%floatD;@@A@@@@@M@@@$boolE;@@%falsec@@W@$trued@@]@@@A@@@@@^@A@$unitF;@@"()e@@h@@@A@@@@@i@A@ #exnG;@@@A@@@@@m@@@#effH;@@O@A@A@@@@@@v@@@,continuationI;@@Q@@P@B A@nY@@@@@@@@@%arrayJ;@@R@AA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AA@Y@@@@@@@@ 5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@AA@Y@@@@@@@@ *atomic_locU;@@Z@AA@@@@@@@@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A=ocaml.warn_on_literal_pattern@@0Division_by_zero]#@@@A  @+End_of_file\#$@@@A#&&@'FailureY#,@'@@A,//@0Invalid_argumentX#5@0@@A5$8#8@-Match_failureV#>@@=@9@;@@a@@AF5I4I@)Not_foundZ#O@@@AN=Q<Q@-Out_of_memoryW#W@@@AVEYDY@.Stack_overflow^#_@@@A^MaLa@.Sys_blocked_io_#g@@@AfUiTi@)Sys_error[#o@j@@Ao^r]r@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@A&ImportARCJRCP@b@@БA++launch_modeBTT@@;@@*Header_exe@@UU@)ocaml.doc 3 Executable launcher (see {v stdlib/header*.c v}). UU@@@@@@@A@.Header_shebang@@VV@ & Shebang ({v #! v}) interpreter line. VV>@@@@@@@B@@@A@@@@@T@* @ Mechanism used by a tendered bytecode image to find a runtime. SWYSW@@@@@@@A@@@@#BBU@@/@@@C@?>@>>@@@>@>@#::V8@)@@@;Q98@88@@@8@8@@A@4\32@22@@@2@2@@3        @ @A@Q@A+*executableCY]dY]n@@;@@(Tendered&header@@@@@+Zq,Zq@@DD@$dlls@@@@@7[8[@@PE@'runtime@@@@@C\D\@@\F@"idw@@$Misc)RuntimeID!t@@@ @@@ Z][]@@sG@&searchz@@(Byterntm-search_method@@@ )j^k^3@@H@@@nZqso^4@ɐ * Tendered bytecode image. Executable uses the given mechanism to locate a suitable runtime to execute the image. [dlls] is [true] if the bytecode image requires additional C libraries to be loaded. [runtime] is the runtime system which it ultimately attempts to exec. |_5;}b"j@@@@@@@I@&Custom{@@ckmcku@ {v -custom v} bytecode executable. The executable {e is} the OCaml bytecode runtime, with the bytecode image appended to the file. dv|e@@@@@@@J@'Vanilla|@@ff@ B Normal executable, produced by a linker and not further altered. g"gi@@@@@@@K@@@A@@@@@Y]_@5 Kinds of executable X@BX@\@@@@@@@@@C@@#ZquZq}@G@#Zq@@@Ш@г+launch_modeZqZq@@3@A;;@@@A@@@@@-+@@@A@@@@@@#[@@@Ш@г$bool[[@@@@@@@@#\@@@Ш@г&string\\@@)@@@@,@@#]@@@Ш@г&option]]@гà$Misc]]@ɰ] ]@@Ͱ$]%]@ @@R @@@S@@@@ V@@#Πΰ/^@@@Ш@гѠ(Byterntm:^;^%@ְ>^&@@@k@@@@ *n@@@@֠S@@@@@@#ϠϰRcko@@@@Рd@@@@@@#ɠɰcf@@@@ʠu@@@@@@@A@à@@@@@@@3xxxxxxxx@@A@A+%phase}Djj@@;@@(Original~@@kk@@R@)Execution@@ll@@S@'Renamed@@o  o  @@T@@@A@@@@@j@6 Test harness phases. ikmik@@@@@@@A@Q@@#--k+@*@@@.@#**l(@'@@@+@#''o  %@$@@@(@@A@$"ِ#"@""@@@"@"@@3@@A14@A+$modeEr  r  @@;@@(Bytecode@@s  s  @@V@&Native@@u ; =u ; E@@ W@@@A@@@@@r  @@A@U@@#s  @@@@@#u ; ?@@@@@@A@@@3@3@A@A+&configFy  y  @@;@@,has_ocamlnat@@@@@ Tz   z  @z ; {v [$(INSTALL_OCAMLNAT)] v} - {v Makefile.build_config v} -{  .{  @@@@@@@FY@,has_ocamlopt@@@@@ W9|  :|  @ 4 {v [$(NATIVE_COMPILER)] v} - {v Makefile.config v} G}  H}  X@@@@@@@`Z@3has_relative_libdir@@#@@@ Z@@@ \X~ Y ]Y~ Y @ g {v $(TARGET_LIBDIR_IS_RELATIVE) v} and {v $(TARGET_LIBDIR) v} - {v Makefile.build_config v} f  g@  @@@@@@@[@2has_runtime_search@@&Config-search_method@@@7vA  wA  !@ѐ 7 {v $(RUNTIME_SEARCH) v} - {v Makefile.build_config v} B " (B " d@@@@@@@\@>launcher_searches_for_ocamlrun@@M@@@:C e iC e @될 Indicates whether bytecode executables in the compiler distribution a launcher that is capable of searching PATH to find ocamlrun. This used to be the behaviour for native Windows. D  F + d@@@@@@@]@ %target_launcher_searches_for_ocamlrun@@g@@@=G e iG e @ Indicates whether the executable launcher used by ocamlc is capable of searching PATH to find ocamlrun. This used to be the behaviour for native Windows. H  J4P@@@@@@@^@@6843@33@@@3@3@#//*KQq@@@Ш@г2$boolKQsKQw@@:İ@@=@@A@9U 76@66@@@6@6@#22- N@@@Ш@г5$boolNN@@=@@@@@D@<r):9@99@@@9@9@#55&(Per@@@Ш@г8$list1Pe2Pe@г=$list:Pe{;Pe@гB&stringCPetDPez@@J@@@O @@@T@@W@@K@IZGF@FF@@@F@F@@A@Be@?@??@@@?@?@@3]]]]]]]]@*@ANM@@A@QKA@A@A@^XA@@3iiiiiiii@7`Z@A lpRCSqT@@ ! Types (opened in other modules) QQB@@@@@@@RCC@@ࠐ&ImportVV@@A3@ @A@~A@A@A@A@@,+@++@@@+@+@( @AV@@3@@A@#exeX!%X!(@б@г&stringX!+X!1@@ @@@5@@г&stringX!5X!;@@ @@@B@@@@@@@G @@@X!! @4 J [exe "foo"] is ["foo"] on Linux (and Cygwin) and ["foo.exe"] on Windows. Y<<Y<@@@@@@@d@@@D@@@@@@f7no_caml_executable_name[[@г $bool[[@@ @@@3        @}]6@A@@@[ @k [true] if the [caml_executable_name] runtime function is not implemented on this platform, which means that it is not guaranteed to be possible to work out the absolute path of the currently-running executable. \^P@@@@@@@7e@@@{2@@@@@@!*erase_file5`6`@б@г &string@`A`@@ @@@3BBBBBBBB@:M8@A@@г$unitO`P`@@ @@@@@@@@@@ @@@\` @ [erase_file file] calls [Sys.remove file], wrapped with the usual dances required on Windows to try to be sure that the file is actually deleted. iajbO@@@@@@@f@@@}@@@@@@3#libdQUdQX@б@г$modedQ[dQ_@@ @@@3@La8@A@@б@гf&stringdQcdQi@@ @@@@@гs&stringdQmdQs@@ @@@@@@@@@@# @@@+@@ @@(.@@@dQQ@ \ [lib mode file] appends [".cma"] if [mode = Bytecode] or [".cmxa"] if [mode = Native]. ettf@@@@@@@g@@"@%ܐ@@@@@@G)files_forhh@б.source_and_cmiг$boolii@@ @@@3@bw:@A@@б@гp$modeii@@ @@@@@б@г֠&string i  i@@ @@@ @@б@г$listii@г&string%i&i@@ @@@9@@@@@@> @@г$list7i)8i-@г &stringAi"Bi(@@ @@@U@@@@@@Z @@@%@@ @@_,@@@G@@ @@dJ@@@[@@ @@i^#@@z u@@@@@@@sei.@@ @hh1@ % [files_for ~source_and_cmi mode name files] adds filenames to [files] for the {i name}{v .ml v} and {i name}{v .cmi v} if [~source_and_cmi:true] and also {i name}{v .cmo v} or {i name}{v .cmx v} depending on [mode]. If [mode] is [Native], then the assembled object is also added. uj..vmX@@@@@@@h@@A@@@@@@@,fail_becauseoZ^oZj@б@г'format4oZoZ@А!a@G@3@>@AoZnoZp@@гY$unitoZroZv@@ @@@@@г&stringoZxoZ~@@ @@@ @@А!b@G@*oZoZ@@@?5"@@@4oZm@@@А!a>9oZoZ@@@@@E@@@ @@@oZZ @? [fail_because fmt] displays a formatted message on [stderr], followed by a new line and then aborts the harness with code 1. pq@@@@@@@ i@@@O @@@@@@_9ocamlc_fails_after_rename s s8@б@г&config s; sA@@ @@@3        @x8@A@@гޠ$bool #sE $sI@@ @@@@@@@@@@ @@@ 0s @ \ [true] if the {v ocamlc v} command will not execute after the prefix has been renamed.  =tJJ >u@@@@@@@ Vj@@@ Q@@@@@@3'pp_path Tw Uw@б&prefixг +&string ax bx@@ @@@3 c c c c c c c c@Nc:@A@@б-bindir_suffixг >&string tx ux@@ @@@@@б-libdir_suffixг O&string x x@@ @@@$@@б)test_rootг `&string y  y@@ @@@5@@б@г#&Format)formatter y y@  y y#@@@@@@M @@б@г &string y' y-@@ @@@\@@г t$unit y1 y5@@ @@@i@@@@@@@n @@@)@@ @@s1@@OF@@ @@x y@@f]@@ @@~ x@@}t@@ @@ x!@@@@ @@ x'@@@ w*@N  [pp_path ~prefix ~bindir_suffix ~libdir_suffix ~test_root f path] jumps through some mildly convoluted hoops to create slightly more readable output by substituting some recognised paths with shell-like variables. It applies the following transformations: - ["$bindir"] or ["$libdir"] if [path] is exactly [~bindir_suffix] or [~libdir_suffix] (this captures passing those two variabes to the test programs) - if [path] begins with [~prefix] then the text is replaced with ["$prefix"] (which can create ["$prefix.new/"], etc.). Additionally, if the next part of [path] after the following directory separator is [bindir_suffix] or [libdir_suffix] then this is replaced with ["$bindir"] or ["$libdir"] (i.e. this can generate ["$prefix.new/$bindir"] but not ["$prefix.new/foo/$bindir"] - if [path] begins [~test_root] (i.e. the current directory) then this is replaced with ["$PWD"] but unlike [~prefix] either nothing must follow or the next character must be a directory separator. (i.e. it generates ["$PWD/"] but never ["$PWDnew/"]) Both simpler and more convoluted ways of doing this are available. On Windows, the comparisons treat forward and back slashes as being the same.  z66 @@@@@@@@ k@@:@^ @@@@@@@@t@@d=@@@b@B@<@@1@@3        @3@A@ H************************************************************************ )A@@ *A@L@ H  /BMM 0BM@ H OCaml  5C 6C@ H  ;D Compiler moved to a different prefix from its configuration.  o   o  @0 Tooling modes.  q   q  @1 Bytecode OCaml.  t  % t  :@/ Native OCaml.  v F L v F _@ (* Compiler installation's configuration  <* {v [$(INSTALL_OCAMLNAT)] v} - {v Makefile.build_config v}  5* {v [$(NATIVE_COMPILER)] v} - {v Makefile.config v} x h* {v $(TARGET_LIBDIR_IS_RELATIVE) v} and {v $(TARGET_LIBDIR) v} - {v Makefile.build_config v} \ 8* {v $(RUNTIME_SEARCH) v} - {v Makefile.build_config v} A * Indicates whether bytecode executables in the compiler distribution a launcher that is capable of searching PATH to find ocamlrun. This used to be the behaviour for native Windows. * * Indicates whether the executable launcher used by ocamlc is capable of searching PATH to find ocamlrun. This used to be the behaviour for native Windows.  {* True if ocamlc uses a shebang-style header rather than an executable header for tendered bytecode executables.  >* True if the Runtime ID is being used for filename mangling. 堠 z* Sorted list of basenames of libraries to test. Derived from {v [$(OTHERLIBRARIES)] v} - {v Makefile.config v} Ġ K* [exe "foo"] is ["foo"] on Linux (and Cygwin) and ["foo.exe"] on Windows.  * [true] if the [caml_executable_name] runtime function is not implemented on this platform, which means that it is not guaranteed to be possible to work out the absolute path of the currently-running executable.  * [erase_file file] calls [Sys.remove file], wrapped with the usual dances required on Windows to try to be sure that the file is actually deleted. t ]* [lib mode file] appends [".cma"] if [mode = Bytecode] or [".cmxa"] if [mode = Native].  &* [files_for ~source_and_cmi mode name files] adds filenames to [files] for the {i name}{v .ml v} and {i name}{v .cmi v} if [~source_and_cmi:true] and also {i name}{v .cmo v} or {i name}{v .cmx v} depending on [mode]. If [mode] is [Native], then the assembled object is also added. n * [fail_because fmt] displays a formatted message on [stderr], followed by a new line and then aborts the harness with code 1.  ]* [true] if the {v ocamlc v} command will not execute after the prefix has been renamed.  * [pp_path ~prefix ~bindir_suffix ~libdir_suffix ~test_root f path] jumps through some mildly convoluted hoops to create slightly more readable output by substituting some recognised paths with shell-like variables. It applies the following transformations: - ["$bindir"] or ["$libdir"] if [path] is exactly [~bindir_suffix] or [~libdir_suffix] (this captures passing those two variabes to the test programs) - if [path] begins with [~prefix] then the text is replaced with ["$prefix"] (which can create ["$prefix.new/"], etc.). Additionally, if the next part of [path] after the following directory separator is [bindir_suffix] or [libdir_suffix] then this is replaced with ["$bindir"] or ["$libdir"] (i.e. this can generate ["$prefix.new/$bindir"] but not ["$prefix.new/foo/$bindir"] - if [path] begins [~test_root] (i.e. the current directory) then this is replaced with ["$PWD"] but unlike [~prefix] either nothing must follow or the next character must be a directory separator. (i.e. it generates ["$PWD/"] but never ["$PWDnew/"]) Both simpler and more convoluted ways of doing this are available. On Windows, the comparisons treat forward and back slashes as being the same. @,./ocamlc.opt)-nostdlib"-I(./stdlib"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I/testsuite/tools"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-I/testsuite/tools"-I/testsuite/tools"-I/testsuite/tools"-c * + J/home/ci/builds/workspace/precheck/flambda/false/label/ocaml-ubuntu-latest B76543210/.-,+*)('&%$#"! @@0168&q8PG\u ,H3 H H H H H H H H@ G@@5Build_path_prefix_map0DGl}%Y5Lhi0udTw|dxv ,Bytesections0@3\f8CamlinternalFormatBasics0|.e1R$|oȐ0܈[P(N {~Š*Format_doc0uy@GmWUࠠ 06la7̖nU0]\/j*^e&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Digest0#z25I*.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Either0HD ?|>.Stdlib__Format0b HvkR/Stdlib__Hashtbl0(L%bԠ+Stdlib__Map0*4ɇ2@06la7̖nAf@@P `@ C @  @]`@ 2y@@C=K q@ړ@1!@@ߐM@@^@E @ M W@.  @@i@ }@@P.  @@@   6 @  @  b@ِװC0@ݒ @֕@@@P@@