source: jhalfs@ 854854e

2.4 ablfs-more legacy new_features trunk
Last change on this file since 854854e was 854854e, checked in by Pierre Labastie <pierre@…>, 11 years ago
  • Make the number of parallel jobs configurable in the menuconfig interface
  • Allow choosing a working copy of the blfs book
  • Property mode set to 100755
File size: 13.3 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# blfs-tool envars
251BLFS_TOOL=${BLFS_TOOL:-n}
252if [[ "${BLFS_TOOL}" = "y" ]] ; then
253 BLFS_SVN=${BLFS_SVN:-n}
254 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
255 BLFS_BRANCH=${BLFS_BRANCH:-n}
256 if [[ "${BLFS_SVN}" = "y" ]]; then
257 BLFS_BRANCH_ID=development
258 BLFS_TREE=trunk/BOOK
259 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
260 [[ -d "$BLFS_WC_LOCATION" ]] &&
261 [[ -d "$BLFS_WC_LOCATION/postlfs" ]] || {
262 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
263 echo " Please rerun make and fix the configuration."
264 exit 2
265 }
266 BLFS_TREE=$(cd $BLFS_WC_LOCATION; svn info | grep URL | sed 's@.*BLFS/@@')
267 BLFS_BRANCH_ID=$(echo $BLFS_TREE | sed -e 's@trunk/BOOK@development@' \
268 -e 's@branches/@branch-@' \
269 -e 's@tags/@@' \
270 -e 's@/BOOK@@')
271 elif [["${BLFS_BRANCH}" = "y" ]] ; then
272 case $BLFS_BRANCH_ID in
273 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
274 echo " Please rerun make and fix the configuration."
275 exit 2 ;;
276 branch-systemd ) BLFS_TREE=branches/systemd ;;
277 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-}/BOOK ;;
278 6.2* | 7.4* ) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
279 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID}/BOOK ;;
280 esac
281 fi
282 [[ $VERBOSITY > 0 ]] && echo -n "Loading blfs tools installation function..."
283 source $COMMON_DIR/libs/func_install_blfs
284 [[ $? > 0 ]] && echo "function module did not load.." && exit 1
285 [[ $VERBOSITY > 0 ]] && echo "OK"
286fi
287
288###################################
289### MAIN ###
290###################################
291
292
293validate_config
294echo "${SD_BORDER}${nl_}"
295echo -n "Are you happy with these settings? yes/no (no): "
296read ANSWER
297if [ x$ANSWER != "xyes" ] ; then
298 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
299 exit
300fi
301echo "${nl_}${SD_BORDER}${nl_}"
302
303# Load additional modules or configuration files based on global settings
304# compare module
305if [[ "$COMPARE" = "y" ]]; then
306 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
307 source $COMMON_DIR/libs/func_compare.sh
308 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
309 [[ $VERBOSITY > 0 ]] && echo "OK"
310fi
311#
312# optimize module
313if [[ "$OPTIMIZE" != "0" ]]; then
314 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
315 source optimize/optimize_functions
316 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
317 [[ $VERBOSITY > 0 ]] && echo "OK"
318 #
319 # optimize configurations
320 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
321 source optimize/opt_config
322 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
323 [[ $VERBOSITY > 0 ]] && echo "OK"
324 # The number of parallel jobs is taken from configuration now
325 MAKEFLAGS="-j${N_PARALLEL}"
326 # Validate optimize settings, if required
327 validate_opt_settings
328fi
329#
330
331if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
332
333 # If requested, clean the build directory
334 clean_builddir
335
336 if [[ ! -d $JHALFSDIR ]]; then
337 mkdir -p $JHALFSDIR
338 fi
339
340 # Create $BUILDDIR/sources even though it could be created by get_sources()
341 if [[ ! -d $BUILDDIR/sources ]]; then
342 mkdir -p $BUILDDIR/sources
343 fi
344 #
345 # Create the log directory
346 if [[ ! -d $LOGDIR ]]; then
347 mkdir $LOGDIR
348 fi
349 >$LOGDIR/$LOG
350 #
351 # Copy common helper files
352 cp $COMMON_DIR/{makefile-functions,progress_bar.sh,packages.xsl} $JHALFSDIR/
353 #
354 # Fix the XSL book parser
355 case $PROGNAME in
356 clfs* ) sed 's,FAKEDIR,'${BOOK}/BOOK',' ${PACKAGE_DIR}/${XSL} > $JHALFSDIR/${XSL} ;;
357 lfs | hlfs ) sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL} ;;
358 * ) ;;
359 esac
360 export XSL=$JHALFSDIR/${XSL}
361 #
362
363 # Copy packageManager.xml, if needed
364 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] &&
365 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/ &&
366 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
367 #
368 # Copy urls.xsl, if needed
369 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
370 #
371 # Create the test-log directory, if needed
372 [[ "$TEST" != "0" ]] && [[ ! -d $TESTLOGDIR ]] && install -d -m 1777 $TESTLOGDIR
373 #
374 # Create the installed-files directory, if needed
375 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
376 #
377 # Prepare report creation, if needed
378 if [[ "$REPORT" = "y" ]]; then
379 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
380 # After making sure that all looks sane, dump the settings to a file
381 # This file will be used to create the REPORT header
382 validate_config > $JHALFSDIR/jhalfs.config
383 fi
384 #
385 # Copy optimize files, if needed
386 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
387 #
388 # Copy compare files, if needed
389 if [[ "$COMPARE" = "y" ]]; then
390 mkdir -p $JHALFSDIR/extras
391 cp extras/* $JHALFSDIR/extras
392 fi
393 #
394 # Copy custom tools config files, if requested
395 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
396 echo "Copying custom tool scripts to $JHALFSDIR"
397 mkdir -p $JHALFSDIR/custom-commands
398 cp -f custom/config/* $JHALFSDIR/custom-commands
399 fi
400 #
401 # Install blfs-tool, if requested.
402 if [[ "${BLFS_TOOL}" = "y" ]] ; then
403 echo Downloading and validating the BLFS book
404 echo '(may take some time...)'
405 install_blfs_tools 2>&1 | tee -a $LOGDIR/$LOG
406 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
407 fi
408 #
409
410# Download or updates the book source
411 get_book
412 extract_commands
413 echo "${SD_BORDER}${nl_}"
414
415fi
416
417# When regenerating the Makefile, we need to know also the
418# canonical book version
419if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
420 case $PROGNAME in
421 clfs* )
422 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
423 *)
424 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
425 esac
426fi
427
428build_Makefile
429
430echo "${SD_BORDER}${nl_}"
431
432# Check for build prerequisites.
433 echo
434 cd $CWD
435 check_prerequisites
436 echo "${SD_BORDER}${nl_}"
437# All is well, run the build (if requested)
438run_make
Note: See TracBrowser for help on using the repository browser.