diff options
Diffstat (limited to 'system/nvidia-driver/nvidia-switch')
-rw-r--r-- | system/nvidia-driver/nvidia-switch | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/system/nvidia-driver/nvidia-switch b/system/nvidia-driver/nvidia-switch new file mode 100644 index 0000000000..55493a6f26 --- /dev/null +++ b/system/nvidia-driver/nvidia-switch @@ -0,0 +1,224 @@ +#!/bin/sh + +# *************************************************************************** +# * Copyright (C) 2007-2008 by Heinz Wiesinger * +# * HMWiesinger@gmx.at * +# * http://hw.3kisses.net * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU General Public License as published by * +# * the Free Software Foundation; either version 3 of the License, or * +# * (at your option) any later version. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU General Public License for more details. * +# * * +# * You should have received a copy of the GNU General Public License * +# * along with this program; if not, write to the * +# * Free Software Foundation, Inc., * +# * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +# ***************************************************************************/ +# nvidia-switch utility 0.5 +# +# A tool to switch between nvidia-binary-driver and stock xorg-driver +# if both are installed in parallel. + +set -e + +INC="/usr/include/GL" +LIB="/usr/lib" +XMOD="/usr/lib/xorg/modules" +XLIB="$XMOD/extensions" +NV_VERSION='PKGVERSION' # This will be replaced in the build script +GL_VERSION="1.2" + +if [ "$1" = '--nvidia' ]; then + echo $'Switching to nvidia-driver files!\n' + + echo "You have to ENABLE the nvidia driver in /etc/X11/xorg.conf." + echo "Otherwise, this may lead to improperly working drivers." + + #Change to includes path + cd $INC + #if gl*.h exists and is a link, then remove the old link and create the new one + #else, if it exists and is not a link, move it to gl*.h-xorg and create a link. + #else, it it does not exist, create a link to gl*.h-nvidia + for i in glxext.h glext.h glx.h gl.h; do + + if [ -L $i ]; then + rm -f $i + ln -s $i-nvidia $i + elif [ -e $i ]; then + mv $i $i-xorg + ln -s $i-nvidia $i + else + ln -s $i-nvidia $i + fi + + done + + for i in $LIB/libGL.so $XLIB/libglx.so; do + + #If libGL.so.$NV_VERSION-nvidia does exists, then remove the -nvidia and make it usable that way + if [ -e "$i.$NV_VERSION-nvidia" ]; then + rm -f $i.$NV_VERSION + ln -s $i.$NV_VERSION-nvidia $i.$NV_VERSION + fi + + done + + #if libGL.so.$GL_VERSION does exist, move it to libGL.so.$GL_VERSION-xorg, as it conflicts if nvidia's libGL.so + # then remove the libGL.so.1 symlink and create a new one pointing to nvidia's libGL.so + if [ -e "$LIB/libGL.so.$GL_VERSION" ]; then + cd $LIB + mv libGL.so.$GL_VERSION libGL.so.$GL_VERSION-xorg + rm -f libGL.so.1 + ln -s $LIB/libGL.so.$NV_VERSION libGL.so.1 + fi + + #If libGLcore.so.$NV_VERSION-nvidia does exists, then remove the -nvidia and make it usable that way + if [ -e "$LIB/libGLcore.so.$NV_VERSION-nvidia" ]; then + rm -f $LIB/libGLcore.so.$NV_VERSION $LIB/libGLcore.so.1 + ln -s $LIB/libGLcore.so.$NV_VERSION-nvidia $LIB/libGLcore.so.$NV_VERSION + ln -s $LIB/libGLcore.so.$NV_VERSION $LIB/libGLcore.so.1 + fi + + + for i in libGLcore.so libGLcore.la libglx.la; do + + #If this library exists, move it to *-xorg + if [ -e "$XLIB/$i" ]; then + mv $XLIB/$i $XLIB/$i-xorg + fi + + done + + # if libglx.so is not a link, back it up to *-xorg, and create a symlink to nvidia's one + # if it's a link, then remove it and create a new one. + if ! [ -L "$XLIB/libglx.so" ]; then + cd $XLIB + mv libglx.so libglx.so-xorg + ln -s $XLIB/libglx.so.$NV_VERSION libglx.so + else + cd $XLIB + rm -f libglx.so + ln -s $XLIB/libglx.so.$NV_VERSION libglx.so + fi + + #Recreate the link removed by --xorg + if ! [ -e "$XMOD/libwfb.so" ]; then + ln -s $XMOD/libnvidia-wfb.so.1 $XMOD/libwfb.so + fi + + /sbin/ldconfig + + #Generate correct symink for that lib + /sbin/ldconfig -l /usr/lib/libGL.so.169.09-nvidia + +elif [ "$1" = '--xorg' ]; then + echo $'Switching to stock xorg files.\n' + + echo "You have to DISABLE the nvidia driver in /etc/X11/xorg.conf." + echo "Otherwise, this may lead to improperly working drivers." + + #Change to includes path + cd $INC + #if gl*.h exists and is a link, then remove the old link and create the new one + #else, if it exists and is not a link, move it to gl*.h-xorg and create a link. + #else, it it does not exist, create a link to gl*.h-xorg + for i in glxext.h glext.h glx.h gl.h; do + + if [ -L $i ]; then + rm -f $i + ln -s $i-xorg $i + elif [ -e $i ]; then + mv $i $i-xorg + ln -s $i-xorg $i + else + ln -s $i-xorg $i + fi + + done + + for i in libGL.so libGLcore.so; do + + #if this link exists, remove it, if it's a file, move it to *.nvidia + if [ -L "$LIB/$i.$NV_VERSION" ]; then + rm -f $LIB/$i.$NV_VERSION + elif [ -e "$LIB/$i.$NV_VERSION" ]; then + mv $LIB/$i.$NV_VERSION $LIB/$i.$NV_VERSION-nvidia + fi + + if [ -L "$LIB/$i.1" ]; then + rm -f $LIB/$i.1 + fi + + done + + #if libGL.so.$GL_VERSION does not exist and libGL.so.$GL_VERSION-xorg does, move it to libGL.so.$GL_VERSION + # then remove the libGL.so.1 symlink and create a new one pointing to nvidia's libGL.so + if ! [ -e "$LIB/libGL.so.$GL_VERSION" ]; then + if [ -e "$LIB/libGL.so.$GL_VERSION-xorg" ]; then + cd $LIB + mv $LIB/libGL.so.$GL_VERSION-xorg $LIB/libGL.so.$GL_VERSION + ln -s $LIB/libGL.so.$GL_VERSION libGL.so.1 + fi + fi + + for i in libGLcore.so libGLcore.la libglx.la; do + + #If libGLcore.so does not exist, and *-xorg does, then remove the -xorg + if ! [ -e "$XLIB/$i" ]; then + if [ -e "$XLIB/$i-xorg" ]; then + mv $XLIB/$i-xorg $XLIB/$i + fi + fi + + done + + #if this library exists, move it to *-nvidia + if [ -L "$XLIB/libglx.so.$NV_VERSION" ]; then + rm $XLIB/libglx.so.$NV_VERSION + elif [ -e "$XLIB/libglx.so.$NV_VERSION" ]; then + mv $XLIB/libglx.so.$NV_VERSION $XLIB/libglx.so.$NV_VERSION-nvidia + fi + + # if libglx.so exists and is a link, remove it and create a new one + # If it does exists and is not a link, remove the old one, and create the new one. + # if it does not exist, create a symlink + if [ -L "$XLIB/libglx.so" ]; then + cd $XLIB + rm libglx.so + ln -s libglx.so-xorg libglx.so + elif [ -e "$XLIB/libglx.so" ]; then + cd $XLIB + mv libglx.so libglx.so-xorg + ln -s libglx.so-xorg libglx.so + else + cd $XLIB + ln -s libglx.so-xorg libglx.so + fi + + # Not handled by removepkg/upgradepkg automatically. + if [ -L "$XMOD/libwfb.so" ]; then + rm -f $XMOD/libwfb.so + fi + + /sbin/ldconfig + + #Generate correct symink for that lib + /sbin/ldconfig -l /usr/lib/libGL.so.1.2 + + #Remove so-link, recreated by ldconfig + if [ -L $LIB/libGLcore.so.1 ]; then + rm -f $LIB/libGLcore.so.1 + fi + +else + echo "Usage:" + echo " --nvidia Switch to nvidia driver files" + echo " --xorg Switch to stock xorg files" +fi + |