source: jhalfs@ c3b96a9

2.4 ablfs-more legacy new_features trunk
Last change on this file since c3b96a9 was d68eb1b, checked in by Pierre Labastie <pierre@…>, 11 years ago

Major change to th scripts layout:

  • Do not put the chroot commands in $PROGNAME-commands, but rather in a separate directory chroot-scripts
  • Use the commands in the chroot-scripts directory to generate the CHROOT variables in Makefile
  • The commands are extracted to $PROGNAME-commands only if they do not have role="nodump attribute and they do not begin with "chroot" (for compatibility with previous books where chroot commands did not have the role="nodump" attribute.
  • Property mode set to 100755
File size: 13.6 KB
Line 
1#!/bin/bash
2# $Id$
3set -e
4# Pass trap handlers to functions
5set -E
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
41 if [[ "$-" =~ e ]]; then
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
48 fi
49 exit $LASTERR
50}
51
52see_ya() {
53 echo -e "\n${L_arrow}${BOLD}jhalfs-trunk${R_arrow} exit${OFF}\n"
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
68trap 'simple_error "${LINENO}" "$?" "${FUNCNAME}" "${BASH_SOURCE}"' ERR
69trap 'echo -e "\n\n${RED}INTERRUPT${OFF} trapped\n" && exit 2' 1 2 3 15 17 18 23
70#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
71
72version="
73${BOLD} \"jhalfs-trunk\"${OFF} builder tool (development) \$Rev$
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
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
107VERBOSITY=1
108
109[[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
110source configuration
111[[ $? > 0 ]] && echo "file: configuration did not load.." && exit 1
112[[ $VERBOSITY > 0 ]] && echo "OK"
113
114# These are boolean vars generated from Config.in.
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).
120RUNMAKE=${RUNMAKE:-n}
121GETPKG=${GETPKG:-n}
122COMPARE=${COMPARE:-n}
123RUN_FARCE=${RUN_FARCE:-n}
124RUN_ICA=${RUN_ICA:-n}
125PKGMNGT=${PKGMNGT:-n}
126BOMB_TEST=${BOMB_TEST:-n}
127STRIP=${STRIP:=n}
128REPORT=${REPORT:=n}
129VIMLANG=${VIMLANG:-n}
130FULL_LOCALE=${FULL_LOCALE:-n}
131GRSECURITY_HOST=${GRSECURITY_HOST:-n}
132CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
133REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
134INSTALL_LOG=${INSTALL_LOG:-n}
135CLEAN=${CLEAN:=n}
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}
143
144if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
145 NO_PROGRESS="#"
146fi
147
148
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
157# Book sources envars
158BRANCH_ID=${BRANCH_ID:=development}
159
160case $BRANCH_ID in
161 development )
162 case $PROGNAME in
163 clfs* ) TREE="" ;;
164 *) TREE=trunk/BOOK ;;
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-* )
172 LFSVRS=${BRANCH_ID}
173 TREE=branches/${BRANCH_ID#branch-}/BOOK
174 ;;
175 * )
176 case $PROGNAME in
177 lfs )
178 LFSVRS=${BRANCH_ID}
179 TREE=tags/${BRANCH_ID}
180 if (( ${BRANCH_ID:0:1} < 7 )) ; then
181 TREE=${TREE}/BOOK
182 fi
183 ;;
184 hlfs )
185 LFSVRS=${BRANCH_ID}
186 TREE=tags/${BRANCH_ID}/BOOK
187 ;;
188 clfs* )
189 LFSVRS=${BRANCH_ID}
190 TREE=clfs-${BRANCH_ID}
191 ;;
192 * )
193 esac
194 ;;
195esac
196
197# Set the document location...
198BOOK=${BOOK:=$JHALFSDIR/$PROGNAME-$LFSVRS}
199
200
201#--- Envars not sourced from configuration
202case $PROGNAME in
203 clfs ) declare -r GIT="git://git.cross-lfs.org/cross-lfs" ;;
204 clfs2 ) declare -r GIT="git://git.cross-lfs.org/clfs-sysroot" ;;
205 clfs3 ) declare -r GIT="git://git.cross-lfs.org/clfs-embedded" ;;
206 *) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
207esac
208declare -r LOG=000-masterscript.log
209 # Needed for fetching BLFS book sources when building CLFS
210declare -r SVN_2="svn://svn.linuxfromscratch.org"
211
212# Set true internal variables
213COMMON_DIR="common"
214PACKAGE_DIR=$(echo $PROGNAME | tr '[a-z]' '[A-Z]')
215MODULE=$PACKAGE_DIR/master.sh
216PKGMNGTDIR="pkgmngt"
217# The name packageManager.xml is hardcoded in *.xsl, so no variable.
218
219[[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
220source $COMMON_DIR/common-functions
221[[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
222[[ $VERBOSITY > 0 ]] && echo "OK"
223[[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
224source $MODULE
225[[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
226[[ $VERBOSITY > 0 ]] && echo "OK"
227#
228[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
229
230
231#*******************************************************************#
232[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
233source $COMMON_DIR/libs/func_check_version.sh
234[[ $? > 0 ]] && echo " function module did not load.." && exit 2
235[[ $VERBOSITY > 0 ]] && echo "OK"
236
237[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
238source $COMMON_DIR/libs/func_validate_configs.sh
239[[ $? > 0 ]] && echo " function module did not load.." && exit 2
240[[ $VERBOSITY > 0 ]] && echo "OK"
241
242[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
243source $COMMON_DIR/libs/func_custom_pkgs
244[[ $? > 0 ]] && echo " function module did not load.." && exit 2
245[[ $VERBOSITY > 0 ]] && echo "OK"
246
247
248[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
249
250[[ $VERBOSITY > 0 ]] && echo Checking tools required for jhalfs
251check_alfs_tools
252
253[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
254
255# blfs-tool envars
256BLFS_TOOL=${BLFS_TOOL:-n}
257if [[ "${BLFS_TOOL}" = "y" ]] ; then
258 [[ $VERBOSITY > 0 ]] && echo Checking supplementary tools for installing BLFS
259 check_blfs_tools
260 [[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
261 BLFS_SVN=${BLFS_SVN:-n}
262 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
263 BLFS_BRANCH=${BLFS_BRANCH:-n}
264 if [[ "${BLFS_SVN}" = "y" ]]; then
265 BLFS_BRANCH_ID=development
266 BLFS_TREE=trunk/BOOK
267 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
268 [[ -d "$BLFS_WC_LOCATION" ]] &&
269 [[ -d "$BLFS_WC_LOCATION/postlfs" ]] || {
270 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
271 echo " Please rerun make and fix the configuration."
272 exit 2
273 }
274 BLFS_TREE=$(cd $BLFS_WC_LOCATION; svn info | grep URL | sed 's@.*BLFS/@@')
275 BLFS_BRANCH_ID=$(echo $BLFS_TREE | sed -e 's@trunk/BOOK@development@' \
276 -e 's@branches/@branch-@' \
277 -e 's@tags/@@' \
278 -e 's@/BOOK@@')
279 elif [[ "${BLFS_BRANCH}" = "y" ]] ; then
280 case $BLFS_BRANCH_ID in
281 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
282 echo " Please rerun make and fix the configuration."
283 exit 2 ;;
284 branch-systemd ) BLFS_TREE=branches/systemd ;;
285 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-}/BOOK ;;
286 6.2* | 7.4* ) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
287 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID}/BOOK ;;
288 esac
289 fi
290 [[ $VERBOSITY > 0 ]] && echo -n "Loading blfs tools installation function..."
291 source $COMMON_DIR/libs/func_install_blfs
292 [[ $? > 0 ]] && echo "function module did not load.." && exit 1
293 [[ $VERBOSITY > 0 ]] && echo "OK"
294fi
295
296###################################
297### MAIN ###
298###################################
299
300
301validate_config
302echo "${SD_BORDER}${nl_}"
303echo -n "Are you happy with these settings? yes/no (no): "
304read ANSWER
305if [ x$ANSWER != "xyes" ] ; then
306 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
307 exit
308fi
309echo "${nl_}${SD_BORDER}${nl_}"
310
311# Load additional modules or configuration files based on global settings
312# compare module
313if [[ "$COMPARE" = "y" ]]; then
314 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
315 source $COMMON_DIR/libs/func_compare.sh
316 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
317 [[ $VERBOSITY > 0 ]] && echo "OK"
318fi
319#
320# optimize module
321if [[ "$OPTIMIZE" != "0" ]]; then
322 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
323 source optimize/optimize_functions
324 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
325 [[ $VERBOSITY > 0 ]] && echo "OK"
326 #
327 # optimize configurations
328 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
329 source optimize/opt_config
330 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
331 [[ $VERBOSITY > 0 ]] && echo "OK"
332 # The number of parallel jobs is taken from configuration now
333 MAKEFLAGS="-j${N_PARALLEL}"
334 # Validate optimize settings, if required
335 validate_opt_settings
336fi
337#
338
339if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
340
341 # If requested, clean the build directory
342 clean_builddir
343
344 if [[ ! -d $JHALFSDIR ]]; then
345 mkdir -p $JHALFSDIR
346 fi
347
348 # Create $BUILDDIR/sources even though it could be created by get_sources()
349 if [[ ! -d $BUILDDIR/sources ]]; then
350 mkdir -p $BUILDDIR/sources
351 fi
352 #
353 # Create the log directory
354 if [[ ! -d $LOGDIR ]]; then
355 mkdir $LOGDIR
356 fi
357 >$LOGDIR/$LOG
358 #
359 # Copy common helper files
360 cp $COMMON_DIR/{makefile-functions,progress_bar.sh} $JHALFSDIR/
361 # Copy needed stylesheets
362 cp $COMMON_DIR/{packages.xsl,chroot.xsl} $JHALFSDIR/
363 #
364 # Fix the XSL book parser
365 case $PROGNAME in
366 clfs* ) sed 's,FAKEDIR,'${BOOK}/BOOK',' ${PACKAGE_DIR}/${XSL} > $JHALFSDIR/${XSL} ;;
367 lfs | hlfs ) sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL} ;;
368 * ) ;;
369 esac
370 export XSL=$JHALFSDIR/${XSL}
371 #
372
373 # Copy packageManager.xml, if needed
374 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] &&
375 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/ &&
376 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
377 #
378 # Copy urls.xsl, if needed
379 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
380 #
381 # Create the test-log directory, if needed
382 [[ "$TEST" != "0" ]] && [[ ! -d $TESTLOGDIR ]] && install -d -m 1777 $TESTLOGDIR
383 #
384 # Create the installed-files directory, if needed
385 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
386 #
387 # Prepare report creation, if needed
388 if [[ "$REPORT" = "y" ]]; then
389 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
390 # After making sure that all looks sane, dump the settings to a file
391 # This file will be used to create the REPORT header
392 validate_config > $JHALFSDIR/jhalfs.config
393 fi
394 #
395 # Copy optimize files, if needed
396 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
397 #
398 # Copy compare files, if needed
399 if [[ "$COMPARE" = "y" ]]; then
400 mkdir -p $JHALFSDIR/extras
401 cp extras/* $JHALFSDIR/extras
402 fi
403 #
404 # Copy custom tools config files, if requested
405 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
406 echo "Copying custom tool scripts to $JHALFSDIR"
407 mkdir -p $JHALFSDIR/custom-commands
408 cp -f custom/config/* $JHALFSDIR/custom-commands
409 fi
410 #
411 # Install blfs-tool, if requested.
412 if [[ "${BLFS_TOOL}" = "y" ]] ; then
413 echo Installing BLFS book and tools
414 install_blfs_tools 2>&1 | tee -a $LOGDIR/$LOG
415 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
416 fi
417 #
418
419# Download or updates the book source
420 get_book
421 extract_commands
422 echo "${SD_BORDER}${nl_}"
423
424fi
425
426# When regenerating the Makefile, we need to know also the
427# canonical book version
428if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
429 case $PROGNAME in
430 clfs* )
431 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
432 *)
433 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
434 esac
435fi
436
437build_Makefile
438
439echo "${SD_BORDER}${nl_}"
440
441# Check for build prerequisites.
442 echo
443 cd $CWD
444 check_prerequisites
445 echo "${SD_BORDER}${nl_}"
446# All is well, run the build (if requested)
447run_make
Note: See TracBrowser for help on using the repository browser.