source: jhalfs@ 77fa8ba

new_features
Last change on this file since 77fa8ba was 77fa8ba, checked in by Pierre Labastie <pierre@…>, 9 years ago

Add IP, hostname, domain, etc to the list of configuration parameters.
Font and encoding are in configuration too, but are not passed to the build
commands
Works only for LFS

  • Property mode set to 100755
File size: 13.8 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-trunk${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-trunk\"${OFF} builder tool (development) \$Rev$
74 \$Date$
75
76 Written by George Boudreau and Manuel Canales Esparcia,
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"
84
85case $1 in
86 -v ) echo "$version" && exit 1 ;;
87 run ) : ;;
88 * )
89 echo "${nl_}${tab_}${BOLD}${RED}This script cannot be called directly: EXITING ${OFF}${nl_}"
90 exit 1
91 ;;
92esac
93
94# If the user has not saved his configuration file, let's ask
95# if he or she really wants to run this stuff
96if [ $(ls -l --time-style='+%Y%m%d%H%M%S' configuration.old | cut -d' ' -f 6) \
97 -ge $(ls -l --time-style='+%Y%m%d%H%M%S' configuration | cut -d' ' -f 6) ]
98 then echo -n "Do you want to run jhalfs? yes/no (yes): "
99 read ANSWER
100 if [ x${ANSWER:0:1} = "xn" -o x${ANSWER:0:1} = "xN" ] ; then
101 echo "${nl_}Exiting gracefully.${nl_}"
102 exit
103 fi
104fi
105
106# Change this to 0 to suppress almost all messages
107VERBOSITY=1
108
109[[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
110source configuration
111[[ $? > 0 ]] && echo "file: configuration did not load.." && exit 1
112[[ $VERBOSITY > 0 ]] && echo "OK"
113
114# These are boolean vars generated from Config.in.
115# ISSUE: If a boolean parameter is not set to y(es) there
116# is no variable defined by the menu app. This can
117# cause a headache if you are not aware.
118# The following variables MUST exist. If they don't, the
119# default value is n(o).
120RUNMAKE=${RUNMAKE:-n}
121GETPKG=${GETPKG:-n}
122COMPARE=${COMPARE:-n}
123RUN_FARCE=${RUN_FARCE:-n}
124RUN_ICA=${RUN_ICA:-n}
125PKGMNGT=${PKGMNGT:-n}
126BOMB_TEST=${BOMB_TEST:-n}
127STRIP=${STRIP:=n}
128REPORT=${REPORT:=n}
129VIMLANG=${VIMLANG:-n}
130FULL_LOCALE=${FULL_LOCALE:-n}
131GRSECURITY_HOST=${GRSECURITY_HOST:-n}
132CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
133REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
134INSTALL_LOG=${INSTALL_LOG:-n}
135CLEAN=${CLEAN:=n}
136SET_SSP=${SET_SSP:=n}
137SET_ASLR=${SET_ASLR:=n}
138SET_PAX=${SET_PAX:=n}
139SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
140SET_WARNINGS=${SET_WARNINGS:=n}
141SET_MISC=${SET_MISC:=n}
142SET_BLOWFISH=${SET_BLOWFISH:=n}
143UNICODE=${UNICODE:=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 # Copy urls.xsl, if needed
391 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
392 #
393 # Create the test-log directory, if needed
394 [[ "$TEST" != "0" ]] && [[ ! -d $TESTLOGDIR ]] && install -d -m 1777 $TESTLOGDIR
395 #
396 # Create the installed-files directory, if needed
397 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
398 #
399 # Prepare report creation, if needed
400 if [[ "$REPORT" = "y" ]]; then
401 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
402 # After making sure that all looks sane, dump the settings to a file
403 # This file will be used to create the REPORT header
404 validate_config > $JHALFSDIR/jhalfs.config
405 fi
406 #
407 # Copy optimize files, if needed
408 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
409 #
410 # Copy compare files, if needed
411 if [[ "$COMPARE" = "y" ]]; then
412 mkdir -p $JHALFSDIR/extras
413 cp extras/* $JHALFSDIR/extras
414 fi
415 #
416 # Copy custom tools config files, if requested
417 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
418 echo "Copying custom tool scripts to $JHALFSDIR"
419 mkdir -p $JHALFSDIR/custom-commands
420 cp -f custom/config/* $JHALFSDIR/custom-commands
421 fi
422 #
423 # Install blfs-tool, if requested.
424 if [[ "${BLFS_TOOL}" = "y" ]] ; then
425 echo Installing BLFS book and tools
426 install_blfs_tools 2>&1 | tee -a $LOGDIR/$LOG
427 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
428 fi
429 #
430
431# Download or updates the book source
432 get_book
433 extract_commands
434 echo "${SD_BORDER}${nl_}"
435
436fi
437
438# When regenerating the Makefile, we need to know also the
439# canonical book version
440if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
441 case $PROGNAME in
442 clfs* )
443 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
444 *)
445 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
446 esac
447fi
448
449build_Makefile
450
451echo "${SD_BORDER}${nl_}"
452
453# Check for build prerequisites.
454 echo
455 cd $CWD
456 check_prerequisites
457 echo "${SD_BORDER}${nl_}"
458# All is well, run the build (if requested)
459run_make
Note: See TracBrowser for help on using the repository browser.