189 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			189 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								#!/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
							 |