diff --git a/src/dune_rules/dune_file.ml b/src/dune_rules/dune_file.ml index a1a11e121f3..33b714fa5ca 100644 --- a/src/dune_rules/dune_file.ml +++ b/src/dune_rules/dune_file.ml @@ -1761,50 +1761,6 @@ module Toplevel = struct ;; end -module Copy_files = struct - type t = - { add_line_directive : bool - ; alias : Alias.Name.t option - ; mode : Rule.Mode.t - ; enabled_if : Blang.t - ; files : String_with_vars.t - ; syntax_version : Dune_lang.Syntax.Version.t - } - - include Stanza.Make (struct - type nonrec t = t - - include Poly - end) - - let long_form = - let check = Dune_lang.Syntax.since Stanza.syntax (2, 7) in - let+ alias = field_o "alias" (check >>> Dune_lang.Alias.decode) - and+ mode = - field "mode" ~default:Rule.Mode.Standard (check >>> Rule_mode_decoder.decode) - and+ enabled_if = Enabled_if.decode ~allowed_vars:Any ~since:(Some (2, 8)) () - and+ files = field "files" (check >>> String_with_vars.decode) - and+ syntax_version = Dune_lang.Syntax.get_exn Stanza.syntax in - { add_line_directive = false; alias; mode; enabled_if; files; syntax_version } - ;; - - let decode = - peek_exn - >>= function - | List _ -> fields long_form - | _ -> - let+ files = String_with_vars.decode - and+ syntax_version = Dune_lang.Syntax.get_exn Stanza.syntax in - { add_line_directive = false - ; alias = None - ; mode = Standard - ; enabled_if = Blang.true_ - ; files - ; syntax_version - } - ;; -end - module Documentation = struct type t = { loc : Loc.t diff --git a/src/dune_rules/dune_file.mli b/src/dune_rules/dune_file.mli index 7c6741308eb..bbdba644b92 100644 --- a/src/dune_rules/dune_file.mli +++ b/src/dune_rules/dune_file.mli @@ -273,19 +273,6 @@ module Executables : sig val obj_dir : t -> dir:Path.Build.t -> Path.Build.t Obj_dir.t end -module Copy_files : sig - type t = - { add_line_directive : bool - ; alias : Alias.Name.t option - ; mode : Rule.Mode.t - ; enabled_if : Blang.t - ; files : String_with_vars.t - ; syntax_version : Dune_lang.Syntax.Version.t - } - - include Stanza.S with type t := t -end - module Documentation : sig type t = { loc : Loc.t diff --git a/src/dune_rules/simple_rules.ml b/src/dune_rules/simple_rules.ml index 5dfd9e5aeea..2ef712bc474 100644 --- a/src/dune_rules/simple_rules.ml +++ b/src/dune_rules/simple_rules.ml @@ -155,7 +155,7 @@ let user_rule sctx ?extra_bindings ~dir ~expander (rule : Rule_conf.t) = None) ;; -let copy_files sctx ~dir ~expander ~src_dir (def : Dune_file.Copy_files.t) = +let copy_files sctx ~dir ~expander ~src_dir (def : Copy_files.t) = let loc = String_with_vars.loc def.files in let* glob_in_src = let+ src_glob = Expander.No_deps.expand_str expander def.files in @@ -255,7 +255,7 @@ let copy_files sctx ~dir ~expander ~src_dir (def : Dune_file.Copy_files.t) = targets ;; -let copy_files sctx ~dir ~expander ~src_dir (def : Dune_file.Copy_files.t) = +let copy_files sctx ~dir ~expander ~src_dir (def : Copy_files.t) = Expander.eval_blang expander def.enabled_if >>= function | true -> copy_files sctx ~dir ~expander ~src_dir def diff --git a/src/dune_rules/simple_rules.mli b/src/dune_rules/simple_rules.mli index 75cec2a8df6..768ead5f469 100644 --- a/src/dune_rules/simple_rules.mli +++ b/src/dune_rules/simple_rules.mli @@ -28,7 +28,7 @@ val copy_files -> dir:Path.Build.t -> expander:Expander.t -> src_dir:Path.Source.t - -> Dune_file.Copy_files.t + -> Copy_files.t -> Path.Set.t Memo.t (** Interpret an [(alias ...)] stanza. *) diff --git a/src/dune_rules/stanzas/copy_files.ml b/src/dune_rules/stanzas/copy_files.ml new file mode 100644 index 00000000000..5c3a92167ca --- /dev/null +++ b/src/dune_rules/stanzas/copy_files.ml @@ -0,0 +1,43 @@ +open Import +open Dune_lang.Decoder + +type t = + { add_line_directive : bool + ; alias : Alias.Name.t option + ; mode : Rule.Mode.t + ; enabled_if : Blang.t + ; files : String_with_vars.t + ; syntax_version : Dune_lang.Syntax.Version.t + } + +include Stanza.Make (struct + type nonrec t = t + + include Poly + end) + +let long_form = + let check = Dune_lang.Syntax.since Stanza.syntax (2, 7) in + let+ alias = field_o "alias" (check >>> Dune_lang.Alias.decode) + and+ mode = field "mode" ~default:Rule.Mode.Standard (check >>> Rule_mode_decoder.decode) + and+ enabled_if = Enabled_if.decode ~allowed_vars:Any ~since:(Some (2, 8)) () + and+ files = field "files" (check >>> String_with_vars.decode) + and+ syntax_version = Dune_lang.Syntax.get_exn Stanza.syntax in + { add_line_directive = false; alias; mode; enabled_if; files; syntax_version } +;; + +let decode = + peek_exn + >>= function + | List _ -> fields long_form + | _ -> + let+ files = String_with_vars.decode + and+ syntax_version = Dune_lang.Syntax.get_exn Stanza.syntax in + { add_line_directive = false + ; alias = None + ; mode = Standard + ; enabled_if = Blang.true_ + ; files + ; syntax_version + } +;; diff --git a/src/dune_rules/stanzas/copy_files.mli b/src/dune_rules/stanzas/copy_files.mli new file mode 100644 index 00000000000..1702735a099 --- /dev/null +++ b/src/dune_rules/stanzas/copy_files.mli @@ -0,0 +1,14 @@ +open Import + +type t = + { add_line_directive : bool + ; alias : Alias.Name.t option + ; mode : Rule.Mode.t + ; enabled_if : Blang.t + ; files : String_with_vars.t + ; syntax_version : Dune_lang.Syntax.Version.t + } + +include Stanza.S with type t := t + +val decode : t Dune_lang.Decoder.t