@@ -98,18 +98,30 @@ module L = struct
98
98
| lib :: _ -> Path.Set. remove dirs (Lib. lib_config lib).stdlib_dir
99
99
;;
100
100
101
+ type mode =
102
+ { lib_mode : Lib_mode .t
103
+ ; melange_emit : bool
104
+ }
105
+
101
106
let include_paths =
102
107
let add_public_dir ~visible_cmi obj_dir acc mode =
103
108
match visible_cmi with
104
109
| false -> acc
105
110
| true ->
106
- let public_cmi_dir =
107
- (match mode with
108
- | `Byte -> Obj_dir. public_cmi_ocaml_dir
109
- | `Melange -> Obj_dir. public_cmi_melange_dir)
110
- obj_dir
111
+ let public_cmi_dirs =
112
+ List. map
113
+ ~f: (fun f -> f obj_dir)
114
+ (match mode with
115
+ | { lib_mode = Ocaml _ ; _ } -> [ Obj_dir. public_cmi_ocaml_dir ]
116
+ | { lib_mode = Melange ; melange_emit = false } ->
117
+ [ Obj_dir. public_cmi_melange_dir ]
118
+ | { lib_mode = Melange ; melange_emit = true } ->
119
+ (* Add the dir where `.cmj` files exist, even for installed
120
+ private libraries. Melange needs to query `.cmj` files for
121
+ `import` information *)
122
+ [ Obj_dir. melange_dir; Obj_dir. public_cmi_melange_dir ])
111
123
in
112
- Path.Set. add acc public_cmi_dir
124
+ List. fold_left public_cmi_dirs ~init: acc ~f: Path.Set. add
113
125
in
114
126
fun ?project ts mode ->
115
127
let visible_cmi =
@@ -130,11 +142,11 @@ module L = struct
130
142
List. fold_left ts ~init: Path.Set. empty ~f: (fun acc t ->
131
143
let obj_dir = Lib_info. obj_dir (Lib. info t) in
132
144
let visible_cmi = visible_cmi t in
133
- match mode with
134
- | Lib_mode. Melange -> add_public_dir ~visible_cmi obj_dir acc `Melange
135
- | Ocaml mode ->
136
- let acc = add_public_dir ~visible_cmi obj_dir acc `Byte in
137
- (match mode with
145
+ match mode.lib_mode with
146
+ | Melange -> add_public_dir ~visible_cmi obj_dir acc mode
147
+ | Ocaml ocaml_mode ->
148
+ let acc = add_public_dir ~visible_cmi obj_dir acc mode in
149
+ (match ocaml_mode with
138
150
| Byte -> acc
139
151
| Native ->
140
152
let native_dir = Obj_dir. native_dir obj_dir in
@@ -143,7 +155,17 @@ module L = struct
143
155
remove_stdlib dirs ts
144
156
;;
145
157
146
- let include_flags ?project ts mode = to_iflags (include_paths ?project ts mode)
158
+ let include_flags ?project ts mode =
159
+ to_iflags (include_paths ?project ts { lib_mode = mode; melange_emit = false })
160
+ ;;
161
+
162
+ let melange_emission_include_flags ?project ts =
163
+ to_iflags (include_paths ?project ts { lib_mode = Melange ; melange_emit = true })
164
+ ;;
165
+
166
+ let include_paths ?project ts mode =
167
+ include_paths ?project ts { lib_mode = mode; melange_emit = false }
168
+ ;;
147
169
148
170
let c_include_paths ts =
149
171
let dirs =
0 commit comments