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.

312 lines
10 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 - 2003 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 "Usage: $0 [ -cfg config ] [ -0 | -9 ] \\"
  33. echo " ${0//?/ } [ -cleanup ]" ; exit 1 ;;
  34. esac
  35. done
  36. . ./scripts/parse-config
  37. . ./scripts/functions
  38. var_remove PATH ":" $base/build/$ROCKCFG_ID/$toolsdir/bin
  39. var_remove PATH ":" $base/build/$ROCKCFG_ID/$toolsdir/wrapper
  40. mkdir -p build/$ROCKCFG_ID/$toolsdir/bin
  41. mkdir -p build/$ROCKCFG_ID/$toolsdir/wrapper
  42. mkdir -p build/$ROCKCFG_ID/$toolsdir/lib
  43. if [ $toolsdir = tools.cross ]; then
  44. mkdir -p build/$ROCKCFG_ID/$toolsdir/{var/adm,etc,share,include}
  45. [ -L build/$ROCKCFG_ID/$toolsdir/usr ] ||
  46. ln -s . build/$ROCKCFG_ID/$toolsdir/usr
  47. [ -L build/$ROCKCFG_ID/$toolsdir/sbin ] ||
  48. ln -s bin build/$ROCKCFG_ID/$toolsdir/sbin
  49. [ -L build/$ROCKCFG_ID/$toolsdir/var/adm/logs ] ||
  50. ln -s ../../../root/var/adm/logs \
  51. build/$ROCKCFG_ID/$toolsdir/var/adm/logs
  52. mkdir -p build/$ROCKCFG_ID/root/var/adm/logs
  53. fi
  54. # Subversion has really big ".svn" subdirs. This has much better performance
  55. # than the "find ... ! -path '*/.svn*' ! -path '*/CVS*' ..." used earlier
  56. # in the x="$( .. )" statement.
  57. tmp1=`mktemp` tmp2=`mktemp`
  58. echo config/$config/. package/. scripts/. misc/. architecture/. target/. > $tmp1
  59. while ! cmp -s $tmp1 $tmp2
  60. do
  61. cat $tmp1 > $tmp2
  62. find $( cat $tmp2 ) -maxdepth 1 -type d | \
  63. egrep -v '/(\.svn|CVS)$' 2> /dev/null | sort -u > $tmp1
  64. done
  65. x="$( find $( cat $tmp2 ) -mindepth 1 -maxdepth 1 \
  66. ! -name '*.cache' ! -name 'CVS' ! -name '.svn' \
  67. -newer build/$ROCKCFG_ID/$toolsdir/.lastupdate \
  68. -printf 'Found new/updated file: %p\n' 2> /dev/null )"
  69. rm -f $tmp1 $tmp2
  70. if [ "$x" ] ; then
  71. echo_header Found $( echo "$x" | wc -l ) new/updated \
  72. files in source tree:
  73. echo "$x" | head -3 | sed 's,/\./,/,g' |
  74. while read y ; do echo_status $y ; done
  75. [ "$( echo "$x" | tail +4 )" ] &&
  76. echo_status "** list truncated to save space on the terminal **"
  77. if [ "$ROCK_DEBUG_TOOLS_SKIP" = 1 ]; then
  78. echo_error "Found \$ROCK_DEBUG_TOOLS_SKIP ..."
  79. else
  80. rm -f build/$ROCKCFG_ID/$toolsdir/.lastupdate
  81. if echo "$x" | grep -qv " config/$config/" ; then
  82. echo_header Re-running configuration:
  83. while read line ; do
  84. echo_status $line
  85. done < <( ./scripts/Config -cfg $config -oldconfig )
  86. fi
  87. fi
  88. fi
  89. if [ $cleanup = 1 ] ; then
  90. echo_header "Removing old stuff in $toolsdir/ directory ..."
  91. rm -f build/$ROCKCFG_ID/$toolsdir/wrapper/*
  92. rm -f build/$ROCKCFG_ID/$toolsdir/bin/getdu
  93. rm -f build/$ROCKCFG_ID/$toolsdir/bin/getfiles
  94. rm -f build/$ROCKCFG_ID/$toolsdir/bin/fl_wrparse
  95. rm -f build/$ROCKCFG_ID/$toolsdir/bin/fl_stparse
  96. rm -f build/$ROCKCFG_ID/$toolsdir/lib/fl_wrapper.so
  97. rm -f build/$ROCKCFG_ID/$toolsdir/lib/parse-config
  98. rm -f build/$ROCKCFG_ID/$toolsdir/.lastupdate
  99. fi
  100. if [ ! -f build/$ROCKCFG_ID/$toolsdir/.lastupdate ] ; then
  101. echo_header "Building tools in build/.../$toolsdir:"
  102. # CC, CXX, F77 and KCC Wrapper
  103. #
  104. wrappers="cmd_wrapper" ; wrappervars=""
  105. echo_status "Building $toolsdir/wrapper/cmd_wrapper."
  106. $BUILDCC -Wall -O2 misc/tools-source/cmd_wrapper.c \
  107. -DENVPREFIX='"CMD"' -DMYNAME='"cmd_wrapper"' \
  108. -o build/$ROCKCFG_ID/$toolsdir/wrapper/tmp.$$ || exit 1
  109. mv build/$ROCKCFG_ID/$toolsdir/wrapper/tmp.$$ \
  110. build/$ROCKCFG_ID/$toolsdir/wrapper/cmd_wrapper
  111. #
  112. build_wrapper() {
  113. local x="$( echo ${1//,/ } )" y z
  114. wrappervars="$wrappervars $x"
  115. while shift ; [ $# != 0 ]
  116. do
  117. wrappers="$wrappers $1"
  118. tmp=`mktemp -p build/$ROCKCFG_ID/$toolsdir/wrapper`
  119. {
  120. echo '#!/bin/bash'
  121. for y in $x ; do
  122. echo -n "[ \"\$${y}_WRAPPER_DEBUG\" = 1 ] && "
  123. echo "export CMD_WRAPPER_DEBUG=1"
  124. done
  125. for y in $x ; do
  126. echo -n "[ \"\$${y}_WRAPPER_BYPASS\" = 1 ] && "
  127. echo "export CMD_WRAPPER_BYPASS=1"
  128. done
  129. z=""; echo -n 'export CMD_WRAPPER_APPEND_PO="'
  130. for y in $x; do
  131. echo -n "${z}\$${y}_WRAPPER_APPEND_PO"; z=" "
  132. done ; echo '"'
  133. z=""; echo -n 'export CMD_WRAPPER_OTHERS="'
  134. for y in $x; do
  135. echo -n "${z}\$${y}_WRAPPER_OTHERS"; z=":"
  136. done ; echo '"'
  137. z=""; echo -n 'export CMD_WRAPPER_INSERT="'
  138. for y in $x; do
  139. echo -n "${z}\$${y}_WRAPPER_INSERT"; z=" "
  140. done ; echo '"'
  141. z=""; echo -n 'export CMD_WRAPPER_REMOVE="'
  142. for y in $x; do
  143. echo -n "${z}\$${y}_WRAPPER_REMOVE"; z=" "
  144. done ; echo '"'
  145. z=""; echo -n 'export CMD_WRAPPER_APPEND="'
  146. for y in $x; do
  147. echo -n "${z}\$${y}_WRAPPER_APPEND"; z=" "
  148. done ; echo '"'
  149. z=""; echo -n 'export CMD_WRAPPER_FILTER="'
  150. for y in $x; do
  151. echo -n "${z}\$${y}_WRAPPER_FILTER"; z="|"
  152. done ; echo '"'
  153. echo 'exec cmd_wrapper $( basename $0 ) "$@"'
  154. } > $tmp
  155. chmod +rx $tmp
  156. mv $tmp "build/$ROCKCFG_ID/$toolsdir/wrapper/$1"
  157. done
  158. }
  159. #
  160. while read script ; do . $script
  161. done < <( find package/. target/$target/. misc/. -name 'wrappers.in' )
  162. #
  163. echo_status "Building $toolsdir/wrapper/strip_wrapper."
  164. cat << 'EOT' > build/$ROCKCFG_ID/$toolsdir/wrapper/strip_wrapper.$$
  165. #!/bin/sh
  166. if [ "$STRIP_WRAPPER_NOLOOP" = 1 ] ; then
  167. echo "Aaaaaeik! Strip wrapper is looping!" >&2
  168. exit 1
  169. fi
  170. if [ "$ROCKCFG_STRIP" != 0 ] ; then
  171. PATH=${PATH//$STRIP_WRAPPER_MYPATH:/}
  172. export STRIP_WRAPPER_NOLOOP=1
  173. exec "`basename $0`" "$@"
  174. fi
  175. exit 0
  176. EOT
  177. chmod +x build/$ROCKCFG_ID/$toolsdir/wrapper/strip_wrapper.$$
  178. mv build/$ROCKCFG_ID/$toolsdir/wrapper/strip_wrapper.$$ \
  179. build/$ROCKCFG_ID/$toolsdir/wrapper/strip_wrapper
  180. wrappers="$wrappers strip_wrapper"
  181. #
  182. for x in strip $arch_target-strip ; do
  183. [ $crossnative = cross -a $x = strip ] && continue
  184. if [ -x "`type -p $x`" ] ; then
  185. ln -sf strip_wrapper \
  186. build/$ROCKCFG_ID/$toolsdir/wrapper/$x
  187. wrappers="$wrappers $x"
  188. fi
  189. done
  190. #
  191. echo_status "Building $toolsdir/wrapper/install_wrapper."
  192. cp misc/tools-source/install_wrapper.sh build/$ROCKCFG_ID/$toolsdir/wrapper/install_wrapper
  193. chmod +x build/$ROCKCFG_ID/$toolsdir/wrapper/install_wrapper
  194. ln -sf install_wrapper build/$ROCKCFG_ID/$toolsdir/wrapper/install
  195. ln -sf install_wrapper build/$ROCKCFG_ID/$toolsdir/wrapper/cp
  196. ln -sf install_wrapper build/$ROCKCFG_ID/$toolsdir/wrapper/ln
  197. ln -sf install_wrapper build/$ROCKCFG_ID/$toolsdir/wrapper/mv
  198. wrappers="$wrappers install_wrapper install cp ln mv"
  199. #
  200. for x in $( cd build/$ROCKCFG_ID/$toolsdir/wrapper/ ; echo * )
  201. do
  202. z=0
  203. for y in $wrappers ; do
  204. [ "$x" = "$y" ] && z=1
  205. done
  206. if [ "$z" = 0 ] ; then
  207. rm -f build/$ROCKCFG_ID/$toolsdir/wrapper/$x
  208. fi
  209. done
  210. # Various small tools
  211. #
  212. for x in getdu getfiles fl_wrparse fl_stparse ; do
  213. echo_status "Building $toolsdir/bin/$x."
  214. $BUILDCC -Wall -O2 misc/tools-source/$x.c \
  215. -o build/$ROCKCFG_ID/$toolsdir/bin/$x.$$ || exit 1
  216. mv build/$ROCKCFG_ID/$toolsdir/bin/$x.$$ \
  217. build/$ROCKCFG_ID/$toolsdir/bin/$x
  218. done
  219. # Flist Wrapper Library
  220. #
  221. if [ "$ROCKCFG_FLIST" = "flwrapper" ] ; then
  222. echo_status "Building $toolsdir/lib/fl_wrapper.so."
  223. $BUILDCC -Wall -O2 -ldl -shared misc/tools-source/fl_wrapper.c \
  224. -o build/$ROCKCFG_ID/$toolsdir/lib/fl_wrapper.so.$$ || exit 1
  225. mv build/$ROCKCFG_ID/$toolsdir/lib/fl_wrapper.so.$$ \
  226. build/$ROCKCFG_ID/$toolsdir/lib/fl_wrapper.so
  227. echo_status "Testing $toolsdir/lib/fl_wrapper.so."
  228. if ! sh -c "LD_PRELOAD=\"\$LD_PRELOAD:build/\$ROCKCFG_ID/`
  229. `$toolsdir/lib/fl_wrapper.so\" date ; `
  230. `exit $?" >/dev/null 2>&1
  231. then
  232. echo_error "Detected a problem with the flist" \
  233. "wrapper lib on your system."
  234. echo_error "Please specify another flist-creation" \
  235. "system in your build configuration."
  236. rm -f build/$ROCKCFG_ID/$toolsdir/lib/fl_wrapper.so
  237. echo ; exit 1
  238. fi
  239. fi
  240. # Create Parse-Config Collection
  241. #
  242. echo_status "Creating $toolsdir/lib/parse-config."
  243. find architecture/$arch/. package/. target/$target/. misc/ \
  244. '(' -name 'parse-config' -o -name 'parse-config-*' ')' \
  245. '(' ! -name 'parse-config-x' -o ! -name 'parse-config-*-x' ')' \
  246. ! -path '*/\.svn/*' -type f \
  247. -printf '%f\t%p\n' | sort | awk '{ $1="."; print; }' \
  248. > build/$ROCKCFG_ID/$toolsdir/lib/parse-config.$$
  249. mv build/$ROCKCFG_ID/$toolsdir/lib/parse-config.$$ \
  250. build/$ROCKCFG_ID/$toolsdir/lib/parse-config
  251. # Create pkg_*_(pre_post).conf files
  252. #
  253. rm -f build/$ROCKCFG_ID/$toolsdir/lib/pkg_*_{pre,post}.conf
  254. echo_status "Creating $toolsdir/lib/pkg_*_{pre,post}.conf"
  255. for x in `grep "^X" config/$config/packages | cut -d ' ' -f 4,5 | tr ' ' '/'`; do
  256. for y in `echo package/$x/pkg_*_{pre,post}.conf`; do
  257. if [ -f $y ]; then
  258. echo " . $y" >> build/$ROCKCFG_ID/$toolsdir/lib/${y##*/}
  259. fi
  260. done
  261. done
  262. echo -e "${wrappervars// /\n}" | grep . | sort -u |
  263. while read x ; do
  264. echo "export ${x}_WRAPPER_DEBUG=0 ${x}_WRAPPER_BYPASS=0"
  265. echo "export ${x}_WRAPPER_OTHERS='' ${x}_WRAPPER_REMOVE=''"
  266. echo "export ${x}_WRAPPER_INSERT='' ${x}_WRAPPER_APPEND=''"
  267. echo "export ${x}_WRAPPER_FILTER='' ${x}_WRAPPER_APPEND_PO=''"
  268. done > build/$ROCKCFG_ID/$toolsdir/lib/wrapper-config.$$
  269. mv build/$ROCKCFG_ID/$toolsdir/lib/wrapper-config.$$ \
  270. build/$ROCKCFG_ID/$toolsdir/lib/wrapper-config
  271. touch build/$ROCKCFG_ID/$toolsdir/.lastupdate
  272. fi
  273. exit 0