Skip to content

Commit

Permalink
[rules] Factor out the calculation of build root.
Browse files Browse the repository at this point in the history
Several plugins need to access this information, so we place it in
`gen_rules` for consistency.

Signed-off-by: Emilio Jesus Gallego Arias <e+git@x80.org>
  • Loading branch information
ejgallego committed Apr 17, 2019
1 parent c136094 commit a067c54
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 16 deletions.
8 changes: 3 additions & 5 deletions src/coq_rules.ml
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ let setup_ml_deps ~lib_db libs =
let coqlib_wrapper_name (s : Dune_file.Coq.t) =
Lib_name.Local.to_string (snd s.name)

let setup_rules ~sctx ~dir ~dir_contents (s : Dune_file.Coq.t) =
let setup_rules ~sctx ~root_dir:_ ~dir ~dir_contents (s : Dune_file.Coq.t) =

let scope = SC.find_scope_by_dir sctx dir in

Expand Down Expand Up @@ -203,16 +203,14 @@ let install_rules ~sctx ~dir s =
None, Install.(Entry.make Section.Lib_root ~dst vofile))
|> List.rev_append (coq_plugins_install_rules ~scope ~package ~dst_dir s)

let coqpp_rules ~sctx ~dir (s : Dune_file.Coqpp.t) =
let coqpp_rules ~sctx ~root_dir ~dir (s : Dune_file.Coqpp.t) =

let scope = SC.find_scope_by_dir sctx dir in
let base_dir = Scope.root scope in
let cc = create_ccoq sctx ~dir in

let mlg_rule m =
let source = Path.relative dir (m ^ ".mlg") in
let target = Path.relative dir (m ^ ".ml") in
let args = Arg_spec.[Dep source; Hidden_targets [target]] in
Build.run ~dir:base_dir cc.coqpp args in
Build.run ~dir:root_dir cc.coqpp args in

List.map ~f:mlg_rule s.modules
2 changes: 2 additions & 0 deletions src/coq_rules.mli
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ open! Stdune

val setup_rules
: sctx:Super_context.t
-> root_dir:Path.t
-> dir:Path.t
-> dir_contents:Dir_contents.t
-> Dune_file.Coq.t
Expand All @@ -21,6 +22,7 @@ val install_rules

val coqpp_rules
: sctx:Super_context.t
-> root_dir:Path.t
-> dir:Path.t
-> Dune_file.Coqpp.t
-> (unit, Action.t) Build.t list
14 changes: 6 additions & 8 deletions src/gen_rules.ml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ module Gen(P : sig val sctx : Super_context.t end) = struct
let gen_rules dir_contents cctxs
{ Dir_with_dune. src_dir; ctx_dir; data = stanzas
; scope; kind = dir_kind ; dune_version = _ } =
let root_dir = Scope.root scope in
let expander = Super_context.expander sctx ~dir:ctx_dir in
let for_stanza stanza =
let dir = ctx_dir in
Expand Down Expand Up @@ -181,17 +182,14 @@ module Gen(P : sig val sctx : Super_context.t end) = struct
produced by this stanza are part of."
})
| Some cctx ->
Menhir_rules.gen_rules cctx m ~dir:ctx_dir
Menhir_rules.gen_rules cctx m ~root_dir ~dir:ctx_dir
end
| Coq.T m when Expander.eval_blang expander m.enabled_if ->
(* Format.eprintf "[coq] gen_rules called @\n%!"; *)
let dir = ctx_dir in
let coq_rules = Coq_rules.setup_rules ~sctx ~dir ~dir_contents m in
SC.add_rules ~dir:ctx_dir sctx coq_rules
Coq_rules.setup_rules ~sctx ~root_dir ~dir:ctx_dir ~dir_contents m
|> SC.add_rules ~dir:ctx_dir sctx
| Coqpp.T m ->
let dir = ctx_dir in
let coqpp_rules = Coq_rules.coqpp_rules ~sctx ~dir m in
SC.add_rules ~dir:ctx_dir sctx coqpp_rules
Coq_rules.coqpp_rules ~sctx ~root_dir ~dir:ctx_dir m
|> SC.add_rules ~dir:ctx_dir sctx
| _ -> ());
let dyn_deps =
let pred =
Expand Down
4 changes: 2 additions & 2 deletions src/menhir.ml
Original file line number Diff line number Diff line change
Expand Up @@ -322,12 +322,12 @@ let targets (stanza : Dune_file.Menhir.t) : string list =
let module_names (stanza : Dune_file.Menhir.t) : Module.Name.t list =
List.map (modules stanza) ~f:Module.Name.of_string

let gen_rules ~dir cctx stanza =
let gen_rules ~root_dir ~dir cctx stanza =
let module R =
Run (struct
let cctx = cctx
let dir = dir
let root_dir = Scope.root (Compilation_context.scope cctx)
let root_dir = root_dir
let stanza = stanza
end) in
()
3 changes: 2 additions & 1 deletion src/menhir.mli
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ val module_names : Dune_file.Menhir.t -> Module.Name.t list

(** Generate the rules for a [(menhir ...)] stanza. *)
val gen_rules
: dir:Path.t
: root_dir:Path.t
-> dir:Path.t
-> Compilation_context.t
-> Dune_file.Menhir.t
-> unit

0 comments on commit a067c54

Please sign in to comment.