#!/bin/bash # # Versioning # Major.Minor.Point # Major - complete rewrites # Minor - new GL provider added/removed # Point - bugfixes/filelist changes and so on # GL_SELECT_VERSION="2.0.5" GL_LIBS="$(ls ${TRACK_ROOT}/usr/lib/.{mesa,nvidia,ati}/libGL.so 2>/dev/null \ | awk -F"/" '{print $4}')" . /etc/sysconfig/gl_select . /var/lib/sorcery/modules/libmedia LOCAL_MEDIA_CONFIG=/etc/sorcery/local/media source /etc/sorcery/media function message() { echo -e "$@" } function gl_list() { message "Available GL Libraries on the system" ls -1 --color=none ${TRACK_ROOT}/usr/lib/.{mesa,nvidia,ati}/libGL.so 2>/dev/null \ | awk -F"/" '{print $4}' | sed -e "s:\.::" exit 0 } function gl_link_libs() { fromdir=$1 todir=$2 ln -sf $(ls $fromdir/*.* | grep -v '.la$') $todir/ 2>/dev/null } function gl_pick() { local gl_lib=$1 local file_list=" /usr/lib/libGL.so /usr/lib/libGL.so.* /usr/lib/libEGL.so /usr/lib/libEGL.so.* /usr/lib/xorg/modules/extensions/libdri.la /usr/lib/xorg/modules/extensions/libdri.so /usr/lib/xorg/modules/extensions/libglx.la /usr/lib/xorg/modules/extensions/libglx.so* /usr/include/GL/gl.h /usr/include/GL/glext.h /usr/include/GL/glx.h /usr/include/GL/glxext.h " local dir_list=( \ "/usr/lib/.ati" \ "/usr/lib/.nvidia" \ "/usr/lib/.mesa" \ "/usr/include/GL/.ati" \ "/usr/include/GL/.nvidia" \ "/usr/include/GL/.mesa" \ "/usr/lib/xorg/modules/extensions/.ati" \ "/usr/lib/xorg/modules/extensions/.nvidia" \ "/usr/lib/xorg/modules/extensions/.mesa" \ ) local rm_file orig_dir local gl_lib=$1 message "Selecting $gl_lib as the default system GL library" if [[ -L ${INSTALL_ROOT}/usr/lib/libGL.so ]] || [[ ! -e ${INSTALL_ROOT}/usr/lib/libGL.so ]] then message "Cleaning all previous GL providers..." for rm_file in $file_list do rm -f $rm_file echo -n "." done echo -n "." echo "" message "Done." message "Setting up new GL provider $gl_lib..." case "$1" in ati) [[ -e ${INSTALL_ROOT}${dir_list[0]}/libGL.so ]] && gl_link_libs ${INSTALL_ROOT}${dir_list[0]} \ ${INSTALL_ROOT}/usr/lib [[ -e ${INSTALL_ROOT}${dir_list[3]}/gl.h ]] && ln -sf ${INSTALL_ROOT}${dir_list[3]}/* \ ${INSTALL_ROOT}/usr/include/GL/ 2>/dev/null [[ -e ${INSTALL_ROOT}${dir_list[6]}/libglx.so ]] && gl_link_libs ${INSTALL_ROOT}${dir_list[6]} \ ${INSTALL_ROOT}/usr/lib/xorg/modules/extensions echo -n "." ;; mesa) [[ -e ${INSTALL_ROOT}${dir_list[2]}/libGL.so ]] && gl_link_libs ${INSTALL_ROOT}${dir_list[2]} \ ${INSTALL_ROOT}/usr/lib [[ -e ${INSTALL_ROOT}${dir_list[5]}/gl.h ]] && ln -sf ${INSTALL_ROOT}${dir_list[5]}/* \ ${INSTALL_ROOT}/usr/include/GL/ 2>/dev/null [[ -e ${INSTALL_ROOT}${dir_list[8]}/libglx.so ]] && gl_link_libs ${INSTALL_ROOT}${dir_list[8]} \ ${INSTALL_ROOT}/usr/lib/xorg/modules/extensions echo -n "." ;; nvidia) [[ -e ${INSTALL_ROOT}${dir_list[1]}/libGL.so ]] && gl_link_libs ${INSTALL_ROOT}${dir_list[1]} \ ${INSTALL_ROOT}/usr/lib [[ -e ${INSTALL_ROOT}${dir_list[4]}/gl.h ]] && ln -sf ${INSTALL_ROOT}${dir_list[4]}/* \ ${INSTALL_ROOT}/usr/include/GL/ 2>/dev/null [[ -e ${INSTALL_ROOT}${dir_list[7]}/libglx.so ]] && gl_link_libs ${INSTALL_ROOT}${dir_list[7]} \ ${INSTALL_ROOT}/usr/lib/xorg/modules/extensions echo -n "." ;; *) message "Unknown secondary files so I only linked the libGL.so" ln -fs ${INSTALL_ROOT}/usr/lib/$gl_lib/libGL.so* \ ${INSTALL_ROOT}/usr/lib/ 2>/dev/null ;; esac echo -e "\nDone." message "You can manage the libGL providers at runtime by using" message "either smgl-gl_select or manually by symlinking the files" message "from their respective directories i.e.:" message "/usr/lib/.[nvidia|ati|mesa]/libGL.so" message "/usr/lib/xorg/modules/extensions/.[nvidia,ati,mesa]/lib{glx,dri}.so" message "/usr/include/GL/.[nvidia|ati|mesa]/gl{x,xext,ext}.h" message "" message "To:" message "/usr/lib/libGL.so" message "/usr/lib/xorg/modules/extensions/lib{glx,dri}.so" message "/usr/include/GL/gl{x,xext,ext}.h" message "" return 0 else message "Error ${INSTALL_ROOT}/usr/lib/libGL.so is not a symlink" message "unable to proceed!!!" message "Please recast:" message "mesalib, xorg-server and whatever GL driver you use." message "" message "If this continues to happen please file a bug." message "" return 1 fi } function gl_help() { message "gl_select -$GL_SELECT_VERSION Copyright (C) 2006-2015 Source Mage This is free software. You may redistribute copies of it under the terms of the GNU General Public License . There is NO WARRANTY, to the extent permitted by law. " gl_usage exit 0 } function gl_usage() { message "USAGE: gl_select OPTIONS OPTIONS: --default, -d Use the default GL Library defined in config. --list, -l List available GL Libraries on the system. --select, -s Select a GL Library that's available. --help, -h Print the help message. FILES: /etc/sysconfig/gl_select" exit 0 } while [[ -n "$1" ]]; do if echo "" $1 | grep -q "^ -"; then case $1 in --list|-l)gl_list ;; --help|-h)gl_help ;; --select|-s)gl_pick $2 ; shift 2 ;; --default|-d)export GL_LIB ; shift ; gl_pick $GL_LIB ;; *)gl_usage ;; esac else shift fi done