diff options
Diffstat (limited to 'pkgs/build-support')
28 files changed, 222 insertions, 73 deletions
diff --git a/pkgs/build-support/binary-cache/default.nix b/pkgs/build-support/binary-cache/default.nix index 577328cad920d..27f9ad9628998 100644 --- a/pkgs/build-support/binary-cache/default.nix +++ b/pkgs/build-support/binary-cache/default.nix @@ -1,4 +1,4 @@ -{ stdenv, buildPackages }: +{ lib, stdenv, buildPackages }: # This function is for creating a flat-file binary cache, i.e. the kind created by # nix copy --to file:///some/path and usable as a substituter (with the file:// prefix). @@ -19,7 +19,7 @@ stdenv.mkDerivation { preferLocalBuild = true; - PATH = "${buildPackages.coreutils}/bin:${buildPackages.jq}/bin:${buildPackages.python3}/bin:${buildPackages.nix}/bin:${buildPackages.xz}/bin"; + PATH = lib.makeBinPath (with buildPackages; [ coreutils jq python3 nix xz ]); builder = builtins.toFile "builder" '' . .attrs.sh diff --git a/pkgs/build-support/bintools-wrapper/add-hardening.sh b/pkgs/build-support/bintools-wrapper/add-hardening.sh index 0a2b2509a8265..db9553c3fc76c 100644 --- a/pkgs/build-support/bintools-wrapper/add-hardening.sh +++ b/pkgs/build-support/bintools-wrapper/add-hardening.sh @@ -37,11 +37,11 @@ fi for flag in "${!hardeningEnableMap[@]}"; do case $flag in pie) - if [[ ! (" $* " =~ " -shared " \ - || " $* " =~ " -static " \ - || " $* " =~ " -r " \ - || " $* " =~ " -Ur " \ - || " $* " =~ " -i ") ]]; then + if [[ ! (" ${params[*]} " =~ " -shared " \ + || " ${params[*]} " =~ " -static " \ + || " ${params[*]} " =~ " -r " \ + || " ${params[*]} " =~ " -Ur " \ + || " ${params[*]} " =~ " -i ") ]]; then if (( "${NIX_DEBUG:-0}" >= 1 )); then echo HARDENING: enabling LDFlags -pie >&2; fi hardeningLDFlags+=('-pie') fi diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index acc433496b0e8..adaf80dcd916e 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -388,8 +388,8 @@ stdenv.mkDerivation { }; meta = - let bintools_ = if bintools != null then bintools else {}; in - (if bintools_ ? meta then removeAttrs bintools.meta ["priority"] else {}) // + let bintools_ = lib.optionalAttrs (bintools != null) bintools; in + (lib.optionalAttrs (bintools_ ? meta) (removeAttrs bintools.meta ["priority"])) // { description = lib.attrByPath ["meta" "description"] "System binary utilities" bintools_ + " (wrapper script)"; diff --git a/pkgs/build-support/cc-wrapper/add-hardening.sh b/pkgs/build-support/cc-wrapper/add-hardening.sh index b1aa01355b137..07ac6737f39da 100644 --- a/pkgs/build-support/cc-wrapper/add-hardening.sh +++ b/pkgs/build-support/cc-wrapper/add-hardening.sh @@ -71,7 +71,7 @@ for flag in "${!hardeningEnableMap[@]}"; do # NB: we do not use `+=` here, because PIE flags must occur before any PIC flags if (( "${NIX_DEBUG:-0}" >= 1 )); then echo HARDENING: enabling CFlags -fPIE >&2; fi hardeningCFlags=('-fPIE' "${hardeningCFlags[@]}") - if [[ ! (" $* " =~ " -shared " || " $* " =~ " -static ") ]]; then + if [[ ! (" ${params[*]} " =~ " -shared " || " ${params[*]} " =~ " -static ") ]]; then if (( "${NIX_DEBUG:-0}" >= 1 )); then echo HARDENING: enabling LDFlags -pie >&2; fi hardeningCFlags=('-pie' "${hardeningCFlags[@]}") fi diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index ffde44c538e3a..db3efa068c0fd 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -106,7 +106,12 @@ let isGccArchSupported = arch: if targetPlatform.isPower then false else # powerpc does not allow -march= if isGNU then - { # Intel + { # Generic + x86-64-v2 = versionAtLeast ccVersion "11.0"; + x86-64-v3 = versionAtLeast ccVersion "11.0"; + x86-64-v4 = versionAtLeast ccVersion "11.0"; + + # Intel skylake = versionAtLeast ccVersion "6.0"; skylake-avx512 = versionAtLeast ccVersion "6.0"; cannonlake = versionAtLeast ccVersion "8.0"; @@ -117,6 +122,7 @@ let tigerlake = versionAtLeast ccVersion "10.0"; knm = versionAtLeast ccVersion "8.0"; alderlake = versionAtLeast ccVersion "12.0"; + # AMD znver1 = versionAtLeast ccVersion "6.0"; znver2 = versionAtLeast ccVersion "9.0"; @@ -124,12 +130,18 @@ let znver4 = versionAtLeast ccVersion "13.0"; }.${arch} or true else if isClang then - { # Intel + { #Generic + x86-64-v2 = versionAtLeast ccVersion "12.0"; + x86-64-v3 = versionAtLeast ccVersion "12.0"; + x86-64-v4 = versionAtLeast ccVersion "12.0"; + + # Intel cannonlake = versionAtLeast ccVersion "5.0"; icelake-client = versionAtLeast ccVersion "7.0"; icelake-server = versionAtLeast ccVersion "7.0"; knm = versionAtLeast ccVersion "7.0"; alderlake = versionAtLeast ccVersion "16.0"; + # AMD znver1 = versionAtLeast ccVersion "4.0"; znver2 = versionAtLeast ccVersion "9.0"; @@ -611,8 +623,8 @@ stdenv.mkDerivation { }; meta = - let cc_ = if cc != null then cc else {}; in - (if cc_ ? meta then removeAttrs cc.meta ["priority"] else {}) // + let cc_ = lib.optionalAttrs (cc != null) cc; in + (lib.optionalAttrs (cc_ ? meta) (removeAttrs cc.meta ["priority"])) // { description = lib.attrByPath ["meta" "description"] "System C compiler" cc_ + " (wrapper script)"; diff --git a/pkgs/build-support/dotnet/build-dotnet-module/default.nix b/pkgs/build-support/dotnet/build-dotnet-module/default.nix index a9c49d1e526eb..686d89f8c11cb 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/default.nix +++ b/pkgs/build-support/dotnet/build-dotnet-module/default.nix @@ -112,7 +112,11 @@ let if (nugetDeps != null) then if lib.isDerivation nugetDeps then nugetDeps - else mkNugetDeps { inherit name; nugetDeps = import nugetDeps; } + else mkNugetDeps { + inherit name; + nugetDeps = import nugetDeps; + sourceFile = nugetDeps; + } else throw "Defining the `nugetDeps` attribute is required, as to lock the NuGet dependencies. This file can be generated by running the `passthru.fetch-deps` script."; # contains the actual package dependencies @@ -138,6 +142,8 @@ let name = "${name}-nuget-source"; paths = [ dependenciesSource sdkSource ]; }; + + nugetDepsFile = _nugetDeps.sourceFile; in stdenvNoCC.mkDerivation (args // { nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [ @@ -166,7 +172,7 @@ stdenvNoCC.mkDerivation (args // { passthru = { inherit nuget-source; - + } // lib.optionalAttrs (nugetDepsFile != null) { fetch-deps = let flags = dotnetFlags ++ dotnetRestoreFlags; @@ -180,8 +186,8 @@ stdenvNoCC.mkDerivation (args // { # Note that toString is necessary here as it results in the path at # eval time (i.e. to the file in your local Nixpkgs checkout) rather # than the Nix store path of the path after it's been imported. - if lib.isPath nugetDeps && !lib.hasPrefix "${builtins.storeDir}/" (toString nugetDeps) - then toString nugetDeps + if lib.isPath nugetDepsFile && !lib.hasPrefix "${builtins.storeDir}/" (toString nugetDepsFile) + then toString nugetDepsFile else ''$(mktemp -t "${pname}-deps-XXXXXX.nix")''; in writeShellScript "fetch-${pname}-deps" '' @@ -208,7 +214,7 @@ stdenvNoCC.mkDerivation (args // { if [[ ''${TMPDIR:-} == /run/user/* ]]; then # /run/user is usually a tmpfs in RAM, which may be too small # to store all downloaded dotnet packages - TMPDIR= + unset TMPDIR fi export tmp=$(mktemp -td "deps-${pname}-XXXXXX") @@ -281,13 +287,15 @@ stdenvNoCC.mkDerivation (args // { echo "Succesfully restored project" echo "Writing lockfile..." - echo -e "# This file was automatically generated by passthru.fetch-deps.\n# Please dont edit it manually, your changes might get overwritten!\n" > "$depsFile" excluded_sources="${lib.concatStringsSep " " sdkDeps}" for excluded_source in ''${excluded_sources[@]}; do ls "$excluded_source" >> "$tmp/excluded_list" done - nuget-to-nix "$tmp/nuget_pkgs" "$tmp/excluded_list" >> "$depsFile" + tmpFile="$tmp"/deps.nix + echo -e "# This file was automatically generated by passthru.fetch-deps.\n# Please dont edit it manually, your changes might get overwritten!\n" > "$tmpFile" + nuget-to-nix "$tmp/nuget_pkgs" "$tmp/excluded_list" >> "$tmpFile" + mv "$tmpFile" "$depsFile" echo "Succesfully wrote lockfile to $depsFile" ''; } // args.passthru or { }; diff --git a/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.sh b/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.sh index 8035b42d08608..3f2a89c414044 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.sh +++ b/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-install-hook.sh @@ -40,15 +40,15 @@ dotnetInstallHook() { dotnetPack() { local -r project="${1-}" - env dotnet pack ${project-} \ - -p:ContinuousIntegrationBuild=true \ - -p:Deterministic=true \ - --output "$out/share" \ - --configuration "@buildType@" \ - --no-build \ + env dotnet pack ${project-} \ + -p:ContinuousIntegrationBuild=true \ + -p:Deterministic=true \ + --output "$out/share" \ + --configuration "@buildType@" \ + --no-build \ --runtime "@runtimeId@" \ - ${dotnetPackFlags[@]} \ - ${dotnetFlags[@]} + ${dotnetPackFlags[@]} \ + ${dotnetFlags[@]} } if (( "${#projectFile[@]}" == 0 )); then diff --git a/pkgs/build-support/dotnet/make-nuget-deps/default.nix b/pkgs/build-support/dotnet/make-nuget-deps/default.nix index 723646c5fdcab..8281976df6260 100644 --- a/pkgs/build-support/dotnet/make-nuget-deps/default.nix +++ b/pkgs/build-support/dotnet/make-nuget-deps/default.nix @@ -1,5 +1,5 @@ { linkFarmFromDrvs, fetchurl }: -{ name, nugetDeps }: +{ name, nugetDeps, sourceFile ? null }: linkFarmFromDrvs "${name}-nuget-deps" (nugetDeps { fetchNuGet = { pname, version, sha256 , url ? "https://www.nuget.org/api/v2/package/${pname}/${version}" }: @@ -7,4 +7,6 @@ linkFarmFromDrvs "${name}-nuget-deps" (nugetDeps { name = "${pname}.${version}.nupkg"; inherit url sha256; }; -}) +}) // { + inherit sourceFile; +} diff --git a/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh b/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh index ce2a7070ea31e..86bc4482088b1 100755 --- a/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh +++ b/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh @@ -1,6 +1,7 @@ #!@runtimeShell@ set -euo pipefail +shopt -s nullglob export PATH="@binPath@" # used for glob ordering of package names diff --git a/pkgs/build-support/emacs/buffer.nix b/pkgs/build-support/emacs/buffer.nix index 8f824f4e1a579..b8bd4584e3227 100644 --- a/pkgs/build-support/emacs/buffer.nix +++ b/pkgs/build-support/emacs/buffer.nix @@ -73,7 +73,5 @@ rec { haskell-package-env = builtins.head haskell-package.env.nativeBuildInputs; in - if is-haskell-package - then withPackages [ haskell-package-env ] - else {}; + lib.optionalAttrs is-haskell-package (withPackages [ haskell-package-env ]); } diff --git a/pkgs/build-support/fetchfirefoxaddon/default.nix b/pkgs/build-support/fetchfirefoxaddon/default.nix index fe9ff5c469bad..41eaa550ea274 100644 --- a/pkgs/build-support/fetchfirefoxaddon/default.nix +++ b/pkgs/build-support/fetchfirefoxaddon/default.nix @@ -1,7 +1,13 @@ -{stdenv, unzip, jq, zip, fetchurl,writeScript, ...}: +{ stdenv +, fetchurl +, jq +, strip-nondeterminism +, unzip +, writeScript +, zip +}: -{ - name +{ name , url ? null , md5 ? "" , sha1 ? "" @@ -14,7 +20,8 @@ let extid = if fixedExtid == null then "nixos@${name}" else fixedExtid; - source = if url == null then src else fetchurl { + source = if url == null then src else + fetchurl { url = url; inherit md5 sha1 sha256 sha512 hash; }; @@ -38,7 +45,14 @@ stdenv.mkDerivation { echo "$NEW_MANIFEST" > "$out/$UUID/manifest.json" cd "$out/$UUID" zip -r -q -FS "$out/$UUID.xpi" * + strip-nondeterminism "$out/$UUID.xpi" rm -r "$out/$UUID" ''; - nativeBuildInputs = [ unzip zip jq ]; + + nativeBuildInputs = [ + jq + strip-nondeterminism + unzip + zip + ]; } diff --git a/pkgs/build-support/fetchgit/nix-prefetch-git b/pkgs/build-support/fetchgit/nix-prefetch-git index e46ccf538bd54..ae2e3600800b1 100755 --- a/pkgs/build-support/fetchgit/nix-prefetch-git +++ b/pkgs/build-support/fetchgit/nix-prefetch-git @@ -206,7 +206,7 @@ checkout_ref(){ # Update submodules init_submodules(){ - clean_git submodule update --init --recursive -j $NIX_BUILD_CORES + clean_git submodule update --init --recursive -j ${NIX_BUILD_CORES:-1} } clone(){ diff --git a/pkgs/build-support/kernel/compress-firmware-xz.nix b/pkgs/build-support/kernel/compress-firmware-xz.nix index 6a797226aa671..cfb06a5c0f159 100644 --- a/pkgs/build-support/kernel/compress-firmware-xz.nix +++ b/pkgs/build-support/kernel/compress-firmware-xz.nix @@ -1,8 +1,12 @@ -{ runCommand }: +{ runCommand, lib }: firmware: -runCommand "${firmware.name}-xz" {} '' +let + args = lib.optionalAttrs (firmware ? meta) { inherit (firmware) meta; }; +in + +runCommand "${firmware.name}-xz" args '' mkdir -p $out/lib (cd ${firmware} && find lib/firmware -type d -print0) | (cd $out && xargs -0 mkdir -v --) diff --git a/pkgs/build-support/node/fetch-npm-deps/default.nix b/pkgs/build-support/node/fetch-npm-deps/default.nix index 41cad9d12ee66..3d9928a5d19e8 100644 --- a/pkgs/build-support/node/fetch-npm-deps/default.nix +++ b/pkgs/build-support/node/fetch-npm-deps/default.nix @@ -115,7 +115,7 @@ meta = with lib; { description = "Prefetch dependencies from npm (for use with `fetchNpmDeps`)"; - maintainers = with maintainers; [ winter ]; + maintainers = with maintainers; [ lilyinstarlight winter ]; license = licenses.mit; }; }; diff --git a/pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs b/pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs index 3dd6b7da4978a..2dc6405227970 100644 --- a/pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs +++ b/pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs @@ -5,8 +5,11 @@ use serde_json::{Map, Value}; use std::{ fs, io, process::{Command, Stdio}, + thread, + time::Duration, }; use tempfile::{tempdir, TempDir}; +use ureq::{Error, ErrorKind, Response}; use url::Url; pub mod lock; @@ -103,7 +106,7 @@ impl Package { let specifics = match get_hosted_git_url(&resolved)? { Some(hosted) => { - let mut body = ureq::get(hosted.as_str()).call()?.into_reader(); + let mut body = get_response(hosted.as_str())?.into_reader(); let workdir = tempdir()?; @@ -154,8 +157,7 @@ impl Package { Specifics::Registry { .. } => { let mut body = Vec::new(); - ureq::get(self.url.as_str()) - .call()? + get_response(self.url.as_str())? .into_reader() .read_to_end(&mut body)?; @@ -189,6 +191,31 @@ impl Package { } } +#[allow(clippy::result_large_err)] +fn get_response(url: &str) -> Result<Response, Error> { + for _ in 0..4 { + match ureq::get(url).call() { + Err(Error::Status(503 | 429, r)) => { + let retry: Option<u64> = r.header("retry-after").and_then(|h| h.parse().ok()); + let retry = retry.unwrap_or(5); + eprintln!("{} for {}, retry in {}", r.status(), r.get_url(), retry); + thread::sleep(Duration::from_secs(retry)); + } + Err(Error::Transport(t)) => match t.kind() { + ErrorKind::ConnectionFailed | ErrorKind::Dns | ErrorKind::Io => { + let retry = 5; + eprintln!("{} for {}, retry in {}", t.kind(), url, retry); + thread::sleep(Duration::from_secs(retry)); + } + _ => return Err(Error::Transport(t)), + }, + result => return result, + }; + } + // Ran out of retries; try one last time and return whatever result we get. + ureq::get(url).call() +} + #[allow(clippy::case_sensitive_file_extension_comparisons)] fn get_hosted_git_url(url: &Url) -> anyhow::Result<Option<Url>> { if ["git", "git+ssh", "git+https", "ssh"].contains(&url.scheme()) { diff --git a/pkgs/build-support/node/fetch-yarn-deps/common.js b/pkgs/build-support/node/fetch-yarn-deps/common.js new file mode 100644 index 0000000000000..8e0d1b0e470b4 --- /dev/null +++ b/pkgs/build-support/node/fetch-yarn-deps/common.js @@ -0,0 +1,17 @@ +const path = require('path') + +// This has to match the logic in pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js +// so that fixup_yarn_lock produces the same paths +const urlToName = url => { + const isCodeloadGitTarballUrl = url.startsWith('https://codeload.github.com/') && url.includes('/tar.gz/') + + if (url.startsWith('git+') || isCodeloadGitTarballUrl) { + return path.basename(url) + } else { + return url + .replace(/https:\/\/(.)*(.com)\//g, '') // prevents having long directory names + .replace(/[@/%:-]/g, '_') // replace @ and : and - and % characters with underscore + } +} + +module.exports = { urlToName }; diff --git a/pkgs/build-support/node/fetch-yarn-deps/default.nix b/pkgs/build-support/node/fetch-yarn-deps/default.nix index 4cf2507706ae7..f3b5a6bd163b7 100644 --- a/pkgs/build-support/node/fetch-yarn-deps/default.nix +++ b/pkgs/build-support/node/fetch-yarn-deps/default.nix @@ -21,8 +21,8 @@ in { mkdir libexec tar --strip-components=1 -xf ${yarnpkg-lockfile-tar} package/index.js mv index.js libexec/yarnpkg-lockfile.js - cp ${./index.js} libexec/index.js - patchShebangs libexec/index.js + cp ${./.}/*.js libexec/ + patchShebangs libexec runHook postBuild ''; @@ -34,6 +34,7 @@ in { cp -r libexec $out makeWrapper $out/libexec/index.js $out/bin/prefetch-yarn-deps \ --prefix PATH : ${lib.makeBinPath [ coreutils nix-prefetch-git nix ]} + makeWrapper $out/libexec/fixup.js $out/bin/fixup-yarn-lock runHook postInstall ''; diff --git a/pkgs/build-support/node/fetch-yarn-deps/fixup.js b/pkgs/build-support/node/fetch-yarn-deps/fixup.js new file mode 100755 index 0000000000000..8b91e7efa63fd --- /dev/null +++ b/pkgs/build-support/node/fetch-yarn-deps/fixup.js @@ -0,0 +1,74 @@ +#!/usr/bin/env node +'use strict' + +const fs = require('fs') +const process = require('process') +const lockfile = require('./yarnpkg-lockfile.js') +const { urlToName } = require('./common.js') + +const fixupYarnLock = async (lockContents, verbose) => { + const lockData = lockfile.parse(lockContents) + + const fixedData = Object.fromEntries( + Object.entries(lockData.object) + .map(([dep, pkg]) => { + const [ url, hash ] = pkg.resolved.split("#", 2) + + if (hash || url.startsWith("https://codeload.github.com")) { + if (verbose) console.log(`Removing integrity for git dependency ${dep}`) + delete pkg.integrity + } + + if (verbose) console.log(`Rewriting URL ${url} for dependency ${dep}`) + pkg.resolved = urlToName(url) + + return [dep, pkg] + }) + ) + + if (verbose) console.log('Done') + + return fixedData +} + +const showUsage = async () => { + process.stderr.write(` +syntax: fixup-yarn-lock [path to yarn.lock] [options] + +Options: + -h --help Show this help + -v --verbose Verbose output +`) + process.exit(1) +} + +const main = async () => { + const args = process.argv.slice(2) + let next, lockFile, verbose + while (next = args.shift()) { + if (next == '--verbose' || next == '-v') { + verbose = true + } else if (next == '--help' || next == '-h') { + showUsage() + } else if (!lockFile) { + lockFile = next + } else { + showUsage() + } + } + let lockContents + try { + lockContents = await fs.promises.readFile(lockFile || 'yarn.lock', 'utf-8') + } catch { + showUsage() + } + + const fixedData = await fixupYarnLock(lockContents, verbose) + await fs.promises.writeFile(lockFile || 'yarn.lock', lockfile.stringify(fixedData)) +} + +main() + .catch(e => { + console.error(e) + process.exit(1) + }) diff --git a/pkgs/build-support/node/fetch-yarn-deps/index.js b/pkgs/build-support/node/fetch-yarn-deps/index.js index b66e1220218d8..9f95e16970306 100755 --- a/pkgs/build-support/node/fetch-yarn-deps/index.js +++ b/pkgs/build-support/node/fetch-yarn-deps/index.js @@ -10,6 +10,7 @@ const path = require('path') const lockfile = require('./yarnpkg-lockfile.js') const { promisify } = require('util') const url = require('url') +const { urlToName } = require('./common.js') const execFile = promisify(child_process.execFile) @@ -19,20 +20,6 @@ const exec = async (...args) => { return res } -// This has to match the logic in pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js -// so that fixup_yarn_lock produces the same paths -const urlToName = url => { - const isCodeloadGitTarballUrl = url.startsWith('https://codeload.github.com/') && url.includes('/tar.gz/') - - if (url.startsWith('git+') || isCodeloadGitTarballUrl) { - return path.basename(url) - } else { - return url - .replace(/https:\/\/(.)*(.com)\//g, '') // prevents having long directory names - .replace(/[@/%:-]/g, '_') // replace @ and : and - and % characters with underscore - } -} - const downloadFileHttps = (fileName, url, expectedHash, hashType = 'sha1') => { return new Promise((resolve, reject) => { https.get(url, (res) => { diff --git a/pkgs/build-support/pkg-config-wrapper/default.nix b/pkgs/build-support/pkg-config-wrapper/default.nix index f68597662608f..f409ca3a7d4b6 100644 --- a/pkgs/build-support/pkg-config-wrapper/default.nix +++ b/pkgs/build-support/pkg-config-wrapper/default.nix @@ -119,8 +119,8 @@ stdenv.mkDerivation { }; meta = - let pkg-config_ = if pkg-config != null then pkg-config else {}; in - (if pkg-config_ ? meta then removeAttrs pkg-config.meta ["priority"] else {}) // + let pkg-config_ = lib.optionalAttrs (pkg-config != null) pkg-config; in + (lib.optionalAttrs (pkg-config_ ? meta) (removeAttrs pkg-config.meta ["priority"])) // { description = lib.attrByPath ["meta" "description"] "pkg-config" pkg-config_ + " (wrapper script)"; diff --git a/pkgs/build-support/release/binary-tarball.nix b/pkgs/build-support/release/binary-tarball.nix index 24d5b2e1cafc9..37c5f8c7ee86d 100644 --- a/pkgs/build-support/release/binary-tarball.nix +++ b/pkgs/build-support/release/binary-tarball.nix @@ -70,7 +70,7 @@ stdenv.mkDerivation ( test -n "$releaseName" && (echo "$releaseName" >> $out/nix-support/hydra-release-name) ''; - meta = (if args ? meta then args.meta else {}) // { + meta = (lib.optionalAttrs (args ? meta) args.meta) // { description = "Build of a generic binary distribution"; }; diff --git a/pkgs/build-support/release/debian-build.nix b/pkgs/build-support/release/debian-build.nix index 6e08caf0a4e53..ab84a504b54c6 100644 --- a/pkgs/build-support/release/debian-build.nix +++ b/pkgs/build-support/release/debian-build.nix @@ -86,7 +86,7 @@ vmTools.runInLinuxImage (stdenv.mkDerivation ( eval "$postInstall" ''; - meta = (if args ? meta then args.meta else {}) // { + meta = (lib.optionalAttrs (args ? meta) args.meta) // { description = "Deb package for ${diskImage.fullName}"; }; } diff --git a/pkgs/build-support/release/nix-build.nix b/pkgs/build-support/release/nix-build.nix index 83e521bb65c74..583831d4821da 100644 --- a/pkgs/build-support/release/nix-build.nix +++ b/pkgs/build-support/release/nix-build.nix @@ -146,7 +146,7 @@ stdenv.mkDerivation ( postPhases = postPhases ++ ["finalPhase"]; - meta = (if args ? meta then args.meta else {}) // { + meta = (lib.optionalAttrs (args ? meta) args.meta) // { description = if doCoverageAnalysis then "Coverage analysis" else "Nix package for ${stdenv.hostPlatform.system}"; }; diff --git a/pkgs/build-support/release/rpm-build.nix b/pkgs/build-support/release/rpm-build.nix index 8f47114705092..ccbbd57107bdc 100644 --- a/pkgs/build-support/release/rpm-build.nix +++ b/pkgs/build-support/release/rpm-build.nix @@ -46,7 +46,7 @@ vmTools.buildRPM ( done ''; - meta = (if args ? meta then args.meta else {}) // { + meta = (lib.optionalAttrs (args ? meta) args.meta) // { description = "RPM package for ${diskImage.fullName}"; }; } diff --git a/pkgs/build-support/rust/build-rust-crate/test/rcgen-crates.nix b/pkgs/build-support/rust/build-rust-crate/test/rcgen-crates.nix index e15390c3ffa80..ed273c01d26dc 100644 --- a/pkgs/build-support/rust/build-rust-crate/test/rcgen-crates.nix +++ b/pkgs/build-support/rust/build-rust-crate/test/rcgen-crates.nix @@ -24,9 +24,7 @@ , release ? true # Additional crate2nix configuration if it exists. , crateConfig - ? if builtins.pathExists ./crate-config.nix - then pkgs.callPackage ./crate-config.nix {} - else {} + ? lib.optionalAttrs (builtins.pathExists ./crate-config.nix) (pkgs.callPackage ./crate-config.nix {}) }: rec { diff --git a/pkgs/build-support/rust/import-cargo-lock.nix b/pkgs/build-support/rust/import-cargo-lock.nix index f4daf3540531a..c17b0e41cca8e 100644 --- a/pkgs/build-support/rust/import-cargo-lock.nix +++ b/pkgs/build-support/rust/import-cargo-lock.nix @@ -201,7 +201,7 @@ let # Set up configuration for the vendor directory. cat > $out/.cargo-config <<EOF - [source."${gitParts.url}"] + [source."${gitParts.url}${lib.optionalString (gitParts ? type) "?${gitParts.type}=${gitParts.value}"}"] git = "${gitParts.url}" ${lib.optionalString (gitParts ? type) "${gitParts.type} = \"${gitParts.value}\""} replace-with = "vendored-sources" diff --git a/pkgs/build-support/testers/default.nix b/pkgs/build-support/testers/default.nix index 190ce72d0e630..d380dc6f30e1d 100644 --- a/pkgs/build-support/testers/default.nix +++ b/pkgs/build-support/testers/default.nix @@ -97,7 +97,9 @@ # See doc/builders/testers.chapter.md or # https://nixos.org/manual/nixpkgs/unstable/#tester-runNixOSTest runNixOSTest = - let nixos = import ../../../nixos/lib {}; + let nixos = import ../../../nixos/lib { + inherit lib; + }; in testModule: nixos.runTest { _file = "pkgs.runNixOSTest implementation"; diff --git a/pkgs/build-support/trivial-builders/default.nix b/pkgs/build-support/trivial-builders/default.nix index 2af36008c7a51..871f9722a4a2e 100644 --- a/pkgs/build-support/trivial-builders/default.nix +++ b/pkgs/build-support/trivial-builders/default.nix @@ -624,6 +624,10 @@ rec { script: runCommand name (substitutions // { + # TODO(@Artturin:) substitutions should be inside the env attrset + # but users are likely passing non-substitution arguments through substitutions + # turn off __structuredAttrs to unbreak substituteAll + __structuredAttrs = false; inherit meta; inherit depsTargetTargetPropagated; propagatedBuildInputs = |