Skip to content

Commit ed41276

Browse files
authored
melange: use --mel-* flags for the (melange 1.0) extension version (ocaml#12081)
Signed-off-by: Antonio Nuno Monteiro <[email protected]>
1 parent 5a10815 commit ed41276

File tree

4 files changed

+92
-16
lines changed

4 files changed

+92
-16
lines changed

src/dune_rules/lib_rules.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -510,10 +510,10 @@ let cctx (lib : Library.t) ~sctx ~source_modules ~dir ~expander ~scope ~compile_
510510
let package = Library.package lib in
511511
let js_of_ocaml = Js_of_ocaml.In_context.make ~dir lib.buildable.js_of_ocaml in
512512
(* XXX(anmonteiro): `melange_package_name` is used to derive Melange's
513-
`--bs-package-name` argument. We only use the library name for public
513+
`--mel-package-name` argument. We only use the library name for public
514514
libraries / private libraries with `(package ..)` because we need Melange
515515
to preserve relative paths for private libs (i.e. not pass the
516-
`--bs-package-name` arg). *)
516+
`--mel-package-name` arg). *)
517517
let melange_package_name =
518518
match lib.visibility with
519519
| Public p -> Some (Public_lib.name p)

src/dune_rules/melange/melange_rules.ml

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ let js_targets_of_libs ~sctx ~scope ~module_systems ~target_dir libs =
214214
let build_js
215215
~loc
216216
~dir
217+
~scope
217218
~pkg_name
218219
~mode
219220
~module_systems
@@ -225,6 +226,11 @@ let build_js
225226
~local_modules_and_obj_dir
226227
m
227228
=
229+
let melange_extension_version =
230+
let project = Scope.project scope in
231+
Dune_project.find_extension_version project Dune_lang.Melange.syntax
232+
|> Option.value_exn
233+
in
228234
let* compiler = Melange_binary.melc sctx ~loc:(Some loc) ~dir in
229235
Memo.parallel_iter module_systems ~f:(fun (module_system, js_ext) ->
230236
let build =
@@ -234,12 +240,19 @@ let build_js
234240
let obj_dir = [ Command.Args.A "-I"; Path (Obj_dir.melange_dir obj_dir) ] in
235241
let melange_package_args =
236242
let pkg_name_args =
237-
match pkg_name with
238-
| None -> []
239-
| Some pkg_name -> [ "--bs-package-name"; Package.Name.to_string pkg_name ]
243+
match pkg_name, melange_extension_version with
244+
| None, _ -> []
245+
| Some pkg_name, (0, 1) ->
246+
[ "--bs-package-name"; Package.Name.to_string pkg_name ]
247+
| Some pkg_name, _ ->
248+
[ "--mel-package-name"; Package.Name.to_string pkg_name ]
240249
in
241250
let js_modules_str = Melange.Module_system.to_string module_system in
242-
"--bs-module-type" :: js_modules_str :: pkg_name_args
251+
(if melange_extension_version >= (1, 0)
252+
then "--mel-module-type"
253+
else "--bs-module-type")
254+
:: js_modules_str
255+
:: pkg_name_args
243256
in
244257
Command.run
245258
~dir:(Super_context.context sctx |> Context.build_dir |> Path.build)
@@ -530,8 +543,9 @@ let setup_entries_js
530543
in
531544
Memo.parallel_iter modules_for_js ~f:(fun m ->
532545
build_js
533-
~dir
534546
~loc
547+
~dir
548+
~scope
535549
~pkg_name
536550
~mode
537551
~module_systems
@@ -561,7 +575,7 @@ let setup_js_rules_libraries =
561575
Memo.parallel_iter source_modules ~f:(build_js ~local_modules_and_obj_dir)
562576
in
563577
fun ~dir ~scope ~target_dir ~sctx ~requires_link ~mode (mel : Melange_stanzas.Emit.t) ->
564-
let build_js = build_js ~sctx ~mode ~module_systems:mel.module_systems in
578+
let build_js = build_js ~sctx ~scope ~mode ~module_systems:mel.module_systems in
565579
let with_vlib_implementations =
566580
let vlib_implementations =
567581
(* vlib_name => concrete_impl *)

src/dune_rules/module_compilation.ml

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ let melange_args (cctx : Compilation_context.t) (cm_kind : Lib_mode.Cm_kind.t) m
6464
match cm_kind with
6565
| Ocaml (Cmi | Cmo | Cmx) | Melange Cmi -> []
6666
| Melange Cmj ->
67-
let bs_package_name, bs_package_output =
67+
let melange_extension_version =
68+
let scope = Compilation_context.scope cctx in
69+
let dune_project = Scope.project scope in
70+
Dune_project.find_extension_version dune_project Dune_lang.Melange.syntax
71+
|> Option.value_exn
72+
in
73+
let mel_package_name, mel_package_output =
6874
let package_output =
6975
Module.file ~ml_kind:Impl module_ |> Option.value_exn |> Path.parent_exn
7076
in
@@ -84,15 +90,29 @@ let melange_args (cctx : Compilation_context.t) (cm_kind : Lib_mode.Cm_kind.t) m
8490
|> Path.Local.to_string
8591
|> Path.Build.relative build_dir
8692
in
87-
( [ Command.Args.A "--bs-package-name"; A (Lib_name.to_string lib_name) ]
93+
( [ Command.Args.A
94+
(if melange_extension_version >= (1, 0)
95+
then "--mel-package-name"
96+
else "--bs-package-name")
97+
; A (Lib_name.to_string lib_name)
98+
]
8899
, Path.build dir )
89100
in
90-
Command.Args.A "--bs-stop-after-cmj"
91-
:: A "--bs-package-output"
92-
:: Command.Args.Path bs_package_output
93-
:: A "--bs-module-name"
94-
:: A (Melange.js_basename module_)
95-
:: bs_package_name
101+
if melange_extension_version >= (1, 0)
102+
then
103+
Command.Args.A "--mel-stop-after-cmj"
104+
:: A "--mel-package-output"
105+
:: Command.Args.Path mel_package_output
106+
:: A "--mel-module-name"
107+
:: A (Melange.js_basename module_)
108+
:: mel_package_name
109+
else
110+
Command.Args.A "--bs-stop-after-cmj"
111+
:: A "--bs-package-output"
112+
:: Command.Args.Path mel_package_output
113+
:: A "--bs-module-name"
114+
:: A (Melange.js_basename module_)
115+
:: mel_package_name
96116
;;
97117

98118
let build_cm
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
Test Melange extension stanza versioning
2+
3+
$ cat > dune-project <<EOF
4+
> (lang dune 3.8)
5+
> (using melange 1.0)
6+
> (package (name pkg))
7+
> EOF
8+
9+
$ mkdir app
10+
$ cat > app/dune <<EOF
11+
> (library
12+
> (public_name pkg)
13+
> (modes melange))
14+
> EOF
15+
$ cat > app/app.ml <<EOF
16+
> let x = "hello"
17+
> EOF
18+
19+
Only supported after Dune 3.20
20+
$ dune rules app/.pkg.objs/melange/pkg__App.cmj
21+
File "dune-project", line 2, characters 15-18:
22+
2 | (using melange 1.0)
23+
^^^
24+
Error: Version 1.0 of the Melange extension is not supported until version
25+
3.20 of the dune language.
26+
Supported versions of this extension in version 3.8 of the dune language:
27+
- 0.1
28+
[1]
29+
30+
$ cat > dune-project <<EOF
31+
> (lang dune 3.20)
32+
> (using melange 1.0)
33+
> (package (name pkg))
34+
> EOF
35+
36+
Cmj rules should include --mel-package-output
37+
$ dune rules app/.pkg.objs/melange/pkg__App.cmj |
38+
> grep -e "--mel-package-name" --after-context=1
39+
--mel-package-name
40+
pkg
41+
42+

0 commit comments

Comments
 (0)