aboutsummaryrefslogtreecommitdiff
path: root/pkgs/build-support/rust
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2020-05-26 11:52:18 -0700
committerGitHub <noreply@github.com>2020-05-26 20:52:18 +0200
commitc21cbf22d0c56609a9be7c72e1b45ffe74c92010 (patch)
treeae3d83309dd1e85167c287f912014a92a0c3a1d1 /pkgs/build-support/rust
parent0300b47dd5808ee78a2870b4d3cadb3ed5220933 (diff)
buildRustCrate: Replace hyphen with underscore in env variables (#88054)
* Add test case for include dir * buildRustCrate: replace hyphen with underscore in env This fixes a bug that prevents encoding_c from building.
Diffstat (limited to 'pkgs/build-support/rust')
-rw-r--r--pkgs/build-support/rust/build-rust-crate/configure-crate.nix4
-rw-r--r--pkgs/build-support/rust/build-rust-crate/test/default.nix34
2 files changed, 36 insertions, 2 deletions
diff --git a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix
index ed8100537090..c47bc00938c1 100644
--- a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix
+++ b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix
@@ -179,9 +179,9 @@ in ''
export $env
done
- CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\U\1/")
+ CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\U\1/" -e "s/-/_/g")
grep -P "^cargo:(?!(rustc-|warning=|rerun-if-changed=|rerun-if-env-changed))" target/build/${crateName}.opt \
- | sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env
+ | awk -F= "/^cargo:/ { sub(/^cargo:/, \"\", \$1); gsub(/-/, \"_\", \$1); print \"export \" toupper(\"DEP_$(echo $CRATENAME)_\" \$1) \"=\" \$2 }" > target/env
set -e
fi
runHook postConfigure
diff --git a/pkgs/build-support/rust/build-rust-crate/test/default.nix b/pkgs/build-support/rust/build-rust-crate/test/default.nix
index 5597e4b0dd66..bdd6c86d5f07 100644
--- a/pkgs/build-support/rust/build-rust-crate/test/default.nix
+++ b/pkgs/build-support/rust/build-rust-crate/test/default.nix
@@ -344,6 +344,40 @@ let
buildTests = true;
expectedTestOutputs = [ "test baz_false ... ok" ];
};
+ # Regression test for https://github.com/NixOS/nixpkgs/pull/88054
+ # Build script output should be rewritten as valid env vars.
+ buildScriptIncludeDirDeps = let
+ depCrate = mkCrate {
+ crateName = "bar";
+ src = symlinkJoin {
+ name = "build-script-and-include-dir-bar";
+ paths = [
+ (mkFile "src/lib.rs" ''
+ fn main() { }
+ '')
+ (mkFile "build.rs" ''
+ use std::path::PathBuf;
+ fn main() { println!("cargo:include-dir={}/src", std::env::current_dir().unwrap_or(PathBuf::from(".")).to_str().unwrap()); }
+ '')
+ ];
+ };
+ };
+ in {
+ crateName = "foo";
+ src = symlinkJoin {
+ name = "build-script-and-include-dir-foo";
+ paths = [
+ (mkFile "src/main.rs" ''
+ fn main() { }
+ '')
+ (mkFile "build.rs" ''
+ fn main() { assert!(std::env::var_os("DEP_BAR_INCLUDE_DIR").is_some()); }
+ '')
+ ];
+ };
+ buildDependencies = [ depCrate ];
+ dependencies = [ depCrate ];
+ };
# Regression test for https://github.com/NixOS/nixpkgs/issues/74071
# Whenevever a build.rs file is generating files those should not be overlayed onto the actual source dir
buildRsOutDirOverlay = {