mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 00:12:56 +00:00
Removing any rest of the trunk's stdenv2, that has a fix in ld-wrapper to make
it properly put the rpath for directly passed .so files, and additionally it works much faster than the old ld-wrapper. svn path=/nixpkgs/branches/stdenv-updates/; revision=21978
This commit is contained in:
parent
249f35e20c
commit
bd9c968158
@ -1,72 +0,0 @@
|
|||||||
# The Nix `gcc' stdenv.mkDerivation is not directly usable, since it doesn't
|
|
||||||
# know where the C library and standard header files are. Therefore
|
|
||||||
# the compiler produced by that package cannot be installed directly
|
|
||||||
# in a user environment and used from the command line. This
|
|
||||||
# stdenv.mkDerivation provides a wrapper that sets up the right environment
|
|
||||||
# variables so that the compiler and the linker just "work".
|
|
||||||
|
|
||||||
{ name ? "", stdenv, nativeTools, nativeLibc, nativePrefix ? ""
|
|
||||||
, gcc ? null, libc ? null, binutils ? null, coreutils ? null, shell ? ""
|
|
||||||
, zlib ? null
|
|
||||||
}:
|
|
||||||
|
|
||||||
assert nativeTools -> nativePrefix != "";
|
|
||||||
assert !nativeTools -> gcc != null && binutils != null && coreutils != null;
|
|
||||||
assert !nativeLibc -> libc != null;
|
|
||||||
|
|
||||||
# For ghdl (the vhdl language provider to gcc) we need zlib in the wrapper
|
|
||||||
assert (gcc != null && gcc ? langVhdl && gcc.langVhdl) -> zlib != null;
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
gccVersion = (builtins.parseDrvName gcc.name).version;
|
|
||||||
gccName = (builtins.parseDrvName gcc.name).name;
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name =
|
|
||||||
(if name != "" then name else gccName + "-wrapper") +
|
|
||||||
(if gcc != null && gccVersion != "" then "-" + gccVersion else "");
|
|
||||||
|
|
||||||
builder = ./builder.sh;
|
|
||||||
setupHook = ./setup-hook.sh;
|
|
||||||
gccWrapper = ./gcc-wrapper.sh;
|
|
||||||
gnatWrapper = ./gnat-wrapper.sh;
|
|
||||||
gnatlinkWrapper = ./gnatlink-wrapper.sh;
|
|
||||||
ldWrapper = ./ld-wrapper2.sh;
|
|
||||||
utils = ./utils.sh;
|
|
||||||
addFlags = ./add-flags;
|
|
||||||
|
|
||||||
inherit nativeTools nativeLibc nativePrefix gcc;
|
|
||||||
libc = if nativeLibc then null else libc;
|
|
||||||
binutils = if nativeTools then null else binutils;
|
|
||||||
# The wrapper scripts use 'cat', so we may need coreutils
|
|
||||||
coreutils = if nativeTools then null else coreutils;
|
|
||||||
|
|
||||||
langC = if nativeTools then true else gcc.langC;
|
|
||||||
langCC = if nativeTools then true else gcc.langCC;
|
|
||||||
langFortran = if nativeTools then false else gcc ? langFortran;
|
|
||||||
langAda = if nativeTools then false else gcc ? langAda && gcc.langAda;
|
|
||||||
langVhdl = if nativeTools then false else gcc ? langVhdl && gcc.langVhdl;
|
|
||||||
zlib = if (gcc != null && gcc ? langVhdl) then zlib else null;
|
|
||||||
shell = if shell == "" then stdenv.shell else shell;
|
|
||||||
|
|
||||||
meta =
|
|
||||||
let gcc_ = if gcc != null then gcc else {}; in
|
|
||||||
(if gcc_ ? meta then removeAttrs gcc.meta ["priority"] else {}) //
|
|
||||||
{ description =
|
|
||||||
stdenv.lib.attrByPath ["meta" "description"] "System C compiler" gcc_
|
|
||||||
+ " (wrapper script)";
|
|
||||||
};
|
|
||||||
|
|
||||||
# The dynamic linker has different names on different Linux platforms.
|
|
||||||
dynamicLinker =
|
|
||||||
if !nativeLibc then
|
|
||||||
(if stdenv.system == "i686-linux" then "ld-linux.so.2" else
|
|
||||||
if stdenv.system == "x86_64-linux" then "ld-linux-x86-64.so.2" else
|
|
||||||
if stdenv.system == "armv5tel-linux" then "ld-linux.so.3" else
|
|
||||||
if stdenv.system == "powerpc-linux" then "ld.so.1" else
|
|
||||||
abort "don't know the name of the dynamic linker for this platform")
|
|
||||||
else "";
|
|
||||||
}
|
|
@ -82,6 +82,13 @@ if test "$NIX_DONT_SET_RPATH" != "1"; then
|
|||||||
rpath="$rpath $1 "
|
rpath="$rpath $1 "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
libs=""
|
||||||
|
addToLibs() {
|
||||||
|
libs="$libs $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
rpath=""
|
||||||
|
|
||||||
# First, find all -L... switches.
|
# First, find all -L... switches.
|
||||||
allParams=("${params[@]}" ${extra[@]})
|
allParams=("${params[@]}" ${extra[@]})
|
||||||
n=0
|
n=0
|
||||||
@ -93,6 +100,11 @@ if test "$NIX_DONT_SET_RPATH" != "1"; then
|
|||||||
elif test "$p" = "-L"; then
|
elif test "$p" = "-L"; then
|
||||||
addToLibPath ${p2}
|
addToLibPath ${p2}
|
||||||
n=$((n + 1))
|
n=$((n + 1))
|
||||||
|
elif test "$p" = "-l"; then
|
||||||
|
addToLibs ${p2}
|
||||||
|
n=$((n + 1))
|
||||||
|
elif test "${p:0:2}" = "-l"; then
|
||||||
|
addToLibs ${p:2}
|
||||||
elif [[ "$p" =~ ^[^-].*\.so($|\.) ]]; then
|
elif [[ "$p" =~ ^[^-].*\.so($|\.) ]]; then
|
||||||
# This is a direct reference to a shared library, so add
|
# This is a direct reference to a shared library, so add
|
||||||
# its directory to the rpath.
|
# its directory to the rpath.
|
||||||
@ -105,24 +117,14 @@ if test "$NIX_DONT_SET_RPATH" != "1"; then
|
|||||||
# Second, for each directory in the library search path (-L...),
|
# Second, for each directory in the library search path (-L...),
|
||||||
# see if it contains a dynamic library used by a -l... flag. If
|
# see if it contains a dynamic library used by a -l... flag. If
|
||||||
# so, add the directory to the rpath.
|
# so, add the directory to the rpath.
|
||||||
rpath=""
|
|
||||||
|
|
||||||
for i in $libPath; do
|
for i in $libs; do
|
||||||
n=0
|
for j in $libPath; do
|
||||||
while test $n -lt ${#allParams[*]}; do
|
if test -f "$j/lib$i.so"; then
|
||||||
p=${allParams[n]}
|
addToRPath $j
|
||||||
p2=${allParams[$((n+1))]}
|
|
||||||
if test "${p:0:2}" = "-l" -a -f "$i/lib${p:2}.so"; then
|
|
||||||
addToRPath $i
|
|
||||||
break
|
|
||||||
elif test "$p" = "-l" -a -f "$i/lib${p2}"; then
|
|
||||||
# I haven't seen `-l foo', but you never know...
|
|
||||||
addToRPath $i
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
n=$((n + 1))
|
|
||||||
done
|
done
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,154 +0,0 @@
|
|||||||
#! @shell@ -e
|
|
||||||
|
|
||||||
if test -n "$NIX_LD_WRAPPER_START_HOOK"; then
|
|
||||||
source "$NIX_LD_WRAPPER_START_HOOK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$NIX_GCC_WRAPPER_FLAGS_SET"; then
|
|
||||||
source @out@/nix-support/add-flags.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
source @out@/nix-support/utils.sh
|
|
||||||
|
|
||||||
|
|
||||||
# Optionally filter out paths not refering to the store.
|
|
||||||
params=("$@")
|
|
||||||
if test "$NIX_ENFORCE_PURITY" = "1" -a -n "$NIX_STORE" \
|
|
||||||
-a \( -z "$NIX_IGNORE_LD_THROUGH_GCC" -o -z "$NIX_LDFLAGS_SET" \); then
|
|
||||||
rest=()
|
|
||||||
n=0
|
|
||||||
while test $n -lt ${#params[*]}; do
|
|
||||||
p=${params[n]}
|
|
||||||
p2=${params[$((n+1))]}
|
|
||||||
if test "${p:0:3}" = "-L/" && badPath "${p:2}"; then
|
|
||||||
skip $p
|
|
||||||
elif test "$p" = "-L" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
elif test "$p" = "-rpath" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
elif test "$p" = "-dynamic-linker" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
elif test "${p:0:1}" = "/" && badPath "$p"; then
|
|
||||||
# We cannot skip this; barf.
|
|
||||||
echo "impure path \`$p' used in link" >&2
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
rest=("${rest[@]}" "$p")
|
|
||||||
fi
|
|
||||||
n=$((n + 1))
|
|
||||||
done
|
|
||||||
params=("${rest[@]}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
extra=()
|
|
||||||
extraBefore=()
|
|
||||||
|
|
||||||
if test -z "$NIX_LDFLAGS_SET"; then
|
|
||||||
extra=(${extra[@]} $NIX_LDFLAGS)
|
|
||||||
extraBefore=(${extraBefore[@]} $NIX_LDFLAGS_BEFORE)
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Add all used dynamic libraries to the rpath.
|
|
||||||
if test "$NIX_DONT_SET_RPATH" != "1"; then
|
|
||||||
|
|
||||||
libPath=""
|
|
||||||
addToLibPath() {
|
|
||||||
local path="$1"
|
|
||||||
if test "${path:0:1}" != "/"; then return 0; fi
|
|
||||||
case "$path" in
|
|
||||||
*..*|*./*|*/.*|*//*)
|
|
||||||
local path2
|
|
||||||
if path2=$(readlink -f "$path"); then
|
|
||||||
path="$path2"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
case $libPath in
|
|
||||||
*\ $path\ *) return 0 ;;
|
|
||||||
esac
|
|
||||||
libPath="$libPath $path "
|
|
||||||
}
|
|
||||||
|
|
||||||
addToRPath() {
|
|
||||||
# If the path is not in the store, don't add it to the rpath.
|
|
||||||
# This typically happens for libraries in /tmp that are later
|
|
||||||
# copied to $out/lib. If not, we're screwed.
|
|
||||||
if test "${1:0:${#NIX_STORE}}" != "$NIX_STORE"; then return 0; fi
|
|
||||||
case $rpath in
|
|
||||||
*\ $1\ *) return 0 ;;
|
|
||||||
esac
|
|
||||||
rpath="$rpath $1 "
|
|
||||||
}
|
|
||||||
|
|
||||||
libs=""
|
|
||||||
addToLibs() {
|
|
||||||
libs="$libs $1"
|
|
||||||
}
|
|
||||||
|
|
||||||
rpath=""
|
|
||||||
|
|
||||||
# First, find all -L... switches.
|
|
||||||
allParams=("${params[@]}" ${extra[@]})
|
|
||||||
n=0
|
|
||||||
while test $n -lt ${#allParams[*]}; do
|
|
||||||
p=${allParams[n]}
|
|
||||||
p2=${allParams[$((n+1))]}
|
|
||||||
if test "${p:0:3}" = "-L/"; then
|
|
||||||
addToLibPath ${p:2}
|
|
||||||
elif test "$p" = "-L"; then
|
|
||||||
addToLibPath ${p2}
|
|
||||||
n=$((n + 1))
|
|
||||||
elif test "$p" = "-l"; then
|
|
||||||
addToLibs ${p2}
|
|
||||||
n=$((n + 1))
|
|
||||||
elif test "${p:0:2}" = "-l"; then
|
|
||||||
addToLibs ${p:2}
|
|
||||||
elif [[ "$p" =~ ^[^-].*\.so($|\.) ]]; then
|
|
||||||
# This is a direct reference to a shared library, so add
|
|
||||||
# its directory to the rpath.
|
|
||||||
path="$(dirname "$p")";
|
|
||||||
addToRPath "${path}"
|
|
||||||
fi
|
|
||||||
n=$((n + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
# Second, for each directory in the library search path (-L...),
|
|
||||||
# see if it contains a dynamic library used by a -l... flag. If
|
|
||||||
# so, add the directory to the rpath.
|
|
||||||
|
|
||||||
for i in $libs; do
|
|
||||||
for j in $libPath; do
|
|
||||||
if test -f "$j/lib$i.so"; then
|
|
||||||
addToRPath $j
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
# Finally, add `-rpath' switches.
|
|
||||||
for i in $rpath; do
|
|
||||||
extra=(${extra[@]} -rpath $i)
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Optionally print debug info.
|
|
||||||
if test "$NIX_DEBUG" = "1"; then
|
|
||||||
echo "original flags to @ld@:" >&2
|
|
||||||
for i in "${params[@]}"; do
|
|
||||||
echo " $i" >&2
|
|
||||||
done
|
|
||||||
echo "extra flags to @ld@:" >&2
|
|
||||||
for i in ${extra[@]}; do
|
|
||||||
echo " $i" >&2
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "$NIX_LD_WRAPPER_EXEC_HOOK"; then
|
|
||||||
source "$NIX_LD_WRAPPER_EXEC_HOOK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec @ld@ ${extraBefore[@]} "${params[@]}" ${extra[@]}
|
|
@ -2623,14 +2623,6 @@ let
|
|||||||
|
|
||||||
wrapGCC = wrapGCCWith (import ../build-support/gcc-wrapper) glibc;
|
wrapGCC = wrapGCCWith (import ../build-support/gcc-wrapper) glibc;
|
||||||
|
|
||||||
# To be removed on stdenv-updates
|
|
||||||
# By now this has at least the fix of setting the proper rpath when a file "libbla.so"
|
|
||||||
# is passed directly to the linker.
|
|
||||||
# This is of interest to programs built by cmake, because this is a common practice
|
|
||||||
# in cmake builds.
|
|
||||||
wrapGCC2 = wrapGCCWith (import ../build-support/gcc-wrapper/default2.nix) glibc;
|
|
||||||
stdenv2 = if (gcc.nativeTools) then stdenv else (overrideGCC stdenv (wrapGCC2 gcc.gcc));
|
|
||||||
|
|
||||||
wrapGCCCross =
|
wrapGCCCross =
|
||||||
{gcc, libc, binutils, cross, shell ? "", name ? "gcc-cross-wrapper"}:
|
{gcc, libc, binutils, cross, shell ? "", name ? "gcc-cross-wrapper"}:
|
||||||
|
|
||||||
@ -4954,11 +4946,10 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
opencv = import ../development/libraries/opencv {
|
opencv = import ../development/libraries/opencv {
|
||||||
inherit fetchurl cmake libjpeg libpng libtiff jasper ffmpeg
|
inherit stdenv fetchurl cmake libjpeg libpng libtiff jasper ffmpeg
|
||||||
pkgconfig xineLib;
|
pkgconfig xineLib;
|
||||||
inherit (gtkLibs) gtk glib;
|
inherit (gtkLibs) gtk glib;
|
||||||
inherit (gst_all) gstreamer;
|
inherit (gst_all) gstreamer;
|
||||||
stdenv = stdenv2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# this ctl version is needed by openexr_viewers
|
# this ctl version is needed by openexr_viewers
|
||||||
@ -7179,11 +7170,10 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
avidemux = import ../applications/video/avidemux {
|
avidemux = import ../applications/video/avidemux {
|
||||||
inherit fetchurl cmake pkgconfig libxml2 qt4 gettext SDL libxslt x264
|
inherit stdenv fetchurl cmake pkgconfig libxml2 qt4 gettext SDL libxslt x264
|
||||||
alsaLib lame faac faad2 libvorbis;
|
alsaLib lame faac faad2 libvorbis;
|
||||||
inherit (gtkLibs) gtk;
|
inherit (gtkLibs) gtk;
|
||||||
inherit (xlibs) libXv pixman libpthreadstubs libXau libXdmcp;
|
inherit (xlibs) libXv pixman libpthreadstubs libXau libXdmcp;
|
||||||
stdenv = stdenv2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
awesome = import ../applications/window-managers/awesome {
|
awesome = import ../applications/window-managers/awesome {
|
||||||
@ -7239,19 +7229,17 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
blender = import ../applications/misc/blender/2.49.nix {
|
blender = import ../applications/misc/blender/2.49.nix {
|
||||||
inherit fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr
|
inherit stdenv fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr
|
||||||
libsamplerate libtiff ilmbase freetype;
|
libsamplerate libtiff ilmbase freetype;
|
||||||
inherit (xlibs) libXi;
|
inherit (xlibs) libXi;
|
||||||
python = python26Base;
|
python = python26Base;
|
||||||
stdenv = stdenv2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
blender_2_50 = lowPrio (import ../applications/misc/blender {
|
blender_2_50 = lowPrio (import ../applications/misc/blender {
|
||||||
inherit fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr
|
inherit stdenv fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr
|
||||||
libsamplerate libtiff ilmbase;
|
libsamplerate libtiff ilmbase;
|
||||||
inherit (xlibs) libXi;
|
inherit (xlibs) libXi;
|
||||||
python = python31Base;
|
python = python31Base;
|
||||||
stdenv = stdenv2;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bmp = import ../applications/audio/bmp {
|
bmp = import ../applications/audio/bmp {
|
||||||
@ -8257,7 +8245,7 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
openoffice = import ../applications/office/openoffice {
|
openoffice = import ../applications/office/openoffice {
|
||||||
inherit fetchurl pam python tcsh libxslt perl zlib libjpeg
|
inherit stdenv fetchurl pam python tcsh libxslt perl zlib libjpeg
|
||||||
expat pkgconfig freetype fontconfig libwpd libxml2 db4 sablotron
|
expat pkgconfig freetype fontconfig libwpd libxml2 db4 sablotron
|
||||||
curl libsndfile flex zip unzip libmspack getopt file cairo
|
curl libsndfile flex zip unzip libmspack getopt file cairo
|
||||||
which icu jdk ant cups openssl bison boost gperf cppunit;
|
which icu jdk ant cups openssl bison boost gperf cppunit;
|
||||||
@ -8266,11 +8254,10 @@ let
|
|||||||
inherit (perlPackages) ArchiveZip CompressZlib;
|
inherit (perlPackages) ArchiveZip CompressZlib;
|
||||||
inherit (gnome) GConf ORBit2;
|
inherit (gnome) GConf ORBit2;
|
||||||
neon = neon026;
|
neon = neon026;
|
||||||
stdenv = stdenv2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
go_oo = import ../applications/office/openoffice/go-oo.nix {
|
go_oo = import ../applications/office/openoffice/go-oo.nix {
|
||||||
inherit fetchurl pam python tcsh libxslt perl zlib libjpeg
|
inherit stdenv fetchurl pam python tcsh libxslt perl zlib libjpeg
|
||||||
expat pkgconfig freetype fontconfig libwpd libxml2 db4 sablotron
|
expat pkgconfig freetype fontconfig libwpd libxml2 db4 sablotron
|
||||||
curl libsndfile flex zip unzip libmspack getopt file cairo
|
curl libsndfile flex zip unzip libmspack getopt file cairo
|
||||||
which icu jdk ant cups openssl bison boost gperf cppunit;
|
which icu jdk ant cups openssl bison boost gperf cppunit;
|
||||||
@ -8279,7 +8266,6 @@ let
|
|||||||
inherit (perlPackages) ArchiveZip CompressZlib;
|
inherit (perlPackages) ArchiveZip CompressZlib;
|
||||||
inherit (gnome) GConf ORBit2;
|
inherit (gnome) GConf ORBit2;
|
||||||
neon = neon026;
|
neon = neon026;
|
||||||
stdenv = stdenv2;
|
|
||||||
|
|
||||||
inherit autoconf openldap postgresql;
|
inherit autoconf openldap postgresql;
|
||||||
};
|
};
|
||||||
@ -8308,8 +8294,7 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
paraview = import ../applications/graphics/paraview {
|
paraview = import ../applications/graphics/paraview {
|
||||||
inherit fetchurl cmake qt4;
|
inherit stdenv fetchurl cmake qt4;
|
||||||
stdenv = stdenv2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
partitionManager = import ../tools/misc/partition-manager {
|
partitionManager = import ../tools/misc/partition-manager {
|
||||||
@ -9263,7 +9248,7 @@ let
|
|||||||
|
|
||||||
kde44 = makeOverridable (import ../desktops/kde-4.4) (pkgs // {
|
kde44 = makeOverridable (import ../desktops/kde-4.4) (pkgs // {
|
||||||
openexr = openexr_1_6_1;
|
openexr = openexr_1_6_1;
|
||||||
stdenv = stdenv2;
|
inherit stdenv;
|
||||||
});
|
});
|
||||||
|
|
||||||
xfce = xfce4;
|
xfce = xfce4;
|
||||||
|
Loading…
Reference in New Issue
Block a user