123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #!/bin/bash
- #
- # gl-select: select active gl/glx libraries/extensions
- #
- infoUsage() {
- echo "Usage: $(basename $0) [ status | use [xorg|nvidia|ati] ]"
- exit 0
- }
- infoMissing() {
- echo "One or more of the non-xorg gl/glx backup files are missing."
- echo "This means either you're not using a non-xorg gl/glx setup, in which"
- echo "case nothing needs to be changed, OR your xorg backups are missing,"
- echo "which can be solved by reinstalling xorg-server and mesa3d packages."
- echo
- echo "Files:"
- getMissBackups
- exit 1
- }
- infoRevert() {
- echo "You appear to already be using a non-xorg gl/glx setup. Check that by"
- echo "using 'gl-select status', OR if the one selected isn't the correct one,"
- echo "revert to xorg and then select the correct new setup using:"
- echo "'gl-select use xorg; gl-select use <new gl/glx>'."
- echo
- echo "Files:"
- getExistBackups
- exit 1
- }
- infoOldStuff() {
- echo "You appear to be using a non-xorg gl/glx setup. You should revert your"
- echo "selection to xorg and then select the correct new setup, but seems you"
- echo "are using the old stuff setup due to gl-select 1.3, so you need to use"
- echo "something like:"
- echo "'gl-select use xorg --old-stuff; gl-select use <new gl/glx>'."
- exit 1
- }
- checkInstalled() {
- # checks either a single port or list of ports
- local notInstalled=1
- for arg in $@; do
- if [ -d "/var/lib/pkg/DB/$arg" ]; then
- notInstalled=0
- fi
- done
- if [ $notInstalled -eq 1 ]; then
- if [ $# -eq 1 ]; then
- echo "$arg isn't installed!"
- else
- echo "None of the following ports are installed! (one is required)"
- for i in $@; do echo " $i"; done
- fi
- exit 1
- fi
- }
- getMissBackups() {
- # get missing xorg backup'ed files
- for b in $BACKUPS; do if [ ! -f $b ]; then echo $b; fi; done
- }
- getExistBackups() {
- # get existing xorg backup'ed files
- for b in $BACKUPS; do if [ -f $b ]; then echo $b; fi; done
- }
- doGLsymlinks() {
- [ ! -L /usr/lib/libGL.so.1 ] && ln -sf libGL.so.1.2 /usr/lib/libGL.so.1
- [ ! -L /usr/lib/libGL.so ] && ln -sf libGL.so.1 /usr/lib/libGL.so
- return 0
- }
- doStatus() {
- # check which selection its being used
- local file=$(file -h /usr/lib/libGL.so.1.2.0 | awk '{ if (/symbolic link/) print $5; else print $1; }' | sed 's|:||')
- case $file in
- *libGL.so.1.2.0) echo "* xorg gl/glx is selected" ;;
- *libGL_so_1_2_nvidia) echo "* nvidia gl/glx is selected" ;;
- *libGL_so_1_2_ati) echo "* ati gl/glx is selected" ;;
- *) echo "unsupported: $file"; infoOldStuff ;;
- esac
- }
- doUse() {
- # perform the selection for the following supported gl/glx setups
- local selection=$1
- local options=$2
- [ -z "$selection" ] && infoUsage
- case $selection in
- "xorg")
- [ "$options" == "--old-stuff" ] && oldStuff
- # check for missing xorg backup'ed files
- local mbackups="$(getMissBackups)"
- [ ! -z "$mbackups" ] && infoMissing $mbackups
- # switch to xorg stuff
- (
- # libglx
- rm -f /usr/lib/xorg/modules/extensions/libglx.so
- mv /usr/lib/xorg/modules/extensions/libglx{_so,.so}
- # libGL
- rm -f usr/lib/libGL.so.1.2.0
- mv /usr/lib/libGL{_so_1_2,.so.1.2.0}
- doGLsymlinks
- ) && echo "* xorg gl/glx selected"
- ;;
- "nvidia")
- # is an nvidia port installed?
- checkInstalled nvidia nvidia-sl nvidia-legacy-96xx nvidia-legacy-71xx
- # check for the existence of xorg backups
- local ebackups="$(getExistBackups)"
- [ ! -z "$ebackups" ] && infoRevert $ebackups
- # switch to nvidia stuff
- # conflicting files which ati provides:
- # libglx_so_nvidia, libGL_so_1_2_nvidia
- (
- # libglx
- mv /usr/lib/xorg/modules/extensions/libglx{.so,_so}
- ln -s libglx_so_nvidia /usr/lib/xorg/modules/extensions/libglx.so
- # libGL
- mv /usr/lib/libGL{.so.1.2.0,_so_1_2}
- ln -sf libGL_so_1_2_nvidia /usr/lib/libGL.so.1.2.0
- doGLsymlinks
- ) && echo "* nvidia gl/glx selected"
- ;;
- "ati")
- # is the ati port installed?
- checkInstalled ati
- # check for the existence of xorg backups
- local ebackups="$(getExistBackups)"
- [ ! -z "$ebackups" ] && infoRevert $ebackups
- # switch to ati stuff
- # conflicting files which ati provides:
- # libglx_so_ati, libGL_so_1_2_ati
- (
- # libglx
- mv /usr/lib/xorg/modules/extensions/libglx{.so,_so}
- ln -s libglx_so_ati /usr/lib/xorg/modules/extensions/libglx.so
- # libGL
- mv /usr/lib/libGL{.so.1.2.0,_so_1_2}
- ln -sf libGL_so_1_2_ati /usr/lib/libGL.so.1.2.0
- doGLsymlinks
- ) && echo "* ati gl/glx selected"
- ;;
- *)
- infoUsage
- ;;
- esac
- /sbin/ldconfig > /dev/null 2>&1
- }
- oldStuff() {
- for f in /usr/lib/xorg/modules/extensions/libglx_so \
- /usr/lib/libGL_so_1_2; do
- [ ! -e $f ] && infoMissing $f
- done
- # move the old xorg backups back into place
- (
- # libglx
- rm -f /usr/lib/xorg/modules/extensions/libglx.so
- mv /usr/lib/xorg/modules/extensions/libglx{_so,.so}
- # libGL
- mv /usr/lib/libGL{_so_1_2,.so.1.2.0}
- rm -f /usr/lib/libGL.so /usr/lib/libGL.so.1
- doGLsymlinks || echo "done"
- ) && echo "* xorg gl/glx selected"
- exit 0
- }
- # backup files which are also provided by nvidia and ati ports
- BACKUPS="
- /usr/lib/xorg/modules/extensions/libglx_so
- /usr/lib/libGL_so_1_2
- "
- # check for xorg ports; if they are not installed, why is this script even run?
- checkInstalled xorg-server xorg-mesa
- case $1 in
- status) doStatus ;;
- use) shift 1; doUse $@ ;;
- *) infoUsage ;;
- esac
- # End of file
|