|
1 | 1 | //! Tests for build.rs scripts.
|
2 | 2 |
|
3 | 3 | use cargo_test_support::compare::assert_match_exact;
|
| 4 | +use cargo_test_support::install::cargo_home; |
4 | 5 | use cargo_test_support::paths::CargoPathExt;
|
5 | 6 | use cargo_test_support::registry::Package;
|
6 | 7 | use cargo_test_support::tools;
|
@@ -4803,6 +4804,84 @@ fn rerun_if_directory() {
|
4803 | 4804 | fresh();
|
4804 | 4805 | }
|
4805 | 4806 |
|
| 4807 | +#[cargo_test] |
| 4808 | +fn rerun_if_published_directory() { |
| 4809 | + // build script of a dependency contains a `rerun-if-changed` pointing to a directory |
| 4810 | + Package::new("mylib-sys", "1.0.0") |
| 4811 | + .file("mylib/balrog.c", "") |
| 4812 | + .file("src/lib.rs", "") |
| 4813 | + .file( |
| 4814 | + "build.rs", |
| 4815 | + r#" |
| 4816 | + fn main() { |
| 4817 | + // Changing to mylib/balrog.c will not trigger a rebuild |
| 4818 | + println!("cargo:rerun-if-changed=mylib"); |
| 4819 | + } |
| 4820 | + "#, |
| 4821 | + ) |
| 4822 | + .publish(); |
| 4823 | + |
| 4824 | + let p = project() |
| 4825 | + .file( |
| 4826 | + "Cargo.toml", |
| 4827 | + r#" |
| 4828 | + [package] |
| 4829 | + name = "foo" |
| 4830 | + version = "0.0.1" |
| 4831 | +
|
| 4832 | + [dependencies] |
| 4833 | + mylib-sys = "1.0.0" |
| 4834 | + "#, |
| 4835 | + ) |
| 4836 | + .file("src/main.rs", "fn main() {}") |
| 4837 | + .build(); |
| 4838 | + |
| 4839 | + p.cargo("check").run(); |
| 4840 | + |
| 4841 | + // Delete regitry src to make directories being recreated with the latest timestamp. |
| 4842 | + cargo_home().join("registry/src").rm_rf(); |
| 4843 | + |
| 4844 | + p.cargo("check --verbose") |
| 4845 | + .with_stderr( |
| 4846 | + "\ |
| 4847 | +[FRESH] mylib-sys v1.0.0 |
| 4848 | +[FRESH] foo v0.0.1 ([CWD]) |
| 4849 | +[FINISHED] dev [unoptimized + debuginfo] target(s) in [..] |
| 4850 | +", |
| 4851 | + ) |
| 4852 | + .run(); |
| 4853 | + |
| 4854 | + // Upgrade of a package should still trigger a rebuild |
| 4855 | + Package::new("mylib-sys", "1.0.1") |
| 4856 | + .file("mylib/balrog.c", "") |
| 4857 | + .file("mylib/balrog.h", "") |
| 4858 | + .file("src/lib.rs", "") |
| 4859 | + .file( |
| 4860 | + "build.rs", |
| 4861 | + r#" |
| 4862 | + fn main() { |
| 4863 | + println!("cargo:rerun-if-changed=mylib"); |
| 4864 | + } |
| 4865 | + "#, |
| 4866 | + ) |
| 4867 | + .publish(); |
| 4868 | + p.cargo("update").run(); |
| 4869 | + p.cargo("fetch").run(); |
| 4870 | + |
| 4871 | + p.cargo("check -v") |
| 4872 | + .with_stderr(format!( |
| 4873 | + "\ |
| 4874 | +[COMPILING] mylib-sys [..] |
| 4875 | +[RUNNING] `rustc --crate-name build_script_build [..] |
| 4876 | +[RUNNING] `[..]build-script-build[..]` |
| 4877 | +[RUNNING] `rustc --crate-name mylib_sys [..] |
| 4878 | +[CHECKING] foo [..] |
| 4879 | +[RUNNING] `rustc --crate-name foo [..] |
| 4880 | +[FINISHED] [..]", |
| 4881 | + )) |
| 4882 | + .run(); |
| 4883 | +} |
| 4884 | + |
4806 | 4885 | #[cargo_test]
|
4807 | 4886 | fn test_with_dep_metadata() {
|
4808 | 4887 | let p = project()
|
|
0 commit comments