From 84e37a10ec32b70c0e1a74fb3e5a837f6e7d74ab Mon Sep 17 00:00:00 2001 From: Artturin Date: Sat, 31 Dec 2022 15:25:54 +0200 Subject: [PATCH 1/6] stdenv: allow propagating propagated dependencies separately from the fixup phase for makeSetupHook --- pkgs/stdenv/generic/setup.sh | 65 +++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 6ea44a641cef..1a637bf13fdd 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -995,6 +995,39 @@ stripHash() { } +recordPropagatedDependencies() { + # Propagate dependencies into the development output. + declare -ra flatVars=( + # Build + depsBuildBuildPropagated + propagatedNativeBuildInputs + depsBuildTargetPropagated + # Host + depsHostHostPropagated + propagatedBuildInputs + # Target + depsTargetTargetPropagated + ) + declare -ra flatFiles=( + "${propagatedBuildDepFiles[@]}" + "${propagatedHostDepFiles[@]}" + "${propagatedTargetDepFiles[@]}" + ) + + local propagatedInputsIndex + for propagatedInputsIndex in "${!flatVars[@]}"; do + local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]" + local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}" + + [[ "${!propagatedInputsSlice}" ]] || continue + + mkdir -p "${!outputDev}/nix-support" + # shellcheck disable=SC2086 + printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile" + done +} + + unpackCmdHooks+=(_defaultUnpack) _defaultUnpack() { local fn="$1" @@ -1379,36 +1412,8 @@ fixupPhase() { done - # Propagate dependencies & setup hook into the development output. - declare -ra flatVars=( - # Build - depsBuildBuildPropagated - propagatedNativeBuildInputs - depsBuildTargetPropagated - # Host - depsHostHostPropagated - propagatedBuildInputs - # Target - depsTargetTargetPropagated - ) - declare -ra flatFiles=( - "${propagatedBuildDepFiles[@]}" - "${propagatedHostDepFiles[@]}" - "${propagatedTargetDepFiles[@]}" - ) - - local propagatedInputsIndex - for propagatedInputsIndex in "${!flatVars[@]}"; do - local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]" - local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}" - - [[ "${!propagatedInputsSlice}" ]] || continue - - mkdir -p "${!outputDev}/nix-support" - # shellcheck disable=SC2086 - printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile" - done - + # record propagated dependencies & setup hook into the development output. + recordPropagatedDependencies if [ -n "${setupHook:-}" ]; then mkdir -p "${!outputDev}/nix-support" From 9a9c42e19f0e520d06ee08c68cb050e3d698f3d6 Mon Sep 17 00:00:00 2001 From: Artturin Date: Fri, 30 Dec 2022 22:14:00 +0200 Subject: [PATCH 2/6] makeSetupHook: support depsTargetTargetPropagated --- pkgs/build-support/trivial-builders.nix | 20 +++++++++++++------ .../interpreters/lua-5/wrap-lua.nix | 2 +- .../interpreters/octave/wrap-octave.nix | 2 +- .../interpreters/python/wrap-python.nix | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index 7318d13f6bab..aca9db9d1aba 100644 --- a/pkgs/build-support/trivial-builders.nix +++ b/pkgs/build-support/trivial-builders.nix @@ -623,15 +623,24 @@ rec { */ makeSetupHook = { name ? lib.warn "calling makeSetupHook without passing a name is deprecated." "hook" - , deps ? [] - , substitutions ? {} - , meta ? {} - , passthru ? {} + , deps ? [ ] + # hooks go in nativeBuildInput so these will be nativeBuildInput + , propagatedBuildInputs ? [ ] + # these will be buildInputs + , depsTargetTargetPropagated ? [ ] + , meta ? { } + , passthru ? { } + , substitutions ? { } }: script: runCommand name (substitutions // { inherit meta; + inherit depsTargetTargetPropagated; + propagatedBuildInputs = + # remove list conditionals before 23.11 + lib.warnIf (!lib.isList deps) "deps argument to makeSetupHook must be a list. content: ${toString deps}" + propagatedBuildInputs ++ (if lib.isList deps then deps else [ deps ] ); strictDeps = true; # TODO 2023-01, no backport: simplify to inherit passthru; passthru = passthru @@ -642,8 +651,7 @@ rec { ('' mkdir -p $out/nix-support cp ${script} $out/nix-support/setup-hook - '' + lib.optionalString (deps != []) '' - printWords ${toString deps} > $out/nix-support/propagated-build-inputs + recordPropagatedDependencies '' + lib.optionalString (substitutions != {}) '' substituteAll ${script} $out/nix-support/setup-hook ''); diff --git a/pkgs/development/interpreters/lua-5/wrap-lua.nix b/pkgs/development/interpreters/lua-5/wrap-lua.nix index c9ef151bea3c..2ba5d47d9dd9 100644 --- a/pkgs/development/interpreters/lua-5/wrap-lua.nix +++ b/pkgs/development/interpreters/lua-5/wrap-lua.nix @@ -8,7 +8,7 @@ # imported as wrapLua in lua-packages.nix and passed to build-lua-derivation to be used as buildInput makeSetupHook { name = "wrap-lua-hook"; - deps = makeWrapper; + deps = [ makeWrapper ]; substitutions.executable = lua.interpreter; substitutions.lua = lua; substitutions.LuaPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths; diff --git a/pkgs/development/interpreters/octave/wrap-octave.nix b/pkgs/development/interpreters/octave/wrap-octave.nix index 1e4616136a1b..6e75ffab443d 100644 --- a/pkgs/development/interpreters/octave/wrap-octave.nix +++ b/pkgs/development/interpreters/octave/wrap-octave.nix @@ -10,7 +10,7 @@ # Each of the substitutions is available in the wrap.sh script as @thingSubstituted@ makeSetupHook { name = "${octave.name}-pkgs-setup-hook"; - deps = makeWrapper; + deps = [ makeWrapper ]; substitutions.executable = octave.interpreter; substitutions.octave = octave; } ./wrap.sh diff --git a/pkgs/development/interpreters/python/wrap-python.nix b/pkgs/development/interpreters/python/wrap-python.nix index 83da013bfd2d..7a80813f6373 100644 --- a/pkgs/development/interpreters/python/wrap-python.nix +++ b/pkgs/development/interpreters/python/wrap-python.nix @@ -5,7 +5,7 @@ makePythonHook { name = "wrap-python-hook"; - deps = makeWrapper; + deps = [ makeWrapper ]; substitutions.sitePackages = python.sitePackages; substitutions.executable = python.interpreter; substitutions.python = python.pythonForBuild; From 8be7ab60b17f772b88358a8f1b6aeedd3306b13a Mon Sep 17 00:00:00 2001 From: Artturin Date: Sun, 1 Jan 2023 16:02:47 +0200 Subject: [PATCH 3/6] wrapGAppsHook: make it work with strictDeps remove unused input add test for GDK_PIXBUF_MODULE_FILE run tests with strictDeps if the tests work with strictDeps then they work with non strictDeps --- .../setup-hooks/wrap-gapps-hook/default.nix | 27 ++++++++++++++----- .../setup-hooks/wrap-gapps-hook/tests/lib.nix | 2 +- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/pkgs/build-support/setup-hooks/wrap-gapps-hook/default.nix b/pkgs/build-support/setup-hooks/wrap-gapps-hook/default.nix index 5ef613838856..99633a3c7c9a 100644 --- a/pkgs/build-support/setup-hooks/wrap-gapps-hook/default.nix +++ b/pkgs/build-support/setup-hooks/wrap-gapps-hook/default.nix @@ -9,12 +9,15 @@ , dconf , callPackage , wrapGAppsHook -, writeTextFile +, targetPackages }: makeSetupHook { name = "wrap-gapps-hook"; - deps = lib.optionals (!stdenv.isDarwin) [ + propagatedBuildInputs = [ + # We use the wrapProgram function. + makeWrapper + ] ++ lib.optionals (!stdenv.isDarwin) [ # It is highly probable that a program will use GSettings, # at minimum through GTK file chooser dialogue. # Let’s add a GIO module for “dconf” GSettings backend @@ -23,19 +26,22 @@ makeSetupHook { # Unfortunately, it also requires the user to have dconf # D-Bus service enabled globally (e.g. through a NixOS module). dconf.lib + ] ++ lib.optionals isGraphical [ # TODO: remove this, packages should depend on GTK explicitly. gtk3 + librsvg + ]; + + # depsTargetTargetPropagated will essentially be buildInputs when wrapGAppsHook is placed into nativeBuildInputs + # the librsvg above should be removed but kept to not break anything that implicitly depended on its binaries + depsTargetTargetPropagated = assert (lib.assertMsg (!targetPackages ? raw) "wrapGAppsHook must be in nativeBuildInputs"); lib.optionals isGraphical [ # librsvg provides a module for gdk-pixbuf to allow rendering # SVG icons. Most icon themes are SVG-based and so are some # graphics in GTK (e.g. cross for closing window in window title bar) # so it is pretty much required for applications using GTK. librsvg - ] ++ [ - - # We use the wrapProgram function. - makeWrapper ]; passthru = { tests = let @@ -65,6 +71,15 @@ makeSetupHook { '' ); + basic-contains-gdk-pixbuf = let + tested = basic; + in testLib.runTest "basic-contains-gdk-pixbuf" ( + testLib.skip stdenv.isDarwin '' + ${expectSomeLineContainingYInFileXToMentionZ "${tested}/bin/foo" "GDK_PIXBUF_MODULE_FILE" "${lib.getLib librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache"} + ${expectSomeLineContainingYInFileXToMentionZ "${tested}/libexec/bar" "GDK_PIXBUF_MODULE_FILE" "${lib.getLib librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache"} + '' + ); + # Simple derivation containing a gobject-introspection typelib. typelib-Mahjong = stdenv.mkDerivation { name = "typelib-Mahjong"; diff --git a/pkgs/build-support/setup-hooks/wrap-gapps-hook/tests/lib.nix b/pkgs/build-support/setup-hooks/wrap-gapps-hook/tests/lib.nix index 42866c3419dd..59fa9de24f9d 100644 --- a/pkgs/build-support/setup-hooks/wrap-gapps-hook/tests/lib.nix +++ b/pkgs/build-support/setup-hooks/wrap-gapps-hook/tests/lib.nix @@ -1,7 +1,7 @@ { lib, runCommand }: rec { - runTest = name: body: runCommand name { } '' + runTest = name: body: runCommand name { strictDeps = true; } '' set -o errexit ${body} touch $out From 4e3dcf364ed477075baea851fba264a20e47bb20 Mon Sep 17 00:00:00 2001 From: Artturin Date: Sun, 1 Jan 2023 22:10:24 +0200 Subject: [PATCH 4/6] treewide: makeSetupHook deps -> propagatedBuildInputs --- .../editors/vim/plugins/vim-utils.nix | 6 +-- .../build-dotnet-module/hooks/default.nix | 10 ++-- .../node/build-npm-package/hooks/default.nix | 2 +- pkgs/build-support/rust/hooks/default.nix | 12 ++--- .../make-binary-wrapper/default.nix | 3 +- pkgs/build-support/trivial-builders.nix | 52 +++++++++---------- .../interpreters/lua-5/hooks/default.nix | 4 +- .../interpreters/lua-5/wrap-lua.nix | 2 +- .../interpreters/octave/wrap-octave.nix | 2 +- .../interpreters/python/hooks/default.nix | 30 +++++------ .../interpreters/python/wrap-python.nix | 2 +- pkgs/development/interpreters/tcl/generic.nix | 2 +- .../libraries/qt-5/5.15/default.nix | 4 +- pkgs/development/libraries/qt-6/default.nix | 4 +- .../poetry2nix/poetry2nix/hooks/default.nix | 8 +-- pkgs/servers/x11/xorg/overrides.nix | 2 +- pkgs/top-level/all-packages.nix | 26 +++++----- pkgs/top-level/cuda-packages.nix | 2 +- pkgs/top-level/darwin-packages.nix | 4 +- 19 files changed, 88 insertions(+), 89 deletions(-) diff --git a/pkgs/applications/editors/vim/plugins/vim-utils.nix b/pkgs/applications/editors/vim/plugins/vim-utils.nix index 4235aa5e929e..5c7f6f64a7c3 100644 --- a/pkgs/applications/editors/vim/plugins/vim-utils.nix +++ b/pkgs/applications/editors/vim/plugins/vim-utils.nix @@ -363,7 +363,7 @@ rec { vimGenDocHook = callPackage ({ vim }: makeSetupHook { name = "vim-gen-doc-hook"; - deps = [ vim ]; + propagatedBuildInputs = [ vim ]; substitutions = { vimBinary = "${vim}/bin/vim"; inherit rtpPath; @@ -373,7 +373,7 @@ rec { vimCommandCheckHook = callPackage ({ neovim-unwrapped }: makeSetupHook { name = "vim-command-check-hook"; - deps = [ neovim-unwrapped ]; + propagatedBuildInputs = [ neovim-unwrapped ]; substitutions = { vimBinary = "${neovim-unwrapped}/bin/nvim"; inherit rtpPath; @@ -383,7 +383,7 @@ rec { neovimRequireCheckHook = callPackage ({ neovim-unwrapped }: makeSetupHook { name = "neovim-require-check-hook"; - deps = [ neovim-unwrapped ]; + propagatedBuildInputs = [ neovim-unwrapped ]; substitutions = { nvimBinary = "${neovim-unwrapped}/bin/nvim"; inherit rtpPath; diff --git a/pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix b/pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix index bce3d799fbb1..a72f0291a872 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix +++ b/pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix @@ -20,7 +20,7 @@ in dotnetConfigureHook = callPackage ({ }: makeSetupHook { name = "dotnet-configure-hook"; - deps = [ dotnet-sdk nuget-source ]; + propagatedBuildInputs = [ dotnet-sdk nuget-source ]; substitutions = { nugetSource = nuget-source; inherit runtimeId; @@ -30,7 +30,7 @@ in dotnetBuildHook = callPackage ({ }: makeSetupHook { name = "dotnet-build-hook"; - deps = [ dotnet-sdk ]; + propagatedBuildInputs = [ dotnet-sdk ]; substitutions = { inherit buildType runtimeId; }; @@ -39,7 +39,7 @@ in dotnetCheckHook = callPackage ({ }: makeSetupHook { name = "dotnet-check-hook"; - deps = [ dotnet-test-sdk ]; + propagatedBuildInputs = [ dotnet-test-sdk ]; substitutions = { inherit buildType libraryPath; disabledTests = lib.optionalString (disabledTests != []) @@ -54,7 +54,7 @@ in dotnetInstallHook = callPackage ({ }: makeSetupHook { name = "dotnet-install-hook"; - deps = [ dotnet-sdk ]; + propagatedBuildInputs = [ dotnet-sdk ]; substitutions = { inherit buildType runtimeId; }; @@ -63,7 +63,7 @@ in dotnetFixupHook = callPackage ({ }: makeSetupHook { name = "dotnet-fixup-hook"; - deps = [ dotnet-runtime ]; + propagatedBuildInputs = [ dotnet-runtime ]; substitutions = { dotnetRuntime = dotnet-runtime; runtimeDeps = libraryPath; diff --git a/pkgs/build-support/node/build-npm-package/hooks/default.nix b/pkgs/build-support/node/build-npm-package/hooks/default.nix index 65ac661cea51..e5c93f1f7784 100644 --- a/pkgs/build-support/node/build-npm-package/hooks/default.nix +++ b/pkgs/build-support/node/build-npm-package/hooks/default.nix @@ -26,7 +26,7 @@ npmInstallHook = makeSetupHook { name = "npm-install-hook"; - deps = [ buildPackages.makeWrapper ]; + propagatedBuildInputs = [ buildPackages.makeWrapper ]; substitutions = { hostNode = "${nodejs}/bin/node"; jq = "${buildPackages.jq}/bin/jq"; diff --git a/pkgs/build-support/rust/hooks/default.nix b/pkgs/build-support/rust/hooks/default.nix index 9989e582d2e9..b4034120103e 100644 --- a/pkgs/build-support/rust/hooks/default.nix +++ b/pkgs/build-support/rust/hooks/default.nix @@ -31,7 +31,7 @@ in { cargoBuildHook = callPackage ({ }: makeSetupHook { name = "cargo-build-hook.sh"; - deps = [ cargo ]; + propagatedBuildInputs = [ cargo ]; substitutions = { inherit ccForBuild ccForHost cxxForBuild cxxForHost rustBuildPlatform rustTargetPlatform rustTargetPlatformSpec; @@ -41,7 +41,7 @@ in { cargoCheckHook = callPackage ({ }: makeSetupHook { name = "cargo-check-hook.sh"; - deps = [ cargo ]; + propagatedBuildInputs = [ cargo ]; substitutions = { inherit rustTargetPlatformSpec; }; @@ -50,7 +50,7 @@ in { cargoInstallHook = callPackage ({ }: makeSetupHook { name = "cargo-install-hook.sh"; - deps = [ ]; + propagatedBuildInputs = [ ]; substitutions = { inherit shortTarget; }; @@ -59,7 +59,7 @@ in { cargoNextestHook = callPackage ({ }: makeSetupHook { name = "cargo-nextest-hook.sh"; - deps = [ cargo cargo-nextest ]; + propagatedBuildInputs = [ cargo cargo-nextest ]; substitutions = { inherit rustTargetPlatformSpec; }; @@ -68,7 +68,7 @@ in { cargoSetupHook = callPackage ({ }: makeSetupHook { name = "cargo-setup-hook.sh"; - deps = [ ]; + propagatedBuildInputs = [ ]; substitutions = { defaultConfig = ../fetchcargo-default-config.toml; @@ -117,7 +117,7 @@ in { maturinBuildHook = callPackage ({ }: makeSetupHook { name = "maturin-build-hook.sh"; - deps = [ cargo maturin rustc ]; + propagatedBuildInputs = [ cargo maturin rustc ]; substitutions = { inherit ccForBuild ccForHost cxxForBuild cxxForHost rustBuildPlatform rustTargetPlatform rustTargetPlatformSpec; diff --git a/pkgs/build-support/setup-hooks/make-binary-wrapper/default.nix b/pkgs/build-support/setup-hooks/make-binary-wrapper/default.nix index c81a253b0de8..17b97b1082e9 100644 --- a/pkgs/build-support/setup-hooks/make-binary-wrapper/default.nix +++ b/pkgs/build-support/setup-hooks/make-binary-wrapper/default.nix @@ -11,8 +11,7 @@ makeSetupHook { name = "make-binary-wrapper-hook"; - - deps = [ dieHook ] + propagatedBuildInputs = [ dieHook ] # https://github.com/NixOS/nixpkgs/issues/148189 ++ lib.optional (stdenv.isDarwin && stdenv.isAarch64) cc; diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index aca9db9d1aba..db3207bf2250 100644 --- a/pkgs/build-support/trivial-builders.nix +++ b/pkgs/build-support/trivial-builders.nix @@ -594,32 +594,32 @@ rec { /* - Make a package that just contains a setup hook with the given contents. - This setup hook will be invoked by any package that includes this package - as a buildInput. Optionally takes a list of substitutions that should be - applied to the resulting script. - - Examples: - # setup hook that depends on the hello package and runs ./myscript.sh - myhellohook = makeSetupHook { deps = [ hello ]; } ./myscript.sh; - - # writes a Linux-exclusive setup hook where @bash@ myscript.sh is substituted for the - # bash interpreter. - myhellohookSub = makeSetupHook { - name = "myscript-hook"; - deps = [ hello ]; - substitutions = { bash = "${pkgs.bash}/bin/bash"; }; - meta.platforms = lib.platforms.linux; - } ./myscript.sh; - - # setup hook with a package test - myhellohookTested = makeSetupHook { - name = "myscript-hook"; - deps = [ hello ]; - substitutions = { bash = "${pkgs.bash}/bin/bash"; }; - meta.platforms = lib.platforms.linux; - passthru.tests.greeting = callPackage ./test { }; - } ./myscript.sh; + * Make a package that just contains a setup hook with the given contents. + * This setup hook will be invoked by any package that includes this package + * as a buildInput. Optionally takes a list of substitutions that should be + * applied to the resulting script. + * + * Examples: + * # setup hook that depends on the hello package and runs ./myscript.sh + * myhellohook = makeSetupHook { propagatedBuildInputs = [ hello ]; } ./myscript.sh; + * + * # writes a Linux-exclusive setup hook where @bash@ myscript.sh is substituted for the + * # bash interpreter. + * myhellohookSub = makeSetupHook { + * name = "myscript-hook"; + * propagatedBuildInputs = [ hello ]; + * substitutions = { bash = "${pkgs.bash}/bin/bash"; }; + * meta.platforms = lib.platforms.linux; + * } ./myscript.sh; + * + * # setup hook with a package test + * myhellohookTested = makeSetupHook { + * name = "myscript-hook"; + * propagatedBuildInputs = [ hello ]; + * substitutions = { bash = "${pkgs.bash}/bin/bash"; }; + * meta.platforms = lib.platforms.linux; + * passthru.tests.greeting = callPackage ./test { }; + * } ./myscript.sh; */ makeSetupHook = { name ? lib.warn "calling makeSetupHook without passing a name is deprecated." "hook" diff --git a/pkgs/development/interpreters/lua-5/hooks/default.nix b/pkgs/development/interpreters/lua-5/hooks/default.nix index fc92c59bb910..6c303f770dec 100644 --- a/pkgs/development/interpreters/lua-5/hooks/default.nix +++ b/pkgs/development/interpreters/lua-5/hooks/default.nix @@ -27,7 +27,7 @@ in { luarocksCheckHook = callPackage ({ luarocks }: makeSetupHook { name = "luarocks-check-hook"; - deps = [ luarocks ]; + propagatedBuildInputs = [ luarocks ]; } ./luarocks-check-hook.sh) {}; # luarocks installs data in a non-overridable location. Until a proper luarocks patch, @@ -35,6 +35,6 @@ in { luarocksMoveDataFolder = callPackage ({ }: makeSetupHook { name = "luarocks-move-rock"; - deps = [ ]; + propagatedBuildInputs = [ ]; } ./luarocks-move-data.sh) {}; } diff --git a/pkgs/development/interpreters/lua-5/wrap-lua.nix b/pkgs/development/interpreters/lua-5/wrap-lua.nix index 2ba5d47d9dd9..43ececd1e794 100644 --- a/pkgs/development/interpreters/lua-5/wrap-lua.nix +++ b/pkgs/development/interpreters/lua-5/wrap-lua.nix @@ -8,7 +8,7 @@ # imported as wrapLua in lua-packages.nix and passed to build-lua-derivation to be used as buildInput makeSetupHook { name = "wrap-lua-hook"; - deps = [ makeWrapper ]; + propagatedBuildInputs = [ makeWrapper ]; substitutions.executable = lua.interpreter; substitutions.lua = lua; substitutions.LuaPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths; diff --git a/pkgs/development/interpreters/octave/wrap-octave.nix b/pkgs/development/interpreters/octave/wrap-octave.nix index 6e75ffab443d..2317a479f0e2 100644 --- a/pkgs/development/interpreters/octave/wrap-octave.nix +++ b/pkgs/development/interpreters/octave/wrap-octave.nix @@ -10,7 +10,7 @@ # Each of the substitutions is available in the wrap.sh script as @thingSubstituted@ makeSetupHook { name = "${octave.name}-pkgs-setup-hook"; - deps = [ makeWrapper ]; + propagatedBuildInputs = [ makeWrapper ]; substitutions.executable = octave.interpreter; substitutions.octave = octave; } ./wrap.sh diff --git a/pkgs/development/interpreters/python/hooks/default.nix b/pkgs/development/interpreters/python/hooks/default.nix index 08dc3ea61ab7..001e477b9185 100644 --- a/pkgs/development/interpreters/python/hooks/default.nix +++ b/pkgs/development/interpreters/python/hooks/default.nix @@ -11,7 +11,7 @@ in { condaInstallHook = callPackage ({ makePythonHook, gnutar, lbzip2 }: makePythonHook { name = "conda-install-hook"; - deps = [ gnutar lbzip2 ]; + propagatedBuildInputs = [ gnutar lbzip2 ]; substitutions = { inherit pythonSitePackages; }; @@ -20,19 +20,19 @@ in { condaUnpackHook = callPackage ({ makePythonHook }: makePythonHook { name = "conda-unpack-hook"; - deps = []; + propagatedBuildInputs = []; } ./conda-unpack-hook.sh) {}; eggBuildHook = callPackage ({ makePythonHook }: makePythonHook { name = "egg-build-hook.sh"; - deps = [ ]; + propagatedBuildInputs = [ ]; } ./egg-build-hook.sh) {}; eggInstallHook = callPackage ({ makePythonHook, setuptools }: makePythonHook { name = "egg-install-hook.sh"; - deps = [ setuptools ]; + propagatedBuildInputs = [ setuptools ]; substitutions = { inherit pythonInterpreter pythonSitePackages; }; @@ -41,13 +41,13 @@ in { eggUnpackHook = callPackage ({ makePythonHook, }: makePythonHook { name = "egg-unpack-hook.sh"; - deps = [ ]; + propagatedBuildInputs = [ ]; } ./egg-unpack-hook.sh) {}; flitBuildHook = callPackage ({ makePythonHook, flit }: makePythonHook { name = "flit-build-hook"; - deps = [ flit ]; + propagatedBuildInputs = [ flit ]; substitutions = { inherit pythonInterpreter; }; @@ -56,7 +56,7 @@ in { pipBuildHook = callPackage ({ makePythonHook, pip, wheel }: makePythonHook { name = "pip-build-hook.sh"; - deps = [ pip wheel ]; + propagatedBuildInputs = [ pip wheel ]; substitutions = { inherit pythonInterpreter pythonSitePackages; }; @@ -65,7 +65,7 @@ in { pipInstallHook = callPackage ({ makePythonHook, pip }: makePythonHook { name = "pip-install-hook"; - deps = [ pip ]; + propagatedBuildInputs = [ pip ]; substitutions = { inherit pythonInterpreter pythonSitePackages; }; @@ -74,7 +74,7 @@ in { pytestCheckHook = callPackage ({ makePythonHook, pytest }: makePythonHook { name = "pytest-check-hook"; - deps = [ pytest ]; + propagatedBuildInputs = [ pytest ]; substitutions = { inherit pythonCheckInterpreter; }; @@ -123,7 +123,7 @@ in { pythonRelaxDepsHook = callPackage ({ makePythonHook, wheel }: makePythonHook { name = "python-relax-deps-hook"; - deps = [ wheel ]; + propagatedBuildInputs = [ wheel ]; substitutions = { inherit pythonInterpreter; }; @@ -145,7 +145,7 @@ in { setuptoolsBuildHook = callPackage ({ makePythonHook, setuptools, wheel }: makePythonHook { name = "setuptools-setup-hook"; - deps = [ setuptools wheel ]; + propagatedBuildInputs = [ setuptools wheel ]; substitutions = { inherit pythonInterpreter pythonSitePackages setuppy; }; @@ -154,7 +154,7 @@ in { setuptoolsCheckHook = callPackage ({ makePythonHook, setuptools }: makePythonHook { name = "setuptools-check-hook"; - deps = [ setuptools ]; + propagatedBuildInputs = [ setuptools ]; substitutions = { inherit pythonCheckInterpreter setuppy; }; @@ -171,7 +171,7 @@ in { venvShellHook = disabledIf (!isPy3k) (callPackage ({ makePythonHook, ensureNewerSourcesForZipFilesHook }: makePythonHook { name = "venv-shell-hook"; - deps = [ ensureNewerSourcesForZipFilesHook ]; + propagatedBuildInputs = [ ensureNewerSourcesForZipFilesHook ]; substitutions = { inherit pythonInterpreter; }; @@ -180,7 +180,7 @@ in { wheelUnpackHook = callPackage ({ makePythonHook, wheel }: makePythonHook { name = "wheel-unpack-hook.sh"; - deps = [ wheel ]; + propagatedBuildInputs = [ wheel ]; } ./wheel-unpack-hook.sh) {}; wrapPython = callPackage ../wrap-python.nix { @@ -190,6 +190,6 @@ in { sphinxHook = callPackage ({ makePythonHook, sphinx, installShellFiles }: makePythonHook { name = "python${python.pythonVersion}-sphinx-hook"; - deps = [ sphinx installShellFiles ]; + propagatedBuildInputs = [ sphinx installShellFiles ]; } ./sphinx-hook.sh) {}; } diff --git a/pkgs/development/interpreters/python/wrap-python.nix b/pkgs/development/interpreters/python/wrap-python.nix index 7a80813f6373..c67a8e088514 100644 --- a/pkgs/development/interpreters/python/wrap-python.nix +++ b/pkgs/development/interpreters/python/wrap-python.nix @@ -5,7 +5,7 @@ makePythonHook { name = "wrap-python-hook"; - deps = [ makeWrapper ]; + propagatedBuildInputs = [ makeWrapper ]; substitutions.sitePackages = python.sitePackages; substitutions.executable = python.interpreter; substitutions.python = python.pythonForBuild; diff --git a/pkgs/development/interpreters/tcl/generic.nix b/pkgs/development/interpreters/tcl/generic.nix index 6351a08c1c07..6ce6e35189bf 100644 --- a/pkgs/development/interpreters/tcl/generic.nix +++ b/pkgs/development/interpreters/tcl/generic.nix @@ -53,7 +53,7 @@ let libdir = "lib/${libPrefix}"; tclPackageHook = callPackage ({ buildPackages }: makeSetupHook { name = "tcl-package-hook"; - deps = [ buildPackages.makeWrapper ]; + propagatedBuildInputs = [ buildPackages.makeWrapper ]; } ./tcl-package-hook.sh) {}; }; }; diff --git a/pkgs/development/libraries/qt-5/5.15/default.nix b/pkgs/development/libraries/qt-5/5.15/default.nix index 7d876d884b37..31de73b25edc 100644 --- a/pkgs/development/libraries/qt-5/5.15/default.nix +++ b/pkgs/development/libraries/qt-5/5.15/default.nix @@ -211,7 +211,7 @@ let qmake = makeSetupHook { name = "qmake-hook"; - deps = [ self.qtbase.dev ]; + propagatedBuildInputs = [ self.qtbase.dev ]; substitutions = { inherit debug; fix_qmake_libtool = ../hooks/fix-qmake-libtool.sh; @@ -220,7 +220,7 @@ let wrapQtAppsHook = makeSetupHook { name = "wrap-qt5-apps-hook"; - deps = [ self.qtbase.dev buildPackages.makeWrapper ] + propagatedBuildInputs = [ self.qtbase.dev buildPackages.makeWrapper ] ++ lib.optional stdenv.isLinux self.qtwayland.dev; } ../hooks/wrap-qt-apps-hook.sh; }; diff --git a/pkgs/development/libraries/qt-6/default.nix b/pkgs/development/libraries/qt-6/default.nix index b09521e34e3c..2577806b5c43 100644 --- a/pkgs/development/libraries/qt-6/default.nix +++ b/pkgs/development/libraries/qt-6/default.nix @@ -141,12 +141,12 @@ let wrapQtAppsHook = makeSetupHook { name = "wrap-qt6-apps-hook"; - deps = [ buildPackages.makeWrapper ]; + propagatedBuildInputs = [ buildPackages.makeWrapper ]; } ./hooks/wrap-qt-apps-hook.sh; qmake = makeSetupHook { name = "qmake6-hook"; - deps = [ self.qtbase.dev ]; + propagatedBuildInputs = [ self.qtbase.dev ]; substitutions = { inherit debug; fix_qmake_libtool = ./hooks/fix-qmake-libtool.sh; diff --git a/pkgs/development/tools/poetry2nix/poetry2nix/hooks/default.nix b/pkgs/development/tools/poetry2nix/poetry2nix/hooks/default.nix index a503ea594fb4..513d17fbbc2f 100644 --- a/pkgs/development/tools/poetry2nix/poetry2nix/hooks/default.nix +++ b/pkgs/development/tools/poetry2nix/poetry2nix/hooks/default.nix @@ -18,7 +18,7 @@ let makeSetupHook { name = "remove-path-dependencies.sh"; - deps = [ ]; + propagatedBuildInputs = [ ]; substitutions = { # NOTE: We have to use a non-overlayed Python here because otherwise we run into an infinite recursion # because building of tomlkit and its dependencies also use these hooks. @@ -50,7 +50,7 @@ in makeSetupHook { name = "pip-build-hook.sh"; - deps = [ pip wheel ]; + propagatedBuildInputs = [ pip wheel ]; substitutions = { inherit pythonInterpreter pythonSitePackages; }; @@ -64,7 +64,7 @@ in makeSetupHook { name = "fixup-hook.sh"; - deps = [ ]; + propagatedBuildInputs = [ ]; substitutions = { inherit pythonSitePackages; filenames = builtins.concatStringsSep " " [ @@ -84,7 +84,7 @@ in makeSetupHook { name = "wheel-unpack-hook.sh"; - deps = [ ]; + propagatedBuildInputs = [ ]; } ./wheel-unpack-hook.sh ) { }; diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix index 565e8c188b76..1b4b5e000b78 100644 --- a/pkgs/servers/x11/xorg/overrides.nix +++ b/pkgs/servers/x11/xorg/overrides.nix @@ -26,7 +26,7 @@ self: super: { wrapWithXFileSearchPathHook = callPackage ({ makeBinaryWrapper, makeSetupHook, writeScript }: makeSetupHook { name = "wrapWithXFileSearchPathHook"; - deps = [ makeBinaryWrapper ]; + propagatedBuildInputs = [ makeBinaryWrapper ]; } (writeScript "wrapWithXFileSearchPathHook.sh" '' wrapWithXFileSearchPath() { paths=( diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 58acbec96d78..470b8806bcdf 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -160,14 +160,14 @@ with pkgs; ### BUILD SUPPORT auditBlasHook = makeSetupHook - { name = "auto-blas-hook"; deps = [ blas lapack ]; } + { name = "auto-blas-hook"; propagatedBuildInputs = [ blas lapack ]; } ../build-support/setup-hooks/audit-blas.sh; autoreconfHook = callPackage ( { makeSetupHook, autoconf, automake, gettext, libtool }: makeSetupHook { name = "autoreconf-hook"; - deps = [ autoconf automake gettext libtool ]; + propagatedBuildInputs = [ autoconf automake gettext libtool ]; } ../build-support/setup-hooks/autoreconf.sh ) { }; @@ -184,7 +184,7 @@ with pkgs; autoPatchelfHook = makeSetupHook { name = "auto-patchelf-hook"; - deps = [ bintools ]; + propagatedBuildInputs = [ bintools ]; substitutions = { pythonInterpreter = "${python3.withPackages (ps: [ ps.pyelftools ])}/bin/python"; autoPatchelfScript = ../build-support/setup-hooks/auto-patchelf.py; @@ -356,7 +356,7 @@ with pkgs; gogUnpackHook = makeSetupHook { name = "gog-unpack-hook"; - deps = [ innoextract file-rename ]; } + propagatedBuildInputs = [ innoextract file-rename ]; } ../build-support/setup-hooks/gog-unpack.sh; buildEnv = callPackage ../build-support/buildenv { }; # not actually a package @@ -1012,7 +1012,7 @@ with pkgs; makeShellWrapper = makeSetupHook { name = "make-shell-wrapper-hook"; - deps = [ dieHook ]; + propagatedBuildInputs = [ dieHook ]; substitutions = { # targetPackages.runtimeShell only exists when pkgs == targetPackages (when targetPackages is not __raw) shell = if targetPackages ? runtimeShell then targetPackages.runtimeShell else throw "makeWrapper/makeShellWrapper must be in nativeBuildInputs"; @@ -1063,7 +1063,7 @@ with pkgs; shortenPerlShebang = makeSetupHook { name = "shorten-perl-shebang-hook"; - deps = [ dieHook ]; + propagatedBuildInputs = [ dieHook ]; } ../build-support/setup-hooks/shorten-perl-shebang.sh; singularity-tools = callPackage ../build-support/singularity-tools { }; @@ -1115,7 +1115,7 @@ with pkgs; desktopToDarwinBundle = makeSetupHook { name = "desktop-to-darwin-bundle-hook"; - deps = [ writeDarwinBundle librsvg imagemagick python3Packages.icnsutil ]; + propagatedBuildInputs = [ writeDarwinBundle librsvg imagemagick python3Packages.icnsutil ]; } ../build-support/setup-hooks/desktop-to-darwin-bundle.sh; keepBuildTree = makeSetupHook { @@ -1128,7 +1128,7 @@ with pkgs; makeGCOVReport = makeSetupHook { name = "make-gcov-report-hook"; - deps = [ lcov enableGCOVInstrumentation ]; + propagatedBuildInputs = [ lcov enableGCOVInstrumentation ]; } ../build-support/setup-hooks/make-coverage-analysis-report.sh; makeHardcodeGsettingsPatch = callPackage ../build-support/make-hardcode-gsettings-patch { }; @@ -1163,7 +1163,7 @@ with pkgs; iconConvTools = callPackage ../build-support/icon-conv-tools {}; validatePkgConfig = makeSetupHook - { name = "validate-pkg-config"; deps = [ findutils pkg-config ]; } + { name = "validate-pkg-config"; propagatedBuildInputs = [ findutils pkg-config ]; } ../build-support/setup-hooks/validate-pkg-config.sh; patchPpdFilesHook = callPackage ../build-support/setup-hooks/patch-ppd-files {}; @@ -18778,13 +18778,13 @@ with pkgs; xcbuild = xcodebuild; xcbuildHook = makeSetupHook { name = "xcbuild-hook"; - deps = [ xcbuild ]; + propagatedBuildInputs = [ xcbuild ]; } ../development/tools/xcbuild/setup-hook.sh ; # xcbuild with llvm 6 xcbuild6Hook = makeSetupHook { name = "xcbuild6-hook"; - deps = [ xcodebuild6 ]; + propagatedBuildInputs = [ xcodebuild6 ]; } ../development/tools/xcbuild/setup-hook.sh ; xcpretty = callPackage ../development/tools/xcpretty { }; @@ -22049,7 +22049,7 @@ with pkgs; memorymapping = callPackage ../development/libraries/memorymapping { }; memorymappingHook = makeSetupHook { name = "memorymapping-hook"; - deps = [ memorymapping ]; + propagatedBuildInputs = [ memorymapping ]; } ../development/libraries/memorymapping/setup-hook.sh; memray = callPackage ../development/tools/memray { }; @@ -22057,7 +22057,7 @@ with pkgs; memstream = callPackage ../development/libraries/memstream { }; memstreamHook = makeSetupHook { name = "memstream-hook"; - deps = [ memstream ]; + propagatedBuildInputs = [ memstream ]; } ../development/libraries/memstream/setup-hook.sh; menu-cache = callPackage ../development/libraries/menu-cache { }; diff --git a/pkgs/top-level/cuda-packages.nix b/pkgs/top-level/cuda-packages.nix index c57e486406e1..2044d74cab79 100644 --- a/pkgs/top-level/cuda-packages.nix +++ b/pkgs/top-level/cuda-packages.nix @@ -50,7 +50,7 @@ let autoAddOpenGLRunpathHook = final.callPackage ( { makeSetupHook, addOpenGLRunpath }: makeSetupHook { name = "auto-add-opengl-runpath-hook"; - deps = [ + propagatedBuildInputs = [ addOpenGLRunpath ]; } ../development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh diff --git a/pkgs/top-level/darwin-packages.nix b/pkgs/top-level/darwin-packages.nix index b067f5cbbc1e..4ee606ae5e76 100644 --- a/pkgs/top-level/darwin-packages.nix +++ b/pkgs/top-level/darwin-packages.nix @@ -121,7 +121,7 @@ impure-cmds // appleSourcePackages // chooseLibs // { checkReexportsHook = pkgs.makeSetupHook { name = "darwin-check-reexports-hook"; - deps = [ pkgs.darwin.print-reexports ]; + propagatedBuildInputs = [ pkgs.darwin.print-reexports ]; } ../os-specific/darwin/print-reexports/setup-hook.sh; sigtool = callPackage ../os-specific/darwin/sigtool { }; @@ -142,7 +142,7 @@ impure-cmds // appleSourcePackages // chooseLibs // { autoSignDarwinBinariesHook = pkgs.makeSetupHook { name = "auto-sign-darwin-binaries-hook"; - deps = [ self.signingUtils ]; + propagatedBuildInputs = [ self.signingUtils ]; } ../os-specific/darwin/signing-utils/auto-sign-hook.sh; maloader = callPackage ../os-specific/darwin/maloader { From 8f171925b3a0edbdc6611eef50eb07ef991fc7a6 Mon Sep 17 00:00:00 2001 From: Artturin Date: Sun, 1 Jan 2023 22:27:28 +0200 Subject: [PATCH 5/6] makeSetupHook: deprecate deps argument --- pkgs/build-support/trivial-builders.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index db3207bf2250..c7cc61262a0a 100644 --- a/pkgs/build-support/trivial-builders.nix +++ b/pkgs/build-support/trivial-builders.nix @@ -639,8 +639,9 @@ rec { inherit depsTargetTargetPropagated; propagatedBuildInputs = # remove list conditionals before 23.11 - lib.warnIf (!lib.isList deps) "deps argument to makeSetupHook must be a list. content: ${toString deps}" - propagatedBuildInputs ++ (if lib.isList deps then deps else [ deps ] ); + lib.warnIf (!lib.isList deps) "'deps' argument to makeSetupHook must be a list. content of deps: ${toString deps}" + (lib.warnIf (deps != [ ]) "'deps' argument to makeSetupHook is deprecated and will be removed in release 23.11., Please use propagatedBuildInputs instead. content of deps: ${toString deps}" + propagatedBuildInputs ++ (if lib.isList deps then deps else [ deps ])); strictDeps = true; # TODO 2023-01, no backport: simplify to inherit passthru; passthru = passthru From 680309fc9ca3cfe06e02509134427215f1079310 Mon Sep 17 00:00:00 2001 From: Artturin Date: Sat, 28 Jan 2023 21:57:21 +0200 Subject: [PATCH 6/6] add docs for makeSetupHook --- doc/builders/special.xml | 1 + doc/builders/special/makesetuphook.section.md | 37 +++++++++++++++++++ pkgs/build-support/trivial-builders.nix | 29 +-------------- 3 files changed, 39 insertions(+), 28 deletions(-) create mode 100644 doc/builders/special/makesetuphook.section.md diff --git a/doc/builders/special.xml b/doc/builders/special.xml index 525eb71abfe7..c97113481981 100644 --- a/doc/builders/special.xml +++ b/doc/builders/special.xml @@ -6,6 +6,7 @@ This chapter describes several special builders. + diff --git a/doc/builders/special/makesetuphook.section.md b/doc/builders/special/makesetuphook.section.md new file mode 100644 index 000000000000..90d75c5491cf --- /dev/null +++ b/doc/builders/special/makesetuphook.section.md @@ -0,0 +1,37 @@ +# pkgs.makeSetupHook {#sec-pkgs.makeSetupHook} + +`pkgs.makeSetupHook` is a builder that produces hooks that go in to `nativeBuildInputs` + +## Usage {#sec-pkgs.makeSetupHook-usage} + +```nix +pkgs.makeSetupHook { + name = "something-hook"; + propagatedBuildInputs = [ pkgs.commandsomething ]; + depsTargetTargetPropagated = [ pkgs.libsomething ]; +} ./script.sh +``` + +#### setup hook that depends on the hello package and runs hello and @shell@ is substituted with path to bash + +```nix +pkgs.makeSetupHook { + name = "run-hello-hook"; + propagatedBuildInputs = [ pkgs.hello ]; + substitutions = { shell = "${pkgs.bash}/bin/bash"; }; + passthru.tests.greeting = callPackage ./test { }; + meta.platforms = lib.platforms.linux; +} (writeScript "run-hello-hook.sh" '' + #!@shell@ + hello +'') +``` + +## Attributes + +* `name` Set the name of the hook. +* `propagatedBuildInputs` Runtime dependencies (such as binaries) of the hook. +* `depsTargetTargetPropagated` Non-binary dependencies. +* `meta` +* `passthru` +* `substitutions` Variables for `substituteAll` diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index c7cc61262a0a..413ed65852f5 100644 --- a/pkgs/build-support/trivial-builders.nix +++ b/pkgs/build-support/trivial-builders.nix @@ -593,34 +593,7 @@ rec { in linkFarm name (map mkEntryFromDrv drvs); - /* - * Make a package that just contains a setup hook with the given contents. - * This setup hook will be invoked by any package that includes this package - * as a buildInput. Optionally takes a list of substitutions that should be - * applied to the resulting script. - * - * Examples: - * # setup hook that depends on the hello package and runs ./myscript.sh - * myhellohook = makeSetupHook { propagatedBuildInputs = [ hello ]; } ./myscript.sh; - * - * # writes a Linux-exclusive setup hook where @bash@ myscript.sh is substituted for the - * # bash interpreter. - * myhellohookSub = makeSetupHook { - * name = "myscript-hook"; - * propagatedBuildInputs = [ hello ]; - * substitutions = { bash = "${pkgs.bash}/bin/bash"; }; - * meta.platforms = lib.platforms.linux; - * } ./myscript.sh; - * - * # setup hook with a package test - * myhellohookTested = makeSetupHook { - * name = "myscript-hook"; - * propagatedBuildInputs = [ hello ]; - * substitutions = { bash = "${pkgs.bash}/bin/bash"; }; - * meta.platforms = lib.platforms.linux; - * passthru.tests.greeting = callPackage ./test { }; - * } ./myscript.sh; - */ + # docs in doc/builders/special/makesetuphook.section.md makeSetupHook = { name ? lib.warn "calling makeSetupHook without passing a name is deprecated." "hook" , deps ? [ ]