source: jhalfs@ 392bd25

2.3 2.3.x 2.4 ablfs ablfs-more legacy new_features trunk
Last change on this file since 392bd25 was d035526, checked in by Manuel Canales Esparcia <manuel@…>, 17 years ago

HLFS: Added support for additional build features.

  • Property mode set to 100755
File size: 14.2 KB
RevLine 
[4da2512]1#!/bin/bash
2# $Id$
3set -e
4
5# VT100 colors
6declare -r BLACK=$'\e[1;30m'
7declare -r DK_GRAY=$'\e[0;30m'
8
9declare -r RED=$'\e[31m'
10declare -r GREEN=$'\e[32m'
11declare -r YELLOW=$'\e[33m'
12declare -r BLUE=$'\e[34m'
13declare -r MAGENTA=$'\e[35m'
14declare -r CYAN=$'\e[36m'
15declare -r WHITE=$'\e[37m'
16
17declare -r OFF=$'\e[0m'
18declare -r BOLD=$'\e[1m'
19declare -r REVERSE=$'\e[7m'
20declare -r HIDDEN=$'\e[8m'
21
22declare -r tab_=$'\t'
23declare -r nl_=$'\n'
24
25declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
26declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
27declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
28
29# bold yellow > < pair
30declare -r R_arrow=$'\e[1;33m>\e[0m'
31declare -r L_arrow=$'\e[1;33m<\e[0m'
32
33
34#>>>>>>>>>>>>>>>ERROR TRAPPING >>>>>>>>>>>>>>>>>>>>
35#-----------------------#
36simple_error() { # Basic error trap.... JUST DIE
37#-----------------------#
38 # If +e then disable text output
[a96109a]39 if [[ "$-" =~ e ]]; then
[4da2512]40 echo -e "\n${RED}ERROR:${GREEN} basic error trapped!${OFF}\n" >&2
41 fi
42}
43
44see_ya() {
[fff1061]45 echo -e "\n${L_arrow}${BOLD}jhalfs-trunk${R_arrow} exit${OFF}\n"
[4da2512]46}
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#####
58set -e
59trap see_ya 0
60trap simple_error ERR
61trap 'echo -e "\n\n${RED}INTERRUPT${OFF} trapped\n" && exit 2' 1 2 3 15 17 18 23
62#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
63
64version="
[3366dfd]65${BOLD} \"jhalfs-trunk\"${OFF} builder tool (development) \$Rev$
[4da2512]66 \$Date$
67
68 Written by George Boudreau and Manuel Canales Esparcia,
69 plus several contributions.
70
71 Based on an idea from Jeremy Huntwork
72
73 This set of files are published under the
74 ${BOLD}Gnu General Public License, Version 2.${OFF}
75"
76
77case $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
83 ;;
84esac
85
86VERBOSITY=1
87
88[[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
89source configuration
90[[ $? > 0 ]] && echo "file:configuration did not load.." && exit 1
91[[ $VERBOSITY > 0 ]] && echo "OK"
92
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.
99RUNMAKE=${RUNMAKE:-n}
100GETPKG=${GETPKG:-n}
101GETKERNEL=${GETKERNEL:-n}
102COMPARE=${COMPARE:-n}
103RUN_FARCE=${RUN_FARCE:-n}
104RUN_ICA=${RUN_ICA:-n}
105BOMB_TEST=${BOMB_TEST:-n}
106STRIP=${STRIP:=n}
107REPORT=${REPORT:=n}
108VIMLANG=${VIMLANG:-n}
109GRSECURITY_HOST=${GRSECURITY_HOST:-n}
[9a536f7]110CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
[a16f769]111REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
[93346ee]112INSTALL_LOG=${INSTALL_LOG:-n}
[486e9a7]113CLEAN=${CLEAN:=n}
[d035526]114SET_SSP=${SET_SSP:=n}
115SET_ASLR=${SET_ASLR:=n}
116SET_PAX=${SET_PAX:=n}
117SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
118SET_WARNINGS=${SET_WARNINGS:=n}
119SET_MISC=${SET_MISC:=n}
120SET_BLOWFISH=${SET_BLOWFISH:=n}
[4da2512]121
[4965fa8]122# Book surces envars
123BRANCH_ID=${BRANCH_ID:=development}
124
125case $BRANCH_ID in
126 development )
127 case $PROGNAME in
[abf2c47]128 clfs2 ) TREE=branches/clfs-sysroot/BOOK ;;
129 clfs3 ) TREE=branches/clfs-embedded/BOOK ;;
[4965fa8]130 *) TREE=trunk/BOOK ;;
131 esac
132 LFSVRS=development
133 ;;
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
140 ;;
141 * )
142 case $PROGNAME in
143 lfs | hlfs )
144 LFSVRS=${BRANCH_ID}
145 TREE=tags/${BRANCH_ID}/BOOK
146 ;;
[2639f65]147 clfs | clfs2 | clfs3)
[4965fa8]148 LFSVRS=${BRANCH_ID}
149 TREE=tags/${BRANCH_ID}
150 ;;
151 esac
152 ;;
153esac
154
[4da2512]155# Set the document location...
156BOOK=${BOOK:=$PROGNAME-$LFSVRS}
157
[4965fa8]158# blfs-tool envars
159BLFS_TOOL=${BLFS_TOOL:-n}
160if [[ "${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 ;;
[0c2d20a]167 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-} ;;
168 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
[4965fa8]169 esac
[045b2dc]170 # Dependencies envars, to can update it more easy.
171 # Tidy and Unzip version are harcoded also in wrt_blfs_tool_targets()
[4965fa8]172 # libxml2
[16938b0]173 LIBXML_PKG="libxml2-2.6.27.tar.gz"
[4965fa8]174 LIBXML_URL="ftp://xmlsoft.org/libxml2/${LIBXML_PKG}"
[16938b0]175 LIBXML_MD5="f5806f5059ef7bd4d3fcf36cf116d1ef"
[4965fa8]176 # libxslt
[16938b0]177 LIBXSLT_PKG="libxslt-1.1.20.tar.gz"
[4965fa8]178 LIBXSLT_URL="ftp://xmlsoft.org/libxslt/${LIBXSLT_PKG}"
[16938b0]179 LIBXSLT_MD5="4ea2dc22a23bf2aa570f868aa86357f8"
[045b2dc]180 # tidy
[16938b0]181 TIDY_PKG="tidy-cvs_20070326.tar.bz2"
182 TIDY_URL="http://anduin.linuxfromscratch.org/files/BLFS/sources/${TIDY_PKG}"
183 TIDY_MD5="468bfaa5cf917a8ecbe7834c13a61376"
[045b2dc]184 # unzip
185 UNZIP_PKG="unzip552.tar.gz"
[16938b0]186 UNZIP_URL="http://downloads.sourceforge.net/infozip/${UNZIP_PKG}"
[045b2dc]187 UNZIP_MD5="9d23919999d6eac9217d1f41472034a9"
[16938b0]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"
[045b2dc]192 # DocBook XML DTD
[16938b0]193 DBXML_PKG="docbook-xml-4.5.zip"
194 DBXML_URL="http://www.docbook.org/xml/4.5/${DBXML_PKG}"
195 DBXML_MD5="03083e288e87a7e829e437358da7ef9e"
[4965fa8]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
[16938b0]201 LINKS_PKG="links-2.1pre23.tar.bz2"
[4965fa8]202 LINKS_URL="http://links.twibright.com/download/${LINKS_PKG}"
[16938b0]203 LINKS_MD5="4a1fb575c133eee821b9a1f8e9220b40"
[4965fa8]204 # sudo
205 SUDO_PKG="sudo-1.6.8p12.tar.gz"
206 SUDO_URL="http://www.courtesan.com/sudo/dist/${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://arcana.linux.it/pub/gpm/${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"
232fi
233
[728955b]234#--- Envars not sourced from configuration
235case $PROGNAME in
236 clfs* ) declare -r SVN="http://svn.cross-lfs.org/svn/repos" ;;
237 * ) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
238esac
239declare -r LOG=000-masterscript.log
240 # Needed to can fetch BLFS book sources when building CLFS
241declare -r SVN_2="svn://svn.linuxfromscratch.org"
242
[4da2512]243# Set true internal variables
244COMMON_DIR="common"
245PACKAGE_DIR=$(echo $PROGNAME | tr [a-z] [A-Z])
246MODULE=$PACKAGE_DIR/master.sh
247
248
249[[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
250source $COMMON_DIR/common-functions
251[[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
252[[ $VERBOSITY > 0 ]] && echo "OK"
253[[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
254source $MODULE
255[[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
256[[ $VERBOSITY > 0 ]] && echo "OK"
257#
258[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
259
260
261#*******************************************************************#
262[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
[d517356]263source $COMMON_DIR/libs/func_check_version.sh
[4da2512]264[[ $? > 0 ]] && echo " function module did not load.." && exit 2
265[[ $VERBOSITY > 0 ]] && echo "OK"
266
267[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
[d517356]268source $COMMON_DIR/libs/func_validate_configs.sh
[4da2512]269[[ $? > 0 ]] && echo " function module did not load.." && exit 2
270[[ $VERBOSITY > 0 ]] && echo "OK"
[9a536f7]271
[fe30c61]272[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
273source $COMMON_DIR/libs/func_custom_pkgs
[9a536f7]274[[ $? > 0 ]] && echo " function module did not load.." && exit 2
275[[ $VERBOSITY > 0 ]] && echo "OK"
276
277
[4da2512]278[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
279
280
281###################################
282### MAIN ###
283###################################
284
[045b2dc]285# Check for build prereequisites.
[4da2512]286echo
[045b2dc]287 check_prerequisites
[4da2512]288echo "${SD_BORDER}${nl_}"
289
290validate_config
291echo "${SD_BORDER}${nl_}"
292echo -n "Are you happy with these settings? yes/no (no): "
293read ANSWER
294if [ x$ANSWER != "xyes" ] ; then
[881c96f]295 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
[4da2512]296 exit 1
297fi
298echo "${nl_}${SD_BORDER}${nl_}"
299
300# Load additional modules or configuration files based on global settings
301# compare module
302if [[ "$COMPARE" = "y" ]]; then
303 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
[d517356]304 source $COMMON_DIR/libs/func_compare.sh
305 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
[4da2512]306 [[ $VERBOSITY > 0 ]] && echo "OK"
307fi
308#
309# optimize module
310if [[ "$OPTIMIZE" != "0" ]]; then
311 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
312 source optimize/optimize_functions
313 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
314 [[ $VERBOSITY > 0 ]] && echo "OK"
315 #
316 # optimize configurations
317 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
318 source optimize/opt_config
319 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
320 [[ $VERBOSITY > 0 ]] && echo "OK"
321 # Validate optimize settings, if required
322 validate_opt_settings
323fi
324#
325
[a16f769]326if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
[4da2512]327
[7b6ecc5]328 # If $BUILDDIR has subdirectories like tools/ or bin/, stop the run
329 # and notify the user about that.
330 if [ -d $BUILDDIR/tools -o -d $BUILDDIR/bin ] && [ -z $CLEAN ] ; then
331 eval "$no_empty_builddir"
[9a536f7]332 fi
[4965fa8]333
[7b6ecc5]334 # If requested, clean the build directory
335 clean_builddir
[4da2512]336
[7b6ecc5]337 if [[ ! -d $JHALFSDIR ]]; then
338 mkdir -p $JHALFSDIR
339 fi
[3e7ceed]340
[7b6ecc5]341 # Create $BUILDDIR/sources even though it could be created by get_sources()
342 if [[ ! -d $BUILDDIR/sources ]]; then
343 mkdir -p $BUILDDIR/sources
344 fi
345 #
346 # Create the log directory
347 if [[ ! -d $LOGDIR ]]; then
348 mkdir $LOGDIR
349 fi
350 >$LOGDIR/$LOG
351 #
[3e7ceed]352 # Copy common helper files
353 cp $COMMON_DIR/{makefile-functions,progress_bar.sh,packages.xsl} $JHALFSDIR/
[7b6ecc5]354 #
[3e7ceed]355 # Fix the XSL book parser
356 sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL}
357 export XSL=$JHALFSDIR/${XSL}
[7b6ecc5]358 #
359
[3e7ceed]360 # Copy urls.xsl, if needed
361 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
[7b6ecc5]362 #
[3e7ceed]363 # Create the test-log directory, if needed
364 [[ "$TEST" != "0" ]] && [[ ! -d $TESTLOGDIR ]] && install -d -m 1777 $TESTLOGDIR
365 #
[93346ee]366 # Create the installed-files directory, if needed
367 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
368 #
[3e7ceed]369 # Prepare report creation, if needed
[7b6ecc5]370 if [[ "$REPORT" = "y" ]]; then
371 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
372 # After being sure that all looks sane, dump the settings to a file
373 # This file will be used to create the REPORT header
374 validate_config > $JHALFSDIR/jhalfs.config
375 fi
376 #
[3e7ceed]377 # Copy optimize files, if needed
378 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
[7b6ecc5]379 #
[3e7ceed]380 # Copy compare files, if needed
381 if [[ "$COMPARE" = "y" ]]; then
382 mkdir -p $JHALFSDIR/extras
383 cp extras/* $JHALFSDIR/extras
384 fi
[7b6ecc5]385 #
386
[3e7ceed]387 # Copy custom tools config files, if requested
388 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
389 echo "Copying custom tool scripts to $JHALFSDIR"
390 mkdir -p $JHALFSDIR/custom-commands
391 cp -f custom/config/* $JHALFSDIR/custom-commands
392 fi
393 #
[7b6ecc5]394 # Install blfs-tool, if requested.
395 if [[ "${BLFS_TOOL}" = "y" ]] ; then
396 # Install the files
397 [[ ! -d ${BUILDDIR}${BLFS_ROOT} ]] && mkdir -p ${BUILDDIR}${BLFS_ROOT}
398 cp -r BLFS/* ${BUILDDIR}${BLFS_ROOT}
399 cp -r menu ${BUILDDIR}${BLFS_ROOT}
400 cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT}
401 cp README.BLFS ${BUILDDIR}${BLFS_ROOT}
402 # Clean-up
403 rm -rf ${BUILDDIR}${BLFS_ROOT}/libs/.svn
404 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/.svn
405 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/lxdialog/.svn
406 # Set some harcoded envars to their proper values
407 sed -i 's,blfs-xml,'$BLFS_XML',' ${BUILDDIR}${BLFS_ROOT}/{update_book.sh,libs/book.xsl}
408 sed -i 's,tracking-dir,'$TRACKING_DIR',' ${BUILDDIR}${BLFS_ROOT}/{update_book.sh,gen-makefile.sh}
409 # Copy the dependencies build scripts
410 cp -r $COMMON_DIR/blfs-tool-deps $JHALFSDIR/
411 rm -rf $JHALFSDIR/blfs-tool-deps/.svn
412 fi
[3e7ceed]413 #
[7b6ecc5]414
415 get_book
[4965fa8]416 echo "${SD_BORDER}${nl_}"
[7b6ecc5]417
418 # Get the BLFS book, if requested.
419 if [[ "${BLFS_TOOL}" = "y" ]] ; then
420 echo -n "Downloading the BLFS document, $BLFS_BRANCH_ID version... "
421 if [[ ! -d ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} ]] ; then
422 mkdir -p ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML}
423 svn co $SVN_2/BLFS/$BLFS_TREE ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} >>$LOGDIR/$LOG 2>&1
424 else
425 pushd ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} 1> /dev/null
426 svn up >>$LOGDIR/$LOG 2>&1
427 popd 1> /dev/null
428 fi
429 echo -ne "done\n"
430 echo "${SD_BORDER}${nl_}"
431 fi
432
[4965fa8]433fi
434
[a16f769]435# When regeneration the Makefile we need to know also the canonical book version
436if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
437 case $PROGNAME in
[2639f65]438 clfs | clfs2 | clfs3 )
[a16f769]439 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
440 *)
441 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
442 esac
443fi
444
[4da2512]445build_Makefile
[3e7ceed]446
[4da2512]447echo "${SD_BORDER}${nl_}"
448
449run_make
Note: See TracBrowser for help on using the repository browser.