aboutsummaryrefslogtreecommitdiff
path: root/system/nvidia-legacy96-driver/nvidia-switch
diff options
context:
space:
mode:
Diffstat (limited to 'system/nvidia-legacy96-driver/nvidia-switch')
-rw-r--r--system/nvidia-legacy96-driver/nvidia-switch263
1 files changed, 226 insertions, 37 deletions
diff --git a/system/nvidia-legacy96-driver/nvidia-switch b/system/nvidia-legacy96-driver/nvidia-switch
index 647c6ef2a976c..f4e0ed4948084 100644
--- a/system/nvidia-legacy96-driver/nvidia-switch
+++ b/system/nvidia-legacy96-driver/nvidia-switch
@@ -1,26 +1,26 @@
#!/bin/sh
-# ***************************************************************************
-# * Copyright (C) 2007-2008 by Heinz Wiesinger *
-# * pprkut@liwjatan.at *
-# * http://www.liwjatan.at *
-# * *
-# * 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.7.0
+# Copyright 2007-2009 Heinz Wiesinger, Amsterdam, The Netherlands
+# All rights reserved.
+#
+# 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.
+
+# nvidia-switch utility 0.8.1
#
# A tool to switch between nvidia-binary-driver and stock xorg-driver
# if both are installed in parallel.
@@ -29,9 +29,10 @@ set -e
ROOT="/"
CWD=$(pwd)
+LIBSUFFIX="LIBDIRSUFFIX" # This will be replaced in the build script
INC="${ROOT}usr/include/GL"
-LIB="${ROOT}usr/lib"
-XMOD="${ROOT}usr/lib/xorg/modules"
+LIB="${ROOT}usr/lib${LIBSUFFIX}"
+XMOD="${LIB}/xorg/modules"
XLIB="$XMOD/extensions"
NV_VERSION='PKGVERSION' # This will be replaced in the build script
GL_VERSION="1.2"
@@ -97,7 +98,7 @@ cd "$CWD"
}
libs(){
-for i in libGLcore.so libGLcore.la libglx.la; do
+for i in libglx.la; do
if [ "$1" = "nvidia" ]; then
#If this library exists, move it to *-xorg
move_existing "$XLIB/$i" "$XLIB/$i-xorg"
@@ -257,9 +258,183 @@ if [ "$2" = "xorg" ]; then
fi
}
+check(){
+ echo -n "checking $2...."
+ if [ -e "$1/$2" ]; then
+ if [ "$3" = "exist" ]; then
+ echo "ERROR: $1/$2 does exist!!!!!"
+ else
+ echo -n "exists"
+ if [ -h "$1/$2" ]; then
+ echo "(link)"
+ echo -n " points to:"
+ ls -o "$1/$2" | cut -d ">" -f 2
+ else
+ if [ "$3" = "link" ]; then
+ echo " (!)"
+ else
+ echo ""
+ fi
+ fi
+ fi
+ else
+ if [ "$3" = "exist" ]; then
+ echo "does not exist"
+ else
+ echo "ERROR: $1/$2 does not exist!!!!!"
+ fi
+ fi
+}
+
+check_includes(){
+ if [ "$1" = "cleanup" ]; then
+ cleanup=""
+ cleanup2="exist"
+ else
+ cleanup="link"
+ cleanup2=""
+ fi
+
+ for i in glext.h glxext.h gl.h glx.h; do
+ check $INC $i $cleanup
+ check $INC $i-nvidia
+ check $INC $i-xorg $cleanup2
+ echo ""
+ done
+}
+
+check_glcore(){
+ if [ "$1" = "nvidia" ]; then
+ CHECK="link"
+ else
+ CHECK="exist"
+ fi
+
+ for i in libGLcore.so.1 libGLcore.so.$NV_VERSION libGLcore.so.$NV_VERSION-nvidia; do
+ if [ "$i" = "libGLcore.so.1" ]; then
+ check $LIB $i $CHECK
+ elif [ "$i" = "libGLcore.so.$NV_VERSION" ]; then
+ check $LIB $i $CHECK
+ else
+ check $LIB $i
+ fi
+ done
+
+ echo ""
+}
+
+check_glx(){
+ if [ "$1" = "xorg" ]; then
+ xorg="exist"
+ cleanup="link"
+ cleanup2=""
+ EXT="-xorg"
+ elif [ "$1" = "cleanup" ]; then
+ xorg="exist"
+ cleanup=""
+ cleanup2="exist"
+ EXT="-xorg"
+ else
+ xorg="link"
+ cleanup="link"
+ cleanup2=""
+ EXT=""
+ fi
+
+ for i in libglx.la libglx.so libglx.so.$NV_VERSION libglx.so.$NV_VERSION-nvidia \
+ libglx.so-xorg libglx.la-xorg; do
+ if [ "$i" = "libglx.so" ]; then
+ check $XLIB $i $cleanup
+ elif [ "$i" = "libglx.so-xorg" ]; then
+ check $XLIB $i $cleanup2
+ elif [ "$i" = "libglx.so.$NV_VERSION" ]; then
+ check $XLIB $i $xorg
+ elif [ "$i" = "libglx.la$EXT" ]; then
+ check $XLIB $i "exist"
+ else
+ check $XLIB $i
+ fi
+ done
+
+ echo ""
+}
+
+check_wfb(){
+ for i in libwfb.so libwfb.la libnvidia-wfb.so.1 libnvidia-wfb.so.$NV_VERSION; do
+ if [ "$i" = "libnvidia-wfb.so.1" ]; then
+ check $XMOD $i "link"
+ else
+ check $XMOD $i
+ fi
+ done
+}
+
+check_gl(){
+ if [ "$1" = "nvidia" ]; then
+ nvidia="link"
+ EXT=""
+ else
+ nvidia="exist"
+ EXT="-xorg"
+ fi
+
+ for i in libGL.la libGL.so libGL.so.1 libGL.so.$NV_VERSION libGL.so.$NV_VERSION-nvidia \
+ libGL.so.$GL_VERSION libGL.so.$GL_VERSION-xorg; do
+ if [ "$i" = "libGL.so" ]; then
+ check $LIB $i "link"
+ elif [ "$i" = "libGL.so.1" ]; then
+ check $LIB $i "link"
+ elif [ "$i" = "libGL.so.$NV_VERSION" ]; then
+ check $LIB $i $nvidia
+ elif [ "$i" = "libGL.so.${GL_VERSION}${EXT}" ]; then
+ check $LIB $i "exist"
+ else
+ check $LIB $i
+ fi
+ done
+
+ echo ""
+}
+
+nvidia_check(){
+ check_includes
+
+ check_gl "nvidia"
+
+ check_glcore "nvidia"
+
+ check_glx
+
+ check_wfb
+}
+
+xorg_check(){
+ check_includes
+
+ check_gl
+
+ check_glcore
+
+ check_glx "xorg"
+
+ check_wfb
+}
+
+cleanup_check(){
+ check_includes "cleanup"
+
+ check_gl
+
+ check_glcore
+
+ check_glx "cleanup"
+
+ check_wfb
+}
+
nvidia(){
echo $'Switching to nvidia-driver files!\n'
- echo "You have to ENABLE the nvidia driver in /etc/X11/xorg.conf."
+ echo "Make sure the nvidia driver is ENABLED in /etc/X11/xorg.conf."
echo "Otherwise, this may lead to improperly working drivers."
incs "xorg" "nvidia"
@@ -270,7 +445,7 @@ nvidia(){
libglx_nvidia
libwfb_nvidia
- LD_NVIDIA="/usr/lib/libGL.so.$NV_VERSION-nvidia"
+ LD_NVIDIA="${LIB}/libGL.so.$NV_VERSION-nvidia"
nvidia_ldconfig $LD_NVIDIA
}
@@ -279,7 +454,7 @@ xorg(){
if [ "$1" = "cleanup" ]; then
echo $'Cleaning up symlinks.\n'
fi
- echo "You have to DISABLE the nvidia driver in /etc/X11/xorg.conf."
+ echo "Make sure the nvidia driver is DISABLED in /etc/X11/xorg.conf."
echo "Otherwise, this may lead to improperly working drivers."
if [ "$1" = "cleanup" ]; then
@@ -298,19 +473,22 @@ xorg(){
fi
remove_link "$XMOD/libwfb.so"
- LD_NVIDIA="/usr/lib/libGL.so.1.2"
+ LD_NVIDIA="${LIB}/libGL.so.1.2"
nvidia_ldconfig $LD_NVIDIA "xorg"
}
usage(){
echo "Usage:"
- echo " --nvidia Switch to nvidia driver files"
- echo " --xorg Switch to stock xorg files"
- echo " --cleanup Switch to stock xorg files and remove all created symlinks"
- echo " --install Switch to nvidia driver files"
- echo " This is used on installation to handle installroot correctly"
- echo " Please use --nvidia for after-install switches instead"
- echo " --help Show this help message"
+ echo " --nvidia Switch to nvidia driver files"
+ echo " --xorg Switch to stock xorg files"
+ echo " --cleanup Switch to stock xorg files and remove all created symlinks"
+ echo " --install Switch to nvidia driver files"
+ echo " This is used on installation to handle installroot correctly"
+ echo " Please use --nvidia for after-install switches instead"
+ echo " --check-nvidia Check if everything is setup correctly for nvidia's driver"
+ echo " --check-xorg Check if everything is setup correctly for xorg's driver"
+ echo " --check-cleanup Check if everything has been cleaned up correctly"
+ echo " --help Show this help message"
}
if [ "$1" = '--nvidia' ]; then
@@ -318,13 +496,24 @@ if [ "$1" = '--nvidia' ]; then
elif [ "$1" = '--install' ]; then
ROOT=""
CWD=$(pwd)
+ if [ -e "${ROOT}usr/lib64" ]; then
+ LIBSUFFIX="64"
+ else
+ LIBSUFFIX=""
+ fi
INC="${ROOT}usr/include/GL"
- LIB="${ROOT}usr/lib"
- XMOD="${ROOT}usr/lib/xorg/modules"
+ LIB="${ROOT}usr/lib${LIBSUFFIX}"
+ XMOD="${LIB}/xorg/modules"
XLIB="$XMOD/extensions"
nvidia
elif [ "$1" = '--xorg' ]; then
xorg ""
+elif [ "$1" = '--check-nvidia' ]; then
+ nvidia_check
+elif [ "$1" = '--check-xorg' ]; then
+ xorg_check
+elif [ "$1" = '--check-cleanup' ]; then
+ cleanup_check
elif [ "$1" = '--cleanup' ]; then
xorg "cleanup"
elif [ "$1" = '--help' ]; then