Fix gen-special when an entity is commented out:
[automated_linux_from_scratch.git] / branches / 2.3.x / jhalfs
blob21c5b71733a8ec02730103ad46077477f42276f8
1 #!/bin/bash
2 # $Id$
3 set -e
5 # VT100 colors
6 declare -r BLACK=$'\e[1;30m'
7 declare -r DK_GRAY=$'\e[0;30m'
9 declare -r RED=$'\e[31m'
10 declare -r GREEN=$'\e[32m'
11 declare -r YELLOW=$'\e[33m'
12 declare -r BLUE=$'\e[34m'
13 declare -r MAGENTA=$'\e[35m'
14 declare -r CYAN=$'\e[36m'
15 declare -r WHITE=$'\e[37m'
17 declare -r OFF=$'\e[0m'
18 declare -r BOLD=$'\e[1m'
19 declare -r REVERSE=$'\e[7m'
20 declare -r HIDDEN=$'\e[8m'
22 declare -r tab_=$'\t'
23 declare -r nl_=$'\n'
25 declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
26 declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
27 declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
29 # bold yellow > < pair
30 declare -r R_arrow=$'\e[1;33m>\e[0m'
31 declare -r L_arrow=$'\e[1;33m<\e[0m'
34 #>>>>>>>>>>>>>>>ERROR TRAPPING >>>>>>>>>>>>>>>>>>>>
35 #-----------------------#
36 simple_error() { # Basic error trap.... JUST DIE
37 #-----------------------#
38 # If +e then disable text output
39 if [[ "$-" =~ e ]]; then
40 echo -e "\n${RED}ERROR:${GREEN} basic error trapped!${OFF}\n" >&2
44 see_ya() {
45 echo -e "\n${L_arrow}${BOLD}jhalfs branch-2.3.x${R_arrow} exit${OFF}\n"
47 ##### Simple error TRAPS
48 # ctrl-c SIGINT
49 # ctrl-y
50 # ctrl-z SIGTSTP
51 # SIGHUP 1 HANGUP
52 # SIGINT 2 INTRERRUPT FROM KEYBOARD Ctrl-C
53 # SIGQUIT 3
54 # SIGKILL 9 KILL
55 # SIGTERM 15 TERMINATION
56 # SIGSTOP 17,18,23 STOP THE PROCESS
57 #####
58 set -e
59 trap see_ya 0
60 trap simple_error ERR
61 trap 'echo -e "\n\n${RED}INTERRUPT${OFF} trapped\n" && exit 2' 1 2 3 15 17 18 23
62 #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
64 version="
65 ${BOLD} \"jhalfs branch-2.3.x\"${OFF} builder tool (bug-fixes branch) \$Rev$
66 \$Date$
68 Written by George Boudreau and Manuel Canales Esparcia,
69 plus several contributions.
71 Based on an idea from Jeremy Huntwork
73 This set of files are published under the
74 ${BOLD}Gnu General Public License, Version 2.${OFF}
77 case $1 in
78 -v ) echo "$version" && exit 1 ;;
79 run ) : ;;
80 * )
81 echo "${nl_}${tab_}${BOLD}${RED}This script cannot be called directly: EXITING ${OFF}${nl_}"
82 exit 1
84 esac
86 VERBOSITY=1
88 [[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
89 source configuration
90 [[ $? > 0 ]] && echo "file:configuration did not load.." && exit 1
91 [[ $VERBOSITY > 0 ]] && echo "OK"
93 # These are boolean vars generated from Config.in.
94 # ISSUE: If a boolean parameter is not set <true> that
95 # variable is not defined by the menu app. This can
96 # cause a headache if you are not careful.
97 # The following parameters MUST be created and have a
98 # default value.
99 RUNMAKE=${RUNMAKE:-n}
100 GETPKG=${GETPKG:-n}
101 GETKERNEL=${GETKERNEL:-n}
102 COMPARE=${COMPARE:-n}
103 RUN_FARCE=${RUN_FARCE:-n}
104 RUN_ICA=${RUN_ICA:-n}
105 BOMB_TEST=${BOMB_TEST:-n}
106 STRIP=${STRIP:=n}
107 REPORT=${REPORT:=n}
108 VIMLANG=${VIMLANG:-n}
109 GRSECURITY_HOST=${GRSECURITY_HOST:-n}
110 CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
111 REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
112 INSTALL_LOG=${INSTALL_LOG:-n}
113 CLEAN=${CLEAN:=n}
114 SET_SSP=${SET_SSP:=n}
115 SET_ASLR=${SET_ASLR:=n}
116 SET_PAX=${SET_PAX:=n}
117 SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
118 SET_WARNINGS=${SET_WARNINGS:=n}
119 SET_MISC=${SET_MISC:=n}
120 SET_BLOWFISH=${SET_BLOWFISH:=n}
122 # Book surces envars
123 BRANCH_ID=${BRANCH_ID:=development}
125 case $BRANCH_ID in
126 development )
127 case $PROGNAME in
128 clfs2 ) TREE=branches/clfs-sysroot/BOOK ;;
129 clfs3 ) TREE=branches/clfs-embedded/BOOK ;;
130 *) TREE=trunk/BOOK ;;
131 esac
132 LFSVRS=development
134 *EDIT* ) echo " You forgot to set the branch or stable book version."
135 echo " Please rerun make and fix the configuration."
136 exit 2 ;;
137 branch-* )
138 LFSVRS=${BRANCH_ID}
139 TREE=branches/${BRANCH_ID#branch-}/BOOK
142 case $PROGNAME in
143 lfs | hlfs )
144 LFSVRS=${BRANCH_ID}
145 TREE=tags/${BRANCH_ID}/BOOK
147 clfs | clfs2 | clfs3)
148 LFSVRS=${BRANCH_ID}
149 TREE=tags/${BRANCH_ID}
151 esac
153 esac
155 # Set the document location...
156 BOOK=${BOOK:=$PROGNAME-$LFSVRS}
158 # blfs-tool envars
159 BLFS_TOOL=${BLFS_TOOL:-n}
160 if [[ "${BLFS_TOOL}" = "y" ]] ; then
161 BLFS_BRANCH_ID=${BLFS_BRANCH_ID:=development}
162 case $BLFS_BRANCH_ID in
163 development ) BLFS_TREE=trunk/BOOK ;;
164 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
165 echo " Please rerun make and fix the configuration."
166 exit 2 ;;
167 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-} ;;
168 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
169 esac
170 # Dependencies envars, to can update it more easy.
171 # Tidy and Unzip version are harcoded also in wrt_blfs_tool_targets()
172 # libxml2
173 LIBXML_PKG="libxml2-2.6.29.tar.gz"
174 LIBXML_URL="ftp://xmlsoft.org/libxml2/${LIBXML_PKG}"
175 LIBXML_MD5="8b99b6e8b08e838438d9e6b639d79ebd"
176 # libxslt
177 LIBXSLT_PKG="libxslt-1.1.21.tar.gz"
178 LIBXSLT_URL="ftp://xmlsoft.org/libxslt/${LIBXSLT_PKG}"
179 LIBXSLT_MD5="59fe34e85692f71df2a38c2ee291b3ca"
180 # tidy
181 TIDY_PKG="tidy-cvs_20070326.tar.bz2"
182 TIDY_URL="http://anduin.linuxfromscratch.org/files/BLFS/sources/${TIDY_PKG}"
183 TIDY_MD5="468bfaa5cf917a8ecbe7834c13a61376"
184 # unzip
185 UNZIP_PKG="unzip552.tar.gz"
186 UNZIP_URL="http://downloads.sourceforge.net/infozip/${UNZIP_PKG}"
187 UNZIP_MD5="9d23919999d6eac9217d1f41472034a9"
188 # unzip security patch
189 UNZIP_PATCH="unzip-5.52-security_fix-1.patch"
190 UNZIP_PATCH_URL="http://www.linuxfromscratch.org/patches/blfs/svn/${UNZIP_PATCH}"
191 UNZIP_PATCH_MD5="00ebf64fdda2ad54ddfc619f85f328bb"
192 # DocBook XML DTD
193 DBXML_PKG="docbook-xml-4.5.zip"
194 DBXML_URL="http://www.docbook.org/xml/4.5/${DBXML_PKG}"
195 DBXML_MD5="03083e288e87a7e829e437358da7ef9e"
196 # DocBook XSL
197 # DBXSL_PKG="docbook-xsl-1.69.1.tar.bz2"
198 # DBXSL_URL="http://prdownloads.sourceforge.net/docbook/${DBXSL_PKG}"
199 # DBXSL_MD5="6ebd29a67f2dcc3f2220f475ee6f6552"
200 # Links
201 LYNX_PKG="lynx2.8.6.tar.bz2"
202 LYNX_URL="http://lynx.isc.org/release/${LYNX_PKG}"
203 LYNX_MD5="dc80497b7dda6a28fd80404684d27548"
204 # sudo
205 SUDO_PKG="sudo-1.6.8p12.tar.gz"
206 SUDO_URL="http://anduin.linuxfromscratch.org/sources/BLFS/svn/s/${SUDO_PKG}"
207 SUDO_MD5="b29893c06192df6230dd5f340f3badf5"
208 # sudo envar fix patch
209 SUDO_PATCH="sudo-1.6.8p12-envvar_fix-1.patch"
210 SUDO_PATCH_URL="http://www.linuxfromscratch.org/patches/blfs/svn/${SUDO_PATCH}"
211 SUDO_PATCH_MD5="454925aedfe054dff8fe0d03b209f986"
212 # wget
213 WGET_PKG="wget-1.10.2.tar.gz"
214 WGET_URL="ftp://ftp.gnu.org/gnu/wget/${WGET_PKG}"
215 WGET_MD5="795fefbb7099f93e2d346b026785c4b8"
216 # Subversion
217 SVN_PKG="subversion-1.3.1.tar.bz2"
218 SVN_URL="http://subversion.tigris.org/tarballs/${SVN_PKG}"
219 SVN_MD5="07b95963968ae345541ca99d0e7bf082"
220 # GPM
221 GPM_PKG="gpm-1.20.1.tar.bz2"
222 GPM_URL="ftp://ftp.linux.ee/pub/gentoo/distfiles/distfiles/${GPM_PKG}"
223 GPM_MD5="2c63e827d755527950d9d13fe3d87692"
224 # GPM segfaul patch
225 GPM_PATCH_1="gpm-1.20.1-segfault-1.patch"
226 GPM_PATCH_1_URL="http://www.linuxfromscratch.org/patches/blfs/svn/${GPM_PATCH_1}"
227 GPM_PATCH_1_MD5="8c88f92990ba7613014fcd1db14ca7ac"
228 # GPM silent patch
229 GPM_PATCH_2="gpm-1.20.1-silent-1.patch"
230 GPM_PATCH_2_URL="http://www.linuxfromscratch.org/patches/blfs/svn/${GPM_PATCH_2}"
231 GPM_PATCH_2_MD5="bf6cbefe20c6f15b587f19ebc1c8a37a"
234 #--- Envars not sourced from configuration
235 case $PROGNAME in
236 clfs* ) declare -r SVN="http://svn.cross-lfs.org/svn/repos" ;;
237 * ) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
238 esac
239 declare -r LOG=000-masterscript.log
240 # Needed to can fetch BLFS book sources when building CLFS
241 declare -r SVN_2="svn://svn.linuxfromscratch.org"
243 # Set true internal variables
244 COMMON_DIR="common"
245 PACKAGE_DIR=$(echo $PROGNAME | tr '[a-z]' '[A-Z]')
246 MODULE=$PACKAGE_DIR/master.sh
248 [[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
249 source $COMMON_DIR/common-functions
250 [[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
251 [[ $VERBOSITY > 0 ]] && echo "OK"
252 [[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
253 source $MODULE
254 [[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
255 [[ $VERBOSITY > 0 ]] && echo "OK"
257 [[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
260 #*******************************************************************#
261 [[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
262 source $COMMON_DIR/libs/func_check_version.sh
263 [[ $? > 0 ]] && echo " function module did not load.." && exit 2
264 [[ $VERBOSITY > 0 ]] && echo "OK"
266 [[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
267 source $COMMON_DIR/libs/func_validate_configs.sh
268 [[ $? > 0 ]] && echo " function module did not load.." && exit 2
269 [[ $VERBOSITY > 0 ]] && echo "OK"
271 [[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
272 source $COMMON_DIR/libs/func_custom_pkgs
273 [[ $? > 0 ]] && echo " function module did not load.." && exit 2
274 [[ $VERBOSITY > 0 ]] && echo "OK"
277 [[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
280 ###################################
281 ### MAIN ###
282 ###################################
284 # Check for build prereequisites.
285 echo
286 check_prerequisites
287 echo "${SD_BORDER}${nl_}"
289 validate_config
290 echo "${SD_BORDER}${nl_}"
291 echo -n "Are you happy with these settings? yes/no (no): "
292 read ANSWER
293 if [ x$ANSWER != "xyes" ] ; then
294 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
295 exit 1
297 echo "${nl_}${SD_BORDER}${nl_}"
299 # Load additional modules or configuration files based on global settings
300 # compare module
301 if [[ "$COMPARE" = "y" ]]; then
302 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
303 source $COMMON_DIR/libs/func_compare.sh
304 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
305 [[ $VERBOSITY > 0 ]] && echo "OK"
308 # optimize module
309 if [[ "$OPTIMIZE" != "0" ]]; then
310 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
311 source optimize/optimize_functions
312 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
313 [[ $VERBOSITY > 0 ]] && echo "OK"
315 # optimize configurations
316 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
317 source optimize/opt_config
318 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
319 [[ $VERBOSITY > 0 ]] && echo "OK"
320 # Validate optimize settings, if required
321 validate_opt_settings
325 if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
327 # If $BUILDDIR has subdirectories like tools/ or bin/, stop the run
328 # and notify the user about that.
329 if [ -d $BUILDDIR/tools -o -d $BUILDDIR/bin ] && [ -z $CLEAN ] ; then
330 eval "$no_empty_builddir"
333 # If requested, clean the build directory
334 clean_builddir
336 if [[ ! -d $JHALFSDIR ]]; then
337 mkdir -p $JHALFSDIR
340 # Create $BUILDDIR/sources even though it could be created by get_sources()
341 if [[ ! -d $BUILDDIR/sources ]]; then
342 mkdir -p $BUILDDIR/sources
345 # Create the log directory
346 if [[ ! -d $LOGDIR ]]; then
347 mkdir $LOGDIR
349 >$LOGDIR/$LOG
351 # Copy common helper files
352 cp $COMMON_DIR/{makefile-functions,progress_bar.sh,packages.xsl} $JHALFSDIR/
354 # Fix the XSL book parser
355 sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL}
356 export XSL=$JHALFSDIR/${XSL}
359 # Copy urls.xsl, if needed
360 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
362 # Create the test-log directory, if needed
363 [[ "$TEST" != "0" ]] && [[ ! -d $TESTLOGDIR ]] && install -d -m 1777 $TESTLOGDIR
365 # Create the installed-files directory, if needed
366 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
368 # Prepare report creation, if needed
369 if [[ "$REPORT" = "y" ]]; then
370 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
371 # After being sure that all looks sane, dump the settings to a file
372 # This file will be used to create the REPORT header
373 validate_config > $JHALFSDIR/jhalfs.config
376 # Copy optimize files, if needed
377 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
379 # Copy compare files, if needed
380 if [[ "$COMPARE" = "y" ]]; then
381 mkdir -p $JHALFSDIR/extras
382 cp extras/* $JHALFSDIR/extras
386 # Copy custom tools config files, if requested
387 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
388 echo "Copying custom tool scripts to $JHALFSDIR"
389 mkdir -p $JHALFSDIR/custom-commands
390 cp -f custom/config/* $JHALFSDIR/custom-commands
393 # Install blfs-tool, if requested.
394 if [[ "${BLFS_TOOL}" = "y" ]] ; then
395 # Install the files
396 [[ ! -d ${BUILDDIR}${BLFS_ROOT} ]] && mkdir -p ${BUILDDIR}${BLFS_ROOT}
397 cp -r BLFS/* ${BUILDDIR}${BLFS_ROOT}
398 cp -r menu ${BUILDDIR}${BLFS_ROOT}
399 cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT}
400 cp README.BLFS ${BUILDDIR}${BLFS_ROOT}
401 # Clean-up
402 rm -rf ${BUILDDIR}${BLFS_ROOT}/libs/.svn
403 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/.svn
404 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/lxdialog/.svn
405 # Set some harcoded envars to their proper values
406 sed -i 's,blfs-xml,'$BLFS_XML',' ${BUILDDIR}${BLFS_ROOT}/{update_book.sh,libs/book.xsl}
407 sed -i 's,tracking-dir,'$TRACKING_DIR',' ${BUILDDIR}${BLFS_ROOT}/{update_book.sh,gen-makefile.sh}
408 # Copy the dependencies build scripts
409 cp -r $COMMON_DIR/blfs-tool-deps $JHALFSDIR/
410 rm -rf $JHALFSDIR/blfs-tool-deps/.svn
414 get_book
415 echo "${SD_BORDER}${nl_}"
417 # Get the BLFS book, if requested.
418 if [[ "${BLFS_TOOL}" = "y" ]] ; then
419 echo -n "Downloading the BLFS document, $BLFS_BRANCH_ID version... "
420 if [[ ! -d ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} ]] ; then
421 mkdir -p ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML}
422 svn co $SVN_2/BLFS/$BLFS_TREE ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} >>$LOGDIR/$LOG 2>&1
423 else
424 pushd ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} 1> /dev/null
425 svn up >>$LOGDIR/$LOG 2>&1
426 popd 1> /dev/null
428 echo -ne "done\n"
429 echo "${SD_BORDER}${nl_}"
434 # When regeneration the Makefile we need to know also the canonical book version
435 if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
436 case $PROGNAME in
437 clfs | clfs2 | clfs3 )
438 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
440 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
441 esac
444 build_Makefile
446 echo "${SD_BORDER}${nl_}"
448 run_make