Skip to content

Commit a9cb708

Browse files
authored
Merge pull request #4863 from rescript-lang/cmji_changes
experimental changes so that only cmi/j changes will trigger a rebuild
2 parents e935bee + ac4d022 commit a9cb708

File tree

2 files changed

+60
-26
lines changed

2 files changed

+60
-26
lines changed

jscomp/bsb/bsb_ninja_gen.ml

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -108,18 +108,28 @@ let output_installation_file cwd_lib_bs namespace files_to_install =
108108
let bs = ".."//"bs" in
109109
let sb = ".."//".." in
110110
o (if Ext_sys.is_windows_or_cygwin then
111-
"rule cp\n command = cmd.exe /C copy /Y $i $out >NUL\n"
111+
"rule cp\n command = cmd.exe /C copy /Y $i $out >NUL\n\
112+
rule touch\n command = cmd.exe /C type nul >>$out & copy $out+,, >NUL\n"
112113
else
113-
"rule cp\n command = cp $i $out\n"
114+
"rule cp\n command = cp $i $out\n\
115+
rule touch\n command = touch $out\n"
114116
);
117+
let essentials = Ext_buffer.create 1_000 in
115118
files_to_install
116119
|> Queue.iter (fun ({name_sans_extension;syntax_kind; info} : Bsb_db.module_info) ->
117120
let base = Filename.basename name_sans_extension in
118-
let ns_base = Ext_namespace_encode.make ?ns:namespace base in
121+
let dest = Ext_namespace_encode.make ?ns:namespace base in
119122
let ns_origin = Ext_namespace_encode.make ?ns:namespace name_sans_extension in
120-
oo Literals.suffix_cmi ~dest:ns_base ~src:(bs//ns_origin);
121-
oo Literals.suffix_cmj ~dest:ns_base ~src:(bs//ns_origin);
122-
oo Literals.suffix_cmt ~dest:ns_base ~src:(bs//ns_origin);
123+
let src = bs//ns_origin in
124+
oo Literals.suffix_cmi ~dest ~src;
125+
oo Literals.suffix_cmj ~dest ~src;
126+
oo Literals.suffix_cmt ~dest ~src;
127+
128+
Ext_buffer.add_string essentials dest ;
129+
Ext_buffer.add_string_char essentials Literals.suffix_cmi ' ';
130+
Ext_buffer.add_string essentials dest ;
131+
Ext_buffer.add_string_char essentials Literals.suffix_cmj ' ';
132+
123133
let suffix =
124134
match syntax_kind with
125135
| Ml -> Literals.suffix_ml
@@ -136,16 +146,23 @@ let output_installation_file cwd_lib_bs namespace files_to_install =
136146
| Reason -> Literals.suffix_rei
137147
| Res -> Literals.suffix_resi in
138148
oo suffix_b ~dest:base ~src:(sb//name_sans_extension);
139-
oo Literals.suffix_cmti ~dest:ns_base ~src:(bs//ns_origin)
149+
oo Literals.suffix_cmti ~dest ~src
140150
);
141151
begin match namespace with
142152
| None -> ()
143-
| Some x ->
144-
let src = bs // x in
145-
oo Literals.suffix_cmi ~dest:x ~src;
146-
oo Literals.suffix_cmj ~dest:x ~src;
147-
oo Literals.suffix_cmt ~dest:x ~src
153+
| Some dest ->
154+
let src = bs // dest in
155+
oo Literals.suffix_cmi ~dest ~src;
156+
oo Literals.suffix_cmj ~dest ~src;
157+
oo Literals.suffix_cmt ~dest ~src;
158+
Ext_buffer.add_string essentials dest ;
159+
Ext_buffer.add_string_char essentials Literals.suffix_cmi ' ';
160+
Ext_buffer.add_string essentials dest ;
161+
Ext_buffer.add_string essentials Literals.suffix_cmj
148162
end;
163+
Ext_buffer.add_char essentials '\n';
164+
o "build install.stamp : touch ";
165+
Ext_buffer.output_buffer install_oc essentials;
149166
close_out install_oc
150167

151168
let output_ninja_and_namespace_map
@@ -239,7 +256,7 @@ let output_ninja_and_namespace_map
239256
let oc = open_out_bin (cwd_lib_bs // Literals.build_ninja) in
240257
mark_rescript oc;
241258
let finger_file =
242-
fun (x : Bsb_config_types.dependency) -> x.package_install_path //".ninja_log"
259+
fun (x : Bsb_config_types.dependency) -> x.package_install_path //"install.stamp"
243260
in
244261
Ext_list.iter bs_dependencies (fun x ->
245262
Bsb_ninja_targets.output_finger Bsb_ninja_global_vars.g_finger

lib/4.06.1/bsb.ml

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13627,18 +13627,28 @@ let output_installation_file cwd_lib_bs namespace files_to_install =
1362713627
let bs = ".."//"bs" in
1362813628
let sb = ".."//".." in
1362913629
o (if Ext_sys.is_windows_or_cygwin then
13630-
"rule cp\n command = cmd.exe /C copy /Y $i $out >NUL\n"
13630+
"rule cp\n command = cmd.exe /C copy /Y $i $out >NUL\n\
13631+
rule touch\n command = cmd.exe /C type nul >>$out & copy $out+,, >NUL\n"
1363113632
else
13632-
"rule cp\n command = cp $i $out\n"
13633+
"rule cp\n command = cp $i $out\n\
13634+
rule touch\n command = touch $out\n"
1363313635
);
13636+
let essentials = Ext_buffer.create 1_000 in
1363413637
files_to_install
1363513638
|> Queue.iter (fun ({name_sans_extension;syntax_kind; info} : Bsb_db.module_info) ->
1363613639
let base = Filename.basename name_sans_extension in
13637-
let ns_base = Ext_namespace_encode.make ?ns:namespace base in
13640+
let dest = Ext_namespace_encode.make ?ns:namespace base in
1363813641
let ns_origin = Ext_namespace_encode.make ?ns:namespace name_sans_extension in
13639-
oo Literals.suffix_cmi ~dest:ns_base ~src:(bs//ns_origin);
13640-
oo Literals.suffix_cmj ~dest:ns_base ~src:(bs//ns_origin);
13641-
oo Literals.suffix_cmt ~dest:ns_base ~src:(bs//ns_origin);
13642+
let src = bs//ns_origin in
13643+
oo Literals.suffix_cmi ~dest ~src;
13644+
oo Literals.suffix_cmj ~dest ~src;
13645+
oo Literals.suffix_cmt ~dest ~src;
13646+
13647+
Ext_buffer.add_string essentials dest ;
13648+
Ext_buffer.add_string_char essentials Literals.suffix_cmi ' ';
13649+
Ext_buffer.add_string essentials dest ;
13650+
Ext_buffer.add_string_char essentials Literals.suffix_cmj ' ';
13651+
1364213652
let suffix =
1364313653
match syntax_kind with
1364413654
| Ml -> Literals.suffix_ml
@@ -13655,16 +13665,23 @@ let output_installation_file cwd_lib_bs namespace files_to_install =
1365513665
| Reason -> Literals.suffix_rei
1365613666
| Res -> Literals.suffix_resi in
1365713667
oo suffix_b ~dest:base ~src:(sb//name_sans_extension);
13658-
oo Literals.suffix_cmti ~dest:ns_base ~src:(bs//ns_origin)
13668+
oo Literals.suffix_cmti ~dest ~src
1365913669
);
1366013670
begin match namespace with
1366113671
| None -> ()
13662-
| Some x ->
13663-
let src = bs // x in
13664-
oo Literals.suffix_cmi ~dest:x ~src;
13665-
oo Literals.suffix_cmj ~dest:x ~src;
13666-
oo Literals.suffix_cmt ~dest:x ~src
13672+
| Some dest ->
13673+
let src = bs // dest in
13674+
oo Literals.suffix_cmi ~dest ~src;
13675+
oo Literals.suffix_cmj ~dest ~src;
13676+
oo Literals.suffix_cmt ~dest ~src;
13677+
Ext_buffer.add_string essentials dest ;
13678+
Ext_buffer.add_string_char essentials Literals.suffix_cmi ' ';
13679+
Ext_buffer.add_string essentials dest ;
13680+
Ext_buffer.add_string essentials Literals.suffix_cmj
1366713681
end;
13682+
Ext_buffer.add_char essentials '\n';
13683+
o "build install.stamp : touch ";
13684+
Ext_buffer.output_buffer install_oc essentials;
1366813685
close_out install_oc
1366913686

1367013687
let output_ninja_and_namespace_map
@@ -13758,7 +13775,7 @@ let output_ninja_and_namespace_map
1375813775
let oc = open_out_bin (cwd_lib_bs // Literals.build_ninja) in
1375913776
mark_rescript oc;
1376013777
let finger_file =
13761-
fun (x : Bsb_config_types.dependency) -> x.package_install_path //".ninja_log"
13778+
fun (x : Bsb_config_types.dependency) -> x.package_install_path //"install.stamp"
1376213779
in
1376313780
Ext_list.iter bs_dependencies (fun x ->
1376413781
Bsb_ninja_targets.output_finger Bsb_ninja_global_vars.g_finger

0 commit comments

Comments
 (0)