@@ -992,6 +992,40 @@ module Library = struct
992992 | Some `X86 -> architecture = " amd64" || architecture = " x86_64"
993993 ;;
994994
995+ let gen_build_info_module wrapper m =
996+ let src =
997+ let fn = String. uncapitalize_ascii m ^ " .ml" in
998+ { file = fn; kind = Ml }
999+ in
1000+ let mangled = Wrapper. mangle_filename wrapper src in
1001+ let oc = open_out (build_dir ^/ mangled) in
1002+ let + () = Build_info. gen_data_module oc in
1003+ close_out oc;
1004+ src, mangled
1005+ ;;
1006+
1007+ let process_source_file wrapper ~header ({ file = fn ; kind } as source ) =
1008+ let mangled = Wrapper. mangle_filename wrapper source in
1009+ let dst = build_dir ^/ mangled in
1010+ let + mangled =
1011+ match kind with
1012+ | Asm _ ->
1013+ copy fn dst;
1014+ Fiber. return [ mangled ]
1015+ | Header | C _ ->
1016+ copy_with_directive ~directive: " line" fn dst;
1017+ Fiber. return [ mangled ]
1018+ | Ml | Mli ->
1019+ copy_with_header ~header fn dst;
1020+ Fiber. return [ mangled ]
1021+ | Mll -> copy_lexer fn dst ~header >>> Fiber. return [ mangled ]
1022+ | Mly ->
1023+ (* CR rgrinberg: what if the parser already has an mli? *)
1024+ copy_parser fn dst ~header >>> Fiber. return [ mangled; mangled ^ " i" ]
1025+ in
1026+ List. map mangled ~f: (fun m -> source, m)
1027+ ;;
1028+
9951029 let process
9961030 { Libs. path = dir
9971031 ; main_module_name = namespace
@@ -1021,39 +1055,12 @@ module Library = struct
10211055 let header = Wrapper. header wrapper in
10221056 let + files, build_info_file =
10231057 Fiber. fork_and_join
1024- (fun () ->
1025- Fiber. parallel_map files ~f: (fun ({ file = fn ; kind } as source ) ->
1026- let mangled = Wrapper. mangle_filename wrapper source in
1027- let dst = build_dir ^/ mangled in
1028- let + mangled =
1029- match kind with
1030- | Asm _ ->
1031- copy fn dst;
1032- Fiber. return [ mangled ]
1033- | Header | C _ ->
1034- copy_with_directive ~directive: " line" fn dst;
1035- Fiber. return [ mangled ]
1036- | Ml | Mli ->
1037- copy_with_header ~header fn dst;
1038- Fiber. return [ mangled ]
1039- | Mll -> copy_lexer fn dst ~header >>> Fiber. return [ mangled ]
1040- | Mly ->
1041- (* CR rgrinberg: what if the parser already has an mli? *)
1042- copy_parser fn dst ~header >>> Fiber. return [ mangled; mangled ^ " i" ]
1043- in
1044- List. map mangled ~f: (fun m -> source, m)))
1058+ (fun () -> Fiber. parallel_map files ~f: (process_source_file wrapper ~header ))
10451059 (fun () ->
10461060 match build_info_module with
10471061 | None -> Fiber. return None
10481062 | Some m ->
1049- let src =
1050- let fn = String. uncapitalize_ascii m ^ " .ml" in
1051- { file = fn; kind = Ml }
1052- in
1053- let mangled = Wrapper. mangle_filename wrapper src in
1054- let oc = open_out (build_dir ^/ mangled) in
1055- let + () = Build_info. gen_data_module oc in
1056- close_out oc;
1063+ let + src, mangled = gen_build_info_module wrapper m in
10571064 Some (src, mangled))
10581065 in
10591066 let alias_file = Wrapper. generate_wrapper wrapper modules in
0 commit comments