Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

experimental changes so that only cmi/j changes will trigger a rebuild #4863

Merged
merged 3 commits into from
Dec 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 30 additions & 13 deletions jscomp/bsb/bsb_ninja_gen.ml
Original file line number Diff line number Diff line change
Expand Up @@ -108,18 +108,28 @@ let output_installation_file cwd_lib_bs namespace files_to_install =
let bs = ".."//"bs" in
let sb = ".."//".." in
o (if Ext_sys.is_windows_or_cygwin then
"rule cp\n command = cmd.exe /C copy /Y $i $out >NUL\n"
"rule cp\n command = cmd.exe /C copy /Y $i $out >NUL\n\
rule touch\n command = cmd.exe /C type nul >>$out & copy $out+,, >NUL\n"
else
"rule cp\n command = cp $i $out\n"
"rule cp\n command = cp $i $out\n\
rule touch\n command = touch $out\n"
);
let essentials = Ext_buffer.create 1_000 in
files_to_install
|> Queue.iter (fun ({name_sans_extension;syntax_kind; info} : Bsb_db.module_info) ->
let base = Filename.basename name_sans_extension in
let ns_base = Ext_namespace_encode.make ?ns:namespace base in
let dest = Ext_namespace_encode.make ?ns:namespace base in
let ns_origin = Ext_namespace_encode.make ?ns:namespace name_sans_extension in
oo Literals.suffix_cmi ~dest:ns_base ~src:(bs//ns_origin);
oo Literals.suffix_cmj ~dest:ns_base ~src:(bs//ns_origin);
oo Literals.suffix_cmt ~dest:ns_base ~src:(bs//ns_origin);
let src = bs//ns_origin in
oo Literals.suffix_cmi ~dest ~src;
oo Literals.suffix_cmj ~dest ~src;
oo Literals.suffix_cmt ~dest ~src;

Ext_buffer.add_string essentials dest ;
Ext_buffer.add_string_char essentials Literals.suffix_cmi ' ';
Ext_buffer.add_string essentials dest ;
Ext_buffer.add_string_char essentials Literals.suffix_cmj ' ';

let suffix =
match syntax_kind with
| Ml -> Literals.suffix_ml
Expand All @@ -136,16 +146,23 @@ let output_installation_file cwd_lib_bs namespace files_to_install =
| Reason -> Literals.suffix_rei
| Res -> Literals.suffix_resi in
oo suffix_b ~dest:base ~src:(sb//name_sans_extension);
oo Literals.suffix_cmti ~dest:ns_base ~src:(bs//ns_origin)
oo Literals.suffix_cmti ~dest ~src
);
begin match namespace with
| None -> ()
| Some x ->
let src = bs // x in
oo Literals.suffix_cmi ~dest:x ~src;
oo Literals.suffix_cmj ~dest:x ~src;
oo Literals.suffix_cmt ~dest:x ~src
| Some dest ->
let src = bs // dest in
oo Literals.suffix_cmi ~dest ~src;
oo Literals.suffix_cmj ~dest ~src;
oo Literals.suffix_cmt ~dest ~src;
Ext_buffer.add_string essentials dest ;
Ext_buffer.add_string_char essentials Literals.suffix_cmi ' ';
Ext_buffer.add_string essentials dest ;
Ext_buffer.add_string essentials Literals.suffix_cmj
end;
Ext_buffer.add_char essentials '\n';
o "build install.stamp : touch ";
Ext_buffer.output_buffer install_oc essentials;
close_out install_oc

let output_ninja_and_namespace_map
Expand Down Expand Up @@ -239,7 +256,7 @@ let output_ninja_and_namespace_map
let oc = open_out_bin (cwd_lib_bs // Literals.build_ninja) in
mark_rescript oc;
let finger_file =
fun (x : Bsb_config_types.dependency) -> x.package_install_path //".ninja_log"
fun (x : Bsb_config_types.dependency) -> x.package_install_path //"install.stamp"
in
Ext_list.iter bs_dependencies (fun x ->
Bsb_ninja_targets.output_finger Bsb_ninja_global_vars.g_finger
Expand Down
43 changes: 30 additions & 13 deletions lib/4.06.1/bsb.ml
Original file line number Diff line number Diff line change
Expand Up @@ -13627,18 +13627,28 @@ let output_installation_file cwd_lib_bs namespace files_to_install =
let bs = ".."//"bs" in
let sb = ".."//".." in
o (if Ext_sys.is_windows_or_cygwin then
"rule cp\n command = cmd.exe /C copy /Y $i $out >NUL\n"
"rule cp\n command = cmd.exe /C copy /Y $i $out >NUL\n\
rule touch\n command = cmd.exe /C type nul >>$out & copy $out+,, >NUL\n"
else
"rule cp\n command = cp $i $out\n"
"rule cp\n command = cp $i $out\n\
rule touch\n command = touch $out\n"
);
let essentials = Ext_buffer.create 1_000 in
files_to_install
|> Queue.iter (fun ({name_sans_extension;syntax_kind; info} : Bsb_db.module_info) ->
let base = Filename.basename name_sans_extension in
let ns_base = Ext_namespace_encode.make ?ns:namespace base in
let dest = Ext_namespace_encode.make ?ns:namespace base in
let ns_origin = Ext_namespace_encode.make ?ns:namespace name_sans_extension in
oo Literals.suffix_cmi ~dest:ns_base ~src:(bs//ns_origin);
oo Literals.suffix_cmj ~dest:ns_base ~src:(bs//ns_origin);
oo Literals.suffix_cmt ~dest:ns_base ~src:(bs//ns_origin);
let src = bs//ns_origin in
oo Literals.suffix_cmi ~dest ~src;
oo Literals.suffix_cmj ~dest ~src;
oo Literals.suffix_cmt ~dest ~src;

Ext_buffer.add_string essentials dest ;
Ext_buffer.add_string_char essentials Literals.suffix_cmi ' ';
Ext_buffer.add_string essentials dest ;
Ext_buffer.add_string_char essentials Literals.suffix_cmj ' ';

let suffix =
match syntax_kind with
| Ml -> Literals.suffix_ml
Expand All @@ -13655,16 +13665,23 @@ let output_installation_file cwd_lib_bs namespace files_to_install =
| Reason -> Literals.suffix_rei
| Res -> Literals.suffix_resi in
oo suffix_b ~dest:base ~src:(sb//name_sans_extension);
oo Literals.suffix_cmti ~dest:ns_base ~src:(bs//ns_origin)
oo Literals.suffix_cmti ~dest ~src
);
begin match namespace with
| None -> ()
| Some x ->
let src = bs // x in
oo Literals.suffix_cmi ~dest:x ~src;
oo Literals.suffix_cmj ~dest:x ~src;
oo Literals.suffix_cmt ~dest:x ~src
| Some dest ->
let src = bs // dest in
oo Literals.suffix_cmi ~dest ~src;
oo Literals.suffix_cmj ~dest ~src;
oo Literals.suffix_cmt ~dest ~src;
Ext_buffer.add_string essentials dest ;
Ext_buffer.add_string_char essentials Literals.suffix_cmi ' ';
Ext_buffer.add_string essentials dest ;
Ext_buffer.add_string essentials Literals.suffix_cmj
end;
Ext_buffer.add_char essentials '\n';
o "build install.stamp : touch ";
Ext_buffer.output_buffer install_oc essentials;
close_out install_oc

let output_ninja_and_namespace_map
Expand Down Expand Up @@ -13758,7 +13775,7 @@ let output_ninja_and_namespace_map
let oc = open_out_bin (cwd_lib_bs // Literals.build_ninja) in
mark_rescript oc;
let finger_file =
fun (x : Bsb_config_types.dependency) -> x.package_install_path //".ninja_log"
fun (x : Bsb_config_types.dependency) -> x.package_install_path //"install.stamp"
in
Ext_list.iter bs_dependencies (fun x ->
Bsb_ninja_targets.output_finger Bsb_ninja_global_vars.g_finger
Expand Down