source: jhalfs@ 1646303

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

Remove the need to have write access to BUILDDIR, using sudi, which is
required anyway. ticket #1715

  • Property mode set to 100755
File size: 14.4 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 sudo mkdir -p $JHALFSDIR
362 sudo chown $USER:$USER $JHALFSDIR
363 fi
364
365# Create $BUILDDIR/sources even though it could be created by get_sources()
366 if [[ ! -d $BUILDDIR/sources ]]; then
367 sudo mkdir -p $BUILDDIR/sources
368 sudo chmod a+wt $BUILDDIR/sources
369 fi
370
371# Create the log directory
372 if [[ ! -d $LOGDIR ]]; then
373 mkdir $LOGDIR
374 fi
375 >$LOGDIR/$LOG
376
377# Copy common helper files
378 cp $COMMON_DIR/{makefile-functions,progress_bar.sh} $JHALFSDIR/
379
380# Copy needed stylesheets
381 cp $COMMON_DIR/{packages.xsl,chroot.xsl} $JHALFSDIR/
382
383# Fix the XSL book parser
384 case $PROGNAME in
385 clfs* ) sed 's,FAKEDIR,'${BOOK}/BOOK',' ${PACKAGE_DIR}/${XSL} > $JHALFSDIR/${XSL} ;;
386 lfs | hlfs ) sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL} ;;
387 * ) ;;
388 esac
389 export XSL=$JHALFSDIR/${XSL}
390
391# Copy packageManager.xml, if needed
392 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] && {
393 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/
394 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
395 }
396
397# Copy urls.xsl, if needed
398 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
399
400# Always create the test-log directory to allow user to "uncomment" test
401# instructions
402 install -d -m 1777 $TESTLOGDIR
403
404# Create the installed-files directory, if needed
405 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
406
407# Prepare report creation, if needed
408 if [[ "$REPORT" = "y" ]]; then
409 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
410 # After making sure that all looks sane, dump the settings to a file
411 # This file will be used to create the REPORT header
412 validate_config > $JHALFSDIR/jhalfs.config
413 fi
414
415# Copy optimize files, if needed
416 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
417
418# Copy compare files, if needed
419 if [[ "$COMPARE" = "y" ]]; then
420 mkdir -p $JHALFSDIR/extras
421 cp extras/* $JHALFSDIR/extras
422 fi
423
424# Copy custom tools config files, if requested
425 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
426 echo "Copying custom tool scripts to $JHALFSDIR"
427 mkdir -p $JHALFSDIR/custom-commands
428 cp -f custom/config/* $JHALFSDIR/custom-commands
429 fi
430
431# Download or updates the book source
432# Note that all customization to $JHALFSDIR have to be done before this.
433# But the LFS book is needed for BLFS tools.
434 get_book
435 extract_commands
436 echo "${SD_BORDER}${nl_}"
437 cd $CWD # the functions above change directory
438
439# Install blfs-tool, if requested.
440 if [[ "${BLFS_TOOL}" = "y" ]] ; then
441 echo Installing BLFS book and tools
442 install_blfs_tools 2>&1 | tee -a $LOGDIR/$LOG
443 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
444 fi
445
446fi
447
448# When regenerating the Makefile, we need to know also the
449# canonical book version
450if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
451 case $PROGNAME in
452 clfs* )
453 VERSION=$(xmllint --noent $BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
454 lfs)
455 if [[ "$INITSYS" = "sysv" ]] ; then
456 VERSION=$(grep 'ENTITY version ' $BOOK/general.ent| cut -d\" -f2)
457 else
458 VERSION=$(grep 'ENTITY versiond' $BOOK/general.ent| cut -d\" -f2)
459 fi
460 ;;
461 *)
462 VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
463 esac
464fi
465
466build_Makefile
467
468echo "${SD_BORDER}${nl_}"
469
470# Check for build prerequisites.
471 echo
472 cd $CWD
473 check_prerequisites
474 echo "${SD_BORDER}${nl_}"
475# All is well, run the build (if requested)
476run_make
Note: See TracBrowser for help on using the repository browser.