mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-25 10:03:03 +01:00
334 lines
8.3 KiB
Bash
334 lines
8.3 KiB
Bash
#!/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
|
|
#
|
|
# A tool to switch between nvidia-binary-driver and stock xorg-driver
|
|
# if both are installed in parallel.
|
|
|
|
set -e
|
|
|
|
ROOT="/"
|
|
CWD=$(pwd)
|
|
INC="${ROOT}usr/include/GL"
|
|
LIB="${ROOT}usr/lib"
|
|
XMOD="${ROOT}usr/lib/xorg/modules"
|
|
XLIB="$XMOD/extensions"
|
|
NV_VERSION='PKGVERSION' # This will be replaced in the build script
|
|
GL_VERSION="1.2"
|
|
|
|
remove_link(){
|
|
if [ -L "$1" ]; then
|
|
rm -f "$1"
|
|
fi
|
|
}
|
|
|
|
remove_existing(){
|
|
if [ -e "$1" ]; then
|
|
rm -f $1
|
|
fi
|
|
}
|
|
|
|
move_existing(){
|
|
if [ -e "$1" ]; then
|
|
mv $1 $2
|
|
fi
|
|
}
|
|
|
|
setup_link(){
|
|
if [ "$1" = "mv" ]; then
|
|
mv "$2" "$3"
|
|
else
|
|
rm -f $2
|
|
fi
|
|
ln -s "$3" "$2"
|
|
}
|
|
|
|
# Move and rename files in /usr/include
|
|
# $1 = from
|
|
# $2 = to
|
|
incs(){
|
|
cd "$INC"
|
|
|
|
if [ "$2" = "cleanup" ]; then
|
|
CMD="mv"
|
|
THREE="$1"
|
|
else
|
|
CMD="ln -s"
|
|
THREE="$2"
|
|
fi
|
|
|
|
for i in glxext.h glext.h glx.h gl.h; do
|
|
if [ -L "$i" ]; then
|
|
rm -f "$i"
|
|
$CMD "$i-$THREE" "$i"
|
|
elif [ -e "$i" ]; then
|
|
if [ "$2" = "cleanup" ]; then
|
|
rm -f "$i-$1"
|
|
else
|
|
mv "$i" "$i-$1"
|
|
ln -s "$i-$THREE" "$i"
|
|
fi
|
|
else
|
|
$CMD "$i-$THREE" "$i"
|
|
fi
|
|
done
|
|
|
|
cd "$CWD"
|
|
}
|
|
|
|
libs(){
|
|
for i in libGLcore.so libGLcore.la libglx.la; do
|
|
if [ "$1" = "nvidia" ]; then
|
|
#If this library exists, move it to *-xorg
|
|
move_existing "$XLIB/$i" "$XLIB/$i-xorg"
|
|
else
|
|
#If .so does not exist, and *-xorg does, then remove the -xorg
|
|
if [ -e "$XLIB/$i" ]; then
|
|
remove_existing "$XLIB/$i-xorg"
|
|
else
|
|
move_existing "$XLIB/$i-xorg" "$XLIB/$i"
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
libs_basic(){
|
|
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
|
|
remove_link "$LIB/$i.1"
|
|
done
|
|
}
|
|
|
|
libgl_nvidia(){
|
|
#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
|
|
setup_link "" "libGL.so.1" "libGL.so.$NV_VERSION"
|
|
cd "$CWD"
|
|
fi
|
|
}
|
|
|
|
libgl_xorg(){
|
|
#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
|
|
remove_existing "$LIB/libGL.so.$GL_VERSION-xorg"
|
|
else
|
|
if [ -e "$LIB/libGL.so.$GL_VERSION-xorg" ]; then
|
|
cd "$LIB"
|
|
mv libGL.so.$GL_VERSION-xorg libGL.so.$GL_VERSION
|
|
ln -s libGL.so.$GL_VERSION libGL.so.1
|
|
cd "$CWD"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
libglcore_nvidia(){
|
|
#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
|
|
cd "$LIB"
|
|
rm -f libGLcore.so.$NV_VERSION libGLcore.so.1
|
|
ln -s libGLcore.so.$NV_VERSION-nvidia libGLcore.so.$NV_VERSION
|
|
ln -s libGLcore.so.$NV_VERSION libGLcore.so.1
|
|
cd "$CWD"
|
|
fi
|
|
}
|
|
|
|
lib_nvidia(){
|
|
for i in libGL.so libglx.so; do
|
|
if [ "$i" = "libGL.so" ]; then
|
|
cd "$LIB"
|
|
elif [ "$i" = "libglx.so" ]; then
|
|
cd "$XLIB"
|
|
fi
|
|
#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
|
|
setup_link "" "$i.$NV_VERSION" "$i.$NV_VERSION-nvidia"
|
|
fi
|
|
cd "$CWD"
|
|
done
|
|
}
|
|
|
|
libglx_base(){
|
|
for i in $(ls libglx.so* | grep -v -); do
|
|
if ! [ "$i" = "libglx.so.$NV_VERSION" ]; then
|
|
rm -f $i
|
|
fi
|
|
done
|
|
ln -s libglx.so.$NV_VERSION libglx.so
|
|
}
|
|
|
|
libglx_nvidia(){
|
|
# 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
|
|
libglx_base
|
|
else
|
|
cd $XLIB
|
|
libglx_base
|
|
fi
|
|
cd $CWD
|
|
}
|
|
|
|
libglx_xorg(){
|
|
if [ "$1" = "xorg" ]; then
|
|
CMD="ln -s"
|
|
else
|
|
CMD="mv"
|
|
fi
|
|
|
|
#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
|
|
$CMD libglx.so-xorg libglx.so
|
|
elif [ -e "$XLIB/libglx.so" ]; then
|
|
if [ "$1" = "xorg" ]; then
|
|
cd $XLIB
|
|
setup_link "mv" "libglx.so" "libglx.so-xorg"
|
|
else
|
|
remove_existing "$XLIB/libglx.so-xorg"
|
|
fi
|
|
else
|
|
cd $XLIB
|
|
$CMD libglx.so-xorg libglx.so
|
|
fi
|
|
cd $CWD
|
|
}
|
|
|
|
libwfb_nvidia(){
|
|
#Recreate the link removed by --xorg
|
|
if ! [ -e "$XMOD/libwfb.so" ]; then
|
|
cd $XMOD
|
|
ln -s libnvidia-wfb.so.1 libwfb.so
|
|
cd $CWD
|
|
fi
|
|
}
|
|
|
|
nvidia_ldconfig(){
|
|
/sbin/ldconfig
|
|
#Generate correct symink for that lib
|
|
/sbin/ldconfig -l $1
|
|
|
|
if [ "$2" = "xorg" ]; then
|
|
#Remove so-link, recreated by ldconfig
|
|
cd $LIB
|
|
remove_link "libGLcore.so.1"
|
|
cd $CWD
|
|
fi
|
|
}
|
|
|
|
nvidia(){
|
|
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."
|
|
|
|
incs "xorg" "nvidia"
|
|
lib_nvidia
|
|
libgl_nvidia
|
|
libglcore_nvidia
|
|
libs "nvidia"
|
|
libglx_nvidia
|
|
libwfb_nvidia
|
|
|
|
LD_NVIDIA="/usr/lib/libGL.so.$NV_VERSION-nvidia"
|
|
nvidia_ldconfig $LD_NVIDIA
|
|
}
|
|
|
|
xorg(){
|
|
echo $'Switching to stock xorg files.\n'
|
|
if [ "$1" = "cleanup" ]; then
|
|
echo $'Cleaning up symlinks.\n'
|
|
fi
|
|
echo "You have to DISABLE the nvidia driver in /etc/X11/xorg.conf."
|
|
echo "Otherwise, this may lead to improperly working drivers."
|
|
|
|
if [ "$1" = "cleanup" ]; then
|
|
incs "xorg" "cleanup"
|
|
else
|
|
incs "xorg" "xorg"
|
|
fi
|
|
|
|
libs_basic
|
|
libgl_xorg
|
|
libs ""
|
|
if [ "$1" = "cleanup" ]; then
|
|
libglx_xorg ""
|
|
else
|
|
libglx_xorg "xorg"
|
|
fi
|
|
remove_link "$XMOD/libwfb.so"
|
|
|
|
LD_NVIDIA="/usr/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"
|
|
}
|
|
|
|
if [ "$1" = '--nvidia' ]; then
|
|
nvidia
|
|
elif [ "$1" = '--install' ]; then
|
|
ROOT=""
|
|
CWD=$(pwd)
|
|
INC="${ROOT}usr/include/GL"
|
|
LIB="${ROOT}usr/lib"
|
|
XMOD="${ROOT}usr/lib/xorg/modules"
|
|
XLIB="$XMOD/extensions"
|
|
nvidia
|
|
elif [ "$1" = '--xorg' ]; then
|
|
xorg ""
|
|
elif [ "$1" = '--cleanup' ]; then
|
|
xorg "cleanup"
|
|
elif [ "$1" = '--help' ]; then
|
|
usage
|
|
else
|
|
usage
|
|
fi
|