@@ -583,6 +583,7 @@ module Builder = struct
583
583
; file_watcher : Dune_engine.Scheduler.Run .file_watcher
584
584
; workspace_config : Dune_rules.Workspace.Clflags .t
585
585
; cache_debug_flags : Dune_engine.Cache_debug_flags .t
586
+ ; cache_rules_default : bool
586
587
; report_errors_config : Dune_engine.Report_errors_config .t
587
588
; separate_error_messages : bool
588
589
; stop_on_first_error : bool
@@ -932,6 +933,20 @@ module Builder = struct
932
933
useful for Dune developers to make Dune tests of the digest cache more \
933
934
reproducible." )
934
935
and + cache_debug_flags = cache_debug_flags_term
936
+ and + cache_rules_default =
937
+ let default =
938
+ Dune_lang.Toggle. of_bool ! Dune_engine.Clflags. can_go_in_shared_cache_default
939
+ in
940
+ let doc =
941
+ Printf. sprintf
942
+ " Enable or disable caching rules (%s). Default is `%s'."
943
+ (Arg. doc_alts_enum Config.Toggle. all)
944
+ (Config.Toggle. to_string default)
945
+ in
946
+ Arg. (
947
+ value
948
+ & opt (enum Config.Toggle. all) default
949
+ & info [ " cache-rules" ] ~docs ~env: (Cmd.Env. info ~doc " DUNE_CACHE_RULES" ) ~doc )
935
950
and + report_errors_config =
936
951
Arg. (
937
952
value
@@ -1008,6 +1023,7 @@ module Builder = struct
1008
1023
; config_from_config_file
1009
1024
}
1010
1025
; cache_debug_flags
1026
+ ; cache_rules_default = Dune_lang.Toggle. enabled cache_rules_default
1011
1027
; report_errors_config
1012
1028
; separate_error_messages
1013
1029
; stop_on_first_error
@@ -1163,6 +1179,23 @@ let build (builder : Builder.t) =
1163
1179
{ builder; root; rpc; stats }
1164
1180
;;
1165
1181
1182
+ let maybe_init_cache (cache_config : Dune_cache.Config.t ) =
1183
+ match cache_config with
1184
+ | Disabled -> cache_config
1185
+ | Enabled _ ->
1186
+ (match Dune_cache_storage.Layout. create_cache_directories () with
1187
+ | Ok () -> cache_config
1188
+ | Error (path , exn ) ->
1189
+ User_warning. emit
1190
+ ~hints:
1191
+ [ Pp. textf " Make sure the directory %s can be created" (Path. to_string path) ]
1192
+ [ Pp. textf
1193
+ " Cache directories could not be created: %s; disabling cache"
1194
+ (Unix. error_message exn )
1195
+ ];
1196
+ Disabled )
1197
+ ;;
1198
+
1166
1199
let init (builder : Builder.t ) =
1167
1200
let c = build builder in
1168
1201
if c.root.dir <> Filename. current_dir_name then Sys. chdir c.root.dir;
@@ -1216,7 +1249,7 @@ let init (builder : Builder.t) =
1216
1249
Dune_rules.Main. init
1217
1250
~stats: c.stats
1218
1251
~sandboxing_preference: config.sandboxing_preference
1219
- ~cache_config
1252
+ ~cache_config: (maybe_init_cache cache_config)
1220
1253
~cache_debug_flags: c.builder.cache_debug_flags
1221
1254
() ;
1222
1255
Only_packages.Clflags. set c.builder.only_packages;
@@ -1241,6 +1274,7 @@ let init (builder : Builder.t) =
1241
1274
Dune_rules.Clflags. ignore_lock_dir := c.builder.ignore_lock_dir;
1242
1275
Dune_rules.Clflags. on_missing_dune_project_file
1243
1276
:= if c.builder.require_dune_project_file then Error else Warn ;
1277
+ Dune_engine.Clflags. can_go_in_shared_cache_default := c.builder.cache_rules_default;
1244
1278
Log. info
1245
1279
[ Pp. textf
1246
1280
" Workspace root: %s"
0 commit comments