source: jhalfs@ d80302b

ablfs-more legacy trunk
Last change on this file since d80302b was 84a3fda, checked in by Pierre Labastie <pierre@…>, 7 years ago

Do not optimize binutils-pass1 in order to measure the SBU:

  • introduce REALSBU variable if Config.in and jhalfs, and display it
  • Adpat LFS/master.sh
  • Property mode set to 100755
File size: 14.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${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\"${OFF} builder tool (development) \$Rev$
74 \$Date$
75
76 Written by George Boudreau, Manuel Canales Esparcia, Pierre Labastie,
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 See the ${BOLD}LICENCE${OFF} file in this directory.
84"
85
86case $1 in
87 -v ) echo "$version" && exit ;;
88 run ) : ;;
89 * )
90 echo "${nl_}${tab_}${BOLD}${RED}This script cannot be called directly: EXITING ${OFF}${nl_}"
91 exit 1
92 ;;
93esac
94
95# If the user has not saved his configuration file, let's ask
96# if he or she really wants to run this stuff
97if [ $(ls -l --time-style='+%Y%m%d%H%M%S' configuration.old | cut -d' ' -f 6) \
98 -ge $(ls -l --time-style='+%Y%m%d%H%M%S' configuration | cut -d' ' -f 6) ]
99 then echo -n "Do you want to run jhalfs? yes/no (yes): "
100 read ANSWER
101 if [ x${ANSWER:0:1} = "xn" -o x${ANSWER:0:1} = "xN" ] ; then
102 echo "${nl_}Exiting gracefully.${nl_}"
103 exit
104 fi
105fi
106
107# Change this to 0 to suppress almost all messages
108VERBOSITY=1
109
110[[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
111source configuration
112[[ $? > 0 ]] && echo "file: configuration did not load.." && exit 1
113[[ $VERBOSITY > 0 ]] && echo "OK"
114
115# These are boolean vars generated from Config.in.
116# ISSUE: If a boolean parameter is not set to y(es) there
117# is no variable defined by the menu app. This can
118# cause a headache if you are not aware.
119# The following variables MUST exist. If they don't, the
120# default value is n(o).
121RUNMAKE=${RUNMAKE:-n}
122GETPKG=${GETPKG:-n}
123COMPARE=${COMPARE:-n}
124RUN_FARCE=${RUN_FARCE:-n}
125RUN_ICA=${RUN_ICA:-n}
126PKGMNGT=${PKGMNGT:-n}
127WRAP_INSTALL=${WRAP_INSTALL:-n}
128BOMB_TEST=${BOMB_TEST:-n}
129STRIP=${STRIP:=n}
130REPORT=${REPORT:=n}
131VIMLANG=${VIMLANG:-n}
132DEL_LA_FILES=${DEL_LA_FILES:-n}
133FULL_LOCALE=${FULL_LOCALE:-n}
134GRSECURITY_HOST=${GRSECURITY_HOST:-n}
135CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
136REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
137INSTALL_LOG=${INSTALL_LOG:-n}
138CLEAN=${CLEAN:=n}
139SET_SSP=${SET_SSP:=n}
140SET_ASLR=${SET_ASLR:=n}
141SET_PAX=${SET_PAX:=n}
142SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
143SET_WARNINGS=${SET_WARNINGS:=n}
144SET_MISC=${SET_MISC:=n}
145SET_BLOWFISH=${SET_BLOWFISH:=n}
146UNICODE=${UNICODE:=n}
147REALSBU=${REALSBU:=n}
148
149if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
150 NO_PROGRESS="#"
151fi
152
153
154# Sanity check on the location of $BUILDDIR / $JHALFSDIR
155CWD=$(cd `dirname $0` && pwd)
156if [[ $JHALFSDIR == $CWD ]]; then
157 echo " The jhalfs source directory conflicts with the jhalfs build directory."
158 echo " Please move the source directory or change the build directory."
159 exit 2
160fi
161
162# Book sources envars
163BRANCH_ID=${BRANCH_ID:=development}
164
165case $BRANCH_ID in
166 development )
167 case $PROGNAME in
168 clfs* ) TREE="" ;;
169 * ) TREE=trunk/BOOK ;;
170 esac
171 LFSVRS=development
172 ;;
173 *EDIT* ) echo " You forgot to set the branch or stable book version."
174 echo " Please rerun make and fix the configuration."
175 exit 2 ;;
176 branch-* )
177 case $PROGNAME in
178 lfs )
179 LFSVRS=${BRANCH_ID}
180 TREE=branches/${BRANCH_ID#branch-}
181 if [ ${BRANCH_ID:7:1} = 6 ]; then
182 TREE=${TREE}/BOOK
183 fi
184 ;;
185 clfs* )
186 LFSVRS=${BRANCH_ID}
187 TREE=${BRANCH_ID#branch-}
188 ;;
189 esac
190 ;;
191 * )
192 case $PROGNAME in
193 lfs )
194 LFSVRS=${BRANCH_ID}
195 TREE=tags/${BRANCH_ID}
196 if (( ${BRANCH_ID:0:1} < 7 )) ; then
197 TREE=${TREE}/BOOK
198 fi
199 ;;
200 hlfs )
201 LFSVRS=${BRANCH_ID}
202 TREE=tags/${BRANCH_ID}/BOOK
203 ;;
204 clfs* )
205 LFSVRS=${BRANCH_ID}
206 TREE=clfs-${BRANCH_ID}
207 ;;
208 * )
209 esac
210 ;;
211esac
212
213# Set the document location...
214BOOK=${BOOK:=$JHALFSDIR/$PROGNAME-$LFSVRS}
215
216
217#--- Envars not sourced from configuration
218case $PROGNAME in
219 clfs ) declare -r GIT="git://git.clfs.org/cross-lfs" ;;
220 clfs2 ) declare -r GIT="git://git.clfs.org/clfs-sysroot" ;;
221 clfs3 ) declare -r GIT="git://git.clfs.org/clfs-embedded" ;;
222 *) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
223esac
224declare -r LOG=000-masterscript.log
225 # Needed for fetching BLFS book sources when building CLFS
226declare -r SVN_2="svn://svn.linuxfromscratch.org"
227
228# Set true internal variables
229COMMON_DIR="common"
230PACKAGE_DIR=$(echo $PROGNAME | tr '[a-z]' '[A-Z]')
231MODULE=$PACKAGE_DIR/master.sh
232PKGMNGTDIR="pkgmngt"
233# The name packageManager.xml is hardcoded in *.xsl, so no variable.
234
235[[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
236source $COMMON_DIR/common-functions
237[[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
238[[ $VERBOSITY > 0 ]] && echo "OK"
239[[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
240source $MODULE
241[[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
242[[ $VERBOSITY > 0 ]] && echo "OK"
243#
244[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
245
246
247#*******************************************************************#
248[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
249source $COMMON_DIR/libs/func_check_version.sh
250[[ $? > 0 ]] && echo " function module did not load.." && exit 2
251[[ $VERBOSITY > 0 ]] && echo "OK"
252
253[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
254source $COMMON_DIR/libs/func_validate_configs.sh
255[[ $? > 0 ]] && echo " function module did not load.." && exit 2
256[[ $VERBOSITY > 0 ]] && echo "OK"
257
258[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
259source $COMMON_DIR/libs/func_custom_pkgs
260[[ $? > 0 ]] && echo " function module did not load.." && exit 2
261[[ $VERBOSITY > 0 ]] && echo "OK"
262
263
264[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
265
266[[ $VERBOSITY > 0 ]] && echo Checking tools required for jhalfs
267check_alfs_tools
268
269[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
270
271# blfs-tool envars
272BLFS_TOOL=${BLFS_TOOL:-n}
273if [[ "${BLFS_TOOL}" = "y" ]] ; then
274 [[ $VERBOSITY > 0 ]] && echo Checking supplementary tools for installing BLFS
275 check_blfs_tools
276 [[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
277 BLFS_SVN=${BLFS_SVN:-n}
278 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
279 BLFS_BRANCH=${BLFS_BRANCH:-n}
280 if [[ "${BLFS_SVN}" = "y" ]]; then
281 BLFS_BRANCH_ID=development
282 BLFS_TREE=trunk/BOOK
283 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
284 [[ -d "$BLFS_WC_LOCATION" ]] &&
285 [[ -d "$BLFS_WC_LOCATION/postlfs" ]] || {
286 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
287 echo " Please rerun make and fix the configuration."
288 exit 2
289 }
290 BLFS_TREE=$(cd $BLFS_WC_LOCATION; svn info | grep '^URL' | sed 's@.*BLFS/@@')
291 BLFS_BRANCH_ID=$(echo $BLFS_TREE | sed -e 's@trunk/BOOK@development@' \
292 -e 's@branches/@branch-@' \
293 -e 's@tags/@@' \
294 -e 's@/BOOK@@')
295 elif [[ "${BLFS_BRANCH}" = "y" ]] ; then
296 case $BLFS_BRANCH_ID in
297 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
298 echo " Please rerun make and fix the configuration."
299 exit 2 ;;
300 branch-6.* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-}/BOOK ;;
301 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-} ;;
302 6.2* | 7.* | 8.*) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
303 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID}/BOOK ;;
304 esac
305 fi
306 [[ $VERBOSITY > 0 ]] && echo -n "Loading blfs tools installation function..."
307 source $COMMON_DIR/libs/func_install_blfs
308 [[ $? > 0 ]] && echo "function module did not load.." && exit 1
309 [[ $VERBOSITY > 0 ]] && echo "OK"
310fi
311
312###################################
313### MAIN ###
314###################################
315
316
317validate_config
318echo "${SD_BORDER}${nl_}"
319echo -n "Are you happy with these settings? yes/no (no): "
320read ANSWER
321if [ x$ANSWER != "xyes" ] ; then
322 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
323 exit
324fi
325echo "${nl_}${SD_BORDER}${nl_}"
326
327# Load additional modules or configuration files based on global settings
328# compare module
329if [[ "$COMPARE" = "y" ]]; then
330 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
331 source $COMMON_DIR/libs/func_compare.sh
332 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
333 [[ $VERBOSITY > 0 ]] && echo "OK"
334fi
335#
336# optimize module
337if [[ "$OPTIMIZE" != "0" ]]; then
338 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
339 source optimize/optimize_functions
340 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
341 [[ $VERBOSITY > 0 ]] && echo "OK"
342 #
343 # optimize configurations
344 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
345 source optimize/opt_config
346 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
347 [[ $VERBOSITY > 0 ]] && echo "OK"
348 # The number of parallel jobs is taken from configuration now
349 MAKEFLAGS="-j${N_PARALLEL}"
350 # Validate optimize settings, if required
351 validate_opt_settings
352fi
353#
354
355if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
356
357# If requested, clean the build directory
358 clean_builddir
359
360 if [[ ! -d $JHALFSDIR ]]; then
361 mkdir -p $JHALFSDIR
362 fi
363
364# Create $BUILDDIR/sources even though it could be created by get_sources()
365 if [[ ! -d $BUILDDIR/sources ]]; then
366 mkdir -p $BUILDDIR/sources
367 fi
368
369# Create the log directory
370 if [[ ! -d $LOGDIR ]]; then
371 mkdir $LOGDIR
372 fi
373 >$LOGDIR/$LOG
374
375# Copy common helper files
376 cp $COMMON_DIR/{makefile-functions,progress_bar.sh} $JHALFSDIR/
377
378# Copy needed stylesheets
379 cp $COMMON_DIR/{packages.xsl,chroot.xsl} $JHALFSDIR/
380
381# Fix the XSL book parser
382 case $PROGNAME in
383 clfs* ) sed 's,FAKEDIR,'${BOOK}/BOOK',' ${PACKAGE_DIR}/${XSL} > $JHALFSDIR/${XSL} ;;
384 lfs | hlfs ) sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL} ;;
385 * ) ;;
386 esac
387 export XSL=$JHALFSDIR/${XSL}
388
389# Copy packageManager.xml, if needed
390 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] && {
391 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/
392 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
393 }
394
395# Copy urls.xsl, if needed
396 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
397
398# Always create the test-log directory to allow user to "uncomment" test
399# instructions
400 install -d -m 1777 $TESTLOGDIR
401
402# Create the installed-files directory, if needed
403 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
404
405# Prepare report creation, if needed
406 if [[ "$REPORT" = "y" ]]; then
407 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
408 # After making sure that all looks sane, dump the settings to a file
409 # This file will be used to create the REPORT header
410 validate_config > $JHALFSDIR/jhalfs.config
411 fi
412
413# Copy optimize files, if needed
414 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
415
416# Copy compare files, if needed
417 if [[ "$COMPARE" = "y" ]]; then
418 mkdir -p $JHALFSDIR/extras
419 cp extras/* $JHALFSDIR/extras
420 fi
421
422# Copy custom tools config files, if requested
423 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
424 echo "Copying custom tool scripts to $JHALFSDIR"
425 mkdir -p $JHALFSDIR/custom-commands
426 cp -f custom/config/* $JHALFSDIR/custom-commands
427 fi
428
429# Download or updates the book source
430# Note that all customization to $JHALFSDIR have to be done before this.
431# But the LFS book is needed for BLFS tools.
432 get_book
433 extract_commands
434 echo "${SD_BORDER}${nl_}"
435 cd $CWD # the functions above change directory
436
437# Install blfs-tool, if requested.
438 if [[ "${BLFS_TOOL}" = "y" ]] ; then
439 echo Installing BLFS book and tools
440 install_blfs_tools 2>&1 | tee -a $LOGDIR/$LOG
441 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
442 fi
443
444fi
445
446# When regenerating the Makefile, we need to know also the
447# canonical book version
448if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
449 case $PROGNAME in
450 clfs* )
451 VERSION=$(xmllint --noent $BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
452 lfs)
453 if [[ "$INITSYS" = "sysv" ]] ; then
454 VERSION=$(grep 'ENTITY version ' $BOOK/general.ent| cut -d\" -f2)
455 else
456 VERSION=$(grep 'ENTITY versiond' $BOOK/general.ent| cut -d\" -f2)
457 fi
458 ;;
459 *)
460 VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
461 esac
462fi
463
464build_Makefile
465
466echo "${SD_BORDER}${nl_}"
467
468# Check for build prerequisites.
469 echo
470 cd $CWD
471 check_prerequisites
472 echo "${SD_BORDER}${nl_}"
473# All is well, run the build (if requested)
474run_make
Note: See TracBrowser for help on using the repository browser.