source: jhalfs@ 9049339

2.4
Last change on this file since 9049339 was 909ee37, checked in by Pierre Labastie <pierre@…>, 8 years ago

When asked its version, jhalfs should not return an error code

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