#!/bin/sh [ -z $PREPKG ] && exit 1 PACKAGE=nvidia VERSION=352.41 KERNEL=$(uname -r) FILES=$(cd $(dirname $0) ; pwd) sh $FILES/NVIDIA-Linux-x86-$VERSION.run -x chmod -R \ u+w . cd NVIDIA-Linux-x86-$VERSION/ # 'make -C kernel' doesn't work. descend & build cd kernel/ make $MAKEJOBS module &> make.output || exit 1 install -d \ $PREPKG/lib/modules/$KERNEL/kernel/drivers/video/ install -p \ -m 0644 \ $PACKAGE.ko \ $PREPKG/lib/modules/$KERNEL/kernel/drivers/video/ cd - # completely revamped file copying # if .manifest is good enough for nvidia-installer, it's good enough for us # currently unhandled/ignored manifest keywords: # CLASSIC - $E # COMPAT32 - for 64-bit # KERNEL_MODULE_CMD - ? # KERNEL_MODULE_SRC - $C # NATIVE - $D # NEW - $E # TLS_SYMLINK - presumably handled like VDPAU_SYMLINK # UVM_MODULE_SRC - ? cat .manifest | \ while { read A B C D E F ; } ; do # untidy permissions. harmless tweak [ "$B" == "0444" ] && B=0644 # yes, this looks scary at first glance. it's actually quite straightforward # ordered by filetype, $DSTDIR, & keyword for easy reading case "$C" in # files EXPLICIT_PATH|\ NVIDIA_MODPROBE) DSTDIR=$D ;; CUDA_ICD) DSTDIR=/etc/OpenCL/vendors ;; INSTALLER_BINARY|\ UTILITY_BINARY) DSTDIR=/usr/bin ;; DOCUMENTATION) # massage base directory name # can't just replace it because of the various subdirs DSTDIR=/usr/doc/${D/NVIDIA_GLX-1.0/$PACKAGE-$VERSION} ;; XORG_OUTPUTCLASS_CONFIG) # when in doubt, treat this as a sample config DSTDIR=/usr/doc/$PACKAGE-$VERSION/sample ;; OPENGL_HEADER) DSTDIR=/usr/include/$D ;; CUDA_LIB|\ ENCODEAPI_LIB|\ LIBGL_LA|\ NVCUVID_LIB|\ NVIFR_LIB|\ OPENGL_LIB|\ UTILITY_LIB|\ XLIB_SHARED_LIB|\ XLIB_STATIC_LIB) DSTDIR=/usr/lib ;; OPENCL_LIB|\ OPENCL_WRAPPER_LIB|\ VDPAU_LIB|\ VDPAU_WRAPPER_LIB) DSTDIR=/usr/lib/$E ;; TLS_LIB) DSTDIR=/usr/lib/$F ;; GLX_MODULE_SHARED_LIB|\ XMODULE_SHARED_LIB) DSTDIR=/usr/lib/xorg/modules/$D ;; MANPAGE|\ NVIDIA_MODPROBE_MANPAGE) DSTDIR=/usr/man/$D ;; DOT_DESKTOP) # .manifest apparently wants this in the doc dir. um, no DSTDIR=/usr/share/applications ;; APPLICATION_PROFILE) DSTDIR=/usr/share/$PACKAGE ;; # symlinks UTILITY_BIN_SYMLINK) TARGET=$D DSTDIR=/usr/bin ;; XLIB_SYMLINK) TARGET=$D DSTDIR=/usr/lib ;; ENCODEAPI_LIB_SYMLINK|\ OPENGL_SYMLINK|\ NVCUVID_LIB_SYMLINK|\ NVIFR_LIB_SYMLINK|\ UTILITY_LIB_SYMLINK) TARGET=$E DSTDIR=/usr/lib ;; CUDA_SYMLINK|\ OPENCL_LIB_SYMLINK|\ OPENCL_WRAPPER_SYMLINK|\ VDPAU_SYMLINK|\ VDPAU_WRAPPER_SYMLINK) TARGET=$F DSTDIR=/usr/lib/$E ;; GLX_MODULE_SYMLINK|\ XMODULE_NEWSYM|\ XMODULE_SYMLINK) # used by X to perform software rendering on GeForce 8 series GPUs # keep symlink for reference, but don't actually use it.. otherwise: # [ERROR]Cannot access secondary GPU - error: [XORG] (EE) Failed to load /usr/lib/xorg/modules/libwfb.so [ "$A" == "libwfb.so" ] && A=libwfb.so.dontuse TARGET=$E DSTDIR=/usr/lib/xorg/modules/$D ;; # unhandled entries: ignore *) unset A B C D E F DSTDIR TARGET ;; esac # skip unhandled entries [ -z $A ] && continue install -d \ $PREPKG/$DSTDIR/ if [ "$B" == "0000" ] ; then ln -s \ $TARGET \ $PREPKG/$DSTDIR/$A else install -p \ -m $B \ $A \ $PREPKG/$DSTDIR/ fi done # necessary touchups sed -i \ -e "s,__GENERATED_BY__,$PACKAGE-installer: $VERSION," \ -e "s,__LIBGL_PATH__,/usr/lib," \ $PREPKG/usr/lib/libGL.la sed -i \ -e "s,__UTILS_PATH__,/usr/bin," \ -e "s,__PIXMAP_PATH__,/usr/doc/$PACKAGE-$VERSION," \ $PREPKG/usr/share/applications/$PACKAGE-settings.desktop # prevent nvidia files from overwriting stock files # ordered by regular files & symlinks (of nvidia files) for easy reading # fixme: verify every rebuild! for i in \ usr/include/GL/gl.h \ usr/include/GL/glext.h \ usr/include/GL/glx.h \ usr/include/GL/glxext.h \ usr/lib/libGL.la \ \ usr/lib/libEGL.so \ usr/lib/libEGL.so.1 \ usr/lib/libGL.so \ usr/lib/libGL.so.1 \ usr/lib/xorg/modules/extensions/libglx.so do [ -e $PREPKG/$i ] && mv $PREPKG/$i{,-$PACKAGE} done # extra step for non-clobber of xorg symlinks rm \ $PREPKG/usr/lib/libEGL.so-$PACKAGE ln -s \ libEGL.so.1-$PACKAGE \ $PREPKG/usr/lib/libEGL.so-$PACKAGE rm \ $PREPKG/usr/lib/libGL.so-$PACKAGE ln -s \ libGL.so.1-$PACKAGE \ $PREPKG/usr/lib/libGL.so-$PACKAGE # file switching script for the above files install -d \ $PREPKG/usr/sbin/ install \ -m 0755 \ $FILES/$PACKAGE-overlap \ $PREPKG/usr/sbin/ install -d \ $PREPKG/install/ install \ -m 0644 \ $FILES/{doinst.sh,slack-desc} \ $PREPKG/install/ sed -i \ -e "s,@KERNEL@,$KERNEL,g" \ $PREPKG/install/doinst.sh