source: jhalfs@ 2fd624d

ablfs-more trunk
Last change on this file since 2fd624d was 2fd624d, checked in by Pierre Labastie <pierre.labastie@…>, 3 years ago

Get rid of BRANCH_ID, TREE, LFSVRS variables

There is only one variable: COMMIT. Note that this commit
also changes $PROGNAME-$LFSVRS to $BOOK.

  • Property mode set to 100755
File size: 12.2 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# Set the document location...
196BOOK=${BOOK:=$JHALFSDIR/book-source}
197
198
199#--- Envars not sourced from configuration
200# shellcheck disable=SC2034
201declare -r REPO=git://git.linuxfromscratch.org/lfs.git
202declare -r LOG=000-masterscript.log
203
204# Set true internal variables
205COMMON_DIR="common"
206PACKAGE_DIR=$(echo "$PROGNAME" | tr '[:lower:]' '[:upper:]')
207MODULE=$PACKAGE_DIR/master.sh
208PKGMNGTDIR="pkgmngt"
209# The name packageManager.xml is hardcoded in *.xsl, so no variable.
210
211for file in \
212 "$COMMON_DIR/common-functions" \
213 "$COMMON_DIR/libs/func_book_parser" \
214 "$COMMON_DIR/libs/func_download_pkgs" \
215 "$COMMON_DIR/libs/func_wrt_Makefile" \
216 "$MODULE" ; do
217 load_file "$file"
218done
219
220simple_message "${SD_BORDER}${nl_}"
221
222
223#*******************************************************************#
224LASTERR=2
225for file in \
226 "$COMMON_DIR/libs/func_check_version.sh" \
227 "$COMMON_DIR/libs/func_validate_configs.sh" \
228 "$COMMON_DIR/libs/func_custom_pkgs" ; do
229 load_file "$file"
230done
231unset LASTERR
232
233simple_message "${SD_BORDER}${nl_}"
234simple_message "Checking tools required for jhalfs${nl_}"
235check_alfs_tools
236simple_message "${SD_BORDER}${nl_}"
237
238# blfs-tool envars
239BLFS_TOOL=${BLFS_TOOL:-n}
240if [[ "${BLFS_TOOL}" = "y" ]] ; then
241#not needed now that the check is in alfs_tools
242# simple_message 'Checking supplementary tools for installing BLFS'
243# check_blfs_tools
244 simple_message "${SD_BORDER}${nl_}"
245 BLFS_GIT=${BLFS_GIT:-n}
246 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
247 BLFS_BRANCH=${BLFS_BRANCH:-n}
248 if [[ "${BLFS_GIT}" = "y" ]]; then
249 BLFS_BRANCH_ID=development
250 BLFS_TREE=trunk
251 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
252 if [[ ! -d "$BLFS_WC_LOCATION/postlfs" ]] ; then
253 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
254 echo " Please rerun make and fix the configuration."
255 exit 2
256 fi
257 BLFS_TREE=$(cd $BLFS_WC_LOCATION; git branch --show-current)
258 BLFS_BRANCH_ID=${BLFS_TREE/trunk/development}
259 elif [[ "${BLFS_BRANCH}" = "y" ]] ; then
260 case $BLFS_BRANCH_ID in
261 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
262 echo " Please rerun make and fix the configuration."
263 exit 2 ;;
264 * ) BLFS_TREE=${BLFS_BRANCH_ID#branch-}
265 esac
266 fi
267 load_file "${COMMON_DIR}/libs/func_install_blfs"
268fi
269
270###################################
271### MAIN ###
272###################################
273
274
275validate_config
276echo "${SD_BORDER}${nl_}"
277echo -n "Are you happy with these settings? yes/no (no): "
278read -r ANSWER
279if [ "x$ANSWER" != "xyes" ] ; then
280 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
281 exit
282fi
283echo "${nl_}${SD_BORDER}${nl_}"
284
285# Load additional modules or configuration files based on global settings
286# compare module
287if [[ "$COMPARE" = "y" ]]; then
288 load_file "${COMMON_DIR}/libs/func_compare.sh" 'Loading compare module'
289fi
290#
291# save module
292if [[ "$SAVE_CH5" = "y" ]]; then
293 load_file "${COMMON_DIR}/libs/func_save.sh" 'Loading save module'
294fi
295#
296# optimize module
297if [[ "$OPTIMIZE" != "0" ]]; then
298 load_file optimize/optimize_functions 'Loading optimization module'
299 #
300 # optimize configurations
301 load_file optimize/opt_config 'Loading optimization config'
302 # The number of parallel jobs is taken from configuration now
303 # shellcheck disable=SC2034
304 JH_MAKEFLAGS="-j${N_PARALLEL}"
305 # Validate optimize settings, if required
306 validate_opt_settings
307fi
308#
309
310if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
311
312# If requested, clean the build directory
313 clean_builddir
314
315 if [[ ! -d $JHALFSDIR ]]; then
316 sudo mkdir -p "$JHALFSDIR"
317# Do not assume there is a group named as $USER, do not use
318# $USER:$USER...
319 sudo chown "$USER" "$JHALFSDIR"
320 fi
321
322# Create $BUILDDIR/sources even though it could be created by get_sources()
323 if [[ ! -d $BUILDDIR/sources ]]; then
324 sudo mkdir -p "$BUILDDIR/sources"
325 sudo chmod a+wt "$BUILDDIR/sources"
326 fi
327
328# Create the log directory
329 if [[ ! -d $LOGDIR ]]; then
330 mkdir "$LOGDIR"
331 fi
332 true >"$LOGDIR/$LOG"
333
334# Copy common helper files
335 cp "$COMMON_DIR"/{makefile-functions,progress_bar.sh} "$JHALFSDIR/"
336
337# Copy needed stylesheets
338 cp "$COMMON_DIR"/{packages.xsl,chroot.xsl,kernfs.xsl} "$JHALFSDIR/"
339 cp "$PACKAGE_DIR/$XSL" "$JHALFSDIR/"
340
341 export XSL=$JHALFSDIR/${XSL}
342
343# Copy packageManager.xml, if needed
344 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] && {
345 sed s@BOOK@"$BOOK"@ "$PKGMNGTDIR/packageManager.xml" > \
346 "$JHALFSDIR/"packageManager.xml
347 cp "$PKGMNGTDIR/packInstall.sh" "$JHALFSDIR/"
348 }
349
350# Copy urls.xsl, if needed
351 [[ "$GETPKG" = "y" ]] && cp "$COMMON_DIR/urls.xsl" "$JHALFSDIR/"
352
353# Always create the test-log directory to allow user to "uncomment" test
354# instructions
355 install -d -m 1777 "$TESTLOGDIR"
356
357# Create the installed-files directory, if needed
358 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 "$FILELOGDIR"
359
360# Prepare report creation, if needed
361 if [[ "$REPORT" = "y" ]]; then
362 cp $COMMON_DIR/create-sbu_du-report.sh "$JHALFSDIR/"
363 # After making sure that all looks sane, dump the settings to a file
364 # This file will be used to create the REPORT header
365 validate_config >"$JHALFSDIR/jhalfs.config"
366 fi
367
368# Copy optimize files, if needed
369 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override "$JHALFSDIR/"
370
371# Copy compare files, if needed
372 if [[ "$COMPARE" = "y" ]]; then
373 mkdir -p "$JHALFSDIR/extras"
374 cp extras/* "$JHALFSDIR/extras"
375 fi
376
377# Copy custom tools config files, if requested
378 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
379 echo "Copying custom tool scripts to $JHALFSDIR"
380 mkdir -p "$JHALFSDIR/custom-commands"
381 cp -f custom/config/* "$JHALFSDIR/custom-commands"
382 fi
383
384# Download or updates the book source
385# Note that all customization to $JHALFSDIR have to be done before this.
386# But the LFS book is needed for BLFS tools.
387 get_book
388 extract_commands
389 echo "${SD_BORDER}${nl_}"
390 cd "$CWD" # the functions above change directory
391
392# Install blfs-tool, if requested.
393 if [[ "${BLFS_TOOL}" = "y" ]] ; then
394 echo Installing BLFS book and tools
395 install_blfs_tools 2>&1 | tee -a "$LOGDIR/$LOG"
396 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
397 fi
398
399fi
400
401# shellcheck disable=SC2034
402if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
403# Sanity check: users tend to tick "rebuild Makefile"
404# without generating one first. Check we have one:
405 if [ ! -f $MKFILE ]; then
406 set -e
407 error_message "You cannot \"rebuild Makefile\" without first building one"
408 fi
409# When regenerating the Makefile, we need to know also the
410# canonical book version
411VERSION=$(grep 'echo.*lfs-release' "$JHALFSDIR/prbook.xml" | sed 's/.*echo[ ]*\([^ ]*\).*/\1/')
412fi
413
414build_Makefile
415
416echo "${SD_BORDER}${nl_}"
417
418# Check for build prerequisites.
419 echo
420 cd "$CWD"
421 check_prerequisites
422 echo "${SD_BORDER}${nl_}"
423# All is well, run the build (if requested)
424run_make
Note: See TracBrowser for help on using the repository browser.