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:
|
``<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
|
- ``(javascript_files (<files-list>))`` to specify ``js_of_ocaml`` JavaScript
|
||||||
runtime files.
|
runtime files.
|
||||||
|
|
|
@ -453,7 +453,12 @@ module Gen(P : Params) = struct
|
||||||
]);
|
]);
|
||||||
if mode = Mode.Byte then
|
if mode = Mode.Byte then
|
||||||
let rules = Js_of_ocaml_rules.build_exe sctx ~dir ~js_of_ocaml ~src:exe in
|
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 executables_rules (exes : Executables.t) ~dir ~all_modules ~scope =
|
||||||
let dep_kind = Build.Required in
|
let dep_kind = Build.Required in
|
||||||
|
|
|
@ -310,27 +310,24 @@ module Lint = struct
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
let field_osl name =
|
|
||||||
field name Ordered_set_lang.t ~default:Ordered_set_lang.standard
|
|
||||||
|
|
||||||
let field_oslu name =
|
let field_oslu name =
|
||||||
field name Ordered_set_lang.Unexpanded.t ~default:Ordered_set_lang.Unexpanded.standard
|
field name Ordered_set_lang.Unexpanded.t ~default:Ordered_set_lang.Unexpanded.standard
|
||||||
|
|
||||||
module Js_of_ocaml = struct
|
module Js_of_ocaml = struct
|
||||||
|
|
||||||
type t =
|
type t =
|
||||||
{ flags : Ordered_set_lang.t
|
{ flags : Ordered_set_lang.Unexpanded.t
|
||||||
; javascript_files : string list
|
; javascript_files : string list
|
||||||
}
|
}
|
||||||
|
|
||||||
let t =
|
let t =
|
||||||
record
|
record
|
||||||
(field_osl "flags" >>= fun flags ->
|
(field_oslu "flags" >>= fun flags ->
|
||||||
field "javascript_files" (list string) ~default:[] >>= fun javascript_files ->
|
field "javascript_files" (list string) ~default:[] >>= fun javascript_files ->
|
||||||
return { flags; javascript_files })
|
return { flags; javascript_files })
|
||||||
|
|
||||||
let default =
|
let default =
|
||||||
{ flags = Ordered_set_lang.standard
|
{ flags = Ordered_set_lang.Unexpanded.standard
|
||||||
; javascript_files = [] }
|
; javascript_files = [] }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ end
|
||||||
|
|
||||||
module Js_of_ocaml : sig
|
module Js_of_ocaml : sig
|
||||||
type t =
|
type t =
|
||||||
{ flags : Ordered_set_lang.t
|
{ flags : Ordered_set_lang.Unexpanded.t
|
||||||
; javascript_files : string list
|
; javascript_files : string list
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
open Import
|
open Import
|
||||||
open! No_io
|
open! No_io
|
||||||
|
open Build.O
|
||||||
|
|
||||||
module SC = Super_context
|
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
|
let runtime = runtime_file ~sctx ~dir "runtime.js" in
|
||||||
Build.run ~context:(SC.context sctx) ~dir
|
Build.run ~context:(SC.context sctx) ~dir
|
||||||
jsoo
|
jsoo
|
||||||
[ Arg_spec.As flags
|
[ Arg_spec.Dyn flags
|
||||||
; Arg_spec.A "-o"; Target target
|
; Arg_spec.A "-o"; Target target
|
||||||
; Arg_spec.A "--no-runtime"; runtime
|
; Arg_spec.A "--no-runtime"; runtime
|
||||||
; spec
|
; spec
|
||||||
]
|
]
|
||||||
|
|
||||||
let standalone_runtime_rule ~sctx ~dir ~flags ~javascript_files ~target =
|
let standalone_runtime_rule ~sctx ~dir ~javascript_files ~target =
|
||||||
let spec =
|
let spec =
|
||||||
Arg_spec.S
|
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.Deps javascript_files
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
let flags = Ordered_set_lang.eval_with_standard flags ~standard:(standard ()) in
|
Build.arr (fun (libs_and_cm,flags) -> (libs_and_cm, "--runtime-only" :: flags))
|
||||||
let flags = "--runtime-only" :: flags in
|
>>>
|
||||||
js_of_ocaml_rule ~sctx ~dir ~flags ~target ~spec
|
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 =
|
let spec =
|
||||||
Arg_spec.S
|
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.Deps javascript_files
|
||||||
; Arg_spec.Dep src
|
; Arg_spec.Dep src
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
let flags = Ordered_set_lang.eval_with_standard flags ~standard:(standard ()) in
|
js_of_ocaml_rule ~sctx ~dir ~flags:(fun (_,flags) -> As flags) ~spec ~target
|
||||||
js_of_ocaml_rule ~sctx ~dir ~flags ~spec ~target
|
|
||||||
|
|
||||||
let link_rule ~sctx ~dir ~runtime ~target =
|
let link_rule ~sctx ~dir ~runtime ~target =
|
||||||
let ctx = SC.context sctx in
|
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 *)
|
(* 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 stdlib = Lib.External (Findlib.stdlib_with_archives ctx.findlib) in
|
||||||
let all_libs =
|
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
|
then let target = Path.extend_basename src ~suffix:".js" in
|
||||||
let spec = Arg_spec.Dep src in
|
let spec = Arg_spec.Dep src in
|
||||||
let flags =
|
let flags =
|
||||||
Ordered_set_lang.eval_with_standard
|
SC.expand_and_eval_set ~dir js_of_ocaml.Jbuild.Js_of_ocaml.flags
|
||||||
js_of_ocaml.Jbuild.Js_of_ocaml.flags
|
|
||||||
~standard:(standard ())
|
~standard:(standard ())
|
||||||
in
|
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 []
|
else []
|
||||||
|
|
||||||
let setup_separate_compilation_rules sctx =
|
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 target = in_build_dir ~ctx [ pkg_name; sprintf "%s.js" name] in
|
||||||
let dir = in_build_dir ~ctx [ pkg_name ] in
|
let dir = in_build_dir ~ctx [ pkg_name ] in
|
||||||
let spec = Arg_spec.Dep src in
|
let spec = Arg_spec.Dep src in
|
||||||
let flags = standard () in
|
Build.return (standard ())
|
||||||
js_of_ocaml_rule ~sctx ~dir ~flags ~spec ~target
|
>>>
|
||||||
|
js_of_ocaml_rule ~sctx ~dir ~flags:(fun flags -> As flags) ~spec ~target
|
||||||
))
|
))
|
||||||
else []
|
else []
|
||||||
|
|
||||||
let build_exe sctx ~dir ~js_of_ocaml ~src =
|
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 javascript_files = List.map javascript_files ~f:(Path.relative dir) in
|
||||||
let mk_target ext = Path.extend_basename src ~suffix:ext in
|
let mk_target ext = Path.extend_basename src ~suffix:ext in
|
||||||
let target = mk_target ".js" in
|
let target = mk_target ".js" in
|
||||||
let standalone_runtime = mk_target ".runtime.js" in
|
let standalone_runtime = mk_target ".runtime.js" in
|
||||||
if separate_compilation_enabled () then
|
if separate_compilation_enabled () then
|
||||||
[ link_rule ~sctx ~dir ~runtime:standalone_runtime ~target
|
[ 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
|
~target:standalone_runtime
|
||||||
]
|
]
|
||||||
else
|
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
|
-> dir:Path.t
|
||||||
-> js_of_ocaml:Js_of_ocaml.t
|
-> js_of_ocaml:Js_of_ocaml.t
|
||||||
-> src:Path.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
|
val setup_separate_compilation_rules
|
||||||
: Super_context.t
|
: Super_context.t
|
||||||
-> (unit, Action.t) Build.t list
|
-> (unit, Action.t) Build.t list
|
||||||
|
|
||||||
|
val standard : unit -> string list
|
||||||
|
|
Loading…
Reference in New Issue