diff options
Diffstat (limited to 'pkgs/build-support/rust/build-rust-crate/default.nix')
-rw-r--r-- | pkgs/build-support/rust/build-rust-crate/default.nix | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/pkgs/build-support/rust/build-rust-crate/default.nix b/pkgs/build-support/rust/build-rust-crate/default.nix index acb2ee63cce4..6534e21c0f0c 100644 --- a/pkgs/build-support/rust/build-rust-crate/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/default.nix @@ -13,13 +13,18 @@ let then "macos" else stdenv.hostPlatform.parsed.kernel.name; - makeDeps = dependencies: + makeDeps = dependencies: crateRenames: (lib.concatMapStringsSep " " (dep: - let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in - (if lib.lists.any (x: x == "lib") dep.crateType then - " --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}.rlib" + let + extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; + name = if builtins.hasAttr dep.crateName crateRenames then + lib.strings.replaceStrings ["-"] ["_"] crateRenames.${dep.crateName} + else + extern; + in (if lib.lists.any (x: x == "lib") dep.crateType then + " --extern ${name}=${dep.out}/lib/lib${extern}-${dep.metadata}.rlib" else - " --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}${stdenv.hostPlatform.extensions.sharedLibrary}") + " --extern ${name}=${dep.out}/lib/lib${extern}-${dep.metadata}${stdenv.hostPlatform.extensions.sharedLibrary}") ) dependencies); echo_build_heading = colors: '' @@ -60,7 +65,7 @@ let in crate_: lib.makeOverridable ({ rust, release, verbose, features, buildInputs, crateOverrides, - dependencies, buildDependencies, + dependencies, buildDependencies, crateRenames, extraRustcOpts, preUnpack, postUnpack, prePatch, patches, postPatch, preConfigure, postConfigure, preBuild, postBuild, preInstall, postInstall }: @@ -70,7 +75,7 @@ let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverr buildDependencies_ = buildDependencies; processedAttrs = [ "src" "buildInputs" "crateBin" "crateLib" "libName" "libPath" - "buildDependencies" "dependencies" "features" + "buildDependencies" "dependencies" "features" "crateRenames" "crateName" "version" "build" "authors" "colors" "edition" ]; extraDerivationAttrs = lib.filterAttrs (n: v: ! lib.elem n processedAttrs) crate; @@ -143,13 +148,13 @@ stdenv.mkDerivation (rec { configurePhase = configureCrate { inherit crateName buildDependencies completeDeps completeBuildDeps crateDescription - crateFeatures libName build workspace_member release libPath crateVersion + crateFeatures crateRenames libName build workspace_member release libPath crateVersion extraLinkFlags extraRustcOpts crateAuthors crateHomepage verbose colors target_os; }; buildPhase = buildCrate { inherit crateName dependencies - crateFeatures libName release libPath crateType + crateFeatures crateRenames libName release libPath crateType metadata crateBin hasCrateBin verbose colors extraRustcOpts; }; @@ -177,4 +182,5 @@ stdenv.mkDerivation (rec { postInstall = crate_.postInstall or ""; dependencies = crate_.dependencies or []; buildDependencies = crate_.buildDependencies or []; + crateRenames = crate_.crateRenames or {}; } |