@@ -1892,6 +1892,48 @@ let setup_pkg_install_alias =
18921892 |> Gen_rules. rules_here
18931893;;
18941894
1895+ let setup_tmp_lock_alias =
1896+ fun ~dir ctx_name ->
1897+ let alias = Alias. make ~dir Alias0. pkg_lock in
1898+ let rule =
1899+ Rules. collect_unit (fun () ->
1900+ (* careful, need to point to a file that will be created by the rule *)
1901+ let path =
1902+ let ( / ) = Path.Build. relative in
1903+ (* TODO get lock dir name instead of hardcoding `dune.lock` *)
1904+ Private_context. t.build_dir
1905+ / Context_name. to_string ctx_name
1906+ / " .lock"
1907+ / " dune.lock"
1908+ / " content"
1909+ in
1910+ let deps = Action_builder. path (Path. build path) in
1911+ Rules.Produce.Alias. add_deps alias deps)
1912+ in
1913+ Gen_rules. rules_for ~dir ~allowed_subdirs: Filename.Set. empty rule
1914+ |> Gen_rules. rules_here
1915+ ;;
1916+
1917+ let lock_rule ~target lock_dir = Lock_rules. lock ~target ~lock_dir |> Memo. return
1918+
1919+ let setup_lock_rules ctx_name ~lock_dir : Gen_rules. result =
1920+ let target =
1921+ let ( / ) = Path.Build. relative in
1922+ Private_context. t.build_dir
1923+ / Context_name. to_string ctx_name
1924+ / " .lock"
1925+ / lock_dir
1926+ / " content"
1927+ in
1928+ let gen_rules lock_dir =
1929+ let * lock_rule = lock_rule ~target lock_dir in
1930+ rule ~loc: Loc. none lock_rule
1931+ in
1932+ let rules = Rules. collect_unit (fun () -> gen_rules lock_dir) in
1933+ let directory_targets = Path.Build.Map. singleton target Loc. none in
1934+ Gen_rules. make ~directory_targets rules
1935+ ;;
1936+
18951937let setup_package_rules ~package_universe ~dir ~pkg_name : Gen_rules. result Memo. t =
18961938 let name = User_error. ok_exn (Package.Name. of_string_user_error (Loc. none, pkg_name)) in
18971939 let * db = DB. get package_universe in
@@ -1961,8 +2003,15 @@ let setup_rules ~components ~dir ctx =
19612003 Memo. return @@ Gen_rules. redirect_to_parent Gen_rules.Rules. empty
19622004 | true , ".dev-tool" :: _ :: _ :: _ ->
19632005 Memo. return @@ Gen_rules. redirect_to_parent Gen_rules.Rules. empty
2006+ | _ , [ " .lock" ] ->
2007+ Gen_rules. make
2008+ ~build_dir_only_sub_dirs:
2009+ (Gen_rules.Build_only_sub_dirs. singleton ~dir Subdir_set. all)
2010+ (Memo. return Rules. empty)
2011+ |> Memo. return
2012+ | _ , [ " .lock" ; lock_dir ] -> Memo. return @@ setup_lock_rules ctx ~lock_dir
19642013 | is_default , [] ->
1965- let sub_dirs = " .pkg" :: (if is_default then [ " .dev-tool" ] else [] ) in
2014+ let sub_dirs = " .pkg" :: " .lock " :: (if is_default then [ " .dev-tool" ] else [] ) in
19662015 let build_dir_only_sub_dirs =
19672016 Gen_rules.Build_only_sub_dirs. singleton ~dir @@ Subdir_set. of_list sub_dirs
19682017 in
0 commit comments