source: jhalfs@ 65c998b

2.4 ablfs-more legacy new_features trunk
Last change on this file since 65c998b was 65c998b, checked in by Pierre Labastie <pierre@…>, 11 years ago

Add some logic to makefile and jhalfs, so that when exiting the configuration
menu without saving, you have the choice of exiting jhalfs

  • Property mode set to 100755
File size: 15.8 KB
Line 
1#!/bin/bash
2# $Id$
3set -e
4
5# VT100 colors
6declare -r BLACK=$'\e[1;30m'
7declare -r DK_GRAY=$'\e[0;30m'
8
9declare -r RED=$'\e[31m'
10declare -r GREEN=$'\e[32m'
11declare -r YELLOW=$'\e[33m'
12declare -r BLUE=$'\e[34m'
13declare -r MAGENTA=$'\e[35m'
14declare -r CYAN=$'\e[36m'
15declare -r WHITE=$'\e[37m'
16
17declare -r OFF=$'\e[0m'
18declare -r BOLD=$'\e[1m'
19declare -r REVERSE=$'\e[7m'
20declare -r HIDDEN=$'\e[8m'
21
22declare -r tab_=$'\t'
23declare -r nl_=$'\n'
24
25declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
26declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
27declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
28
29# bold yellow > < pair
30declare -r R_arrow=$'\e[1;33m>\e[0m'
31declare -r L_arrow=$'\e[1;33m<\e[0m'
32
33
34#>>>>>>>>>>>>>>>ERROR TRAPPING >>>>>>>>>>>>>>>>>>>>
35#-----------------------#
36simple_error() { # Basic error trap.... JUST DIE
37#-----------------------#
38 # If +e then disable text output
39 if [[ "$-" =~ e ]]; then
40 echo -e "\n${RED}ERROR:${GREEN} basic error trapped!${OFF}\n" >&2
41 fi
42}
43
44see_ya() {
45 echo -e "\n${L_arrow}${BOLD}jhalfs-trunk${R_arrow} exit${OFF}\n"
46}
47##### Simple error TRAPS
48# ctrl-c SIGINT
49# ctrl-y
50# ctrl-z SIGTSTP
51# SIGHUP 1 HANGUP
52# SIGINT 2 INTRERRUPT FROM KEYBOARD Ctrl-C
53# SIGQUIT 3
54# SIGKILL 9 KILL
55# SIGTERM 15 TERMINATION
56# SIGSTOP 17,18,23 STOP THE PROCESS
57#####
58set -e
59trap see_ya 0
60trap simple_error ERR
61trap 'echo -e "\n\n${RED}INTERRUPT${OFF} trapped\n" && exit 2' 1 2 3 15 17 18 23
62#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
63
64version="
65${BOLD} \"jhalfs-trunk\"${OFF} builder tool (development) \$Rev$
66 \$Date$
67
68 Written by George Boudreau and Manuel Canales Esparcia,
69 plus several contributions.
70
71 Based on an idea from Jeremy Huntwork
72
73 This set of files are published under the
74 ${BOLD}Gnu General Public License, Version 2.${OFF}
75"
76
77case $1 in
78 -v ) echo "$version" && exit 1 ;;
79 run ) : ;;
80 * )
81 echo "${nl_}${tab_}${BOLD}${RED}This script cannot be called directly: EXITING ${OFF}${nl_}"
82 exit 1
83 ;;
84esac
85
86# If the user has not saved his configuration file, let's ask
87# if he or she really wants to run this stuff
88if [ $(ls -l --time-style='+%Y%m%d%H%M%S' configuration.old | cut -d' ' -f 6) \
89 -ge $(ls -l --time-style='+%Y%m%d%H%M%S' configuration | cut -d' ' -f 6) ]
90 then echo -n "Do you want to run jhalfs? yes/no (yes): "
91 read ANSWER
92 if [ x${ANSWER:0:1} = "xn" -o x${ANSWER:0:1} = "xN" ] ; then
93 echo "${nl_}Exiting gracefully.${nl_}"
94 exit
95 fi
96fi
97
98# Change this to 0 to suppress almost all messages
99VERBOSITY=1
100
101[[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
102source configuration
103[[ $? > 0 ]] && echo "file: configuration did not load.." && exit 1
104[[ $VERBOSITY > 0 ]] && echo "OK"
105
106# These are boolean vars generated from Config.in.
107# ISSUE: If a boolean parameter is not set to y(es) there
108# is no variable defined by the menu app. This can
109# cause a headache if you are not aware.
110# The following variables MUST exist. If they don't, the
111# default value is n(o).
112RUNMAKE=${RUNMAKE:-n}
113GETPKG=${GETPKG:-n}
114COMPARE=${COMPARE:-n}
115RUN_FARCE=${RUN_FARCE:-n}
116RUN_ICA=${RUN_ICA:-n}
117PKGMNGT=${PKGMNGT:-n}
118BOMB_TEST=${BOMB_TEST:-n}
119STRIP=${STRIP:=n}
120REPORT=${REPORT:=n}
121VIMLANG=${VIMLANG:-n}
122FULL_LOCALE=${FULL_LOCALE:-n}
123GRSECURITY_HOST=${GRSECURITY_HOST:-n}
124CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
125REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
126INSTALL_LOG=${INSTALL_LOG:-n}
127CLEAN=${CLEAN:=n}
128SET_SSP=${SET_SSP:=n}
129SET_ASLR=${SET_ASLR:=n}
130SET_PAX=${SET_PAX:=n}
131SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
132SET_WARNINGS=${SET_WARNINGS:=n}
133SET_MISC=${SET_MISC:=n}
134SET_BLOWFISH=${SET_BLOWFISH:=n}
135
136if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
137 NO_PROGRESS="#"
138fi
139
140
141# Sanity check on the location of $BUILDDIR / $JHALFSDIR
142CWD=$(cd `dirname $0` && pwd)
143if [[ $JHALFSDIR == $CWD ]]; then
144 echo " The jhalfs source directory conflicts with the jhalfs build directory."
145 echo " Please move the source directory or change the build directory."
146 exit 2
147fi
148
149# Book sources envars
150BRANCH_ID=${BRANCH_ID:=development}
151
152case $BRANCH_ID in
153 development )
154 case $PROGNAME in
155 clfs2 ) TREE=branches/clfs-sysroot/BOOK ;;
156 clfs3 ) TREE=branches/clfs-embedded/BOOK ;;
157 *) TREE=trunk/BOOK ;;
158 esac
159 LFSVRS=development
160 ;;
161 *EDIT* ) echo " You forgot to set the branch or stable book version."
162 echo " Please rerun make and fix the configuration."
163 exit 2 ;;
164 branch-* )
165 LFSVRS=${BRANCH_ID}
166 TREE=branches/${BRANCH_ID#branch-}/BOOK
167 ;;
168 * )
169 case $PROGNAME in
170 lfs )
171 LFSVRS=${BRANCH_ID}
172 TREE=tags/${BRANCH_ID}
173 if (( ${BRANCH_ID:0:1} < 7 )) ; then
174 TREE=${TREE}/BOOK
175 fi
176 ;;
177 hlfs )
178 LFSVRS=${BRANCH_ID}
179 TREE=tags/${BRANCH_ID}/BOOK
180 ;;
181 clfs | clfs2 | clfs3)
182 LFSVRS=${BRANCH_ID}
183 TREE=tags/${BRANCH_ID}
184 ;;
185 esac
186 ;;
187esac
188
189# Set the document location...
190BOOK=${BOOK:=$PROGNAME-$LFSVRS}
191
192# blfs-tool envars
193BLFS_TOOL=${BLFS_TOOL:-n}
194if [[ "${BLFS_TOOL}" = "y" ]] ; then
195 BLFS_BRANCH_ID=${BLFS_BRANCH_ID:=development}
196 case $BLFS_BRANCH_ID in
197 development ) BLFS_TREE=trunk/BOOK ;;
198 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
199 echo " Please rerun make and fix the configuration."
200 exit 2 ;;
201 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-} ;;
202 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
203 esac
204 # Dependencies envars, easier to update.
205 # Tidy and Unzip version are harcoded also in wrt_blfs_tool_targets()
206 # libxml2
207 LIBXML_PKG="libxml2-2.7.8.tar.gz"
208 LIBXML_URL="ftp://xmlsoft.org/libxml2/${LIBXML_PKG}"
209 LIBXML_MD5="8127a65e8c3b08856093099b52599c86"
210 # libxslt
211 LIBXSLT_PKG="libxslt-1.1.26.tar.gz"
212 LIBXSLT_URL="ftp://xmlsoft.org/libxslt/${LIBXSLT_PKG}"
213 LIBXSLT_MD5="e61d0364a30146aaa3001296f853b2b9"
214 # tidy
215 TIDY_PKG="tidy-cvs_20101110.tar.bz2"
216 TIDY_URL="http://anduin.linuxfromscratch.org/sources/BLFS/svn/t/${TIDY_PKG}"
217 TIDY_MD5="dd1fe109b4259ad3f364b175787ad5e9"
218 # unzip
219 UNZIP_PKG="unzip60.tar.gz"
220 UNZIP_URL="http://downloads.sourceforge.net/infozip/${UNZIP_PKG}"
221 UNZIP_MD5="62b490407489521db863b523a7f86375"
222 # DocBook XML DTD
223 DBXML_PKG="docbook-xml-4.5.zip"
224 DBXML_URL="http://www.docbook.org/xml/4.5/${DBXML_PKG}"
225 DBXML_MD5="03083e288e87a7e829e437358da7ef9e"
226 # DocBook XSL
227# DBXSL_PKG="docbook-xsl-1.69.1.tar.bz2"
228# DBXSL_URL="http://prdownloads.sourceforge.net/docbook/${DBXSL_PKG}"
229# DBXSL_MD5="6ebd29a67f2dcc3f2220f475ee6f6552"
230 # Lynx
231 LYNX_PKG="lynx2.8.8dev.10.tar.bz2"
232 LYNX_URL="http://lynx.isc.org/current/${LYNX_PKG}"
233 LYNX_MD5="1c9ef3746520c69914b461f88de6b12e"
234 # sudo
235 SUDO_PKG="sudo-1.8.2.tar.gz"
236 SUDO_URL="http://www.sudo.ws/sudo/dist/${SUDO_PKG}"
237 SUDO_MD5="000f458e7391be9fdf459a9ad6a4912a"
238 # wget
239 WGET_PKG="wget-1.13.4.tar.xz"
240 WGET_URL="ftp://ftp.gnu.org/gnu/wget/${WGET_PKG}"
241 WGET_MD5="7f518b3a71e9efd330e9a0c3714f8463"
242 # SQLite (for subversion)
243 SQLITE_PKG="sqlite-autoconf-3071000.tar.gz"
244 SQLITE_URL="http://sqlite.org/${SQLITE_PKG}"
245 SQLITE_MD5="9ed2ca93577b58cfa0d01f64b9312ab9"
246 # Apache Portable Runtime (for subversion)
247 APR_PKG="apr-1.4.5.tar.bz2"
248 APR_URL="http://mirror.speednetwork.de/apache/apr/$APR_PKG"
249 APR_MD5="8b53f5a5669d0597f2da889a2f576eb6"
250 # APR config patch
251 APR_PATCH_1="apr-1.4.5-config.patch"
252 APR_PATCH_1_URL="file:///sources/local-patches/${APR_PATCH_1}"
253 APR_PATCH_1_MD5="fff6eddf998f4e956915f8053c15e41e"
254 # Apache Portable Runtime Utilities (for subversion)
255 APR_U_PKG="apr-util-1.4.1.tar.bz2"
256 APR_U_URL="http://mirrors.ircam.fr/pub/apache/apr/$APR_U_PKG"
257 APR_U_MD5="52b31b33fb1aa16e65ddaefc76e41151"
258 # APR-util config patch
259 APR_U_PATCH_1="apr-util-1.4.1-config.patch"
260 APR_U_PATCH_1_URL="file:///sources/local-patches/${APR_U_PATCH_1}"
261 APR_U_PATCH_1_MD5="4c07cb0d298ae9ddc75cd2d5acdedb2b"
262 # Subversion
263 SVN_PKG="subversion-1.7.1.tar.bz2"
264 SVN_URL="http://archive.apache.org/dist/subversion/${SVN_PKG}"
265 SVN_MD5="8a4fa74385df85a9702141b6b68b8307"
266 # GPM
267 GPM_PKG="gpm-1.20.6.tar.bz2"
268 GPM_URL="http://www.nico.schottelius.org/software/gpm/archives/$GPM_PKG"
269 GPM_MD5="6b534da16dc1b28ba828dea89e520f6f"
270fi
271
272#--- Envars not sourced from configuration
273case $PROGNAME in
274# TODO: clfs is now on git
275# clfs* ) declare -r SVN="http://svn.cross-lfs.org/svn/repos" ;;
276 * ) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
277esac
278declare -r LOG=000-masterscript.log
279 # Needed for fetching BLFS book sources when building CLFS
280declare -r SVN_2="svn://svn.linuxfromscratch.org"
281
282# Set true internal variables
283COMMON_DIR="common"
284PACKAGE_DIR=$(echo $PROGNAME | tr '[a-z]' '[A-Z]')
285MODULE=$PACKAGE_DIR/master.sh
286PKGMNGTDIR="pkgmngt"
287# The name packageManager.xml is hardcoded in *.xsl, so no variable.
288
289[[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
290source $COMMON_DIR/common-functions
291[[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
292[[ $VERBOSITY > 0 ]] && echo "OK"
293[[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
294source $MODULE
295[[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
296[[ $VERBOSITY > 0 ]] && echo "OK"
297#
298[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
299
300
301#*******************************************************************#
302[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
303source $COMMON_DIR/libs/func_check_version.sh
304[[ $? > 0 ]] && echo " function module did not load.." && exit 2
305[[ $VERBOSITY > 0 ]] && echo "OK"
306
307[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
308source $COMMON_DIR/libs/func_validate_configs.sh
309[[ $? > 0 ]] && echo " function module did not load.." && exit 2
310[[ $VERBOSITY > 0 ]] && echo "OK"
311
312[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
313source $COMMON_DIR/libs/func_custom_pkgs
314[[ $? > 0 ]] && echo " function module did not load.." && exit 2
315[[ $VERBOSITY > 0 ]] && echo "OK"
316
317
318[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
319
320
321###################################
322### MAIN ###
323###################################
324
325# Check for build prerequisites.
326echo
327 check_prerequisites
328echo "${SD_BORDER}${nl_}"
329
330validate_config
331echo "${SD_BORDER}${nl_}"
332echo -n "Are you happy with these settings? yes/no (no): "
333read ANSWER
334if [ x$ANSWER != "xyes" ] ; then
335 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
336 exit 1
337fi
338echo "${nl_}${SD_BORDER}${nl_}"
339
340# Load additional modules or configuration files based on global settings
341# compare module
342if [[ "$COMPARE" = "y" ]]; then
343 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
344 source $COMMON_DIR/libs/func_compare.sh
345 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
346 [[ $VERBOSITY > 0 ]] && echo "OK"
347fi
348#
349# optimize module
350if [[ "$OPTIMIZE" != "0" ]]; then
351 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
352 source optimize/optimize_functions
353 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
354 [[ $VERBOSITY > 0 ]] && echo "OK"
355 #
356 # optimize configurations
357 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
358 source optimize/opt_config
359 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
360 [[ $VERBOSITY > 0 ]] && echo "OK"
361 # Validate optimize settings, if required
362 validate_opt_settings
363fi
364#
365
366if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
367
368 # If $BUILDDIR has subdirectories like tools/ or bin/, stop the run
369 # and notify the user about that.
370 if [ -d $BUILDDIR/tools -o -d $BUILDDIR/bin ] && [ -z $CLEAN ] ; then
371 eval "$no_empty_builddir"
372 fi
373
374 # If requested, clean the build directory
375 clean_builddir
376
377 if [[ ! -d $JHALFSDIR ]]; then
378 mkdir -p $JHALFSDIR
379 fi
380
381 # Create $BUILDDIR/sources even though it could be created by get_sources()
382 if [[ ! -d $BUILDDIR/sources ]]; then
383 mkdir -p $BUILDDIR/sources
384 fi
385 #
386 # Create the log directory
387 if [[ ! -d $LOGDIR ]]; then
388 mkdir $LOGDIR
389 fi
390 >$LOGDIR/$LOG
391 #
392 # Copy common helper files
393 cp $COMMON_DIR/{makefile-functions,progress_bar.sh,packages.xsl} $JHALFSDIR/
394 #
395 # Fix the XSL book parser
396 sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL}
397 export XSL=$JHALFSDIR/${XSL}
398 #
399
400 # Copy packageManager.xml, if needed
401 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] &&
402 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/ &&
403 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
404 #
405 # Copy urls.xsl, if needed
406 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
407 #
408 # Copy APR patches, if needed
409 [[ "$DEP_SVN" = "y" ]] &&
410 cp $COMMON_DIR/blfs-tool-deps/apr*.patch $BUILDDIR/sources
411 #
412 # Create the test-log directory, if needed
413 [[ "$TEST" != "0" ]] && [[ ! -d $TESTLOGDIR ]] && install -d -m 1777 $TESTLOGDIR
414 #
415 # Create the installed-files directory, if needed
416 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
417 #
418 # Prepare report creation, if needed
419 if [[ "$REPORT" = "y" ]]; then
420 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
421 # After making sure that all looks sane, dump the settings to a file
422 # This file will be used to create the REPORT header
423 validate_config > $JHALFSDIR/jhalfs.config
424 fi
425 #
426 # Copy optimize files, if needed
427 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
428 #
429 # Copy compare files, if needed
430 if [[ "$COMPARE" = "y" ]]; then
431 mkdir -p $JHALFSDIR/extras
432 cp extras/* $JHALFSDIR/extras
433 fi
434 #
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 # Install blfs-tool, if requested.
444 if [[ "${BLFS_TOOL}" = "y" ]] ; then
445 # Install the files
446 [[ ! -d ${BUILDDIR}${BLFS_ROOT} ]] && mkdir -p ${BUILDDIR}${BLFS_ROOT}
447 cp -r BLFS/* ${BUILDDIR}${BLFS_ROOT}
448 cp -r menu ${BUILDDIR}${BLFS_ROOT}
449 cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT}
450 cp README.BLFS ${BUILDDIR}${BLFS_ROOT}
451 # Clean-up
452 rm -rf ${BUILDDIR}${BLFS_ROOT}/libs/.svn
453 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/.svn
454 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/lxdialog/.svn
455 # Set some harcoded envars to their proper values
456 sed -i 's,blfs-xml,'$BLFS_XML',' ${BUILDDIR}${BLFS_ROOT}/{update_book.sh,libs/book.xsl}
457 sed -i 's,tracking-dir,'$TRACKING_DIR',' ${BUILDDIR}${BLFS_ROOT}/{update_book.sh,gen-makefile.sh}
458 # Copy the dependencies build scripts
459 cp -r $COMMON_DIR/blfs-tool-deps $JHALFSDIR/
460 rm -rf $JHALFSDIR/blfs-tool-deps/.svn
461 fi
462 #
463
464 get_book
465 echo "${SD_BORDER}${nl_}"
466
467 # Get the BLFS book, if requested.
468 if [[ "${BLFS_TOOL}" = "y" ]] ; then
469 echo -n "Downloading the BLFS document, $BLFS_BRANCH_ID version... "
470 if [[ ! -d ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} ]] ; then
471 mkdir -p ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML}
472 svn co $SVN_2/BLFS/$BLFS_TREE ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} >>$LOGDIR/$LOG 2>&1
473 else
474 pushd ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} 1> /dev/null
475 svn up >>$LOGDIR/$LOG 2>&1
476 popd 1> /dev/null
477 fi
478 echo -ne "done\n"
479 echo "${SD_BORDER}${nl_}"
480 fi
481
482fi
483
484# When regenerating the Makefile, we need to know also the canonical book version
485if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
486 case $PROGNAME in
487 clfs | clfs2 | clfs3 )
488 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
489 *)
490 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
491 esac
492fi
493
494build_Makefile
495
496echo "${SD_BORDER}${nl_}"
497
498run_make
Note: See TracBrowser for help on using the repository browser.