#!/bin/sh # Heavily based on the Slackware 13.1 SlackBuild # Written by Tommaso D'Anna aka tasodan ( www.slacky.eu ) # Last build from Tommaso D'Anna aka tasodan ( www.slacky.eu ) # Slackware build script for Nvidia Proprietary Binary Video Driver (driver and utils) # Official Site: http://www.nvidia.com # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AS IS AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Exit the script on errors: set -e trap 'echo "$0 FAILED at line ${LINENO}"' ERR # Catch variables: PKGNAME=${VERSION:-nvidia-driver} VERSION=${VERSION:-260.19.29} BUILD=${BUILD:-1} TAG=${TAG:-sl} ARCH=${ARCH:-i486} CWD=$(pwd) TMP=${TMP:-/tmp/buildpkgs/$PKGNAME} PKG=$TMP/package-$PKGNAME OUTPUT=${OUTPUT:-$CWD} case "$ARCH" in i[4-6]86) TARGET="x86" ; LIBDIRSUFFIX="" ; SRCSUFFIX="" ;; x86_64) TARGET="x86_64" ; LIBDIRSUFFIX="64" ; SRCSUFFIX="-no-compat32" ;; *) echo "error: unknown or invalid ARCH=$ARCH... aborting the build"; exit 1 ;; esac SOURCE="ftp://download.nvidia.com/XFree86/Linux-$TARGET/$VERSION/NVIDIA-Linux-$TARGET-$VERSION$SRCSUFFIX.run" # Source file availability: if [ ! -e $CWD/NVIDIA-Linux-$TARGET-$VERSION$SRCSUFFIX.run ];then wget $SOURCE fi # Create working directories: rm -rf $TMP mkdir -p $TMP $PKG $OUTPUT # Extract the sources: cd $TMP sh $CWD/NVIDIA-Linux-$TARGET-$VERSION$SRCSUFFIX.run --extract-only cd NVIDIA-Linux-$TARGET-$VERSION$SRCSUFFIX chown -R root:root . chmod -R u+w,go+r-w,a-s . echo -e "\E[0;32m+--------------------------------+\E[0;0m" echo -e "\E[0;32m| Start SlackBuild nvidia-driver |\E[0;0m" echo -e "\E[0;32m+--------------------------------+\E[0;0m" # Install apps: # nvidia-xconfig install -D -m755 nvidia-xconfig $PKG/usr/bin/nvidia-xconfig install -D -m644 nvidia-xconfig.1.gz $PKG/usr/man/man1/nvidia-xconfig.1.gz # nvidia-settings install -D -m755 nvidia-settings $PKG/usr/bin/nvidia-settings install -D -m644 nvidia-settings.1.gz $PKG/usr/man/man1/nvidia-settings.1.gz install -D -m644 nvidia-settings.desktop $PKG/usr/share/applications/nvidia-settings.desktop install -D -m644 nvidia-settings.png $PKG/usr/share/pixmaps/nvidia-settings.png # nvidia-bug-report install -D -m755 nvidia-bug-report.sh $PKG/usr/bin/nvidia-bug-report.sh # nvidia-smi install -D -m755 nvidia-smi $PKG/usr/bin/nvidia-smi install -D -m644 nvidia-smi.1.gz $PKG/usr/man/man1/nvidia-smi.1.gz # Install libraries: # X driver install -D -m755 nvidia_drv.so $PKG/usr/lib$LIBDIRSUFFIX/xorg/modules/drivers/nvidia_drv.so # GLX extension module for X install -D -m755 libglx.so.$VERSION \ $PKG/usr/lib$LIBDIRSUFFIX/xorg/modules/extensions/libglx.so.$VERSION-nvidia install -D -m755 libGL.la $PKG/usr/lib$LIBDIRSUFFIX/ # OpenGL library install -D -m755 libGL.so.$VERSION $PKG/usr/lib$LIBDIRSUFFIX/libGL.so.$VERSION-nvidia # OpenGL core library install -D -m755 libnvidia-glcore.so.$VERSION \ $PKG/usr/lib$LIBDIRSUFFIX/libnvidia-glcore.so.$VERSION # XvMC install -D -m644 libXvMCNVIDIA.a $PKG/usr/lib$LIBDIRSUFFIX/libXvMCNVIDIA.a install -D -m755 libXvMCNVIDIA.so.$VERSION \ $PKG/usr/lib$LIBDIRSUFFIX/libXvMCNVIDIA.so.$VERSION # VDPAU install -D -m755 libvdpau_nvidia.so.$VERSION \ $PKG/usr/lib$LIBDIRSUFFIX/vdpau/libvdpau_nvidia.so.$VERSION # CUDA install -D -m755 libcuda.so.$VERSION $PKG/usr/lib$LIBDIRSUFFIX/libcuda.so.$VERSION install -D -m755 libnvcuvid.so.$VERSION $PKG/usr/lib$LIBDIRSUFFIX/libnvcuvid.so.$VERSION # nvidia-tls library install -D -m755 tls/libnvidia-tls.so.$VERSION \ $PKG/usr/lib$LIBDIRSUFFIX/libnvidia-tls.so.$VERSION # OpenCL install -D -m755 libnvidia-compiler.so.$VERSION \ $PKG/usr/lib$LIBDIRSUFFIX/libnvidia-compiler.so.$VERSION install -D -m755 libOpenCL.so.1.0.0 $PKG/usr/lib$LIBDIRSUFFIX/libOpenCL.so.1.0.0 install -D -m644 nvidia.icd $PKG/etc/OpenCL/vendors/nvidia.icd install -D -m755 libnvidia-cfg.so.$VERSION \ $PKG/usr/lib$LIBDIRSUFFIX/libnvidia-cfg.so.$VERSION # Header files install -D -m644 glxext.h $PKG/usr/include/GL/glxext.h-nvidia install -D -m644 glext.h $PKG/usr/include/GL/glext.h-nvidia install -D -m644 glx.h $PKG/usr/include/GL/glx.h-nvidia install -D -m644 gl.h $PKG/usr/include/GL/gl.h-nvidia # Create soname links for i in $(find $PKG -name '*.so*'); do SONAME="$(dirname $i)/$(readelf -d "$i" | sed -nr 's/.*Library soname: \[(.*)\].*/\1/p')" if [ ! -e "$SONAME" ]; then ln -s "$(basename $i)" "$SONAME" ln -s "$(basename $SONAME)" "${SONAME/.[0-9]*/}" fi done # Add Heinz Wiesinger's bash script used to switch between nvidia and nv, it is # also used by doinst.sh to switch to the nvidia driver right after installation: install -D -m755 $CWD/nvidia-switch $PKG/usr/sbin/nvidia-switch sed -i s/PKGVERSION/$VERSION/g $PKG/usr/sbin/nvidia-switch sed -i s/LIBDIRSUFFIX/$LIBDIRSUFFIX/g $PKG/usr/sbin/nvidia-switch # Correct wrong paths: sed -i "s|__LIBGL_PATH__|/usr/lib$LIBDIRSUFFIX/|" $PKG/usr/lib$LIBDIRSUFFIX/libGL.la sed -i "s|/usr/X11R6/lib|/usr/lib$LIBDIRSUFFIX/|" $PKG/usr/lib$LIBDIRSUFFIX/libGL.la sed -i "s|__UTILS_PATH__|/usr/bin|" $PKG/usr/share/applications/nvidia-settings.desktop sed -i "s|__PIXMAP_PATH__|/usr/share/pixmaps|" \ $PKG/usr/share/applications/nvidia-settings.desktop # Add documentation: mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION cp -a \ LICENSE NVIDIA_Changelog README.txt html \ $PKG/usr/doc/$PKGNAME-$VERSION cat $CWD/$PKGNAME.SlackBuild > $PKG/usr/doc/$PKGNAME-$VERSION/$PKGNAME.SlackBuild cat $CWD/slack-desc > $PKG/usr/doc/$PKGNAME-$VERSION/slack-desc # Add slack-desc, doinst.sh and slack-required: mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh sed -i "s/@VERSION@/$VERSION/" $PKG/install/doinst.sh if [ -x "$(which requiredbuilder 2>/dev/null)" ];then requiredbuilder -y -v -s $CWD $PKG fi # Make the package: cd $PKG chown -R root:root $PKG /sbin/makepkg -p -l y -c n $OUTPUT/$PKGNAME-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz} # Clean up the extra stuff: if [ "$1" = "--cleanup" ]; then rm -rf $TMP $PKG fi