#!/bin/bash # Last modify: 28/07/2007 # by spina # Usata da make_module. Crea il pacchetto per la Slackware function _make_module_pkg { cd ${MODULE_PKG_DIR}; # Estraggo la versione del kernel dal modulo creato local MODULE_KERNEL_VERSION=$(modinfo ./${MODULE_NAME} | grep vermagic| \tr -s ' ' ' '| cut -d' ' -f2); local MODULE_DEST_DIR=lib/modules/${MODULE_KERNEL_VERSION}/external; mkdir -p ${MODULE_DEST_DIR}; mv ${MODULE_NAME} ${MODULE_DEST_DIR}; # Modifico il nome del pacchetto aggiungendo alla fine, la versione del kernel # MODULE_PACK_NAME=${MODULE_PACK_NAME}_kernel_${MODULE_KERNEL_VERSION//-/_}.tgz; # makepkg -l y -c n ${MODULE_PACK_NAME}; # mv ${MODULE_PACK_NAME} ${DEST_DIR}; cd ${ROOT_DIR}; return; } # Crea il modulo per il kernel function _make_module { local MODULE_DIR=lib/modules/fglrx/build_mod; # Copy arch-depend files cp -a arch/${ARCH}/${MODULE_DIR}/* common/${MODULE_DIR}; cd common/${MODULE_DIR}; # Se ci sono, applico le patch (backward compatibility) if [ -f ${ROOT_DIR}/${SCRIPT_DIR}/patch_functions.sh ]; then source ${ROOT_DIR}/${SCRIPT_DIR}/patch_functions.sh; _module_patch; fi # Make modules with ati's script if ! sh make.sh; then echo "Error -> I don't have make module"; exit 3; fi # Make module package cd ..; if [[ $MODULE_NAME == "fglrx.ko" ]]; then mv fglrx*.ko fglrx.ko; # gzip fglrx.ko; # crea il file con nome uguale a $MODULE_NAME else mv fglrx*.o fglrx.o; # gzip fglrx.o; # crea il file con nome uguale a $MODULE_NAME fi cp -p ${MODULE_NAME} ${ROOT_DIR}/${MODULE_PKG_DIR}; cd ${ROOT_DIR}; _make_module_pkg; return; } # Crea il pacchetto per il server X function _make_x { local CHECK_SCRIPT=./check.sh; local XORG_7=0; # set X_VERSION PATH=$PATH:/usr/X11/bin:/usr/X11R6/bin source ${CHECK_SCRIPT} --noprint; case ${X_VERSION} in x670*) # Xorg Server 6.7 USE_X_VERSION=${X_VERSION/x670/x680}; # Use the xorg 6.8 files ;; x7*) # Xorg Server 7.x XORG_7=1; ;; esac [ -z $USE_X_VERSION ] && USE_X_VERSION=${X_VERSION}; cd ${X_PKG_DIR}; # 1) # MOVE ARCH DIPENDENT files mkdir -p usr; cp -a ${ROOT_DIR}/arch/${ARCH}/usr/* usr; case ${ARCH} in x86_64) LIB_DIR="usr/X11R6/lib64 usr/X11R6/lib"; ;; x86) LIB_DIR=usr/X11R6/lib; esac # Make some symbolik link for dir in ${LIB_DIR}; do ( # cd $dir; mkdir -p ${dir/X11R6\/}/ati mv $dir/libGL* ${dir/X11R6\/}/ati for file in $( cd ${dir/X11R6\/}/ati ; ls *.so* ) ; do echo ln -sf ati/$file ${dir/X11R6\/}/$file ; ln -sf ati/$file ${dir/X11R6\/}/$file ; if [[ "$file" != *.so ]] ; then echo ln -sf $file ${dir/X11R6\/}/ati/${file%.*} ; ln -sf $file ${dir/X11R6\/}/ati/${file%.*} ; fi done ) done # 2) # MOVE ARCH INDIPENDENT files cp -rp ${ROOT_DIR}/common/usr/* usr; rm -rf usr/share/doc/fglrx cp -a ${ROOT_DIR}/common/opt usr; mkdir -p etc/ati cp -a ${ROOT_DIR}/common/etc/ati/{atiogl.xml,authatieventsd.sh,control,fglrxprofiles.csv,fglrxrc,signature} etc/ati/ 2>/dev/null; # 3) # MOVE USE_X_VERSION DEPENDENT files cp -rp ${ROOT_DIR}/${USE_X_VERSION}/usr/* usr; # 4) # Aggiusto i permessi # 4.1) Nella directory usr, tolgo i diritti di esecuzione a tutti i file che non siano: # - binari # - librerie (a meno che non siano .a, a questi tolgo il permesso di esecuzion) # - direcoty ( cd usr; find . -not \( -wholename "*bin*" -o \( -wholename "*lib*" -a -not -wholename "*.a" \) \) -not -type d\ | xargs chmod -x ) # 4.2) I file in usr/sbin devono avere il permesso di esecuzione solo per il root ( cd usr/sbin; chmod go-x *; ) # 4.3) Assicuro i giusti permessi ai binari in usr/X11R6/bin ( cd usr/X11R6/bin; chmod a+x aticonfig fgl_glxgears fglrxinfo fglrx_xgamma 2>/dev/null; chmod go-x amdcccle fireglcontrolpanel 2>/dev/null; ) # 4.4) Aggiusto i permessi ai file in etc/ati ( cd etc/ati; chmod a-x *; chmod a+x authatieventsd.sh 2>/dev/null; ) # 5) # Alcuni dei file in etc/ati devono essere spostati come .new in modo da preservarli con la rimozione del # pacchetto. Inoltre lo script di installazione del pacchetto provvederà a rinominarli o a cancellarli se # necessario. ( cd etc/ati; for file in atiogl.xml authatieventsd.sh fglrxprofiles.csv fglrxrc; do [ -f $file ] && mv $file ${file}.new; done ) # 6) # If use xorg >= 7, remove obsolete directory X11R6 if (( $XORG_7 )); then for dir in ${LIB_DIR}; # Move X modules in /usr/$LIB_DIR/xorg/modules do mkdir ${dir}/xorg; mv ${dir}/modules ${dir}/xorg; done mv usr/X11R6/* usr/; rm -rf usr/X11R6; fi # 7) # MAKE PACKAGE # local X_PACK_NAME=${X_PACK_PARTIAL_NAME/fglrx-/fglrx-${X_VERSION}-}.tgz; # Modify the slack-desc # ( cd install; # sed s/fglrx:/fglrx-${X_VERSION}:/ slack-desc > slack-desc.tmp; # mv -f slack-desc.tmp slack-desc # ) # Strip binaries and libraries find . | xargs file | sed -n "/ELF.*executable/b PRINT;/ELF.*shared object/b PRINT;d;:PRINT s/\(.*\):.*/\1/;p;"\ | xargs strip --strip-unneeded 2> /dev/null # makepkg -l y -c n ${X_PACK_NAME}; # mv ${X_PACK_NAME} ${DEST_DIR}; cd ${ROOT_DIR}; return; } function buildpkg { case $1 in Only_Module) _make_module; ;; Only_X) _make_x; ;; All) _make_module; _make_x; ;; Test) local CHECK_SCRIPT=./check.sh; PATH=$PATH:/usr/X11/bin:/usr/X11R6/bin source ${CHECK_SCRIPT} --noprint; set; ;; *) echo "$1 unsupported"; exit 2; ;; esac } function _detect_kernel_ver_from_PATH_KERNEL { local INCLUDES=${KERNEL_PATH}/include/linux; KNL_VER=$(grep UTS_RELEASE ${INCLUDES}/version.h | cut -d'"' -f2); if [ -z ${KNL_VER} ]; then KNL_VER=$(grep UTS_RELEASE ${INCLUDES}/utsrelease.h | cut -d'"' -f2); if [ -z ${KNL_VER} ]; then KNL_VER=$(grep UTS_RELEASE ${INCLUDES}/version-*.h 2>/dev/null | cut -d'"' -f2); fi fi if [ -z ${KNL_VER} ]; then echo "Error -> Kernel version not detected"; exit 1; fi } function _init_env { [ $(id -u) -gt 0 ] && echo "Only root can do it!" && exit 1; BUILD_VER=0.1; ROOT_DIR=$PWD; # Usata dal file patch_function (se esiste) echo "$ROOT_DIR" | grep -q " " && echo "The name of the current directory should not contain any spaces" && exit 1; ARCH=$(arch); # Usata dal file patch_function (se esiste) [[ $ARCH != x86_64 ]] && ARCH="x86"; # Setto il nome de modulo if [ ! -z ${KERNEL_PATH} ]; then _detect_kernel_ver_from_PATH_KERNEL; # Setta KNL_VER, variabile usata dal file patch_function (se esiste) else KNL_VER=$(uname -r) # Usata dal file patch_function (se esiste) fi if [[ $KNL_VER == "2.6."* ]]; then MODULE_NAME=fglrx.ko; else MODULE_NAME=fglrx.o; fi SCRIPT_DIR=packages/ROCK; # Usata dal file patch_function (se esiste) ATI_DRIVER_VER=$(./ati-packager-helper.sh --version); # Usata dal file patch_function (se esiste) ATI_DRIVER_REL=$(./ati-packager-helper.sh --release); MODULE_PKG_DIR=${SCRIPT_DIR}/module_pkg; # MODULE_PACK_NAME=fglrx-module-${ATI_DRIVER_VER}-${ARCH}-${ATI_DRIVER_REL} X_PKG_DIR=${SCRIPT_DIR}/x_pkg; # X_PACK_PARTIAL_NAME=fglrx-${ATI_DRIVER_VER}-${ARCH}-${ATI_DRIVER_REL}; DEST_DIR=${PWD%/*}; } case $1 in --get-supported) echo -e "All\tOnly_Module\tOnly_X"; ;; --buildpkg) _init_env; echo -e "\nATI ROCK Linux Package Ver. $BUILD_VER" echo -e "Based on ATI SlackBuild by Emanuele Tomasi"; buildpkg $2; ;; *) echo "${1}: unsupported option passed by ati-installer.sh"; ;; esac