#!/bin/sh # Copyright (C) 2015 # Erik Jan Tromp # Licensed under the GPL v2 # set file lists. verify nvidia fileset every rebuild! NVIDIA_FILES="/usr/include/GL/gl.h-nvidia /usr/include/GL/glext.h-nvidia /usr/include/GL/glx.h-nvidia /usr/include/GL/glxext.h-nvidia /usr/lib/libEGL.so-nvidia /usr/lib/libEGL.so.1-nvidia /usr/lib/libGL.la-nvidia /usr/lib/libGL.so-nvidia /usr/lib/libGL.so.1-nvidia /usr/lib/xorg/modules/extensions/libglx.so-nvidia" BASE_FILES=${NVIDIA_FILES//-nvidia} XORG_FILES=${NVIDIA_FILES//-nvidia/-xorg} # set file counts # '-e' seems somewhat unpredictable, hence '-f' & '-h' BASE_COUNT=0 for BASE_FILE in $BASE_FILES ; do [ -f $BASE_FILE -o -h $BASE_FILE ] && BASE_COUNT=$(expr $BASE_COUNT + 1) done NVIDIA_COUNT=0 for NVIDIA_FILE in $NVIDIA_FILES ; do [ -f $NVIDIA_FILE -o -h $NVIDIA_FILE ] && NVIDIA_COUNT=$(expr $NVIDIA_COUNT + 1) done XORG_COUNT=0 for XORG_FILE in $XORG_FILES ; do [ -f $XORG_FILE -o -h $XORG_FILE ] && XORG_COUNT=$(expr $XORG_COUNT + 1) done # very simplistic. all or nothing: # files should be in 1 of 2 possible states. # if they're not, quietly do nothing & keep the user guessing :) # 1: * & *-nvidia (the 'before' version) # 2: *, *-nvidia, *-xorg (xorg files replaced by nvidia files) case "$1" in -n|-nvidia|--nvidia) if [ $BASE_COUNT == $NVIDIA_COUNT -a $XORG_COUNT == 0 ] ; then for BASE_FILE in $BASE_FILES ; do if [ -f $BASE_FILE -o -h $BASE_FILE ] \ && ! [ -f $BASE_FILE-xorg -o -h $BASE_FILE-xorg ] \ && [ -f $BASE_FILE-nvidia -o -h $BASE_FILE-nvidia ] ; then BASE_DIR=$(dirname $BASE_FILE) BASE_TIME=$(date -r $BASE_DIR) mv -f $BASE_FILE $BASE_FILE-xorg cp -a $BASE_FILE-nvidia $BASE_FILE touch $BASE_DIR -d "$BASE_TIME" fi done fi ;; -x|-xorg|--xorg) if [ $BASE_COUNT == $NVIDIA_COUNT -a $XORG_COUNT == $NVIDIA_COUNT ] ; then for BASE_FILE in $BASE_FILES ; do if [ -f $BASE_FILE -o -h $BASE_FILE ] \ && [ -f $BASE_FILE-xorg -o -h $BASE_FILE-xorg ] ; then BASE_DIR=$(dirname $BASE_FILE) BASE_TIME=$(date -r $BASE_DIR) rm -f $BASE_FILE mv -f $BASE_FILE-xorg $BASE_FILE touch $BASE_DIR -d "$BASE_TIME" fi done fi ;; -s|-status|--status) if [ $BASE_COUNT == $NVIDIA_COUNT -a $XORG_COUNT == 0 ] ; then echo "xorg files are active" elif [ $BASE_COUNT == $NVIDIA_COUNT -a $XORG_COUNT == $NVIDIA_COUNT ] ; then echo "nvidia files are active" else echo "congratulations! you managed to break something." echo "here's a list of missing files to get you started with diagnostics:" for FILE in $BASE_FILES $NVIDIA_FILES $XORG_FILES ; do if ! [ -f $FILE -o -h $FILE ] ; then echo $FILE fi done fi ;; *) echo "usage: $(basename $0) --nvidia|--xorg|--status" ;; esac