source: jhalfs@ 4ccb5d7

legacy
Last change on this file since 4ccb5d7 was 0870a7c, checked in by Pierre Labastie <pierre.labastie@…>, 3 years ago

Do not call check_blfs_tools that doesn't exist anymore

  • Property mode set to 100755
File size: 14.3 KB
Line 
1#!/bin/bash
2set -e
3# Pass trap handlers to functions
4set -E
5
6# VT100 colors
7declare -r RED=$'\e[31m'
8declare -r GREEN=$'\e[32m'
9declare -r YELLOW=$'\e[33m'
10
11# shellcheck disable=SC2034
12declare -r BLUE=$'\e[34m'
13declare -r OFF=$'\e[0m'
14declare -r BOLD=$'\e[1m'
15declare -r tab_=$'\t'
16declare -r nl_=$'\n'
17
18# shellcheck disable=SC2034
19declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
20# shellcheck disable=SC2034
21declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
22# shellcheck disable=SC2034
23declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
24
25# bold yellow > < pair
26declare -r R_arrow=$'\e[1;33m>\e[0m'
27declare -r L_arrow=$'\e[1;33m<\e[0m'
28
29
30#>>>>>>>>>>>>>>>ERROR TRAPPING >>>>>>>>>>>>>>>>>>>>
31#-----------------------#
32simple_error() { # Basic error trap.... JUST DIE
33#-----------------------#
34 LASTLINE="$1"
35 LASTERR="$2"
36 LASTSOURCE="$4"
37 error_message "${GREEN} Error $LASTERR at $LASTSOURCE line ${LASTLINE}!"
38}
39
40see_ya() {
41 printf '\n%b%bjhalfs%b exit%b\n' "$L_arrow" "$BOLD" "$R_arrow" "$OFF"
42}
43##### Simple error TRAPS
44# ctrl-c SIGINT
45# ctrl-y
46# ctrl-z SIGTSTP
47# SIGHUP 1 HANGUP
48# SIGINT 2 INTRERRUPT FROM KEYBOARD Ctrl-C
49# SIGQUIT 3
50# SIGKILL 9 KILL
51# SIGTERM 15 TERMINATION
52# SIGSTOP 17,18,23 STOP THE PROCESS
53#####
54set -e
55trap see_ya 0
56trap 'simple_error "${LINENO}" "$?" "${FUNCNAME}" "${BASH_SOURCE}"' ERR
57trap 'echo -e "\n\n${RED}INTERRUPT${OFF} trapped\n" && exit 2' \
58 HUP INT QUIT TERM # STOP stops tterminal output and does not seem to
59 # execute the handler
60#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
61
62simple_message() {
63 # Prevents having to check $VERBOSITY everywhere
64 if [ "$VERBOSITY" -ne 0 ] ; then
65 # shellcheck disable=SC2059
66 printf "$*"
67 fi
68}
69
70warning_message() {
71 simple_message "${YELLOW}\\nWARNING:${OFF} $*\\n\\n"
72}
73
74error_message() {
75 # Prints an error message and exits with LASTERR or 1
76 if [ -n "$LASTERR" ] ; then
77 LASTERR=$(printf '%d' "$LASTERR")
78 else
79 LASTERR=1
80 fi
81 # If +e then disable text output
82 if [[ "$-" =~ e ]]; then
83 printf '\n\n%bERROR:%b %s\n' "$RED" "$OFF" "$*" >&2
84 fi
85 exit "$LASTERR"
86}
87
88load_file() {
89 # source files in a consistent way with an optional message
90 file="$1"
91 shift
92 msg="Loading file ${file}..."
93 [ -z "$*" ] || msg="$*..."
94 simple_message "$msg"
95
96 # shellcheck disable=SC1090
97 source "$file" 2>/dev/null || error_message "$file did not load"
98 simple_message "OK\\n"
99}
100
101git_commit=$(git log -1 --format=format:"%h %ad")
102version="
103${BOLD} \"jhalfs\"${OFF} builder tool (development) $git_commit
104
105 Copyright (C) 2005-2021, the jhalfs team:
106 Jeremy Huntwork
107 George Boudreau
108 Manuel Canales Esparcia
109 Thomas Pegg
110 Matthew Burgess
111 Pierre Labastie
112
113 Unless specified, all the files in this directory and its sub-directories
114 are subjected to the ${BOLD}MIT license${OFF}. See the ${BOLD}LICENSE${OFF} file.
115
116 The files in the ${BOLD}menu${OFF} directory are subjected to the ${BOLD}ISC License${OFF}.
117 See ${BOLD}LICENSE.txt${OFF} and ${BOLD}README${OFF} in that directory.
118"
119
120usage="${nl_}${tab_}${BOLD}${RED}This script cannot be called directly${OFF}
121${tab_}Type ${BOLD}make${OFF} to run the tool, or
122${tab_}Type ${BOLD}./jhalfs -v${OFF} to display version information."
123
124case $1 in
125 -v ) echo "$version" && exit ;;
126 run ) : ;;
127 * ) echo "$usage" && exit 1 ;;
128esac
129
130# If the user has not saved his configuration file, let's ask
131# if he or she really wants to run this stuff
132time_current=$(stat -c '%Y' configuration 2>/dev/null || date +%s)
133time_old=$(stat -c '%Y' configuration.old 2>/dev/null || printf '%s' "$time_current")
134if [ "$(printf '%d' "$time_old")" -ge "$(printf '%d' "$time_current")" ] ; then
135 printf 'Do you want to run jhalfs? yes/no (yes): '
136 read -r ANSWER
137 case ${ANSWER:0:1} in
138 n|N) printf "\nExiting gracefully.\n"; exit ;;
139 esac
140fi
141
142# Change this to 0 to suppress almost all messages
143VERBOSITY=1
144
145load_file configuration "Loading config params from <configuration>"
146
147# These are boolean vars generated from Config.in.
148# ISSUE: If a boolean parameter is not set to y(es) there
149# is no variable defined by the menu app. This can
150# cause a headache if you are not aware.
151# The following variables MUST exist. If they don't, the
152# default value is n(o).
153RUNMAKE=${RUNMAKE:-n}
154GETPKG=${GETPKG:-n}
155COMPARE=${COMPARE:-n}
156RUN_ICA=${RUN_ICA:-n}
157PKGMNGT=${PKGMNGT:-n}
158WRAP_INSTALL=${WRAP_INSTALL:-n}
159BOMB_TEST=${BOMB_TEST:-n}
160STRIP=${STRIP:=n}
161REPORT=${REPORT:=n}
162NCURSES5=${NCURSES5:-n}
163DEL_LA_FILES=${DEL_LA_FILES:-n}
164FULL_LOCALE=${FULL_LOCALE:-n}
165GRSECURITY_HOST=${GRSECURITY_HOST:-n}
166CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
167REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
168INSTALL_LOG=${INSTALL_LOG:-n}
169CLEAN=${CLEAN:=n}
170SET_SSP=${SET_SSP:=n}
171SET_ASLR=${SET_ASLR:=n}
172SET_PAX=${SET_PAX:=n}
173SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
174SET_WARNINGS=${SET_WARNINGS:=n}
175SET_MISC=${SET_MISC:=n}
176SET_BLOWFISH=${SET_BLOWFISH:=n}
177UNICODE=${UNICODE:=n}
178LOCAL=${LOCAL:=n}
179REALSBU=${REALSBU:=n}
180SAVE_CH5=${SAVE_CH5:=n}
181
182if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
183# shellcheck disable=SC2034
184 NO_PROGRESS="#"
185fi
186
187# Sanity check on the location of $BUILDDIR / $JHALFSDIR
188CWD="$(cd "$(dirname "$0")" && pwd)"
189if [[ $JHALFSDIR == "$CWD" ]]; then
190 echo " The jhalfs source directory conflicts with the jhalfs build directory."
191 echo " Please move the source directory or change the build directory."
192 exit 2
193fi
194
195# Book sources envars
196BRANCH_ID=${BRANCH_ID:=development}
197
198case $BRANCH_ID in
199 development )
200 case $PROGNAME in
201 clfs* ) TREE="" ;;
202 * ) TREE=trunk ;;
203 esac
204 LFSVRS=development
205 ;;
206 *EDIT* ) echo " You forgot to set the branch or stable book version."
207 echo " Please rerun make and fix the configuration."
208 exit 2 ;;
209 branch-* )
210 case $PROGNAME in
211 lfs )
212 LFSVRS=${BRANCH_ID}
213 TREE=${BRANCH_ID#branch-}
214 ;;
215 clfs* )
216 LFSVRS=${BRANCH_ID}
217 TREE=${BRANCH_ID#branch-}
218 ;;
219 esac
220 ;;
221 * )
222 case $PROGNAME in
223 lfs )
224 LFSVRS=${BRANCH_ID}
225 TREE=${BRANCH_ID}
226 ;;
227 hlfs )
228 LFSVRS=${BRANCH_ID}
229 TREE=tags/${BRANCH_ID}/BOOK
230 ;;
231 clfs* )
232 LFSVRS=${BRANCH_ID}
233 TREE=clfs-${BRANCH_ID}
234 ;;
235 * )
236 esac
237 ;;
238esac
239
240# Set the document location...
241BOOK=${BOOK:=$JHALFSDIR/$PROGNAME-$LFSVRS}
242
243
244#--- Envars not sourced from configuration
245# shellcheck disable=SC2034
246case $PROGNAME in
247 clfs ) declare -r GIT="git://git.clfs.org/cross-lfs" ;;
248 clfs2 ) declare -r GIT="git://git.clfs.org/clfs-sysroot" ;;
249 clfs3 ) declare -r GIT="git://git.clfs.org/clfs-embedded" ;;
250 *) declare -r GIT="git://git.linuxfromscratch.org" ;;
251esac
252
253declare -r LOG=000-masterscript.log
254# Needed for fetching BLFS book sources when building CLFS
255# shellcheck disable=SC2034
256# declare -r GIT="git://git.linuxfromscratch.org"
257
258# Set true internal variables
259COMMON_DIR="common"
260PACKAGE_DIR=$(echo "$PROGNAME" | tr '[:lower:]' '[:upper:]')
261MODULE=$PACKAGE_DIR/master.sh
262PKGMNGTDIR="pkgmngt"
263# The name packageManager.xml is hardcoded in *.xsl, so no variable.
264
265for file in \
266 "$COMMON_DIR/common-functions" \
267 "$COMMON_DIR/libs/func_book_parser" \
268 "$COMMON_DIR/libs/func_download_pkgs" \
269 "$COMMON_DIR/libs/func_wrt_Makefile" \
270 "$MODULE" ; do
271 load_file "$file"
272done
273
274simple_message "${SD_BORDER}${nl_}"
275
276
277#*******************************************************************#
278LASTERR=2
279for file in \
280 "$COMMON_DIR/libs/func_check_version.sh" \
281 "$COMMON_DIR/libs/func_validate_configs.sh" \
282 "$COMMON_DIR/libs/func_custom_pkgs" ; do
283 load_file "$file"
284done
285unset LASTERR
286
287simple_message "${SD_BORDER}${nl_}"
288simple_message "Checking tools required for jhalfs${nl_}"
289check_alfs_tools
290simple_message "${SD_BORDER}${nl_}"
291
292# blfs-tool envars
293BLFS_TOOL=${BLFS_TOOL:-n}
294if [[ "${BLFS_TOOL}" = "y" ]] ; then
295#not needed now that the check is in alfs_tools
296# simple_message 'Checking supplementary tools for installing BLFS'
297# check_blfs_tools
298 simple_message "${SD_BORDER}${nl_}"
299 BLFS_GIT=${BLFS_GIT:-n}
300 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
301 BLFS_BRANCH=${BLFS_BRANCH:-n}
302 if [[ "${BLFS_GIT}" = "y" ]]; then
303 BLFS_BRANCH_ID=development
304 BLFS_TREE=trunk
305 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
306 if [[ ! -d "$BLFS_WC_LOCATION/postlfs" ]] ; then
307 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
308 echo " Please rerun make and fix the configuration."
309 exit 2
310 fi
311 BLFS_TREE=$(cd $BLFS_WC_LOCATION; git branch --show-current)
312 BLFS_BRANCH_ID=${BLFS_TREE/trunk/development}
313 elif [[ "${BLFS_BRANCH}" = "y" ]] ; then
314 case $BLFS_BRANCH_ID in
315 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
316 echo " Please rerun make and fix the configuration."
317 exit 2 ;;
318 * ) BLFS_TREE=${BLFS_BRANCH_ID#branch-}
319 esac
320 fi
321 load_file "${COMMON_DIR}/libs/func_install_blfs"
322fi
323
324###################################
325### MAIN ###
326###################################
327
328
329validate_config
330echo "${SD_BORDER}${nl_}"
331echo -n "Are you happy with these settings? yes/no (no): "
332read -r ANSWER
333if [ "x$ANSWER" != "xyes" ] ; then
334 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
335 exit
336fi
337echo "${nl_}${SD_BORDER}${nl_}"
338
339# Load additional modules or configuration files based on global settings
340# compare module
341if [[ "$COMPARE" = "y" ]]; then
342 load_file "${COMMON_DIR}/libs/func_compare.sh" 'Loading compare module'
343fi
344#
345# save module
346if [[ "$SAVE_CH5" = "y" ]]; then
347 load_file "${COMMON_DIR}/libs/func_save.sh" 'Loading save module'
348fi
349#
350# optimize module
351if [[ "$OPTIMIZE" != "0" ]]; then
352 load_file optimize/optimize_functions 'Loading optimization module'
353 #
354 # optimize configurations
355 load_file optimize/opt_config 'Loading optimization config'
356 # The number of parallel jobs is taken from configuration now
357 # shellcheck disable=SC2034
358 JH_MAKEFLAGS="-j${N_PARALLEL}"
359 # Validate optimize settings, if required
360 validate_opt_settings
361fi
362#
363
364if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
365
366# If requested, clean the build directory
367 clean_builddir
368
369 if [[ ! -d $JHALFSDIR ]]; then
370 sudo mkdir -p "$JHALFSDIR"
371# Do not assume there is a group named as $USER, do not use
372# $USER:$USER...
373 sudo chown "$USER" "$JHALFSDIR"
374 fi
375
376# Create $BUILDDIR/sources even though it could be created by get_sources()
377 if [[ ! -d $BUILDDIR/sources ]]; then
378 sudo mkdir -p "$BUILDDIR/sources"
379 sudo chmod a+wt "$BUILDDIR/sources"
380 fi
381
382# Create the log directory
383 if [[ ! -d $LOGDIR ]]; then
384 mkdir "$LOGDIR"
385 fi
386 true >"$LOGDIR/$LOG"
387
388# Copy common helper files
389 cp "$COMMON_DIR"/{makefile-functions,progress_bar.sh} "$JHALFSDIR/"
390
391# Copy needed stylesheets
392 cp "$COMMON_DIR"/{packages.xsl,chroot.xsl,kernfs.xsl} "$JHALFSDIR/"
393
394# Fix the XSL book parser
395 case $PROGNAME in
396 clfs* ) sed 's,FAKEDIR,'"${BOOK}/BOOK"',' "${PACKAGE_DIR}/${XSL}" > "${JHALFSDIR}/${XSL}" ;;
397 lfs | hlfs ) sed 's,FAKEDIR,'"$BOOK"',' "${PACKAGE_DIR}/${XSL}" > "${JHALFSDIR}/${XSL}" ;;
398 * ) ;;
399 esac
400 export XSL=$JHALFSDIR/${XSL}
401
402# Copy packageManager.xml, if needed
403 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] && {
404 sed s@BOOK@"$BOOK"@ "$PKGMNGTDIR/packageManager.xml" > \
405 "$JHALFSDIR/"packageManager.xml
406 cp "$PKGMNGTDIR/packInstall.sh" "$JHALFSDIR/"
407 }
408
409# Copy urls.xsl, if needed
410 [[ "$GETPKG" = "y" ]] && cp "$COMMON_DIR/urls.xsl" "$JHALFSDIR/"
411
412# Always create the test-log directory to allow user to "uncomment" test
413# instructions
414 install -d -m 1777 "$TESTLOGDIR"
415
416# Create the installed-files directory, if needed
417 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 "$FILELOGDIR"
418
419# Prepare report creation, if needed
420 if [[ "$REPORT" = "y" ]]; then
421 cp $COMMON_DIR/create-sbu_du-report.sh "$JHALFSDIR/"
422 # After making sure that all looks sane, dump the settings to a file
423 # This file will be used to create the REPORT header
424 validate_config >"$JHALFSDIR/jhalfs.config"
425 fi
426
427# Copy optimize files, if needed
428 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override "$JHALFSDIR/"
429
430# Copy compare files, if needed
431 if [[ "$COMPARE" = "y" ]]; then
432 mkdir -p "$JHALFSDIR/extras"
433 cp extras/* "$JHALFSDIR/extras"
434 fi
435
436# Copy custom tools config files, if requested
437 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
438 echo "Copying custom tool scripts to $JHALFSDIR"
439 mkdir -p "$JHALFSDIR/custom-commands"
440 cp -f custom/config/* "$JHALFSDIR/custom-commands"
441 fi
442
443# Download or updates the book source
444# Note that all customization to $JHALFSDIR have to be done before this.
445# But the LFS book is needed for BLFS tools.
446 get_book
447# At this point, we should have a way to know whether we have a cross
448# or regular book... In case of cross, prohibite TEST=3
449# the position of gcc-pass2 (chapter 6 or 5) tells us (not valid for
450# cross-chap5 branch).
451 if (( TEST == 3 )) && \
452 [ -f "$BOOK/chapter06/gcc-pass2.xml" ]; then
453 TEST=2
454 fi
455 extract_commands
456 echo "${SD_BORDER}${nl_}"
457 cd "$CWD" # the functions above change directory
458
459# Install blfs-tool, if requested.
460 if [[ "${BLFS_TOOL}" = "y" ]] ; then
461 echo Installing BLFS book and tools
462 install_blfs_tools 2>&1 | tee -a "$LOGDIR/$LOG"
463 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
464 fi
465
466fi
467
468# shellcheck disable=SC2034
469if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
470# Sanity check: users tend to tick "rebuild Makefile"
471# without generating one first. Check we have one:
472 if [ ! -f $MKFILE ]; then
473 set -e
474 error_message "You cannot \"rebuild Makefile\" without first building one"
475 fi
476# When regenerating the Makefile, we need to know also the
477# canonical book version
478 case $PROGNAME in
479 clfs* )
480 VERSION=$(xmllint --noent "$BOOK/prologue/$ARCH/bookinfo.xml" 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
481 lfs)
482 VERSION=$(grep 'echo.*lfs-release' "$JHALFSDIR/prbook.xml" | sed 's/.*echo[ ]*\([^ ]*\).*/\1/')
483 ;;
484 *)
485 VERSION=$(xmllint --noent "$BOOK/prologue/bookinfo.xml" 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
486 esac
487fi
488
489build_Makefile
490
491echo "${SD_BORDER}${nl_}"
492
493# Check for build prerequisites.
494 echo
495 cd "$CWD"
496 check_prerequisites
497 echo "${SD_BORDER}${nl_}"
498# All is well, run the build (if requested)
499run_make
Note: See TracBrowser for help on using the repository browser.