source: jhalfs@ 4fdb8bd

ablfs
Last change on this file since 4fdb8bd was 63e068c, checked in by Pierre Labastie <pierre@…>, 13 years ago

remove the no empty build dir guard (buggy anyway) and cosmetics in a comment

  • Property mode set to 100755
File size: 15.0 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
86VERBOSITY=1
87
88[[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
89source configuration
90[[ $? > 0 ]] && echo "file: configuration did not load.." && exit 1
91[[ $VERBOSITY > 0 ]] && echo "OK"
92
93# These are boolean vars generated from Config.in.
94# ISSUE: If a boolean parameter is not set to y(es) there
95# is no variable defined by the menu app. This can
96# cause a headache if you are not aware.
97# The following variables MUST exist. If they don't, the
98# default value is n(o).
99RUNMAKE=${RUNMAKE:-n}
100GETPKG=${GETPKG:-n}
101COMPARE=${COMPARE:-n}
102RUN_FARCE=${RUN_FARCE:-n}
103RUN_ICA=${RUN_ICA:-n}
104PKGMNGT=${PKGMNGT:-n}
105BOMB_TEST=${BOMB_TEST:-n}
106STRIP=${STRIP:=n}
107REPORT=${REPORT:=n}
108VIMLANG=${VIMLANG:-n}
109FULL_LOCALE=${FULL_LOCALE:-n}
110GRSECURITY_HOST=${GRSECURITY_HOST:-n}
111CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
112REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
113INSTALL_LOG=${INSTALL_LOG:-n}
114CLEAN=${CLEAN:=n}
115SET_SSP=${SET_SSP:=n}
116SET_ASLR=${SET_ASLR:=n}
117SET_PAX=${SET_PAX:=n}
118SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
119SET_WARNINGS=${SET_WARNINGS:=n}
120SET_MISC=${SET_MISC:=n}
121SET_BLOWFISH=${SET_BLOWFISH:=n}
122
123if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
124 NO_PROGRESS="#"
125fi
126
127
128# Sanity check on the location of $BUILDDIR / $JHALFSDIR
129CWD=$(cd `dirname $0` && pwd)
130if [[ $JHALFSDIR == $CWD ]]; then
131 echo " The jhalfs source directory conflicts with the jhalfs build directory."
132 echo " Please move the source directory or change the build directory."
133 exit 2
134fi
135
136# Book sources envars
137BRANCH_ID=${BRANCH_ID:=development}
138
139case $BRANCH_ID in
140 development )
141 case $PROGNAME in
142 clfs2 ) TREE=branches/clfs-sysroot/BOOK ;;
143 clfs3 ) TREE=branches/clfs-embedded/BOOK ;;
144 *) TREE=trunk/BOOK ;;
145 esac
146 LFSVRS=development
147 ;;
148 *EDIT* ) echo " You forgot to set the branch or stable book version."
149 echo " Please rerun make and fix the configuration."
150 exit 2 ;;
151 branch-* )
152 LFSVRS=${BRANCH_ID}
153 TREE=branches/${BRANCH_ID#branch-}/BOOK
154 ;;
155 * )
156 case $PROGNAME in
157 lfs )
158 LFSVRS=${BRANCH_ID}
159 TREE=tags/${BRANCH_ID}
160 if (( ${BRANCH_ID:0:1} < 7 )) ; then
161 TREE=${TREE}/BOOK
162 fi
163 ;;
164 hlfs )
165 LFSVRS=${BRANCH_ID}
166 TREE=tags/${BRANCH_ID}/BOOK
167 ;;
168 clfs | clfs2 | clfs3)
169 LFSVRS=${BRANCH_ID}
170 TREE=tags/${BRANCH_ID}
171 ;;
172 esac
173 ;;
174esac
175
176# Set the document location...
177BOOK=${BOOK:=$PROGNAME-$LFSVRS}
178
179# blfs-tool envars
180BLFS_TOOL=${BLFS_TOOL:-n}
181if [[ "${BLFS_TOOL}" = "y" ]] ; then
182 BLFS_BRANCH_ID=${BLFS_BRANCH_ID:=development}
183 case $BLFS_BRANCH_ID in
184 development ) BLFS_TREE=trunk/BOOK ;;
185 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
186 echo " Please rerun make and fix the configuration."
187 exit 2 ;;
188 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-} ;;
189 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
190 esac
191 # Dependencies envars, easier to update.
192 # Tidy and Unzip version are harcoded also in wrt_blfs_tool_targets()
193 # libxml2
194 LIBXML_PKG="libxml2-2.7.8.tar.gz"
195 LIBXML_URL="ftp://xmlsoft.org/libxml2/${LIBXML_PKG}"
196 LIBXML_MD5="8127a65e8c3b08856093099b52599c86"
197 # libxslt
198 LIBXSLT_PKG="libxslt-1.1.26.tar.gz"
199 LIBXSLT_URL="ftp://xmlsoft.org/libxslt/${LIBXSLT_PKG}"
200 LIBXSLT_MD5="e61d0364a30146aaa3001296f853b2b9"
201 # tidy
202 TIDY_PKG="tidy-cvs_20101110.tar.bz2"
203 TIDY_URL="http://anduin.linuxfromscratch.org/sources/BLFS/svn/t/${TIDY_PKG}"
204 TIDY_MD5="dd1fe109b4259ad3f364b175787ad5e9"
205 # unzip
206 UNZIP_PKG="unzip60.tar.gz"
207 UNZIP_URL="http://downloads.sourceforge.net/infozip/${UNZIP_PKG}"
208 UNZIP_MD5="62b490407489521db863b523a7f86375"
209 # DocBook XML DTD
210 DBXML_PKG="docbook-xml-4.5.zip"
211 DBXML_URL="http://www.docbook.org/xml/4.5/${DBXML_PKG}"
212 DBXML_MD5="03083e288e87a7e829e437358da7ef9e"
213 # DocBook XSL
214# DBXSL_PKG="docbook-xsl-1.69.1.tar.bz2"
215# DBXSL_URL="http://prdownloads.sourceforge.net/docbook/${DBXSL_PKG}"
216# DBXSL_MD5="6ebd29a67f2dcc3f2220f475ee6f6552"
217 # Lynx
218 LYNX_PKG="lynx2.8.8dev.10.tar.bz2"
219 LYNX_URL="http://lynx.isc.org/current/${LYNX_PKG}"
220 LYNX_MD5="1c9ef3746520c69914b461f88de6b12e"
221 # sudo
222 SUDO_PKG="sudo-1.8.2.tar.gz"
223 SUDO_URL="http://www.sudo.ws/sudo/dist/${SUDO_PKG}"
224 SUDO_MD5="000f458e7391be9fdf459a9ad6a4912a"
225 # wget
226 WGET_PKG="wget-1.13.4.tar.xz"
227 WGET_URL="ftp://ftp.gnu.org/gnu/wget/${WGET_PKG}"
228 WGET_MD5="7f518b3a71e9efd330e9a0c3714f8463"
229 # SQLite (for subversion)
230 SQLITE_PKG="sqlite-autoconf-3071000.tar.gz"
231 SQLITE_URL="http://sqlite.org/${SQLITE_PKG}"
232 SQLITE_MD5="9ed2ca93577b58cfa0d01f64b9312ab9"
233 # Apache Portable Runtime (for subversion)
234 APR_PKG="apr-1.4.5.tar.bz2"
235 APR_URL="http://mirror.speednetwork.de/apache/apr/$APR_PKG"
236 APR_MD5="8b53f5a5669d0597f2da889a2f576eb6"
237 # APR config patch
238 APR_PATCH_1="apr-1.4.5-config.patch"
239 APR_PATCH_1_URL="file:///sources/local-patches/${APR_PATCH_1}"
240 APR_PATCH_1_MD5="fff6eddf998f4e956915f8053c15e41e"
241 # Apache Portable Runtime Utilities (for subversion)
242 APR_U_PKG="apr-util-1.4.1.tar.bz2"
243 APR_U_URL="http://mirrors.ircam.fr/pub/apache/apr/$APR_U_PKG"
244 APR_U_MD5="52b31b33fb1aa16e65ddaefc76e41151"
245 # APR-util config patch
246 APR_U_PATCH_1="apr-util-1.4.1-config.patch"
247 APR_U_PATCH_1_URL="file:///sources/local-patches/${APR_U_PATCH_1}"
248 APR_U_PATCH_1_MD5="4c07cb0d298ae9ddc75cd2d5acdedb2b"
249 # Subversion
250 SVN_PKG="subversion-1.7.1.tar.bz2"
251 SVN_URL="http://archive.apache.org/dist/subversion/${SVN_PKG}"
252 SVN_MD5="8a4fa74385df85a9702141b6b68b8307"
253 # GPM
254 GPM_PKG="gpm-1.20.6.tar.bz2"
255 GPM_URL="http://www.nico.schottelius.org/software/gpm/archives/$GPM_PKG"
256 GPM_MD5="6b534da16dc1b28ba828dea89e520f6f"
257fi
258
259#--- Envars not sourced from configuration
260case $PROGNAME in
261# TODO: clfs is now on git
262# clfs* ) declare -r SVN="http://svn.cross-lfs.org/svn/repos" ;;
263 * ) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
264esac
265declare -r LOG=000-masterscript.log
266 # Needed for fetching BLFS book sources when building CLFS
267declare -r SVN_2="svn://svn.linuxfromscratch.org"
268
269# Set true internal variables
270COMMON_DIR="common"
271PACKAGE_DIR=$(echo $PROGNAME | tr '[a-z]' '[A-Z]')
272MODULE=$PACKAGE_DIR/master.sh
273PKGMNGTDIR="pkgmngt"
274# The name packageManager.xml is hardcoded in *.xsl, so no variable.
275
276[[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
277source $COMMON_DIR/common-functions
278[[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
279[[ $VERBOSITY > 0 ]] && echo "OK"
280[[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
281source $MODULE
282[[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
283[[ $VERBOSITY > 0 ]] && echo "OK"
284#
285[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
286
287
288#*******************************************************************#
289[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
290source $COMMON_DIR/libs/func_check_version.sh
291[[ $? > 0 ]] && echo " function module did not load.." && exit 2
292[[ $VERBOSITY > 0 ]] && echo "OK"
293
294[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
295source $COMMON_DIR/libs/func_validate_configs.sh
296[[ $? > 0 ]] && echo " function module did not load.." && exit 2
297[[ $VERBOSITY > 0 ]] && echo "OK"
298
299[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
300source $COMMON_DIR/libs/func_custom_pkgs
301[[ $? > 0 ]] && echo " function module did not load.." && exit 2
302[[ $VERBOSITY > 0 ]] && echo "OK"
303
304
305[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
306
307
308###################################
309### MAIN ###
310###################################
311
312# Check for build prerequisites.
313echo
314 check_prerequisites
315echo "${SD_BORDER}${nl_}"
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 1
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 # Validate optimize settings, if required
349 validate_opt_settings
350fi
351#
352
353if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
354
355 # If requested, clean the build directory
356 clean_builddir
357
358 if [[ ! -d $JHALFSDIR ]]; then
359 mkdir -p $JHALFSDIR
360 fi
361
362 # Create $BUILDDIR/sources even though it could be created by get_sources()
363 if [[ ! -d $BUILDDIR/sources ]]; then
364 mkdir -p $BUILDDIR/sources
365 fi
366 #
367 # Create the log directory
368 if [[ ! -d $LOGDIR ]]; then
369 mkdir $LOGDIR
370 fi
371 >$LOGDIR/$LOG
372 #
373 # Copy common helper files
374 cp $COMMON_DIR/{makefile-functions,progress_bar.sh,packages.xsl} $JHALFSDIR/
375 #
376 # Fix the XSL book parser
377 sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL}
378 export XSL=$JHALFSDIR/${XSL}
379 #
380
381 # Copy packageManager.xml, if needed
382 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] &&
383 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/ &&
384 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
385 #
386 # Copy urls.xsl, if needed
387 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
388 #
389 # Copy APR patches, if needed
390 [[ "$DEP_SVN" = "y" ]] &&
391 cp $COMMON_DIR/blfs-tool-deps/apr*.patch $BUILDDIR/sources
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
417 # Copy custom tools config files, if requested
418 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
419 echo "Copying custom tool scripts to $JHALFSDIR"
420 mkdir -p $JHALFSDIR/custom-commands
421 cp -f custom/config/* $JHALFSDIR/custom-commands
422 fi
423 #
424 # Install blfs-tool, if requested.
425 if [[ "${BLFS_TOOL}" = "y" ]] ; then
426 # Install the files
427 [[ ! -d ${BUILDDIR}${BLFS_ROOT} ]] && mkdir -p ${BUILDDIR}${BLFS_ROOT}
428 cp -r BLFS/* ${BUILDDIR}${BLFS_ROOT}
429 cp -r menu ${BUILDDIR}${BLFS_ROOT}
430 cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT}
431 cp README.BLFS ${BUILDDIR}${BLFS_ROOT}
432 # Clean-up
433 make -C ${BUILDDIR}${BLFS_ROOT}/menu clean
434 rm -rf ${BUILDDIR}${BLFS_ROOT}/libs/.svn
435 rm -rf ${BUILDDIR}${BLFS_ROOT}/xsl/.svn
436 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/.svn
437 rm -rf ${BUILDDIR}${BLFS_ROOT}/menu/lxdialog/.svn
438 # Set some harcoded envars to their proper values
439 sed -i 's,tracking-dir,'$TRACKING_DIR',' ${BUILDDIR}${BLFS_ROOT}/{Makefile,gen-makefile.sh}
440 # Copy the dependencies build scripts
441 cp -r $COMMON_DIR/blfs-tool-deps $JHALFSDIR/
442 rm -rf $JHALFSDIR/blfs-tool-deps/.svn
443 fi
444 #
445
446 get_book
447 echo "${SD_BORDER}${nl_}"
448
449 # Get the BLFS book, if requested.
450 if [[ "${BLFS_TOOL}" = "y" ]] ; then
451 echo -n "Downloading the BLFS document, $BLFS_BRANCH_ID version... "
452 if [[ ! -d ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} ]] ; then
453 mkdir -p ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML}
454 svn co $SVN_2/BLFS/$BLFS_TREE ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} >>$LOGDIR/$LOG 2>&1
455 else
456 pushd ${BUILDDIR}${BLFS_ROOT}/${BLFS_XML} 1> /dev/null
457 svn up >>$LOGDIR/$LOG 2>&1
458 popd 1> /dev/null
459 fi
460 echo -ne "done\n"
461 echo "${SD_BORDER}${nl_}"
462 fi
463
464fi
465
466# When regenerating the Makefile, we need to know also the
467# canonical book version
468if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
469 case $PROGNAME in
470 clfs | clfs2 | clfs3 )
471 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
472 *)
473 VERSION=$(xmllint --noent $JHALFSDIR/$BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
474 esac
475fi
476
477build_Makefile
478
479echo "${SD_BORDER}${nl_}"
480
481run_make
Note: See TracBrowser for help on using the repository browser.