Skip to content

Commit 3cc34d6

Browse files
committed
fix: Never include use extra-filename in build scripts
1 parent e4bd2a2 commit 3cc34d6

2 files changed

Lines changed: 34 additions & 13 deletions

File tree

src/cargo/core/compiler/build_runner/compilation_files.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -914,9 +914,14 @@ fn use_extra_filename(bcx: &BuildContext<'_, '_>, unit: &Unit) -> bool {
914914
// These always use metadata.
915915
return true;
916916
}
917+
918+
if unit.target.is_custom_build() {
919+
// Build scripts never use metadata
920+
return false;
921+
}
917922
// No metadata in these cases:
918923
//
919-
// - dylib, cdylib, executable, build-scripts: `pkg_dir` avoids collisions for us and rustc isn't
924+
// - dylib, cdylib, executable: `pkg_dir` avoids collisions for us and rustc isn't
920925
// looking these up by `-Cextra-filename`
921926
//
922927
// The __CARGO_DEFAULT_LIB_METADATA env var is used to override this to
@@ -926,10 +931,7 @@ fn use_extra_filename(bcx: &BuildContext<'_, '_>, unit: &Unit) -> bool {
926931
// installs. In addition it prevents accidentally loading a libstd of a
927932
// different compiler at runtime.
928933
// See https://github.com/rust-lang/cargo/issues/3005
929-
if (unit.target.is_dylib()
930-
|| unit.target.is_cdylib()
931-
|| unit.target.is_executable()
932-
|| unit.target.is_custom_build())
934+
if (unit.target.is_dylib() || unit.target.is_cdylib() || unit.target.is_executable())
933935
&& bcx.gctx.get_env("__CARGO_DEFAULT_LIB_METADATA").is_err()
934936
{
935937
return false;

tests/testsuite/build_dir.rs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,19 +1240,38 @@ fn should_work_with_cargo_default_lib_metadata() {
12401240
.masquerade_as_nightly_cargo(&["new build-dir layout"])
12411241
.env("__CARGO_DEFAULT_LIB_METADATA", "true")
12421242
.enable_mac_dsym()
1243-
.with_status(101)
12441243
.with_stderr_data(str![[r#"
12451244
[COMPILING] foo v0.0.1 ([ROOT]/foo)
1246-
[ERROR] failed to run custom build command for `foo v0.0.1 ([ROOT]/foo)`
1247-
1248-
Caused by:
1249-
could not execute process `[ROOT]/foo/build-dir/debug/build/foo/[HASH]/out/build_script_build[EXE]` (never executed)
1250-
1251-
Caused by:
1252-
[NOT_FOUND]
1245+
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
12531246
12541247
"#]])
12551248
.run();
1249+
1250+
// NOTE: build_script_build[EXE] does not contain a hash in the filename
1251+
p.root().join("build-dir").assert_build_dir_layout(str![[r#"
1252+
[ROOT]/foo/build-dir/.rustc_info.json
1253+
[ROOT]/foo/build-dir/CACHEDIR.TAG
1254+
[ROOT]/foo/build-dir/debug/.cargo-build-lock
1255+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/bin-foo
1256+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/bin-foo.json
1257+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/dep-bin-foo
1258+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/invoked.timestamp
1259+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/out/foo[..][EXE]
1260+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/out/foo[..].d
1261+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/run-build-script-build-script-build
1262+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/run-build-script-build-script-build.json
1263+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/run/invoked.timestamp
1264+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/run/root-output
1265+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/run/stderr
1266+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/run/stdout
1267+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/build-script-build-script-build
1268+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/build-script-build-script-build.json
1269+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/dep-build-script-build-script-build
1270+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/fingerprint/invoked.timestamp
1271+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/out/build_script_build[EXE]
1272+
[ROOT]/foo/build-dir/debug/build/foo/[HASH]/out/build_script_build.d
1273+
1274+
"#]]);
12561275
}
12571276

12581277
fn parse_workspace_manifest_path_hash(hash_dir: &PathBuf) -> PathBuf {

0 commit comments

Comments
 (0)