source: jhalfs@ eb14b7f

2.4 ablfs-more legacy new_features trunk
Last change on this file since eb14b7f was 1cf621b, checked in by Pierre Labastie <pierre@…>, 12 years ago

Take minimal versions from the book host requirements, instead
of hard coding them

  • Property mode set to 100755
File size: 15.9 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:=$JHALFSDIR/$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
326validate_config
327echo "${SD_BORDER}${nl_}"
328echo -n "Are you happy with these settings? yes/no (no): "
329read ANSWER
330if [ x$ANSWER != "xyes" ] ; then
331 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
332 exit 1
333fi
334echo "${nl_}${SD_BORDER}${nl_}"
335
336# Load additional modules or configuration files based on global settings
337# compare module
338if [[ "$COMPARE" = "y" ]]; then
339 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
340 source $COMMON_DIR/libs/func_compare.sh
341 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
342 [[ $VERBOSITY > 0 ]] && echo "OK"
343fi
344#
345# optimize module
346if [[ "$OPTIMIZE" != "0" ]]; then
347 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
348 source optimize/optimize_functions
349 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
350 [[ $VERBOSITY > 0 ]] && echo "OK"
351 #
352 # optimize configurations
353 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
354 source optimize/opt_config
355 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
356 [[ $VERBOSITY > 0 ]] && echo "OK"
357 # Validate optimize settings, if required
358 validate_opt_settings
359fi
360#
361
362if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
363
364 # If $BUILDDIR has subdirectories like tools/ or bin/, stop the run
365 # and notify the user about that.
366 if [ -d $BUILDDIR/tools -o -d $BUILDDIR/bin ] && [ -z $CLEAN ] ; then
367 eval "$no_empty_builddir"
368 fi
369
370 # If requested, clean the build directory
371 clean_builddir
372
373 if [[ ! -d $JHALFSDIR ]]; then
374 mkdir -p $JHALFSDIR
375 fi
376
377 # Create $BUILDDIR/sources even though it could be created by get_sources()
378 if [[ ! -d $BUILDDIR/sources ]]; then
379 mkdir -p $BUILDDIR/sources
380 fi
381 #
382 # Create the log directory
383 if [[ ! -d $LOGDIR ]]; then
384 mkdir $LOGDIR
385 fi
386 >$LOGDIR/$LOG
387 #
388 # Copy common helper files
389 cp $COMMON_DIR/{makefile-functions,progress_bar.sh,packages.xsl} $JHALFSDIR/
390 #
391 # Fix the XSL book parser
392 sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL}
393 export XSL=$JHALFSDIR/${XSL}
394 #
395
396 # Copy packageManager.xml, if needed
397 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] &&
398 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/ &&
399 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
400 #
401 # Copy urls.xsl, if needed
402 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
403 #
404 # Copy APR patches, if needed
405 [[ "$DEP_SVN" = "y" ]] &&
406 cp $COMMON_DIR/blfs-tool-deps/apr*.patch $BUILDDIR/sources
407 #
408 # Create the test-log directory, if needed
409 [[ "$TEST" != "0" ]] && [[ ! -d $TESTLOGDIR ]] && install -d -m 1777 $TESTLOGDIR
410 #
411 # Create the installed-files directory, if needed
412 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
413 #
414 # Prepare report creation, if needed
415 if [[ "$REPORT" = "y" ]]; then
416 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
417 # After making sure that all looks sane, dump the settings to a file
418 # This file will be used to create the REPORT header
419 validate_config > $JHALFSDIR/jhalfs.config
420 fi
421 #
422 # Copy optimize files, if needed
423 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
424 #
425 # Copy compare files, if needed
426 if [[ "$COMPARE" = "y" ]]; then
427 mkdir -p $JHALFSDIR/extras
428 cp extras/* $JHALFSDIR/extras
429 fi
430 #
431
432 # Copy custom tools config files, if requested
433 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
434 echo "Copying custom tool scripts to $JHALFSDIR"
435 mkdir -p $JHALFSDIR/custom-commands
436 cp -f custom/config/* $JHALFSDIR/custom-commands
437 fi
438 #
439 # Install blfs-tool, if requested.
440 if [[ "${BLFS_TOOL}" = "y" ]] ; then
441 # Install the files
442 [[ ! -d ${BUILDDIR}${BLFS_ROOT} ]] && mkdir -p ${BUILDDIR}${BLFS_ROOT}
443 cp -r BLFS/* ${BUILDDIR}${BLFS_ROOT}
444 cp -r menu ${BUILDDIR}${BLFS_ROOT}
445 cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT}
446 cp README.BLFS ${BUILDDIR}${BLFS_ROOT}
447 # Clean-up
448 rm -rf ${BUILDDIR}${BLFS_ROOT}/libs/.svn
449 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/.svn
450 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/lxdialog/.svn
451 # Set some harcoded envars to their proper values
452 sed -i 's,blfs-xml,'$BLFS_XML',' ${BUILDDIR}${BLFS_ROOT}/{update_book.sh,libs/book.xsl}
453 sed -i 's,tracking-dir,'$TRACKING_DIR',' ${BUILDDIR}${BLFS_ROOT}/{update_book.sh,gen-makefile.sh}
454 # Copy the dependencies build scripts
455 cp -r $COMMON_DIR/blfs-tool-deps $JHALFSDIR/
456 rm -rf $JHALFSDIR/blfs-tool-deps/.svn
457 fi
458 #
459
460# Download or updates the book source
461 get_book
462 extract_commands
463 echo "${SD_BORDER}${nl_}"
464
465 # Get the BLFS book, if requested.
466 if [[ "${BLFS_TOOL}" = "y" ]] ; then
467 echo -n "Downloading the BLFS document, $BLFS_BRANCH_ID version... "
468 if [[ ! -d ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} ]] ; then
469 mkdir -p ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML}
470 svn co $SVN_2/BLFS/$BLFS_TREE ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} >>$LOGDIR/$LOG 2>&1
471 else
472 pushd ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} 1> /dev/null
473 svn up >>$LOGDIR/$LOG 2>&1
474 popd 1> /dev/null
475 fi
476 echo -ne "done\n"
477 echo "${SD_BORDER}${nl_}"
478 fi
479
480fi
481
482# When regenerating the Makefile, we need to know also the canonical book version
483if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
484 case $PROGNAME in
485 clfs | clfs2 | clfs3 )
486 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
487 *)
488 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
489 esac
490fi
491
492build_Makefile
493
494echo "${SD_BORDER}${nl_}"
495
496# Check for build prerequisites.
497 echo
498 cd $CWD
499 check_prerequisites
500 echo "${SD_BORDER}${nl_}"
501# All is well, run the build (if requested)
502run_make
Note: See TracBrowser for help on using the repository browser.