source: jhalfs@ 26e6739

2.4 ablfs-more legacy trunk
Last change on this file since 26e6739 was c9598f2, checked in by Pierre Labastie <pierre@…>, 8 years ago

Adaptation for merged LFS books. A few typos with no consequence are corrected too.

  • Property mode set to 100755
File size: 14.0 KB
RevLine 
[4da2512]1#!/bin/bash
2# $Id$
3set -e
[bbcdeab]4# Pass trap handlers to functions
5set -E
[4da2512]6
7# VT100 colors
8declare -r BLACK=$'\e[1;30m'
9declare -r DK_GRAY=$'\e[0;30m'
10
11declare -r RED=$'\e[31m'
12declare -r GREEN=$'\e[32m'
13declare -r YELLOW=$'\e[33m'
14declare -r BLUE=$'\e[34m'
15declare -r MAGENTA=$'\e[35m'
16declare -r CYAN=$'\e[36m'
17declare -r WHITE=$'\e[37m'
18
19declare -r OFF=$'\e[0m'
20declare -r BOLD=$'\e[1m'
21declare -r REVERSE=$'\e[7m'
22declare -r HIDDEN=$'\e[8m'
23
24declare -r tab_=$'\t'
25declare -r nl_=$'\n'
26
27declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
28declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
29declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
30
31# bold yellow > < pair
32declare -r R_arrow=$'\e[1;33m>\e[0m'
33declare -r L_arrow=$'\e[1;33m<\e[0m'
34
35
36#>>>>>>>>>>>>>>>ERROR TRAPPING >>>>>>>>>>>>>>>>>>>>
37#-----------------------#
38simple_error() { # Basic error trap.... JUST DIE
39#-----------------------#
40 # If +e then disable text output
[a96109a]41 if [[ "$-" =~ e ]]; then
[bbcdeab]42 LASTLINE="$1"
43 LASTERR="$2"
44 LASTFUNC="$3"
45 LASTSOURCE="$4"
46# echo -e "\n${RED}ERROR:${GREEN} basic error trapped!${OFF}\n" >&2
47 echo -e "\n${RED}ERROR:${GREEN} Error $LASTERR at $LASTSOURCE line ${LASTLINE}!${OFF}\n" >&2
[4da2512]48 fi
[bbcdeab]49 exit $LASTERR
[4da2512]50}
51
52see_ya() {
[401aac8]53 echo -e "\n${L_arrow}${BOLD}jhalfs-trunk${R_arrow} exit${OFF}\n"
[4da2512]54}
55##### Simple error TRAPS
56# ctrl-c SIGINT
57# ctrl-y
58# ctrl-z SIGTSTP
59# SIGHUP 1 HANGUP
60# SIGINT 2 INTRERRUPT FROM KEYBOARD Ctrl-C
61# SIGQUIT 3
62# SIGKILL 9 KILL
63# SIGTERM 15 TERMINATION
64# SIGSTOP 17,18,23 STOP THE PROCESS
65#####
66set -e
67trap see_ya 0
[bbcdeab]68trap 'simple_error "${LINENO}" "$?" "${FUNCNAME}" "${BASH_SOURCE}"' ERR
[4da2512]69trap 'echo -e "\n\n${RED}INTERRUPT${OFF} trapped\n" && exit 2' 1 2 3 15 17 18 23
70#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
71
72version="
[401aac8]73${BOLD} \"jhalfs-trunk\"${OFF} builder tool (development) \$Rev$
[4da2512]74 \$Date$
75
76 Written by George Boudreau and Manuel Canales Esparcia,
77 plus several contributions.
78
79 Based on an idea from Jeremy Huntwork
80
81 This set of files are published under the
82 ${BOLD}Gnu General Public License, Version 2.${OFF}
83"
84
85case $1 in
86 -v ) echo "$version" && exit 1 ;;
87 run ) : ;;
88 * )
89 echo "${nl_}${tab_}${BOLD}${RED}This script cannot be called directly: EXITING ${OFF}${nl_}"
90 exit 1
91 ;;
92esac
93
[65c998b]94# If the user has not saved his configuration file, let's ask
95# if he or she really wants to run this stuff
96if [ $(ls -l --time-style='+%Y%m%d%H%M%S' configuration.old | cut -d' ' -f 6) \
97 -ge $(ls -l --time-style='+%Y%m%d%H%M%S' configuration | cut -d' ' -f 6) ]
98 then echo -n "Do you want to run jhalfs? yes/no (yes): "
99 read ANSWER
100 if [ x${ANSWER:0:1} = "xn" -o x${ANSWER:0:1} = "xN" ] ; then
101 echo "${nl_}Exiting gracefully.${nl_}"
102 exit
103 fi
104fi
105
106# Change this to 0 to suppress almost all messages
[4da2512]107VERBOSITY=1
108
109[[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
110source configuration
[7072e1f]111[[ $? > 0 ]] && echo "file: configuration did not load.." && exit 1
[4da2512]112[[ $VERBOSITY > 0 ]] && echo "OK"
113
114# These are boolean vars generated from Config.in.
[7072e1f]115# ISSUE: If a boolean parameter is not set to y(es) there
116# is no variable defined by the menu app. This can
117# cause a headache if you are not aware.
118# The following variables MUST exist. If they don't, the
119# default value is n(o).
[4da2512]120RUNMAKE=${RUNMAKE:-n}
121GETPKG=${GETPKG:-n}
122COMPARE=${COMPARE:-n}
123RUN_FARCE=${RUN_FARCE:-n}
124RUN_ICA=${RUN_ICA:-n}
[7072e1f]125PKGMNGT=${PKGMNGT:-n}
[4da2512]126BOMB_TEST=${BOMB_TEST:-n}
127STRIP=${STRIP:=n}
128REPORT=${REPORT:=n}
129VIMLANG=${VIMLANG:-n}
[b339c94]130FULL_LOCALE=${FULL_LOCALE:-n}
[4da2512]131GRSECURITY_HOST=${GRSECURITY_HOST:-n}
[9a536f7]132CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
[a16f769]133REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
[93346ee]134INSTALL_LOG=${INSTALL_LOG:-n}
[486e9a7]135CLEAN=${CLEAN:=n}
[d035526]136SET_SSP=${SET_SSP:=n}
137SET_ASLR=${SET_ASLR:=n}
138SET_PAX=${SET_PAX:=n}
139SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
140SET_WARNINGS=${SET_WARNINGS:=n}
141SET_MISC=${SET_MISC:=n}
142SET_BLOWFISH=${SET_BLOWFISH:=n}
[4da2512]143
[75d6d1c]144if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
145 NO_PROGRESS="#"
146fi
147
148
[38ae01f]149# Sanity check on the location of $BUILDDIR / $JHALFSDIR
150CWD=$(cd `dirname $0` && pwd)
151if [[ $JHALFSDIR == $CWD ]]; then
152 echo " The jhalfs source directory conflicts with the jhalfs build directory."
153 echo " Please move the source directory or change the build directory."
154 exit 2
155fi
156
[0873ccc]157# Book sources envars
[4965fa8]158BRANCH_ID=${BRANCH_ID:=development}
159
160case $BRANCH_ID in
161 development )
162 case $PROGNAME in
[92b7cb8]163 clfs* ) TREE="" ;;
[c4ad7bf]164 * ) TREE=trunk/BOOK ;;
[4965fa8]165 esac
166 LFSVRS=development
167 ;;
168 *EDIT* ) echo " You forgot to set the branch or stable book version."
169 echo " Please rerun make and fix the configuration."
170 exit 2 ;;
171 branch-* )
[c4ad7bf]172 case $PROGNAME in
173 lfs )
174 LFSVRS=${BRANCH_ID}
[bb2862d]175 TREE=branches/${BRANCH_ID#branch-}
176 if [ ${BRANCH_ID#branch-} = 6 ]; then
177 TREE=${TREE}/BOOK
178 fi
[c4ad7bf]179 ;;
180 clfs* )
181 LFSVRS=${BRANCH_ID}
182 TREE=${BRANCH_ID#branch-}
183 ;;
184 esac
[4965fa8]185 ;;
186 * )
187 case $PROGNAME in
[e650dc7]188 lfs )
189 LFSVRS=${BRANCH_ID}
190 TREE=tags/${BRANCH_ID}
191 if (( ${BRANCH_ID:0:1} < 7 )) ; then
192 TREE=${TREE}/BOOK
193 fi
194 ;;
195 hlfs )
[4965fa8]196 LFSVRS=${BRANCH_ID}
197 TREE=tags/${BRANCH_ID}/BOOK
198 ;;
[92b7cb8]199 clfs* )
[4965fa8]200 LFSVRS=${BRANCH_ID}
[34d1b6a]201 TREE=clfs-${BRANCH_ID}
[4965fa8]202 ;;
[92b7cb8]203 * )
[4965fa8]204 esac
205 ;;
206esac
207
[4da2512]208# Set the document location...
[1cf621b]209BOOK=${BOOK:=$JHALFSDIR/$PROGNAME-$LFSVRS}
[4da2512]210
[4965fa8]211
[728955b]212#--- Envars not sourced from configuration
213case $PROGNAME in
[4195a40]214 clfs ) declare -r GIT="git://git.clfs.org/cross-lfs" ;;
215 clfs2 ) declare -r GIT="git://git.clfs.org/clfs-sysroot" ;;
216 clfs3 ) declare -r GIT="git://git.clfs.org/clfs-embedded" ;;
[92b7cb8]217 *) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
[728955b]218esac
219declare -r LOG=000-masterscript.log
[7072e1f]220 # Needed for fetching BLFS book sources when building CLFS
[728955b]221declare -r SVN_2="svn://svn.linuxfromscratch.org"
222
[4da2512]223# Set true internal variables
224COMMON_DIR="common"
[52b0d10]225PACKAGE_DIR=$(echo $PROGNAME | tr '[a-z]' '[A-Z]')
[4da2512]226MODULE=$PACKAGE_DIR/master.sh
[7072e1f]227PKGMNGTDIR="pkgmngt"
228# The name packageManager.xml is hardcoded in *.xsl, so no variable.
[4da2512]229
230[[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
231source $COMMON_DIR/common-functions
232[[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
233[[ $VERBOSITY > 0 ]] && echo "OK"
234[[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
235source $MODULE
236[[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
237[[ $VERBOSITY > 0 ]] && echo "OK"
238#
239[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
240
241
242#*******************************************************************#
243[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
[d517356]244source $COMMON_DIR/libs/func_check_version.sh
[4da2512]245[[ $? > 0 ]] && echo " function module did not load.." && exit 2
246[[ $VERBOSITY > 0 ]] && echo "OK"
247
248[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
[d517356]249source $COMMON_DIR/libs/func_validate_configs.sh
[4da2512]250[[ $? > 0 ]] && echo " function module did not load.." && exit 2
251[[ $VERBOSITY > 0 ]] && echo "OK"
[9a536f7]252
[fe30c61]253[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
254source $COMMON_DIR/libs/func_custom_pkgs
[9a536f7]255[[ $? > 0 ]] && echo " function module did not load.." && exit 2
256[[ $VERBOSITY > 0 ]] && echo "OK"
257
258
[6ed3dd7]259[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
260
261[[ $VERBOSITY > 0 ]] && echo Checking tools required for jhalfs
262check_alfs_tools
263
[4da2512]264[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
265
[e576789]266# blfs-tool envars
267BLFS_TOOL=${BLFS_TOOL:-n}
268if [[ "${BLFS_TOOL}" = "y" ]] ; then
[6ed3dd7]269 [[ $VERBOSITY > 0 ]] && echo Checking supplementary tools for installing BLFS
270 check_blfs_tools
271 [[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
[854854e]272 BLFS_SVN=${BLFS_SVN:-n}
273 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
274 BLFS_BRANCH=${BLFS_BRANCH:-n}
275 if [[ "${BLFS_SVN}" = "y" ]]; then
276 BLFS_BRANCH_ID=development
277 BLFS_TREE=trunk/BOOK
278 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
279 [[ -d "$BLFS_WC_LOCATION" ]] &&
280 [[ -d "$BLFS_WC_LOCATION/postlfs" ]] || {
281 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
282 echo " Please rerun make and fix the configuration."
283 exit 2
284 }
[2c4be7f]285 BLFS_TREE=$(cd $BLFS_WC_LOCATION; svn info | grep '^URL' | sed 's@.*BLFS/@@')
[854854e]286 BLFS_BRANCH_ID=$(echo $BLFS_TREE | sed -e 's@trunk/BOOK@development@' \
287 -e 's@branches/@branch-@' \
288 -e 's@tags/@@' \
289 -e 's@/BOOK@@')
[0ba80be]290 elif [[ "${BLFS_BRANCH}" = "y" ]] ; then
[854854e]291 case $BLFS_BRANCH_ID in
292 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
293 echo " Please rerun make and fix the configuration."
294 exit 2 ;;
295 branch-systemd ) BLFS_TREE=branches/systemd ;;
296 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-}/BOOK ;;
[6c97d02]297 6.2* | 7.* ) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
[854854e]298 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID}/BOOK ;;
299 esac
300 fi
[e576789]301 [[ $VERBOSITY > 0 ]] && echo -n "Loading blfs tools installation function..."
302 source $COMMON_DIR/libs/func_install_blfs
303 [[ $? > 0 ]] && echo "function module did not load.." && exit 1
304 [[ $VERBOSITY > 0 ]] && echo "OK"
305fi
[4da2512]306
307###################################
308### MAIN ###
309###################################
310
311
312validate_config
313echo "${SD_BORDER}${nl_}"
314echo -n "Are you happy with these settings? yes/no (no): "
315read ANSWER
316if [ x$ANSWER != "xyes" ] ; then
[881c96f]317 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
[d023a35]318 exit
[4da2512]319fi
320echo "${nl_}${SD_BORDER}${nl_}"
321
322# Load additional modules or configuration files based on global settings
323# compare module
324if [[ "$COMPARE" = "y" ]]; then
325 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
[d517356]326 source $COMMON_DIR/libs/func_compare.sh
327 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
[4da2512]328 [[ $VERBOSITY > 0 ]] && echo "OK"
329fi
330#
331# optimize module
332if [[ "$OPTIMIZE" != "0" ]]; then
333 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
334 source optimize/optimize_functions
335 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
336 [[ $VERBOSITY > 0 ]] && echo "OK"
337 #
338 # optimize configurations
339 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
340 source optimize/opt_config
341 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
342 [[ $VERBOSITY > 0 ]] && echo "OK"
[854854e]343 # The number of parallel jobs is taken from configuration now
344 MAKEFLAGS="-j${N_PARALLEL}"
[4da2512]345 # Validate optimize settings, if required
346 validate_opt_settings
347fi
348#
349
[a16f769]350if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
[4da2512]351
[7b6ecc5]352 # If requested, clean the build directory
353 clean_builddir
[4da2512]354
[7b6ecc5]355 if [[ ! -d $JHALFSDIR ]]; then
356 mkdir -p $JHALFSDIR
357 fi
[3e7ceed]358
[7b6ecc5]359 # Create $BUILDDIR/sources even though it could be created by get_sources()
360 if [[ ! -d $BUILDDIR/sources ]]; then
361 mkdir -p $BUILDDIR/sources
362 fi
363 #
364 # Create the log directory
365 if [[ ! -d $LOGDIR ]]; then
366 mkdir $LOGDIR
367 fi
368 >$LOGDIR/$LOG
369 #
[3e7ceed]370 # Copy common helper files
[d68eb1b]371 cp $COMMON_DIR/{makefile-functions,progress_bar.sh} $JHALFSDIR/
372 # Copy needed stylesheets
373 cp $COMMON_DIR/{packages.xsl,chroot.xsl} $JHALFSDIR/
[7b6ecc5]374 #
[3e7ceed]375 # Fix the XSL book parser
[92b7cb8]376 case $PROGNAME in
377 clfs* ) sed 's,FAKEDIR,'${BOOK}/BOOK',' ${PACKAGE_DIR}/${XSL} > $JHALFSDIR/${XSL} ;;
378 lfs | hlfs ) sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL} ;;
379 * ) ;;
380 esac
[3e7ceed]381 export XSL=$JHALFSDIR/${XSL}
[7b6ecc5]382 #
383
[7072e1f]384 # Copy packageManager.xml, if needed
385 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] &&
386 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/ &&
387 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
388 #
[3e7ceed]389 # Copy urls.xsl, if needed
390 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
[7b6ecc5]391 #
[3e7ceed]392 # Create the test-log directory, if needed
393 [[ "$TEST" != "0" ]] && [[ ! -d $TESTLOGDIR ]] && install -d -m 1777 $TESTLOGDIR
394 #
[93346ee]395 # Create the installed-files directory, if needed
396 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
397 #
[3e7ceed]398 # Prepare report creation, if needed
[7b6ecc5]399 if [[ "$REPORT" = "y" ]]; then
400 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
[7072e1f]401 # After making sure that all looks sane, dump the settings to a file
[7b6ecc5]402 # This file will be used to create the REPORT header
403 validate_config > $JHALFSDIR/jhalfs.config
404 fi
405 #
[3e7ceed]406 # Copy optimize files, if needed
407 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
[7b6ecc5]408 #
[3e7ceed]409 # Copy compare files, if needed
410 if [[ "$COMPARE" = "y" ]]; then
411 mkdir -p $JHALFSDIR/extras
412 cp extras/* $JHALFSDIR/extras
413 fi
[7b6ecc5]414 #
[3e7ceed]415 # Copy custom tools config files, if requested
416 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
417 echo "Copying custom tool scripts to $JHALFSDIR"
418 mkdir -p $JHALFSDIR/custom-commands
419 cp -f custom/config/* $JHALFSDIR/custom-commands
420 fi
421 #
[7b6ecc5]422 # Install blfs-tool, if requested.
423 if [[ "${BLFS_TOOL}" = "y" ]] ; then
[6ed3dd7]424 echo Installing BLFS book and tools
[e576789]425 install_blfs_tools 2>&1 | tee -a $LOGDIR/$LOG
[bbcdeab]426 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
[7b6ecc5]427 fi
[3e7ceed]428 #
[7b6ecc5]429
[1cf621b]430# Download or updates the book source
[7b6ecc5]431 get_book
[1cf621b]432 extract_commands
[4965fa8]433 echo "${SD_BORDER}${nl_}"
[7b6ecc5]434
[4965fa8]435fi
436
[e576789]437# When regenerating the Makefile, we need to know also the
438# canonical book version
[a16f769]439if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
440 case $PROGNAME in
[92b7cb8]441 clfs* )
[a16f769]442 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
[c9598f2]443 lfs)
444 if [[ "$INITSYS" = "sysv" ]] ; then
445 VERSION=$(grep 'ENTITY version ' $JHALFSDIR/$BOOK/general.ent| cut -d\" -f2)
446 else
447 VERSION=$(grep 'ENTITY versiond' $JHALFSDIR/$BOOK/general.ent| cut -d\" -f2)
448 fi
449 ;;
[a16f769]450 *)
[c9598f2]451 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
[a16f769]452 esac
453fi
454
[4da2512]455build_Makefile
[3e7ceed]456
[4da2512]457echo "${SD_BORDER}${nl_}"
458
[1cf621b]459# Check for build prerequisites.
460 echo
461 cd $CWD
462 check_prerequisites
463 echo "${SD_BORDER}${nl_}"
464# All is well, run the build (if requested)
[4da2512]465run_make
Note: See TracBrowser for help on using the repository browser.