aboutsummaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorGaëtan Gilbert2020-08-18 15:39:57 +0200
committerGaëtan Gilbert2020-08-18 15:43:16 +0200
commitcd7b346ec5485138d93bc6a0308b9b8176d6e71f (patch)
tree65efd6a6927ace65318ae706b1242bf03a9933e1 /config
parentaa926429727f1f6b5ef07c8912f2618d53f6d155 (diff)
Avoid running configure when plugins/ modified
We use an indirection, producing the sorted list of subdirectories of plugins/, so that dune can recognize it hasn't changed and doesn't rerun configure. Since configure regenerates a timestamp this avoids recompiling the stdlib. Fix #12750.
Diffstat (limited to 'config')
-rw-r--r--config/dune10
-rw-r--r--config/list_plugins.ml10
2 files changed, 18 insertions, 2 deletions
diff --git a/config/dune b/config/dune
index bf1aa4f471..a30fdce9aa 100644
--- a/config/dune
+++ b/config/dune
@@ -2,8 +2,14 @@
(name config)
(synopsis "Coq Configuration Variables")
(public_name coq.config)
+ (modules :standard \ list_plugins)
(wrapped false))
+(executable (name list_plugins) (modules list_plugins))
+(rule (targets plugin_list)
+ (deps (source_tree %{project_root}/plugins))
+ (action (with-stdout-to %{targets} (chdir %{project_root} (run config/list_plugins.exe)))))
+
; Dune doesn't use configure's output, but it is still necessary for
; some Coq files to work; will be fixed in the future.
(rule
@@ -13,7 +19,7 @@
%{project_root}/configure.ml
%{project_root}/dev/ocamldebug-coq.run
%{project_root}/dev/header.c
- ; Needed to generate include lists for coq_makefile
- (source_tree %{project_root}/plugins)
+ ; Needed to generate include lists for coq_makefile
+ plugin_list
(env_var COQ_CONFIGURE_PREFIX))
(action (chdir %{project_root} (run %{ocaml} configure.ml -no-ask -native-compiler no))))
diff --git a/config/list_plugins.ml b/config/list_plugins.ml
new file mode 100644
index 0000000000..5e2827bfe0
--- /dev/null
+++ b/config/list_plugins.ml
@@ -0,0 +1,10 @@
+let plugins =
+ try Sys.readdir "plugins"
+ with _ -> [||]
+
+let () = Array.sort compare plugins
+
+let () =Array.iter (fun f ->
+ let f' = "plugins/"^f in
+ if Sys.is_directory f' && f.[0] <> '.' then print_endline f)
+ plugins