nvidia_x11: fix nvidia-settings after the major update

The GUI would no longer find libs it needed.
Now it's gtk3 by default, so we don't support gtk2 version for simplicity.
ldd finds no missing libs after this commit.
This commit is contained in:
Vladimír Čunát 2015-02-21 16:05:09 +01:00
parent 18ec13d9d2
commit 77986803a6
2 changed files with 34 additions and 28 deletions

View File

@ -29,6 +29,29 @@ buildPhase() {
installPhase() {
# Install libGL and friends.
mkdir -p "$out/lib/vendors"
cp -p nvidia.icd $out/lib/vendors/
cp -prd *.so.* tls "$out/lib/"
rm "$out"/lib/lib{glx,nvidia-wfb}.so.* # handled separately
for libname in `find "$out/lib/" -name '*.so.*'`
do
# I'm lazy to differentiate needed libs per-library, as the closure is the same.
# Unfortunately --shrink-rpath would strip too much.
patchelf --set-rpath "$out/lib:$allLibPath" "$libname"
libname_short=`echo -n "$libname" | sed 's/so\..*/so/'`
ln -srnf "$libname" "$libname_short"
ln -srnf "$libname" "$libname_short.1"
done
#patchelf --set-rpath $out/lib:$glPath $out/lib/libGL.so.*.*
#patchelf --set-rpath $out/lib:$glPath $out/lib/libvdpau_nvidia.so.*.*
#patchelf --set-rpath $cudaPath $out/lib/libcuda.so.*.*
#patchelf --set-rpath $openclPath $out/lib/libnvidia-opencl.so.*.*
if test -z "$libsOnly"; then
# Install the kernel module.
@ -52,9 +75,11 @@ installPhase() {
for i in nvidia-settings nvidia-smi; do
cp $i $out/bin/$i
patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath $out/lib:$programPath:$glPath $out/bin/$i
--set-rpath $out/lib:$glPath $out/bin/$i
done
patchelf --set-rpath $glPath:$gtk3Path $out/lib/libnvidia-gtk3.so.*.*
# Header files etc.
mkdir -p $out/include/nvidia
cp -p *.h $out/include/nvidia
@ -76,31 +101,11 @@ installPhase() {
# Test a bit.
$out/bin/nvidia-settings --version
else
rm $out/lib/libnvidia-gtk3.*
fi
# Install libGL and friends.
mkdir -p "$out/lib/vendors"
cp -p nvidia.icd $out/lib/vendors/
cp -prd *.so.* tls "$out/lib/"
rm "$out"/lib/lib{glx,nvidia-wfb}.so.* # handled separately
for libname in `find "$out/lib/" -name '*.so.*'`
do
# I'm lazy to differentiate needed libs per-library, as the closure is the same.
# Unfortunately --shrink-rpath would strip too much.
patchelf --set-rpath "$out/lib:$allLibPath" "$libname"
libname_short=`echo -n "$libname" | sed 's/so\..*/so/'`
ln -srnf "$libname" "$libname_short"
ln -srnf "$libname" "$libname_short.1"
done
#patchelf --set-rpath $out/lib:$glPath $out/lib/libGL.so.*.*
#patchelf --set-rpath $out/lib:$glPath $out/lib/libvdpau_nvidia.so.*.*
#patchelf --set-rpath $cudaPath $out/lib/libcuda.so.*.*
#patchelf --set-rpath $openclPath $out/lib/libnvidia-opencl.so.*.*
# for simplicity and dependency reduction, don't support the gtk2 interface
rm $out/lib/libnvidia-gtk2.*
}

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, kernel ? null, xlibs, zlib, perl
, gtk, atk, pango, glib, gdk_pixbuf
, gtk3, atk, pango, glib, gdk_pixbuf, cairo
, # Whether to build the libraries only (i.e. not the kernel module or
# nvidia-settings). Used to support 32-bit binaries on 64-bit
# Linux.
@ -46,8 +46,9 @@ stdenv.mkDerivation {
openclPath = makeLibraryPath [zlib];
allLibPath = makeLibraryPath [xlibs.libXext xlibs.libX11 xlibs.libXrandr zlib stdenv.cc.cc];
programPath = optionalString (!libsOnly) (makeLibraryPath
[ gtk atk pango glib gdk_pixbuf xlibs.libXv ] );
# we don't support the gtk2 version
gtk3Path = optionalString (!libsOnly) (makeLibraryPath
[ gtk3 atk pango glib gdk_pixbuf cairo ] );
buildInputs = [ perl ];