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.

338 lines
12 KiB

  1. #!/bin/bash
  2. #
  3. # --- ROCK-COPYRIGHT-NOTE-BEGIN ---
  4. #
  5. # This copyright note is auto-generated by ./scripts/Create-CopyPatch.
  6. # Please add additional copyright information _after_ the line containing
  7. # the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
  8. # the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
  9. #
  10. # ROCK Linux: rock-src/scripts/Build-Tools
  11. # ROCK Linux is Copyright (C) 1998 - 2006 Clifford Wolf
  12. #
  13. # This program is free software; you can redistribute it and/or modify
  14. # it under the terms of the GNU General Public License as published by
  15. # the Free Software Foundation; either version 2 of the License, or
  16. # (at your option) any later version. A copy of the GNU General Public
  17. # License can be found at Documentation/COPYING.
  18. #
  19. # Many people helped and are helping developing ROCK Linux. Please
  20. # have a look at http://www.rocklinux.org/ and the Documentation/TEAM
  21. # file for details.
  22. #
  23. # --- ROCK-COPYRIGHT-NOTE-END ---
  24. config=default
  25. stagelevel=9
  26. cleanup=0
  27. while [ "$1" ] ; do
  28. case "$1" in
  29. -cleanup) cleanup=1 ; shift ;;
  30. -cfg) config=$2 ; shift ; shift ;;
  31. -[0-9]) options="$options $1" ; stagelevel=${1#-} ; shift ;;
  32. *) echo ; echo "Usage: $0 [ -cfg <config> ] [ -0 | -1 | ... | -9 ] \\"
  33. echo " ${0//?/ } [ -cleanup ]"
  34. echo
  35. echo " Create various helper applications needed by Build-Pkg and other scripts."
  36. echo
  37. echo " -cfg <config> the configuration to use"
  38. echo " -0 to -9 set stagelevel"
  39. echo " -cleanup force a rebuild of files"
  40. echo ; exit 1 ;;
  41. esac
  42. done
  43. . ./scripts/parse-config
  44. . ./scripts/functions
  45. var_remove PATH ":" $base/build/$ROCKCFG_ID/ROCK/$toolsdir/bin
  46. var_remove PATH ":" $base/build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper
  47. mkdir -p build/$ROCKCFG_ID/ROCK/$toolsdir/bin
  48. mkdir -p build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper
  49. mkdir -p build/$ROCKCFG_ID/ROCK/$toolsdir/lib
  50. if [ $toolsdir = tools.cross ]; then
  51. mkdir -p build/$ROCKCFG_ID/ROCK/$toolsdir/{var/adm,etc,share,include}
  52. [ -L build/$ROCKCFG_ID/ROCK/$toolsdir/usr ] ||
  53. ln -s . build/$ROCKCFG_ID/ROCK/$toolsdir/usr
  54. [ -L build/$ROCKCFG_ID/ROCK/$toolsdir/sbin ] ||
  55. ln -s bin build/$ROCKCFG_ID/ROCK/$toolsdir/sbin
  56. [ -L build/$ROCKCFG_ID/ROCK/$toolsdir/var/adm/logs ] ||
  57. ln -s ../../../../var/adm/logs \
  58. build/$ROCKCFG_ID/ROCK/$toolsdir/var/adm/logs
  59. mkdir -p build/$ROCKCFG_ID/var/adm/logs
  60. fi
  61. x="$( bash scripts/xfind.sh config/$config/. package/. scripts/. \
  62. misc/. architecture/. target/. ! -name '*.cache' \
  63. -newer build/$ROCKCFG_ID/ROCK/$toolsdir/.lastupdate \
  64. -printf 'Found new/updated file: %p\n' 2> /dev/null )"
  65. if [ "$x" ] ; then
  66. echo_header Found $( echo "$x" | wc -l ) new/updated \
  67. files in source tree:
  68. echo "$x" | head -n 3 | sed 's,/\./,/,g' |
  69. while read y ; do echo_status $y ; done
  70. [ "$( echo "$x" | tail -n +4 )" ] &&
  71. echo_status "** list truncated to save space on the terminal **"
  72. if [ "$ROCK_DEBUG_TOOLS_SKIP" = 1 ]; then
  73. echo_error "Found \$ROCK_DEBUG_TOOLS_SKIP ..."
  74. else
  75. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/.lastupdate
  76. if echo "$x" | grep -qv " config/$config/" ; then
  77. echo_header Re-running configuration:
  78. while read line ; do
  79. echo_status $line
  80. done < <(
  81. if [ "$ROCKCFG_PSEUDONATIVE" = 1 ]; then
  82. ./scripts/Config -cfg $config -oldconfig -nobashmod
  83. else
  84. ./scripts/Config -cfg $config -oldconfig
  85. fi
  86. )
  87. fi
  88. fi
  89. fi
  90. if [ $cleanup = 1 ] ; then
  91. echo_header "Removing old stuff in $toolsdir/ directory ..."
  92. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/*
  93. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/bin/getdu
  94. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/bin/getfiles
  95. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/bin/fl_wrparse
  96. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/bin/fl_stparse
  97. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/lib/fl_wrapper.so
  98. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/lib/parse-config
  99. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/lib/parse-config-fixarch
  100. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/.lastupdate
  101. fi
  102. if [ ! -f build/$ROCKCFG_ID/ROCK/$toolsdir/.lastupdate ] ; then
  103. echo_header "Building tools in build/.../ROCK/$toolsdir:"
  104. # CC, CXX, F77 and KCC Wrapper
  105. #
  106. wrappers="cmd_wrapper" ; wrappervars=""
  107. echo_status "Building $toolsdir/wrapper/cmd_wrapper."
  108. $BUILDCC -Wall -O2 misc/tools-source/cmd_wrapper.c \
  109. -DENVPREFIX='"CMD"' -DMYNAME='"cmd_wrapper"' \
  110. -o build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/tmp.$$ || exit 1
  111. mv build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/tmp.$$ \
  112. build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/cmd_wrapper
  113. #
  114. build_wrapper() {
  115. local x="$( echo ${1//,/ } )" y z
  116. wrappervars="$wrappervars $x"
  117. while shift ; [ $# != 0 ]
  118. do
  119. wrappers="$wrappers $1"
  120. tmp=`mktemp -p build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper`
  121. {
  122. echo '#!/bin/bash'
  123. for y in $x ; do
  124. echo -n "[ \"\$${y}_WRAPPER_DEBUG\" = 1 ] && "
  125. echo "export CMD_WRAPPER_DEBUG=1"
  126. done
  127. for y in $x ; do
  128. echo -n "[ \"\$${y}_WRAPPER_BYPASS\" = 1 ] && "
  129. echo "export CMD_WRAPPER_BYPASS=1"
  130. done
  131. z=""; echo -n 'export CMD_WRAPPER_APPEND_PO="'
  132. for y in $x; do
  133. echo -n "${z}\$${y}_WRAPPER_APPEND_PO"; z=" "
  134. done ; echo '"'
  135. z=""; echo -n 'export CMD_WRAPPER_OTHERS="'
  136. for y in $x; do
  137. echo -n "${z}\$${y}_WRAPPER_OTHERS"; z=":"
  138. done ; echo '"'
  139. z=""; echo -n 'export CMD_WRAPPER_INSERT="'
  140. for y in $x; do
  141. echo -n "${z}\$${y}_WRAPPER_INSERT"; z=" "
  142. done ; echo '"'
  143. z=""; echo -n 'export CMD_WRAPPER_REMOVE="'
  144. for y in $x; do
  145. echo -n "${z}\$${y}_WRAPPER_REMOVE"; z=" "
  146. done ; echo '"'
  147. z=""; echo -n 'export CMD_WRAPPER_APPEND="'
  148. for y in $x; do
  149. echo -n "${z}\$${y}_WRAPPER_APPEND"; z=" "
  150. done ; echo '"'
  151. z=""; echo -n 'export CMD_WRAPPER_FILTER="'
  152. for y in $x; do
  153. echo -n "${z}\$${y}_WRAPPER_FILTER"; z="|"
  154. done ; echo '"'
  155. echo -n 'exec cmd_wrapper $( basename $0 ) "$@"'
  156. eval "outputfilter=\"\$${y}_WRAPPER_OUTPUTFILTER\""
  157. [ -n "${outputfilter}" ] && echo -n " | ${outputfilter}"
  158. echo
  159. } > $tmp
  160. chmod +rx $tmp
  161. mv $tmp "build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/$1"
  162. done
  163. }
  164. #
  165. while read script ; do . $script
  166. done < <( bash scripts/xfind.sh package/. target/$target/. misc/. -name 'wrappers.in' )
  167. #
  168. echo_status "Building $toolsdir/wrapper/strip_wrapper."
  169. cat << EOT > build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/strip_wrapper.$$
  170. #!/bin/sh
  171. if [ "\$STRIP_WRAPPER_NOLOOP" = 1 ] ; then
  172. echo "Aaaaaeik! Strip wrapper is looping!" >&2
  173. exit 1
  174. fi
  175. if [ "\$ROCKCFG_DEBUG" = 0 ] ; then
  176. PATH=\${PATH//\$STRIP_WRAPPER_MYPATH:/}
  177. export STRIP_WRAPPER_NOLOOP=1
  178. exec "\$( basename \$0 )" "\$@"
  179. fi
  180. exit 0
  181. EOT
  182. chmod +x build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/strip_wrapper.$$
  183. mv build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/strip_wrapper.$$ \
  184. build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/strip_wrapper
  185. wrappers="$wrappers strip_wrapper"
  186. #
  187. for x in strip $arch_target-strip ; do
  188. [ $crossnative = cross -a $x = strip ] && continue
  189. if [ -x "`type -p $x`" ] ; then
  190. ln -sf strip_wrapper \
  191. build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/$x
  192. wrappers="$wrappers $x"
  193. fi
  194. done
  195. #
  196. echo_status "Building $toolsdir/wrapper/install_wrapper."
  197. cp misc/tools-source/install_wrapper.sh build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/install_wrapper
  198. chmod +x build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/install_wrapper
  199. ln -sf install_wrapper build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/install
  200. ln -sf install_wrapper build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/cp
  201. ln -sf install_wrapper build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/ln
  202. ln -sf install_wrapper build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/mv
  203. ln -sf install_wrapper build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/chmod
  204. ln -sf install_wrapper build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/chown
  205. wrappers="$wrappers install_wrapper install cp ln mv chmod chown"
  206. #
  207. for x in $( ls build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/ )
  208. do
  209. z=0
  210. for y in $wrappers ; do
  211. [ "$x" = "$y" ] && z=1
  212. done
  213. if [ "$z" = 0 ] ; then
  214. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/wrapper/$x
  215. fi
  216. done
  217. # Various small tools
  218. #
  219. echo_status "Building $toolsdir/bin/so2a_wrapper."
  220. cp misc/tools-source/so2a_wrapper.sh build/$ROCKCFG_ID/ROCK/$toolsdir/bin/so2a_wrapper
  221. chmod +x build/$ROCKCFG_ID/ROCK/$toolsdir/bin/so2a_wrapper
  222. #
  223. for x in getdu getfiles fl_wrparse fl_stparse descparser; do
  224. echo_status "Building $toolsdir/bin/$x."
  225. $BUILDCC -Wall -O2 misc/tools-source/$x.c \
  226. -o build/$ROCKCFG_ID/ROCK/$toolsdir/bin/$x.$$ || exit 1
  227. mv build/$ROCKCFG_ID/ROCK/$toolsdir/bin/$x.$$ \
  228. build/$ROCKCFG_ID/ROCK/$toolsdir/bin/$x
  229. done
  230. # Flist Wrapper Library
  231. #
  232. if [ "$ROCKCFG_FLIST" = "flwrapper" ] ; then
  233. echo_status "Building $toolsdir/lib/fl_wrapper.so."
  234. $BUILDCC -Wall -O2 -ldl -fPIC -shared misc/tools-source/fl_wrapper.c \
  235. -o build/$ROCKCFG_ID/ROCK/$toolsdir/lib/fl_wrapper.so.$$ \
  236. 2>/dev/null || exit 1
  237. mv build/$ROCKCFG_ID/ROCK/$toolsdir/lib/fl_wrapper.so.$$ \
  238. build/$ROCKCFG_ID/ROCK/$toolsdir/lib/fl_wrapper.so
  239. echo_status "Testing $toolsdir/lib/fl_wrapper.so."
  240. if ! sh -c "LD_PRELOAD=\"\$LD_PRELOAD:build/\$ROCKCFG_ID/`
  241. `ROCK/$toolsdir/lib/fl_wrapper.so\" date ; `
  242. `exit \$?" >/dev/null 2>&1
  243. then
  244. echo_error "Detected a problem with the flist" \
  245. "wrapper lib on your system."
  246. echo_error "Please specify another flist-creation" \
  247. "system in your build configuration."
  248. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/lib/fl_wrapper.so
  249. echo ; exit 1
  250. fi
  251. fi
  252. # Create Parse-Config Collection
  253. #
  254. echo_status "Creating $toolsdir/lib/parse-config."
  255. bash scripts/xfind.sh \
  256. architecture/$arch/. package/. target/$target/. misc/ -type f \
  257. '(' -name 'parse-config' -o -name 'parse-config-*' ')' \
  258. '(' ! -name 'parse-config-x' -o ! -name 'parse-config-*-x' ')' \
  259. '(' ! -name '*~' ')' \
  260. -printf '%f\t%p\n' | sort | awk '{ $1="."; print; }' \
  261. > build/$ROCKCFG_ID/ROCK/$toolsdir/lib/parse-config.$$
  262. mv build/$ROCKCFG_ID/ROCK/$toolsdir/lib/parse-config.$$ \
  263. build/$ROCKCFG_ID/ROCK/$toolsdir/lib/parse-config
  264. bash scripts/xfind.sh \
  265. architecture/$arch/. package/. target/$target/. misc/ -type f \
  266. -name 'parse-config-fixarch' \
  267. -printf '%f\t%p\n' | sort | awk '{ $1="."; print; }' \
  268. > build/$ROCKCFG_ID/ROCK/$toolsdir/lib/parse-config-fixarch.$$
  269. mv build/$ROCKCFG_ID/ROCK/$toolsdir/lib/parse-config-fixarch.$$ \
  270. build/$ROCKCFG_ID/ROCK/$toolsdir/lib/parse-config-fixarch
  271. # Create pkg_*_{pre,post}.conf files
  272. #
  273. rm -f build/$ROCKCFG_ID/ROCK/$toolsdir/lib/pkg_*_{pre,post}.conf
  274. echo_status "Creating $toolsdir/lib/pkg_*_{pre,post}.conf"
  275. for x in `grep "^X" config/$config/packages | cut -d ' ' -f 4,5 | tr ' ' '/'`; do
  276. for y in `echo package/$x/pkg_*_{pre,post}.conf`; do
  277. if [ -f $y ]; then
  278. echo " . $y" >> build/$ROCKCFG_ID/ROCK/$toolsdir/lib/${y##*/}
  279. fi
  280. done
  281. done
  282. # Create pkgmapper script
  283. #
  284. bash scripts/xfind.sh package/. -type f -name 'pkgmapper.in' \
  285. -printf '%f\t%p\n' | sort | awk '{ $1="."; print; }' \
  286. > build/$ROCKCFG_ID/ROCK/$toolsdir/lib/pkgmapper.$$
  287. mv build/$ROCKCFG_ID/ROCK/$toolsdir/lib/pkgmapper.$$ \
  288. build/$ROCKCFG_ID/ROCK/$toolsdir/lib/pkgmapper
  289. # Create cmd_wrapper config
  290. #
  291. echo -e "${wrappervars// /\n}" | grep . | sort -u |
  292. while read x ; do
  293. echo "export ${x}_WRAPPER_DEBUG=0 ${x}_WRAPPER_BYPASS=0"
  294. echo "export ${x}_WRAPPER_OTHERS='' ${x}_WRAPPER_REMOVE=''"
  295. echo "export ${x}_WRAPPER_INSERT='' ${x}_WRAPPER_APPEND=''"
  296. echo "export ${x}_WRAPPER_FILTER='' ${x}_WRAPPER_APPEND_PO=''"
  297. done > build/$ROCKCFG_ID/ROCK/$toolsdir/lib/wrapper-config.$$
  298. mv build/$ROCKCFG_ID/ROCK/$toolsdir/lib/wrapper-config.$$ \
  299. build/$ROCKCFG_ID/ROCK/$toolsdir/lib/wrapper-config
  300. touch build/$ROCKCFG_ID/ROCK/$toolsdir/.lastupdate
  301. fi
  302. exit 0