mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

302 lines
7.8 KiB

  1. #!/bin/bash
  2. # Last modify: 28/07/2007
  3. # by spina <spina80@freemail.it>
  4. # Usata da make_module. Crea il pacchetto per la Slackware
  5. function _make_module_pkg
  6. {
  7. cd ${MODULE_PKG_DIR};
  8. # Estraggo la versione del kernel dal modulo creato
  9. local MODULE_KERNEL_VERSION=$(modinfo ./${MODULE_NAME} | grep vermagic| \tr -s ' ' ' '| cut -d' ' -f2);
  10. local MODULE_DEST_DIR=lib/modules/${MODULE_KERNEL_VERSION}/external;
  11. mkdir -p ${MODULE_DEST_DIR};
  12. mv ${MODULE_NAME} ${MODULE_DEST_DIR};
  13. # Modifico il nome del pacchetto aggiungendo alla fine, la versione del kernel
  14. # MODULE_PACK_NAME=${MODULE_PACK_NAME}_kernel_${MODULE_KERNEL_VERSION//-/_}.tgz;
  15. # makepkg -l y -c n ${MODULE_PACK_NAME};
  16. # mv ${MODULE_PACK_NAME} ${DEST_DIR};
  17. cd ${ROOT_DIR};
  18. return;
  19. }
  20. # Crea il modulo per il kernel
  21. function _make_module
  22. {
  23. local MODULE_DIR=lib/modules/fglrx/build_mod;
  24. # Copy arch-depend files
  25. cp -a arch/${ARCH}/${MODULE_DIR}/* common/${MODULE_DIR};
  26. cd common/${MODULE_DIR};
  27. # Se ci sono, applico le patch (backward compatibility)
  28. if [ -f ${ROOT_DIR}/${SCRIPT_DIR}/patch_functions.sh ]; then
  29. source ${ROOT_DIR}/${SCRIPT_DIR}/patch_functions.sh;
  30. _module_patch;
  31. fi
  32. # Make modules with ati's script
  33. if ! sh make.sh; then
  34. echo "Error -> I don't have make module";
  35. exit 3;
  36. fi
  37. # Make module package
  38. cd ..;
  39. if [[ $MODULE_NAME == "fglrx.ko" ]]; then
  40. mv fglrx*.ko fglrx.ko;
  41. # gzip fglrx.ko; # crea il file con nome uguale a $MODULE_NAME
  42. else
  43. mv fglrx*.o fglrx.o;
  44. # gzip fglrx.o; # crea il file con nome uguale a $MODULE_NAME
  45. fi
  46. cp -p ${MODULE_NAME} ${ROOT_DIR}/${MODULE_PKG_DIR};
  47. cd ${ROOT_DIR};
  48. _make_module_pkg;
  49. return;
  50. }
  51. # Crea il pacchetto per il server X
  52. function _make_x
  53. {
  54. local CHECK_SCRIPT=./check.sh;
  55. local XORG_7=0;
  56. # set X_VERSION
  57. PATH=$PATH:/usr/X11/bin:/usr/X11R6/bin
  58. source ${CHECK_SCRIPT} --noprint;
  59. case ${X_VERSION} in
  60. x670*) # Xorg Server 6.7
  61. USE_X_VERSION=${X_VERSION/x670/x680}; # Use the xorg 6.8 files
  62. ;;
  63. x7*) # Xorg Server 7.x
  64. XORG_7=1;
  65. ;;
  66. esac
  67. [ -z $USE_X_VERSION ] && USE_X_VERSION=${X_VERSION};
  68. cd ${X_PKG_DIR};
  69. # 1)
  70. # MOVE ARCH DIPENDENT files
  71. mkdir -p usr;
  72. cp -a ${ROOT_DIR}/arch/${ARCH}/usr/* usr;
  73. case ${ARCH} in
  74. x86_64)
  75. LIB_DIR="usr/X11R6/lib64 usr/X11R6/lib";
  76. ;;
  77. x86)
  78. LIB_DIR=usr/X11R6/lib;
  79. esac
  80. # Make some symbolik link
  81. for dir in ${LIB_DIR};
  82. do
  83. ( # cd $dir;
  84. mkdir -p ${dir/X11R6\/}/ati
  85. mv $dir/libGL* ${dir/X11R6\/}/ati
  86. for file in $( cd ${dir/X11R6\/}/ati ; ls *.so* ) ;
  87. do
  88. echo ln -sf ati/$file ${dir/X11R6\/}/$file ; ln -sf ati/$file ${dir/X11R6\/}/$file ;
  89. if [[ "$file" != *.so ]] ; then
  90. echo ln -sf $file ${dir/X11R6\/}/ati/${file%.*} ; ln -sf $file ${dir/X11R6\/}/ati/${file%.*} ;
  91. fi
  92. done
  93. )
  94. done
  95. # 2)
  96. # MOVE ARCH INDIPENDENT files
  97. cp -rp ${ROOT_DIR}/common/usr/* usr;
  98. rm -rf usr/share/doc/fglrx
  99. cp -a ${ROOT_DIR}/common/opt usr;
  100. mkdir -p etc/ati
  101. cp -a ${ROOT_DIR}/common/etc/ati/{atiogl.xml,authatieventsd.sh,control,fglrxprofiles.csv,fglrxrc,signature} etc/ati/ 2>/dev/null;
  102. # 3)
  103. # MOVE USE_X_VERSION DEPENDENT files
  104. cp -rp ${ROOT_DIR}/${USE_X_VERSION}/usr/* usr;
  105. # 4)
  106. # Aggiusto i permessi
  107. # 4.1) Nella directory usr, tolgo i diritti di esecuzione a tutti i file che non siano:
  108. # - binari
  109. # - librerie (a meno che non siano .a, a questi tolgo il permesso di esecuzion)
  110. # - direcoty
  111. ( cd usr;
  112. find . -not \( -wholename "*bin*" -o \( -wholename "*lib*" -a -not -wholename "*.a" \) \) -not -type d\
  113. | xargs chmod -x
  114. )
  115. # 4.2) I file in usr/sbin devono avere il permesso di esecuzione solo per il root
  116. ( cd usr/sbin;
  117. chmod go-x *;
  118. )
  119. # 4.3) Assicuro i giusti permessi ai binari in usr/X11R6/bin
  120. ( cd usr/X11R6/bin;
  121. chmod a+x aticonfig fgl_glxgears fglrxinfo fglrx_xgamma 2>/dev/null;
  122. chmod go-x amdcccle fireglcontrolpanel 2>/dev/null;
  123. )
  124. # 4.4) Aggiusto i permessi ai file in etc/ati
  125. ( cd etc/ati;
  126. chmod a-x *;
  127. chmod a+x authatieventsd.sh 2>/dev/null;
  128. )
  129. # 5)
  130. # Alcuni dei file in etc/ati devono essere spostati come .new in modo da preservarli con la rimozione del
  131. # pacchetto. Inoltre lo script di installazione del pacchetto provvederà a rinominarli o a cancellarli se
  132. # necessario.
  133. ( cd etc/ati;
  134. for file in atiogl.xml authatieventsd.sh fglrxprofiles.csv fglrxrc; do
  135. [ -f $file ] && mv $file ${file}.new;
  136. done
  137. )
  138. # 6)
  139. # If use xorg >= 7, remove obsolete directory X11R6
  140. if (( $XORG_7 )); then
  141. for dir in ${LIB_DIR}; # Move X modules in /usr/$LIB_DIR/xorg/modules
  142. do
  143. mkdir ${dir}/xorg;
  144. mv ${dir}/modules ${dir}/xorg;
  145. done
  146. mv usr/X11R6/* usr/;
  147. rm -rf usr/X11R6;
  148. fi
  149. # 7)
  150. # MAKE PACKAGE
  151. # local X_PACK_NAME=${X_PACK_PARTIAL_NAME/fglrx-/fglrx-${X_VERSION}-}.tgz;
  152. # Modify the slack-desc
  153. # ( cd install;
  154. # sed s/fglrx:/fglrx-${X_VERSION}:/ slack-desc > slack-desc.tmp;
  155. # mv -f slack-desc.tmp slack-desc
  156. # )
  157. # Strip binaries and libraries
  158. find . | xargs file | sed -n "/ELF.*executable/b PRINT;/ELF.*shared object/b PRINT;d;:PRINT s/\(.*\):.*/\1/;p;"\
  159. | xargs strip --strip-unneeded 2> /dev/null
  160. # makepkg -l y -c n ${X_PACK_NAME};
  161. # mv ${X_PACK_NAME} ${DEST_DIR};
  162. cd ${ROOT_DIR};
  163. return;
  164. }
  165. function buildpkg
  166. {
  167. case $1 in
  168. Only_Module)
  169. _make_module;
  170. ;;
  171. Only_X)
  172. _make_x;
  173. ;;
  174. All)
  175. _make_module;
  176. _make_x;
  177. ;;
  178. Test)
  179. local CHECK_SCRIPT=./check.sh;
  180. PATH=$PATH:/usr/X11/bin:/usr/X11R6/bin
  181. source ${CHECK_SCRIPT} --noprint;
  182. set;
  183. ;;
  184. *) echo "$1 unsupported";
  185. exit 2;
  186. ;;
  187. esac
  188. }
  189. function _detect_kernel_ver_from_PATH_KERNEL
  190. {
  191. local INCLUDES=${KERNEL_PATH}/include/linux;
  192. KNL_VER=$(grep UTS_RELEASE ${INCLUDES}/version.h | cut -d'"' -f2);
  193. if [ -z ${KNL_VER} ]; then
  194. KNL_VER=$(grep UTS_RELEASE ${INCLUDES}/utsrelease.h | cut -d'"' -f2);
  195. if [ -z ${KNL_VER} ]; then
  196. KNL_VER=$(grep UTS_RELEASE ${INCLUDES}/version-*.h 2>/dev/null | cut -d'"' -f2);
  197. fi
  198. fi
  199. if [ -z ${KNL_VER} ]; then
  200. echo "Error -> Kernel version not detected";
  201. exit 1;
  202. fi
  203. }
  204. function _init_env
  205. {
  206. [ $(id -u) -gt 0 ] && echo "Only root can do it!" && exit 1;
  207. BUILD_VER=0.1;
  208. ROOT_DIR=$PWD; # Usata dal file patch_function (se esiste)
  209. echo "$ROOT_DIR" | grep -q " " && echo "The name of the current directory should not contain any spaces" && exit 1;
  210. ARCH=$(arch); # Usata dal file patch_function (se esiste)
  211. [[ $ARCH != x86_64 ]] && ARCH="x86";
  212. # Setto il nome de modulo
  213. if [ ! -z ${KERNEL_PATH} ]; then
  214. _detect_kernel_ver_from_PATH_KERNEL; # Setta KNL_VER, variabile usata dal file patch_function (se esiste)
  215. else
  216. KNL_VER=$(uname -r) # Usata dal file patch_function (se esiste)
  217. fi
  218. if [[ $KNL_VER == "2.6."* ]]; then
  219. MODULE_NAME=fglrx.ko;
  220. else
  221. MODULE_NAME=fglrx.o;
  222. fi
  223. SCRIPT_DIR=packages/ROCK; # Usata dal file patch_function (se esiste)
  224. ATI_DRIVER_VER=$(./ati-packager-helper.sh --version); # Usata dal file patch_function (se esiste)
  225. ATI_DRIVER_REL=$(./ati-packager-helper.sh --release);
  226. MODULE_PKG_DIR=${SCRIPT_DIR}/module_pkg;
  227. # MODULE_PACK_NAME=fglrx-module-${ATI_DRIVER_VER}-${ARCH}-${ATI_DRIVER_REL}
  228. X_PKG_DIR=${SCRIPT_DIR}/x_pkg;
  229. # X_PACK_PARTIAL_NAME=fglrx-${ATI_DRIVER_VER}-${ARCH}-${ATI_DRIVER_REL};
  230. DEST_DIR=${PWD%/*};
  231. }
  232. case $1 in
  233. --get-supported)
  234. echo -e "All\tOnly_Module\tOnly_X";
  235. ;;
  236. --buildpkg)
  237. _init_env;
  238. echo -e "\nATI ROCK Linux Package Ver. $BUILD_VER"
  239. echo -e "Based on ATI SlackBuild by Emanuele Tomasi";
  240. buildpkg $2;
  241. ;;
  242. *)
  243. echo "${1}: unsupported option passed by ati-installer.sh";
  244. ;;
  245. esac