stdenv: Store one package per line in nix-support/propagated-*

This makes those files a bit easier to read. Also, for what it's worth,
it brings us one baby step closer to handling spaces in store paths.

Also, I optimized handling of many transitive deps with read. Probably,
not very beneficial, but nice to enforce the pkg-per-line structure.
Doing so let me find much dubious code and fix it.

Two misc notes:

 - `propagated-user-env-packages` also needed to be adjusted as
   sometimes it is copied to/from the propagated input files.

 - `local fd` should ensure that file descriptors aren't clobbered
   during recursion.
This commit is contained in:
John Ericson 2017-07-10 11:59:14 -04:00
parent f385e224e5
commit 3cb745d5a6
15 changed files with 31 additions and 22 deletions

View file

@ -275,9 +275,9 @@ stdenv.mkDerivation {
# Propagate the wrapped cc so that if you install the wrapper, # Propagate the wrapped cc so that if you install the wrapper,
# you get tools like gcov, the manpages, etc. as well (including # you get tools like gcov, the manpages, etc. as well (including
# for binutils and Glibc). # for binutils and Glibc).
echo ${cc} ${cc.man or ""} ${binutils_bin} ${if libc == null then "" else libc_bin} > $out/nix-support/propagated-user-env-packages printLines ${cc} ${cc.man or ""} ${binutils_bin} ${if libc == null then "" else libc_bin} > $out/nix-support/propagated-user-env-packages
echo ${toString extraPackages} > $out/nix-support/propagated-native-build-inputs printLines ${toString extraPackages} > $out/nix-support/propagated-native-build-inputs
'' ''
+ optionalString (targetPlatform.isSunOS && nativePrefix != "") '' + optionalString (targetPlatform.isSunOS && nativePrefix != "") ''

View file

@ -211,5 +211,5 @@ cp -p $utils $out/nix-support/utils.sh
# tools like gcov, the manpages, etc. as well (including for binutils # tools like gcov, the manpages, etc. as well (including for binutils
# and Glibc). # and Glibc).
if test -z "$nativeTools"; then if test -z "$nativeTools"; then
echo $gcc $binutils $libc $libc_bin > $out/nix-support/propagated-user-env-packages printLines $gcc $binutils $libc $libc_bin > $out/nix-support/propagated-user-env-packages
fi fi

View file

@ -202,7 +202,7 @@ _multioutPropagateDev() {
mkdir -p "${!propagaterOutput}"/nix-support mkdir -p "${!propagaterOutput}"/nix-support
for output in $propagatedBuildOutputs; do for output in $propagatedBuildOutputs; do
echo -n " ${!output}" >> "${!propagaterOutput}"/nix-support/$propagatedBuildInputsFile echo "${!output}" >> "${!propagaterOutput}"/nix-support/$propagatedBuildInputsFile
done done
} }

View file

@ -84,7 +84,7 @@ rec {
mkdir -p $out/nix-support mkdir -p $out/nix-support
cp ${script} $out/nix-support/setup-hook cp ${script} $out/nix-support/setup-hook
'' + lib.optionalString (deps != []) '' '' + lib.optionalString (deps != []) ''
echo ${toString deps} > $out/nix-support/propagated-native-build-inputs printLines ${toString deps} > $out/nix-support/propagated-native-build-inputs
'' + lib.optionalString (substitutions != {}) '' '' + lib.optionalString (substitutions != {}) ''
substituteAll ${script} $out/nix-support/setup-hook substituteAll ${script} $out/nix-support/setup-hook
''); '');

View file

@ -86,7 +86,7 @@ rec {
};}) };})
'' ''
mkdir -pv $out/nix-support mkdir -pv $out/nix-support
echo "${toString list}" | tee $out/nix-support/propagated-user-env-packages printLines ${toString list} | tee $out/nix-support/propagated-user-env-packages
''; '';
# Given manifest module data, return the module # Given manifest module data, return the module

View file

@ -33,7 +33,7 @@ let
# any package that depends on the JRE has $CLASSPATH set up # any package that depends on the JRE has $CLASSPATH set up
# properly. # properly.
mkdir -p $out/nix-support mkdir -p $out/nix-support
echo -n "${setJavaClassPath}" > $out/nix-support/propagated-native-build-inputs printLines ${setJavaClassPath} > $out/nix-support/propagated-native-build-inputs
install_name_tool -change /usr/X11/lib/libfreetype.6.dylib ${freetype}/lib/libfreetype.6.dylib $out/jre/lib/libfontmanager.dylib install_name_tool -change /usr/X11/lib/libfreetype.6.dylib ${freetype}/lib/libfreetype.6.dylib $out/jre/lib/libfontmanager.dylib

View file

@ -23,7 +23,7 @@ let
# any package that depends on the JRE has $CLASSPATH set up # any package that depends on the JRE has $CLASSPATH set up
# properly. # properly.
mkdir -p $out/nix-support mkdir -p $out/nix-support
echo -n "${setJavaClassPath}" > $out/nix-support/propagated-native-build-inputs printLines ${setJavaClassPath} > $out/nix-support/propagated-native-build-inputs
install_name_tool -change /usr/X11/lib/libfreetype.6.dylib ${freetype}/lib/libfreetype.6.dylib $out/jre/lib/libfontmanager.dylib install_name_tool -change /usr/X11/lib/libfreetype.6.dylib ${freetype}/lib/libfreetype.6.dylib $out/jre/lib/libfontmanager.dylib

View file

@ -190,7 +190,7 @@ let
# any package that depends on the JRE has $CLASSPATH set up # any package that depends on the JRE has $CLASSPATH set up
# properly. # properly.
mkdir -p $jre/nix-support mkdir -p $jre/nix-support
echo -n "${setJavaClassPath}" > $jre/nix-support/propagated-native-build-inputs printLines ${setJavaClassPath} > $jre/nix-support/propagated-native-build-inputs
# Set JAVA_HOME automatically. # Set JAVA_HOME automatically.
mkdir -p $out/nix-support mkdir -p $out/nix-support

View file

@ -202,7 +202,7 @@ let
# any package that depends on the JRE has $CLASSPATH set up # any package that depends on the JRE has $CLASSPATH set up
# properly. # properly.
mkdir -p $jre/nix-support mkdir -p $jre/nix-support
echo -n "${setJavaClassPath}" > $jre/nix-support/propagated-native-build-inputs printLines ${setJavaClassPath} > $jre/nix-support/propagated-native-build-inputs
# Set JAVA_HOME automatically. # Set JAVA_HOME automatically.
mkdir -p $out/nix-support mkdir -p $out/nix-support

View file

@ -157,7 +157,7 @@ let result = stdenv.mkDerivation rec {
ln -s $jrePath/lib/${architecture}/libnpjp2.so $jrePath/lib/${architecture}/plugins ln -s $jrePath/lib/${architecture}/libnpjp2.so $jrePath/lib/${architecture}/plugins
mkdir -p $out/nix-support mkdir -p $out/nix-support
echo -n "${setJavaClassPath}" > $out/nix-support/propagated-native-build-inputs printLines ${setJavaClassPath} > $out/nix-support/propagated-native-build-inputs
# Set JAVA_HOME automatically. # Set JAVA_HOME automatically.
cat <<EOF >> $out/nix-support/setup-hook cat <<EOF >> $out/nix-support/setup-hook

View file

@ -43,7 +43,7 @@ in stdenv.mkDerivation rec {
find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \; find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \;
mkdir -p $out/nix-support mkdir -p $out/nix-support
echo -n "${setJavaClassPath}" > $out/nix-support/propagated-native-build-inputs printLines ${setJavaClassPath} > $out/nix-support/propagated-native-build-inputs
# Set JAVA_HOME automatically. # Set JAVA_HOME automatically.
cat <<EOF >> $out/nix-support/setup-hook cat <<EOF >> $out/nix-support/setup-hook

View file

@ -311,7 +311,7 @@ stdenv.mkDerivation ({
${optionalString isGhcjs '' ${optionalString isGhcjs ''
for exeDir in "$out/bin/"*.jsexe; do for exeDir in "$out/bin/"*.jsexe; do
exe="''${exeDir%.jsexe}" exe="''${exeDir%.jsexe}"
printf '%s\n' '#!${nodejs}/bin/node' > "$exe" printLines '#!${nodejs}/bin/node' > "$exe"
cat "$exeDir/all.js" >> "$exe" cat "$exeDir/all.js" >> "$exe"
chmod +x "$exe" chmod +x "$exe"
done done

View file

@ -23,7 +23,7 @@ in
*/ */
collection = {list, name} : runCommand "collection-${name}" {} '' collection = {list, name} : runCommand "collection-${name}" {} ''
mkdir -p $out/nix-support mkdir -p $out/nix-support
echo ${builtins.toString list} > $out/nix-support/propagated-user-env-packages printLines ${builtins.toString list} > $out/nix-support/propagated-user-env-packages
''; '';
/* creates a derivation symlinking references C/C++ libs into one include and lib directory called $out/cdt-envs/${name} /* creates a derivation symlinking references C/C++ libs into one include and lib directory called $out/cdt-envs/${name}

View file

@ -1,4 +1,3 @@
export PATH=
for i in $initialPath; do for i in $initialPath; do
if [ "$i" = / ]; then i=; fi if [ "$i" = / ]; then i=; fi
PATH=$PATH${PATH:+:}$i/bin PATH=$PATH${PATH:+:}$i/bin
@ -15,4 +14,6 @@ cat "$setup" >> $out/setup
# Allow the user to install stdenv using nix-env and get the packages # Allow the user to install stdenv using nix-env and get the packages
# in stdenv. # in stdenv.
mkdir $out/nix-support mkdir $out/nix-support
echo $propagatedUserEnvPkgs > $out/nix-support/propagated-user-env-packages if [ "$propagatedUserEnvPkgs" ]; then
printf '%s\n' $propagatedUserEnvPkgs > $out/nix-support/propagated-user-env-packages
fi

View file

@ -215,6 +215,11 @@ isScript() {
if [[ "$magic" =~ \#! ]]; then return 0; else return 1; fi if [[ "$magic" =~ \#! ]]; then return 0; else return 1; fi
} }
# printf unfortunately will print a trailing newline regardless
printLines() {
[[ $# -gt 0 ]] || return 0
printf '%s\n' "$@"
}
###################################################################### ######################################################################
# Initialisation. # Initialisation.
@ -300,9 +305,12 @@ findInputs() {
fi fi
if [ -f "$pkg/nix-support/$propagatedBuildInputsFile" ]; then if [ -f "$pkg/nix-support/$propagatedBuildInputsFile" ]; then
for i in $(cat "$pkg/nix-support/$propagatedBuildInputsFile"); do local fd pkgNext
findInputs "$i" $var $propagatedBuildInputsFile exec {fd}<"$pkg/nix-support/$propagatedBuildInputsFile"
while IFS= read -r -u $fd pkgNext; do
findInputs "$pkgNext" $var $propagatedBuildInputsFile
done done
exec {fd}<&-
fi fi
} }
@ -794,17 +802,17 @@ fixupPhase() {
fi fi
if [ -n "$propagated" ]; then if [ -n "$propagated" ]; then
mkdir -p "${!outputDev}/nix-support" mkdir -p "${!outputDev}/nix-support"
echo "$propagated" > "${!outputDev}/nix-support/propagated-native-build-inputs" printLines $propagated > "${!outputDev}/nix-support/propagated-native-build-inputs"
fi fi
else else
if [ -n "$propagatedBuildInputs" ]; then if [ -n "$propagatedBuildInputs" ]; then
mkdir -p "${!outputDev}/nix-support" mkdir -p "${!outputDev}/nix-support"
echo "$propagatedBuildInputs" > "${!outputDev}/nix-support/propagated-build-inputs" printLines $propagatedBuildInputs > "${!outputDev}/nix-support/propagated-build-inputs"
fi fi
if [ -n "$propagatedNativeBuildInputs" ]; then if [ -n "$propagatedNativeBuildInputs" ]; then
mkdir -p "${!outputDev}/nix-support" mkdir -p "${!outputDev}/nix-support"
echo "$propagatedNativeBuildInputs" > "${!outputDev}/nix-support/propagated-native-build-inputs" printLines $propagatedNativeBuildInputs > "${!outputDev}/nix-support/propagated-native-build-inputs"
fi fi
fi fi
@ -817,7 +825,7 @@ fixupPhase() {
if [ -n "$propagatedUserEnvPkgs" ]; then if [ -n "$propagatedUserEnvPkgs" ]; then
mkdir -p "${!outputBin}/nix-support" mkdir -p "${!outputBin}/nix-support"
echo "$propagatedUserEnvPkgs" > "${!outputBin}/nix-support/propagated-user-env-packages" printLines $propagatedUserEnvPkgs > "${!outputBin}/nix-support/propagated-user-env-packages"
fi fi
runHook postFixup runHook postFixup