#!/bin/sh [ -z $PREPKG ] && exit 1 PACKAGE=nvidia-bumblebee VERSION=340.76 KERNEL=$(uname -r) FILES=$(cd $(dirname $0) ; pwd) sh $FILES/NVIDIA-Linux-x86-$VERSION.run -x chmod -R \ u+w,go-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 \ nvidia.ko \ $PREPKG/lib/modules/$KERNEL/kernel/drivers/video/ cd - # not sure if we really need this. build if it anyway cd kernel/uvm/ make $MAKEJOBS &> make.output || exit 1 install -p \ -m 0644 \ nvidia-uvm.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 manifest keywords: # CLASSIC - safe to ignore? ($E) # COMPAT32 - for 64-bit? # KERNEL_MODULE_CMD - ? # KERNEL_MODULE_SRC - safe to ignore # NATIVE - safe to ignore? ($D) # NEW - safe to ingore? ($E) # TLS_SYMLINK - presumably handled like VDPAU_SYMLINK # UVM_MODULE_SRC - safe to ignore 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 case "$C" in # files APPLICATION_PROFILE) # must remain as this dir, not /usr/share/$PACKAGE DSTDIR=/usr/share/nvidia ;; CUDA_ICD) DSTDIR=/etc/OpenCL/vendors ;; CUDA_LIB|\ ENCODEAPI_LIB|\ LIBGL_LA|\ NVCUVID_LIB|\ NVIFR_LIB|\ OPENGL_LIB|\ UTILITY_LIB|\ XLIB_SHARED_LIB|\ XLIB_STATIC_LIB) DSTDIR=/usr/lib/$PACKAGE ;; DOCUMENTATION) # massage base directory name # can't just replace it because of the */html/ subdir DSTDIR=/usr/doc/${D/NVIDIA_GLX-1.0/$PACKAGE-$VERSION} ;; DOT_DESKTOP) # .manifest apparently wants this in the doc dir. um, no DSTDIR=/usr/share/applications ;; EXPLICIT_PATH|\ NVIDIA_MODPROBE) DSTDIR=$D ;; GLX_MODULE_SHARED_LIB|\ XMODULE_SHARED_LIB) DSTDIR=/usr/lib/$PACKAGE/xorg/modules/$D ;; INSTALLER_BINARY|\ UTILITY_BINARY) DSTDIR=/usr/bin ;; MANPAGE|\ NVIDIA_MODPROBE_MANPAGE) DSTDIR=/usr/man/$D ;; OPENGL_HEADER) DSTDIR=/usr/include/$PACKAGE/$D ;; TLS_LIB) DSTDIR=/usr/lib/$PACKAGE/$F ;; VDPAU_LIB|\ VDPAU_WRAPPER_LIB) DSTDIR=/usr/lib/$PACKAGE/$E ;; # symlinks CUDA_SYMLINK|\ VDPAU_SYMLINK|\ VDPAU_WRAPPER_SYMLINK) TARGET=$F DSTDIR=/usr/lib/$PACKAGE/$E ;; GLX_MODULE_SYMLINK|\ XMODULE_NEWSYM|\ XMODULE_SYMLINK) # keep symlink for reference, but don't actually use it.. otherwise: # [ERROR]Cannot access secondary GPU - error: [XORG] (EE) Failed to load /usr/lib/nvidia-bumblebee/xorg/modules/libwfb.so [ "$A" == "libwfb.so" ] && A=libwfb.so.dontuse TARGET=$E DSTDIR=/usr/lib/$PACKAGE/xorg/modules/$D ;; ENCODEAPI_LIB_SYMLINK|\ OPENGL_SYMLINK|\ NVCUVID_LIB_SYMLINK|\ NVIFR_LIB_SYMLINK|\ UTILITY_LIB_SYMLINK) TARGET=$E DSTDIR=/usr/lib/$PACKAGE ;; UTILITY_BIN_SYMLINK) TARGET=$D DSTDIR=/usr/bin ;; XLIB_SYMLINK) TARGET=$D DSTDIR=/usr/lib/$PACKAGE ;; # 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,__LIBGL_PATH__,/usr/lib/$PACKAGE," \ $PREPKG/usr/lib/$PACKAGE/libGL.la sed -i \ -e "s,__UTILS_PATH__/\(.*\),optirun \1 -c :8," \ -e "s,__PIXMAP_PATH__,/usr/doc/$PACKAGE-$VERSION," \ $PREPKG/usr/share/applications/nvidia-settings.desktop 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