treewide: handle *Phases variables __structuredAttrs-agnostically (#339117)

This commit is contained in:
Philip Taron 2024-09-07 09:17:57 -07:00 committed by GitHub
commit 4160ccc634
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
41 changed files with 72 additions and 56 deletions

View File

@ -518,8 +518,10 @@ There are a number of variables that control what phases are executed and in wha
Specifies the phases. You can change the order in which phases are executed, or add new phases, by setting this variable. If its not set, the default value is used, which is `$prePhases unpackPhase patchPhase $preConfigurePhases configurePhase $preBuildPhases buildPhase checkPhase $preInstallPhases installPhase fixupPhase installCheckPhase $preDistPhases distPhase $postPhases`.
The elements of `phases` must not contain spaces. If `phases` is specified as a Nix Language attribute, it should be specified as lists instead of strings. The same rules apply to the `*Phases` variables.
It is discouraged to set this variable, as it is easy to miss some important functionality hidden in some of the less obviously needed phases (like `fixupPhase` which patches the shebang of scripts).
Usually, if you just want to add a few phases, its more convenient to set one of the variables below (such as `preInstallPhases`).
Usually, if you just want to add a few phases, its more convenient to set one of the `*Phases` variables below.
##### `prePhases` {#var-stdenv-prePhases}

View File

@ -16,6 +16,6 @@ neovimRequireCheckHook () {
}
echo "Using neovimRequireCheckHook"
preDistPhases+=" neovimRequireCheckHook"
appendToVar preDistPhases neovimRequireCheckHook

View File

@ -21,5 +21,5 @@ vimCommandCheckHook () {
}
echo "Using vimCommandCheckHook"
preDistPhases+=" vimCommandCheckHook"
appendToVar preDistPhases vimCommandCheckHook

View File

@ -17,7 +17,7 @@ let
pluginDerivation = attrs: let
name = attrs.name or "${attrs.pname}-${attrs.version}";
in stdenv.mkDerivation ({
prePhases = "extraLib";
prePhases = [ "extraLib" ];
extraLib = ''
installScripts(){
mkdir -p $out/${gimp.targetScriptDir}/${name};
@ -54,7 +54,7 @@ let
});
scriptDerivation = {src, ...}@attrs : pluginDerivation ({
prePhases = "extraLib";
prePhases = [ "extraLib" ];
dontUnpack = true;
installPhase = ''
runHook preInstall

View File

@ -146,7 +146,7 @@ stdenv.mkDerivation (removeAttrs ({
})
// (optionalAttrs (args?useMelquiondRemake) rec {
COQUSERCONTRIB = "$out/lib/coq/${coq.coq-version}/user-contrib";
preConfigurePhases = "autoconf";
preConfigurePhases = [ "autoconf" ];
configureFlags = [ "--libdir=${COQUSERCONTRIB}/${useMelquiondRemake.logpath or ""}" ];
buildPhase = "./remake -j$NIX_BUILD_CORES";
installPhase = "./remake install";

View File

@ -22,5 +22,5 @@ writeShellScript "make-darwin-bundle-${name}" (''
${writeDarwinBundle}/bin/write-darwin-bundle "''${!outputBin}" "${name}" "${exec}"
}
preDistPhases+=" makeDarwinBundlePhase"
appendToVar preDistPhases makeDarwinBundlePhase
'')

View File

@ -24,7 +24,7 @@ stdenv.mkDerivation (
prefix = "/usr/local";
postPhases = "finalPhase";
postPhases = [ "finalPhase" ];
}
// args //

View File

@ -18,7 +18,7 @@ vmTools.runInLinuxImage (stdenv.mkDerivation (
prefix = "/usr";
prePhases = "installExtraDebsPhase sysInfoPhase";
prePhases = [ "installExtraDebsPhase" "sysInfoPhase" ];
}
// removeAttrs args ["vmTools" "lib"] //

View File

@ -31,8 +31,8 @@ stdenv.mkDerivation (
showBuildStats = true;
preConfigurePhases = "autoconfPhase";
postPhases = "finalPhase";
preConfigurePhases = [ "autoconfPhase" ];
postPhases = [ "finalPhase" ];
# Autoconfiscate the sources.
autoconfPhase = ''

View File

@ -1,4 +1,4 @@
preConfigurePhases="${preConfigurePhases:-} autoreconfPhase"
appendToVar preConfigurePhases autoreconfPhase
autoreconfPhase() {
runHook preAutoreconf

View File

@ -1,4 +1,4 @@
postPhases+=" cleanupBuildDir"
appendToVar postPhases cleanupBuildDir
# Force GCC to build with coverage instrumentation. Also disable
# optimisation, since it may confuse things.

View File

@ -1,4 +1,4 @@
prePhases+=" moveBuildDir"
appendToVar prePhases moveBuildDir
moveBuildDir() {
mkdir -p $out/.build

View File

@ -1,4 +1,4 @@
postPhases+=" coverageReportPhase"
appendToVar postPhases coverageReportPhase
coverageReportPhase() {
lcov --directory . --capture --output-file app.info

View File

@ -1,11 +1,11 @@
prePhases+=" moveBuildDir"
appendToVar prePhases moveBuildDir
moveBuildDir() {
mkdir -p $out/.build
cd $out/.build
}
postPhases+=" removeBuildDir"
appendToVar postPhases removeBuildDir
removeBuildDir() {
rm -rf $out/.build

View File

@ -1,4 +1,4 @@
preConfigurePhases+=" updateAutotoolsGnuConfigScriptsPhase"
appendToVar preConfigurePhases updateAutotoolsGnuConfigScriptsPhase
updateAutotoolsGnuConfigScriptsPhase() {
if [ -n "${dontUpdateAutotoolsGnuConfigScripts-}" ]; then return; fi

View File

@ -18,7 +18,7 @@ echoCmd "HAREPATH" "$HAREPATH"
echoCmd "hare" "$(command -v hare)"
echoCmd "hare-native" "$(command -v hare-native)"
'
prePhases+=("hareSetStdlibPhase" "hareInfoPhase")
appendToVar prePhases hareSetStdlibPhase hareInfoPhase
readonly hare_unconditional_flags="@hare_unconditional_flags@"
case "${hareBuildType:-"release"}" in

View File

@ -18,7 +18,7 @@ addGnustepInstallFlags() {
)
}
preInstallPhases+=" addGnustepInstallFlags"
appendToVar preInstallPhases addGnustepInstallFlags
addGNUstepEnvVars() {
local filename

View File

@ -10,5 +10,5 @@ xdtAutogenPhase() {
}
if [ -z "${dontUseXdtAutogenPhase-}" ]; then
preConfigurePhases+=(xdtAutogenPhase)
appendToVar preConfigurePhases xdtAutogenPhase
fi

View File

@ -77,6 +77,6 @@ configureNuget() {
}
if [[ -z ${dontConfigureNuget-} ]]; then
prePhases+=(createNugetDirs)
preConfigurePhases+=(configureNuget)
appendToVar prePhases createNugetDirs
appendToVar preConfigurePhases configureNuget
fi

View File

@ -13,5 +13,5 @@ octaveWriteRequiredOctavePackagesPhase() {
# Yes its a bit long...
if [ -z "${dontWriteRequiredOctavePackagesPhase-}" ]; then
echo "Using octaveWriteRequiredOctavePackagesPhase"
preDistPhases+=" octaveWriteRequiredOctavePackagesPhase"
appendToVar preDistPhases octaveWriteRequiredOctavePackagesPhase
fi

View File

@ -13,5 +13,5 @@ writeRequiredOctavePackagesPhase() {
# Yes its a bit long...
if [ -z "${dontWriteRequiredOctavePackagesPhase-}" ]; then
echo "Using writeRequiredOctavePackagesPhase"
preDistPhases+=" writeRequiredOctavePackagesPhase"
appendToVar preDistPhases writeRequiredOctavePackagesPhase
fi

View File

@ -58,5 +58,5 @@ function pytestCheckPhase() {
if [ -z "${dontUsePytestCheck-}" ] && [ -z "${installCheckPhase-}" ]; then
echo "Using pytestCheckPhase"
preDistPhases+=" pytestCheckPhase"
appendToVar preDistPhases pytestCheckPhase
fi

View File

@ -6,5 +6,5 @@ pythonCatchConflictsPhase() {
}
if [ -z "${dontUsePythonCatchConflicts-}" ]; then
preDistPhases+=" pythonCatchConflictsPhase"
appendToVar preDistPhases pythonCatchConflictsPhase
fi

View File

@ -18,5 +18,5 @@ pythonImportsCheckPhase () {
if [ -z "${dontUsePythonImportsCheck-}" ]; then
echo "Using pythonImportsCheckPhase"
preDistPhases+=" pythonImportsCheckPhase"
appendToVar preDistPhases pythonImportsCheckPhase
fi

View File

@ -20,5 +20,5 @@ pythonRecompileBytecodePhase () {
}
if [ -z "${dontUsePythonRecompileBytecode-}" ]; then
postPhases+=" pythonRecompileBytecodePhase"
appendToVar postPhases pythonRecompileBytecodePhase
fi

View File

@ -13,5 +13,5 @@ pythonRemoveBinBytecodePhase () {
}
if [ -z "${dontUsePythonRemoveBinBytecode-}" ]; then
preDistPhases+=" pythonRemoveBinBytecodePhase"
appendToVar preDistPhases pythonRemoveBinBytecodePhase
fi

View File

@ -16,5 +16,5 @@ pythonRuntimeDepsCheckHook() {
if [ -z "${dontCheckRuntimeDeps-}" ]; then
echo "Using pythonRuntimeDepsCheckHook"
preInstallPhases+=" pythonRuntimeDepsCheckHook"
appendToVar preInstallPhases pythonRuntimeDepsCheckHook
fi

View File

@ -69,4 +69,4 @@ installSphinxPhase() {
runHook postInstallSphinx
}
preDistPhases+=" buildSphinxPhase installSphinxPhase"
appendToVar preDistPhases buildSphinxPhase installSphinxPhase

View File

@ -13,5 +13,5 @@ unittestCheckPhase() {
if [ -z "${dontUseUnittestCheck-}" ] && [ -z "${installCheckPhase-}" ]; then
echo "Using unittestCheckPhase"
preDistPhases+=" unittestCheckPhase"
appendToVar preDistPhases unittestCheckPhase
fi

View File

@ -12,7 +12,7 @@ addEnvHooks "$targetOffset" make_glib_find_gsettings_schemas
glibPreInstallPhase() {
makeFlagsArray+=("gsettingsschemadir=${!outputLib}/share/gsettings-schemas/$name/glib-2.0/schemas/")
}
preInstallPhases+=" glibPreInstallPhase"
appendToVar preInstallPhases glibPreInstallPhase
glibPreFixupPhase() {
# Move gschemas in case the install flag didn't help

View File

@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
sourceRoot = "liquidfun/Box2D";
preConfigurePhases = "preConfigure";
preConfigurePhases = [ "preConfigure" ];
preConfigure = ''
sed -i Box2D/Common/b2Settings.h -e 's@b2_maxPolygonVertices .*@b2_maxPolygonVertices 15@'

View File

@ -20,7 +20,7 @@ qmakePrePhase() {
# do the stripping ourselves (needed for separateDebugInfo)
prependToVar qmakeFlags "CONFIG+=nostrip"
}
prePhases+=" qmakePrePhase"
appendToVar prePhases qmakePrePhase
qmakeConfigurePhase() {
runHook preConfigure

View File

@ -97,7 +97,7 @@ postPatchMkspecs() {
fi
}
if [ -z "${dontPatchMkspecs-}" ]; then
postPhases="${postPhases-}${postPhases:+ }postPatchMkspecs"
appendToVar postPhases postPatchMkspecs
fi
qtPreHook() {
@ -107,6 +107,6 @@ qtPreHook() {
exit 1
fi
}
prePhases+=" qtPreHook"
appendToVar prePhases qtPreHook
fi

View File

@ -13,7 +13,7 @@ qmakePrePhase() {
"NIX_OUTPUT_QML=${!outputBin}/${qtQmlPrefix:?}" \
"NIX_OUTPUT_PLUGIN=${!outputBin}/${qtPluginPrefix:?}"
}
prePhases+=" qmakePrePhase"
appendToVar prePhases qmakePrePhase
qmakeConfigurePhase() {
runHook preConfigure

View File

@ -71,7 +71,7 @@ else # Only set up Qt once.
fi
}
if [ -z "${dontPatchMkspecs-}" ]; then
postPhases="${postPhases-}${postPhases:+ }postPatchMkspecs"
appendToVar postPhases postPatchMkspecs
fi
qtPreHook() {
@ -81,7 +81,7 @@ else # Only set up Qt once.
exit 1
fi
}
prePhases+=" qtPreHook"
appendToVar prePhases qtPreHook
addQtModulePrefix() {
addToSearchPath QT_ADDITIONAL_PACKAGES_PREFIX_PATH $1

View File

@ -16,10 +16,17 @@ pytestForkedHook() {
# until we have dependency mechanism in generic builder, we need to use this ugly hack.
if [ -z "${dontUsePytestForked-}" ] && [ -z "${dontUsePytestCheck-}" ]; then
if [[ " ${preDistPhases:-} " =~ " pytestCheckPhase " ]]; then
preDistPhases+=" "
preDistPhases="${preDistPhases/ pytestCheckPhase / pytestForkedHook pytestCheckPhase }"
if [[ " ${preDistPhases[*]:-} " =~ " pytestCheckPhase " ]]; then
_preDistPhases="${preDistPhases[*]} "
_preDistPhases="${_preDistPhases/ pytestCheckPhase / pytestForkedHook pytestCheckPhase }"
if [[ -n "${__structuredAttrs-}" ]]; then
preDistPhases=()
else
preDistPhases=""
fi
appendToVar preDistPhases $_preDistPhases
unset _preDistPhases
else
preDistPhases+=" pytestForkedHook"
appendToVar preDistPhases pytestForkedHook
fi
fi

View File

@ -8,10 +8,17 @@ pytestXdistHook() {
# until we have dependency mechanism in generic builder, we need to use this ugly hack.
if [ -z "${dontUsePytestXdist-}" ] && [ -z "${dontUsePytestCheck-}" ]; then
if [[ " ${preDistPhases:-} " =~ " pytestCheckPhase " ]]; then
preDistPhases+=" "
preDistPhases="${preDistPhases/ pytestCheckPhase / pytestXdistHook pytestCheckPhase }"
if [[ " ${preDistPhases[*]:-} " =~ " pytestCheckPhase " ]]; then
_preDistPhases="${preDistPhases[*]} "
_preDistPhases="${_preDistPhases/ pytestCheckPhase / pytestXdistHook pytestCheckPhase }"
if [[ -n "${__structuredAttrs-}" ]]; then
preDistPhases=()
else
preDistPhases=""
fi
appendToVar preDistPhases $_preDistPhases
unset _preDistPhases
else
preDistPhases+=" pytestXdistHook"
appendToVar preDistPhases pytestXdistHook
fi
fi

View File

@ -87,7 +87,7 @@ let
pytestcachePhase() {
find $out -name .pytest_cache -type d -exec rm -rf {} +
}
preDistPhases+=" pytestcachePhase"
appendToVar preDistPhases pytestcachePhase
# pytest generates it's own bytecode files to improve assertion messages.
# These files similar to cpython's bytecode files but are never laoded
@ -100,7 +100,7 @@ let
# https://github.com/pytest-dev/pytest/blob/7.2.1/src/_pytest/assertion/rewrite.py#L51-L53
find $out -name "*-pytest-*.py[co]" -delete
}
preDistPhases+=" pytestRemoveBytecodePhase"
appendToVar preDistPhases pytestRemoveBytecodePhase
'';
pythonImportsCheck = [ "pytest" ];

View File

@ -84,7 +84,7 @@ buildPythonPackage rec {
pytestcachePhase() {
find $out -name .pytest_cache -type d -exec rm -rf {} +
}
preDistPhases+=" pytestcachePhase"
appendToVar preDistPhases pytestcachePhase
# pytest generates it's own bytecode files to improve assertion messages.
# These files similar to cpython's bytecode files but are never laoded
@ -97,7 +97,7 @@ buildPythonPackage rec {
# https://github.com/pytest-dev/pytest/blob/7.2.1/src/_pytest/assertion/rewrite.py#L51-L53
find $out -name "*-pytest-*.py[co]" -delete
}
preDistPhases+=" pytestRemoveBytecodePhase"
appendToVar preDistPhases pytestRemoveBytecodePhase
'';
pythonImportsCheck = [ "pytest" ];

View File

@ -42,7 +42,7 @@ buildPythonPackage rec {
find $out -name .pytest_cache -type d -exec rm -rf {} +
}
preDistPhases+=" pytestcachePhase"
appendToVar preDistPhases pytestcachePhase
# pytest generates it's own bytecode files to improve assertion messages.
# These files similar to cpython's bytecode files but are never laoded
@ -55,7 +55,7 @@ buildPythonPackage rec {
# https://github.com/pytest-dev/pytest/blob/4.6.11/src/_pytest/assertion/rewrite.py#L32-L47
find $out -name "*-PYTEST.py[co]" -delete
}
preDistPhases+=" pytestRemoveBytecodePhase"
appendToVar preDistPhases pytestRemoveBytecodePhase
'';
meta = with lib; {

View File

@ -21,5 +21,5 @@ function manifestCheckPhase() {
if [ -z "${dontCheckManifest-}" ] && [ -z "${installCheckPhase-}" ]; then
echo "Using manifestCheckPhase"
preDistPhases+=" manifestCheckPhase"
appendToVar preDistPhases manifestCheckPhase
fi