Extend (:include ) form to js_of_ocaml flags
This commit is contained in:
parent
cebbb219e7
commit
ec29651cff
|
@ -874,7 +874,8 @@ using ``(js_of_ocaml (<js_of_ocaml-options>))``.
|
|||
|
||||
``<js_of_ocaml-options>`` are all optional:
|
||||
|
||||
- ``(flags <flags>)`` to specify flags passed to ``js_of_ocaml``
|
||||
- ``(flags <flags>)`` to specify flags passed to ``js_of_ocaml``. This field
|
||||
supports ``(:include ...)`` forms
|
||||
|
||||
- ``(javascript_files (<files-list>))`` to specify ``js_of_ocaml`` JavaScript
|
||||
runtime files.
|
||||
|
|
|
@ -453,7 +453,12 @@ module Gen(P : Params) = struct
|
|||
]);
|
||||
if mode = Mode.Byte then
|
||||
let rules = Js_of_ocaml_rules.build_exe sctx ~dir ~js_of_ocaml ~src:exe in
|
||||
SC.add_rules sctx (List.map rules ~f:(fun r -> libs_and_cm >>> r))
|
||||
let libs_and_cm_and_flags =
|
||||
libs_and_cm
|
||||
&&&
|
||||
SC.expand_and_eval_set ~dir js_of_ocaml.flags ~standard:(Js_of_ocaml_rules.standard ())
|
||||
in
|
||||
SC.add_rules sctx (List.map rules ~f:(fun r -> libs_and_cm_and_flags >>> r))
|
||||
|
||||
let executables_rules (exes : Executables.t) ~dir ~all_modules ~scope =
|
||||
let dep_kind = Build.Required in
|
||||
|
|
|
@ -310,27 +310,24 @@ module Lint = struct
|
|||
]
|
||||
end
|
||||
|
||||
let field_osl name =
|
||||
field name Ordered_set_lang.t ~default:Ordered_set_lang.standard
|
||||
|
||||
let field_oslu name =
|
||||
field name Ordered_set_lang.Unexpanded.t ~default:Ordered_set_lang.Unexpanded.standard
|
||||
|
||||
module Js_of_ocaml = struct
|
||||
|
||||
type t =
|
||||
{ flags : Ordered_set_lang.t
|
||||
{ flags : Ordered_set_lang.Unexpanded.t
|
||||
; javascript_files : string list
|
||||
}
|
||||
|
||||
let t =
|
||||
record
|
||||
(field_osl "flags" >>= fun flags ->
|
||||
(field_oslu "flags" >>= fun flags ->
|
||||
field "javascript_files" (list string) ~default:[] >>= fun javascript_files ->
|
||||
return { flags; javascript_files })
|
||||
|
||||
let default =
|
||||
{ flags = Ordered_set_lang.standard
|
||||
{ flags = Ordered_set_lang.Unexpanded.standard
|
||||
; javascript_files = [] }
|
||||
end
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ end
|
|||
|
||||
module Js_of_ocaml : sig
|
||||
type t =
|
||||
{ flags : Ordered_set_lang.t
|
||||
{ flags : Ordered_set_lang.Unexpanded.t
|
||||
; javascript_files : string list
|
||||
}
|
||||
end
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
open Import
|
||||
open! No_io
|
||||
open Build.O
|
||||
|
||||
module SC = Super_context
|
||||
|
||||
|
@ -33,37 +34,36 @@ let js_of_ocaml_rule ~sctx ~dir ~flags ~spec ~target =
|
|||
let runtime = runtime_file ~sctx ~dir "runtime.js" in
|
||||
Build.run ~context:(SC.context sctx) ~dir
|
||||
jsoo
|
||||
[ Arg_spec.As flags
|
||||
[ Arg_spec.Dyn flags
|
||||
; Arg_spec.A "-o"; Target target
|
||||
; Arg_spec.A "--no-runtime"; runtime
|
||||
; spec
|
||||
]
|
||||
|
||||
let standalone_runtime_rule ~sctx ~dir ~flags ~javascript_files ~target =
|
||||
let standalone_runtime_rule ~sctx ~dir ~javascript_files ~target =
|
||||
let spec =
|
||||
Arg_spec.S
|
||||
[ Arg_spec.Dyn (fun (libs,_) -> Arg_spec.Deps (Lib.jsoo_runtime_files libs))
|
||||
[ Arg_spec.Dyn (fun ((libs,_),_) -> Arg_spec.Deps (Lib.jsoo_runtime_files libs))
|
||||
; Arg_spec.Deps javascript_files
|
||||
]
|
||||
in
|
||||
let flags = Ordered_set_lang.eval_with_standard flags ~standard:(standard ()) in
|
||||
let flags = "--runtime-only" :: flags in
|
||||
js_of_ocaml_rule ~sctx ~dir ~flags ~target ~spec
|
||||
Build.arr (fun (libs_and_cm,flags) -> (libs_and_cm, "--runtime-only" :: flags))
|
||||
>>>
|
||||
js_of_ocaml_rule ~sctx ~dir ~flags:(fun (_,flags) -> As flags) ~target ~spec
|
||||
|
||||
let exe_rule ~sctx ~dir ~flags ~javascript_files ~src ~target =
|
||||
let exe_rule ~sctx ~dir ~javascript_files ~src ~target =
|
||||
let spec =
|
||||
Arg_spec.S
|
||||
[ Arg_spec.Dyn (fun (libs,_) -> Arg_spec.Deps (Lib.jsoo_runtime_files libs))
|
||||
[ Arg_spec.Dyn (fun ((libs,_),_) -> Arg_spec.Deps (Lib.jsoo_runtime_files libs))
|
||||
; Arg_spec.Deps javascript_files
|
||||
; Arg_spec.Dep src
|
||||
]
|
||||
in
|
||||
let flags = Ordered_set_lang.eval_with_standard flags ~standard:(standard ()) in
|
||||
js_of_ocaml_rule ~sctx ~dir ~flags ~spec ~target
|
||||
js_of_ocaml_rule ~sctx ~dir ~flags:(fun (_,flags) -> As flags) ~spec ~target
|
||||
|
||||
let link_rule ~sctx ~dir ~runtime ~target =
|
||||
let ctx = SC.context sctx in
|
||||
let get_all (libs,cm) =
|
||||
let get_all ((libs,cm),_) =
|
||||
(* Special case for the stdlib because it is not referenced in the META *)
|
||||
let stdlib = Lib.External (Findlib.stdlib_with_archives ctx.findlib) in
|
||||
let all_libs =
|
||||
|
@ -94,11 +94,12 @@ let build_cm sctx ~dir ~js_of_ocaml ~src =
|
|||
then let target = Path.extend_basename src ~suffix:".js" in
|
||||
let spec = Arg_spec.Dep src in
|
||||
let flags =
|
||||
Ordered_set_lang.eval_with_standard
|
||||
js_of_ocaml.Jbuild.Js_of_ocaml.flags
|
||||
SC.expand_and_eval_set ~dir js_of_ocaml.Jbuild.Js_of_ocaml.flags
|
||||
~standard:(standard ())
|
||||
in
|
||||
[ js_of_ocaml_rule ~sctx ~dir ~flags ~spec ~target ]
|
||||
[ flags
|
||||
>>>
|
||||
js_of_ocaml_rule ~sctx ~dir ~flags:(fun flags -> As flags) ~spec ~target ]
|
||||
else []
|
||||
|
||||
let setup_separate_compilation_rules sctx =
|
||||
|
@ -126,21 +127,22 @@ let setup_separate_compilation_rules sctx =
|
|||
let target = in_build_dir ~ctx [ pkg_name; sprintf "%s.js" name] in
|
||||
let dir = in_build_dir ~ctx [ pkg_name ] in
|
||||
let spec = Arg_spec.Dep src in
|
||||
let flags = standard () in
|
||||
js_of_ocaml_rule ~sctx ~dir ~flags ~spec ~target
|
||||
Build.return (standard ())
|
||||
>>>
|
||||
js_of_ocaml_rule ~sctx ~dir ~flags:(fun flags -> As flags) ~spec ~target
|
||||
))
|
||||
else []
|
||||
|
||||
let build_exe sctx ~dir ~js_of_ocaml ~src =
|
||||
let {Jbuild.Js_of_ocaml.javascript_files; flags} = js_of_ocaml in
|
||||
let {Jbuild.Js_of_ocaml.javascript_files; _} = js_of_ocaml in
|
||||
let javascript_files = List.map javascript_files ~f:(Path.relative dir) in
|
||||
let mk_target ext = Path.extend_basename src ~suffix:ext in
|
||||
let target = mk_target ".js" in
|
||||
let standalone_runtime = mk_target ".runtime.js" in
|
||||
if separate_compilation_enabled () then
|
||||
[ link_rule ~sctx ~dir ~runtime:standalone_runtime ~target
|
||||
; standalone_runtime_rule ~sctx ~dir ~flags ~javascript_files
|
||||
; standalone_runtime_rule ~sctx ~dir ~javascript_files
|
||||
~target:standalone_runtime
|
||||
]
|
||||
else
|
||||
[ exe_rule ~sctx ~dir ~flags ~javascript_files ~src ~target ]
|
||||
[ exe_rule ~sctx ~dir ~javascript_files ~src ~target ]
|
||||
|
|
|
@ -14,10 +14,10 @@ val build_exe
|
|||
-> dir:Path.t
|
||||
-> js_of_ocaml:Js_of_ocaml.t
|
||||
-> src:Path.t
|
||||
-> (Lib.t list * Path.t list, Action.t) Build.t list
|
||||
-> ((Lib.t list * Path.t list) * string list, Action.t) Build.t list
|
||||
|
||||
val setup_separate_compilation_rules
|
||||
: Super_context.t
|
||||
-> (unit, Action.t) Build.t list
|
||||
|
||||
|
||||
val standard : unit -> string list
|
||||
|
|
Loading…
Reference in New Issue