source: common/common-functions@ aed6c72

1.0 2.3 2.3.x 2.4 ablfs ablfs-more legacy new_features trunk
Last change on this file since aed6c72 was 15787a3, checked in by George Boudreau <georgeb@…>, 18 years ago

small adjustment to delete before unpack routine, better handling of non-standard names

  • Property mode set to 100644
File size: 24.3 KB
RevLine 
[877cc6a]1#!/bin/bash
2
3# $Id$
4
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
[47e524f]27declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
28declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
29declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
[877cc6a]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
36usage() {
37cat <<- -EOF-
38${DD_BORDER}
39${BOLD}
40 Usage: $0 ${BOLD}[OPTION]
41
[efc0d1e]42${RED}IMPORTANT:${OFF} Only supported command line switches are listed here.
[4dd25a1]43 For more fine-grained setups you must edit the relevant
[efc0d1e]44 configuration files placed under ${BOLD}common/${OFF} and ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])/${OFF}
45
[877cc6a]46Options:
47${BOLD} -h, --help${OFF}
48 print this help, then exit
49
50${BOLD} -V, --version${OFF}
51 print version information, then exit
52
53${BOLD} -B, --book VER${OFF}
[e2fa2bd]54 use VER version of the book as the system to build.
55 Supported versions are: dev*, trunk, SVN
[1ec8fce]56 These are aliases for the Development version of {C,H}LFS
[877cc6a]57
58${BOLD} -D --directory DIR${OFF}
[73e5448]59 use DIR directory for building ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])${OFF}; all files jhalfs produces
[1a1f099]60 will be in the directory DIR/${SCRIPT_ROOT}.
[511923a]61 The current setting for BUILDDIR is "$BUILDDIR"
[877cc6a]62
63${BOLD} -G, --get-packages${OFF}
64 download the packages and patches. This assumes that the server declared
65 in the configuration file has the proper packages and patches for the
66 book version being processed.
67
[1b65a84]68${BOLD} -O, --optimize${OFF}
69 Optimize [0-2]
70 0 = no optimization
[1ec8fce]71 1 = optimize final system only
72 2 = optimize both temporary tools and final system
[1b65a84]73 Edit common/opt_config{,.d/*} and common/opt_override as desired.
74
[877cc6a]75${BOLD} -T, --testsuites N ${OFF}
76 Run test suites [0-3]
77 0 = none
[0755d1a]78 1 = only final system Glibc, GCC and Binutils testsuites
79 2 = all final system testsuites
[b240ee6]80 3 = all temporary tools and final system testsuites
[877cc6a]81 In CLFS, 3 is an alias to 2
82
83${BOLD} -W, --working-copy DIR${OFF}
84 use the local working copy placed in DIR as the $(echo $PROGNAME | tr [a-z] [A-Z]) book
85
[45f82718]86${BOLD} -C, --comparasion TYPE${OFF}
[e2fa2bd]87 do iterative comparison analysis. This extends the total build time
88 considerably because the entire final system will rebuild itself
89 the number of times specified by ITERATIONS in common/config.
[6dcfd53]90 Types allowed are:
[e2fa2bd]91 ICA = do ICA as designed by Greg Schafer
[0ad851d]92 farce = do the farce analysis designed by Ken Moffat
93 both = perfom both ICA and farce analysis
[45f82718]94
[877cc6a]95${BOLD} -F, --fstab FILE${OFF}
96 use FILE as the /etc/fstab file for the ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])${OFF} system. If not specified,
97 a default /etc/fstab file with dummy values is created.
98
99${BOLD} -K, --kernel-config FILE${OFF}
100 use the kernel configuration file specified in FILE to build the kernel.
101 if the file is not found, or if not specified, the kernel build is skipped.
102
103${BOLD} -M, --run-make${OFF}
104 run make on the generated Makefile
105
106${BOLD} -R --rebuild${OFF}
[e2fa2bd]107 clean the build directory before perfoming any other task. The directory
[73e5448]108 is cleaned only if it was populated by a previous jhalfs run.
[877cc6a]109-EOF-
110
111[[ ${PROGNAME} = "clfs" ]] &&
112cat <<- -EOF-
113
114${BOLD} -A, --arch ARCH ${OFF}
115 Select the TARGET architecture, valid selections are:
116 32bit builds
[b0dd4bd]117 x86, i486, i586, ppc, mips, mipsel, sparc
[877cc6a]118 64bit builds
119 x86_64-64, mips64-64, mipsel64-64, sparc64-64, alpha
120 64bit multi-lib
121 x86_64, mips64, mipsel64, sparc64, ppc64
122
[c7c5a53]123${BOLD} --boot-config FILE ${OFF}
[877cc6a]124 The configuration file for the bootstrap kernel if method=boot
125
126${BOLD} --method BUILDMETHOD ${OFF}
127 Select the build method, chroot or boot
128-EOF-
129
130[[ ${PROGNAME} = "hlfs" ]] &&
131cat <<- -EOF-
132
133${BOLD} --model STYLE ${OFF}
134 Select the library model for the HLFS system
135 Valid choices are: glibc or uclibc
136-EOF-
137
138cat <<- -EOF-
139${DD_BORDER}
140-EOF-
141 exit
142}
143
144version="
[73e5448]145${BOLD} \"jhalfs\"${OFF} builder tool (development) \$Rev$
[877cc6a]146\$Date$
147
148${BOLD} \"${PROGNAME}\"${OFF} script module
149
150Written by George Boudreau,
151 Manuel Canales Esparcia,
152 Jeremy Huntwork
153
154This program is published under the ${BOLD}Gnu General Public License, Version 2.${OFF}
155"
156
157
158no_empty_builddir() {
159 'clear'
160cat <<- -EOF-
161${DD_BORDER}
162
163${tab_}${tab_}${BOLD}${RED}W A R N I N G${OFF}
164 Looks like the \$BUILDDIR directory contains subdirectories
165 from a previous HLFS build.
166
167 Please format the partition mounted on \$BUILDDIR or set
[73e5448]168 a different build directory before running jhalfs.
[877cc6a]169${OFF}
170${DD_BORDER}
171-EOF-
172 exit
173}
174
175
176help="${nl_}Try '$0 --help' for more information."
177
178exit_missing_arg="\
179echo \"Option '\$1' requires an argument\" >&2
180echo \"\$help\" >&2
181exit 1"
182
[73e5448]183HEADER="# This file is automatically generated by jhalfs
[877cc6a]184# DO NOT EDIT THIS FILE MANUALLY
185#
186# Generated on `date \"+%F %X %Z\"`"
187
188
189
190#----------------------------------#
[3a321ea]191wrt_target() { # Create target and initialize log file
[877cc6a]192#----------------------------------#
193 local i=$1
194 local PREV=$2
[4edf3b7]195 case $i in
196 iteration* ) local LOGFILE=$this_script.log ;;
197 * ) local LOGFILE=$this_script ;;
198 esac
[877cc6a]199(
200cat << EOF
201
202$i: $PREV
203 @\$(call echo_message, Building)
[46758a2]204 @./progress_bar.sh \$@ &
[1a1f099]205 @echo -e "\n\`date\`\n\nKB: \`du -skx --exclude=${SCRIPT_ROOT} \$(MOUNT_PT)\`\n" >logs/$LOGFILE
[877cc6a]206EOF
207) >> $MKFILE.tmp
208}
209
210
[5842156]211#----------------------------------#
212wrt_remove_existing_dirs() { #
213#----------------------------------#
214 local PKG_NAME=$1
215(
216cat << EOF
[3b3251a]217 @PKG_PATH=\`ls -t \$(MOUNT_PT)\$(SRC)/${PKG_NAME} | head -n1\` && \\
218 ROOT=\`tar -tf \$\$PKG_PATH | head -n1 | sed -e 's@^./@@;s@/.*@@'\` && \\
[5842156]219 [[ -n \$\$ROOT ]] && \\
220 rm -rf \$(MOUNT_PT)\$(SRC)/\$\$ROOT && \\
[15787a3]221 if [ -e \$(MOUNT_PT)\$(SRC)/${PKG_NAME%-*}-build ]; then \\
222 rm -rf \$(MOUNT_PT)\$(SRC)/${PKG_NAME%-*}-build; \\
[5842156]223 fi;
224EOF
225) >> $MKFILE.tmp
226}
227
228#----------------------------------#
229wrt_remove_existing_dirs2() { #
230#----------------------------------#
231 local PKG_NAME=$1
232(
233cat << EOF
[3b3251a]234 @PKG_PATH=\`ls -t \$(SRC)/${PKG_NAME} | head -n1\` && \\
235 ROOT=\`tar -tf \$\$PKG_PATH | head -n1 | sed -e 's@^./@@;s@/.*@@'\` && \\
[5842156]236 [[ -n \$\$ROOT ]] && \\
237 rm -rf \$(SRC)/\$\$ROOT && \\
[15787a3]238 if [ -e \$(SRC)/${PKG_NAME%-*}-build ]; then \\
239 rm -rf \$(SRC)/${PKG_NAME%-*}-build; \\
[5842156]240 fi;
241EOF
242) >> $MKFILE.tmp
243}
244
245
246
[877cc6a]247#----------------------------------#
248wrt_unpack() { # Unpack and set 'ROOT' var
249#----------------------------------#
250 local FILE=$1
[5842156]251 local optSAVE_PREVIOUS=$2
[82eb8c1]252
[5842156]253 if [ "${optSAVE_PREVIOUS}" != "1" ]; then
254 wrt_remove_existing_dirs "$FILE"
255 fi
[877cc6a]256(
257cat << EOF
258 @\$(call unpack,$FILE)
[82eb8c1]259 @ROOT=\`head -n1 \$(MOUNT_PT)\$(SRC)/\$(PKG_LST) | sed 's@^./@@;s@/.*@@'\` && \\
[877cc6a]260 echo "export PKGDIR=\$(MOUNT_PT)\$(SRC)/\$\$ROOT" > envars && \\
[15537d5]261 chown -R lfs \$(MOUNT_PT)\$(SRC)/\$\$ROOT
[877cc6a]262EOF
263) >> $MKFILE.tmp
264}
265
266
267#----------------------------------#
268wrt_unpack2() { #
269#----------------------------------#
270 local FILE=$1
[5842156]271 local optSAVE_PREVIOUS=$2
272
273 if [ "${optSAVE_PREVIOUS}" != "1" ]; then
274 wrt_remove_existing_dirs "$FILE"
275 fi
[877cc6a]276(
277cat << EOF
278 @\$(call unpack2,$FILE)
[a229600]279 @ROOT=\`head -n1 \$(MOUNT_PT)\$(SRC)/\$(PKG_LST) | sed 's@^./@@;s@/.*@@'\` && \\
[877cc6a]280 echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
281EOF
282) >> $MKFILE.tmp
283}
284
285
[261eea6]286#----------------------------------#
287wrt_unpack3() { #
288#----------------------------------#
[877cc6a]289 local FILE=$1
[5842156]290 local optSAVE_PREVIOUS=$2
291
292 if [ "${optSAVE_PREVIOUS}" != "1" ]; then
293 wrt_remove_existing_dirs2 "$FILE"
294 fi
[877cc6a]295(
296cat << EOF
297 @\$(call unpack3,$FILE)
[82eb8c1]298 @ROOT=\`head -n1 \$(SRC)/\$(PKG_LST) | sed 's@^./@@;s@/.*@@'\` && \\
[877cc6a]299 echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
300EOF
301) >> $MKFILE.tmp
302}
303
[a229600]304#----------------------------------#
305wrt_test_log() { # Initialize testsuite log file
306#----------------------------------#
307 local TESTLOGFILE=$1
308(
309cat << EOF
310 @echo "export TEST_LOG=$TESTLOGDIR/$TESTLOGFILE" >> envars && \\
311 su - lfs -c "echo -e '\n\`date\`\n' >$TESTLOGDIR/$TESTLOGFILE"
312EOF
313) >> $MKFILE.tmp
314}
315
316#----------------------------------#
317wrt_test_log2() { #
318#----------------------------------#
319 local TESTLOGFILE=$1
320(
321cat << EOF
322 @echo "export TEST_LOG=/$SCRIPT_ROOT/test-logs/$TESTLOGFILE" >> envars && \\
323 echo -e "\n\`date\`\n" >test-logs/$TESTLOGFILE
324EOF
325) >> $MKFILE.tmp
326}
327
[877cc6a]328#----------------------------------#
329wrt_target_vars() { # Target vars for hlfs (cross-build method)
330#----------------------------------#
331(
332cat << EOF
333 @echo "export target=$(uname -m)-${TARGET}" >> envars && \\
334 echo "export ldso=/lib/${LOADER}" >> envars
335EOF
336) >> $MKFILE.tmp
337
338}
339
340
341#----------------------------------#
[3a321ea]342wrt_run_as_su() { # Execute script inside time { }, footer to log file
[877cc6a]343#----------------------------------#
344 local this_script=$1
345 local file=$2
346(
347cat << EOF
[3a321ea]348 @( time { su - lfs -c "source /home/lfs/.bashrc && $JHALFSDIR/${PROGNAME}-commands/$file" >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
[1a1f099]349 echo -e "\nKB: \`du -skx --exclude=${SCRIPT_ROOT} \$(MOUNT_PT)\`\n" >>logs/$this_script
[877cc6a]350EOF
351) >> $MKFILE.tmp
352}
353
354
355#----------------------------------#
[3a321ea]356wrt_run_as_root() { # Some scripts must be run as root..
[877cc6a]357#----------------------------------#
358 local this_script=$1
359 local file=$2
360(
361cat << EOF
[3a321ea]362 @( time { export LFS=\$(MOUNT_PT) && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
[1a1f099]363 echo -e "\nKB: \`du -skx --exclude=${SCRIPT_ROOT} \$(MOUNT_PT)\`\n" >>logs/$this_script
[877cc6a]364EOF
365) >> $MKFILE.tmp
366}
367
368
[261eea6]369#----------------------------------#
370wrt_run_as_root2() { #
371#----------------------------------#
[877cc6a]372 local this_script=$1
373 local file=$2
374(
375cat << EOF
[3a321ea]376 @( time { source envars && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
[1a1f099]377 echo -e "\nKB: \`du -skx --exclude=${SCRIPT_ROOT} \`\n" >>logs/$this_script
[877cc6a]378EOF
379) >> $MKFILE.tmp
380}
381
382
383
384#----------------------------------#
385wrt_run_as_chroot1() { #
386#----------------------------------#
387 local this_script=$1
388 local file=$2
389(
390 cat << EOF
[1a1f099]391 @( time { \$(CHROOT1) 'cd /${SCRIPT_ROOT} && source envars && /${SCRIPT_ROOT}/${PROGNAME}-commands/$file >>/${SCRIPT_ROOT}/logs/${this_script} 2>&1' ; } ) 2>>logs/$this_script && \\
392 echo -e "\nKB: \`du -skx --exclude=${SCRIPT_ROOT} \$(MOUNT_PT)\`\n" >>logs/${this_script}
[877cc6a]393EOF
394) >> $MKFILE.tmp
395}
396
397
398#----------------------------------#
399wrt_run_as_chroot2() { #
400#----------------------------------#
401 local this_script=$1
402 local file=$2
403(
404cat << EOF
[1a1f099]405 @( time { \$(CHROOT2) 'cd /${SCRIPT_ROOT} && source envars && /${SCRIPT_ROOT}/${PROGNAME}-commands/$file >>/${SCRIPT_ROOT}/logs/${this_script} 2>&1' ; } ) 2>>logs/$this_script && \\
406 echo -e "\nKB: \`du -skx --exclude=${SCRIPT_ROOT} \$(MOUNT_PT)\`\n" >>logs/${this_script}
[877cc6a]407EOF
408) >> $MKFILE.tmp
409}
410
411
412#----------------------------------#
413wrt_copy_fstab() { #
414#----------------------------------#
415 local i=$1
416(
417 cat << EOF
[3a321ea]418 @cp -v $FSTAB \$(MOUNT_PT)/etc/fstab >>logs/$i 2>&1
[877cc6a]419EOF
420) >> $MKFILE.tmp
421}
422
423#----------------------------------#
[3a321ea]424wrt_copy_fstab2() { #
[877cc6a]425#----------------------------------#
426 local i=$1
427(
428 cat << EOF
[3a321ea]429 @cp -v /sources/fstab /etc/fstab >>logs/$i 2>&1
[877cc6a]430EOF
431) >> $MKFILE.tmp
432}
433
434
435#----------------------------------#
[0bdf6ed]436wrt_remove_build_dirs() { #
[877cc6a]437#----------------------------------#
[0bdf6ed]438 local name=$1
[877cc6a]439(
[0bdf6ed]440cat << EOF
[82eb8c1]441 @ROOT=\`head -n1 \$(MOUNT_PT)\$(SRC)/\$(PKG_LST) | sed 's@^./@@;s@/.*@@'\` && \\
[b7faa5a]442 rm -r \$(MOUNT_PT)\$(SRC)/\$\$ROOT && \\
443 if [ -e \$(MOUNT_PT)\$(SRC)/$name-build ]; then \\
[0bdf6ed]444 rm -r \$(MOUNT_PT)\$(SRC)/$name-build; \\
445 fi;
446EOF
447) >> $MKFILE.tmp
448}
449
450
451#----------------------------------#
452wrt_remove_build_dirs2() { #
453#----------------------------------#
454 local name=$1
455(
456cat << EOF
[82eb8c1]457 @ROOT=\`head -n1 \$(SRC)/\$(PKG_LST) | sed 's@^./@@;s@/.*@@'\` && \\
[b7faa5a]458 rm -r \$(SRC)/\$\$ROOT && \\
459 if [ -e \$(SRC)/$name-build ]; then \\
[0bdf6ed]460 rm -r \$(SRC)/$name-build; \\
461 fi;
[877cc6a]462EOF
463) >> $MKFILE.tmp
464}
465
466
[453bef0]467#----------------------------------#
[261eea6]468wrt_report() { #
[453bef0]469#----------------------------------#
470(
471cat << EOF
472
473create-sbu_du-report: $PREV
474 @\$(call echo_message, Building)
[a9429d5]475 @./create-sbu_du-report.sh logs $VERSION
[453bef0]476 @\$(call echo_report,$VERSION-SBU_DU-$(date --iso-8601).report)
477 @touch \$@
478EOF
479) >> $MKFILE.tmp
480
481chapter789="$chapter789 create-sbu_du-report"
482}
483
484
[877cc6a]485#----------------------------#
[261eea6]486run_make() { #
[877cc6a]487#----------------------------#
488 # Test if make must be run.
489 if [ "$RUNMAKE" = "1" ] ; then
490 # Test to make sure we're running the build as root
491 if [ "$UID" != "0" ] ; then
492 echo "You must be logged in as root to successfully build the system."
493 exit 1
494 fi
495 # Build the system
496 if [ -e $MKFILE ] ; then
497 echo -ne "Building the system...\n"
[a167246]498 cd $JHALFSDIR && make
[877cc6a]499 echo -ne "done\n"
500 fi
501 fi
502}
503
504
505#----------------------------#
[261eea6]506clean_builddir() { #
[877cc6a]507#----------------------------#
508 # Test if the clean must be done.
509 if [ "$CLEAN" = "1" ] ; then
510 # Test to make sure we're running the clean as root
511 if [ "$UID" != "0" ] ; then
512 echo "You must be logged in as root to clean the build directory."
513 exit 1
514 fi
515 # Test to make sure that the build directory was populated by jhalfs
516 if [ ! -d $JHALFSDIR ] || [ ! -d $BUILDDIR/sources ] ; then
[73e5448]517 echo "Looks like $BUILDDIR was not populated by a previous jhalfs run."
[877cc6a]518 exit 1
519 else
520 # Clean the build directory
521 echo -ne "Cleaning $BUILDDIR...\n"
522 rm -rf $BUILDDIR/{bin,boot,dev,etc,home,lib,media,mnt,opt,proc,root,sbin,srv,sys,tmp,tools,cross-tools,usr,var}
523 echo -ne "Cleaning $JHALFSDIR...\n"
524 rm -rf $JHALFSDIR/{0*,1*,envars,sources-dir,*commands,logs,Makefile,*.xsl,makefile-functions,packages,patches}
525 echo -ne "Cleaning remainig extracted sources in $BUILDDIR/sources...\n"
526 rm -rf `find $BUILDDIR/sources/* -maxdepth 0 -type d`
527 echo -ne "done\n"
528 fi
529 fi
530}
531
532#----------------------------#
[261eea6]533get_book() { #
[877cc6a]534#----------------------------#
535 cd $JHALFSDIR
536
537 if [ -z $WC ] ; then
538 # Check for Subversion instead of just letting the script hit 'svn' and fail.
539 test `type -p svn` || eval "echo \"This feature requires Subversion.\"
540 exit 1"
541 echo -n "Downloading the $PROGNAME document, $LFSVRS version... "
542
543 case $PROGNAME in
544 lfs) svn_root="LFS" ;;
545 hlfs) svn_root="HLFS" ;;
546 clfs) svn_root="cross-lfs" ;;
547 *) echo "BOOK not defined in function <get_book>"
548 exit 1 ;;
549 esac
550 # Grab a fresh book if it's missing, otherwise, update it from the
551 # repo. If we've already extracted the commands, move on to getting the
552 # sources.
553 if [ -d ${PROGNAME}-$LFSVRS ] ; then
554 cd ${PROGNAME}-$LFSVRS
[19528f8]555 if LC_ALL=C svn up | grep -q At && test -d $JHALFSDIR/${PROGNAME}-commands && \
556 test -f $JHALFSDIR/packages ; then
[877cc6a]557 echo -ne "done\n"
558 # Set the canonical book version
559 cd $JHALFSDIR
560 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
561 get_sources
562 else
563 echo -ne "done\n"
564 # Set the canonical book version
565 cd $JHALFSDIR
566 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
567 extract_commands
568 fi
569 else
570 case $LFSVRS in
571 development)
572 svn co $SVN/${svn_root}/trunk/BOOK ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
573 esac
574 echo -ne "done\n"
575 # Set the canonical book version
576 cd $JHALFSDIR
577 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
578 extract_commands
579 fi
580 else
581 echo -ne "Using $BOOK as book's sources ...\n"
582 # Set the canonical book version
583 cd $JHALFSDIR
584 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
585 extract_commands
586 fi
587}
588
589#----------------------------#
590extract_commands() { #
591#----------------------------#
592
593 # Check for libxslt instead of just letting the script hit 'xsltproc' and fail.
594 test `type -p xsltproc` || eval "echo \"This feature requires libxslt.\"
595 exit 1"
596
597 cd $JHALFSDIR
598 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
599
600 # Start clean
[bfc07d6]601 if [ -d ${PROGNAME}-commands ]; then
602 rm -rf ${PROGNAME}-commands
603 mkdir -v ${PROGNAME}-commands
[877cc6a]604 fi
605 echo -n "Extracting commands for"
606
607 # Dump the commands in shell script form from the HLFS book.
608 case ${PROGNAME} in
609 clfs)
610 echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture"
611 xsltproc --nonet \
612 --xinclude \
613 --stringparam method $METHOD \
614 --stringparam testsuite $TEST \
615 --stringparam vim-lang $VIMLANG \
616 --stringparam timezone $TIMEZONE \
617 --stringparam page $PAGE \
618 --stringparam lang $LANG \
619 --stringparam keymap $KEYMAP \
620 -o ./${PROGNAME}-commands/ $XSL $BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1
621 ;;
622 hlfs)
623 echo -n " ${L_arrow}${BOLD}$MODEL${R_arrow} HLFS libc implementation"
624 xsltproc --nonet \
625 --xinclude \
626 --stringparam model $MODEL \
627 --stringparam testsuite $TEST \
628 --stringparam timezone $TIMEZONE \
629 --stringparam page $PAGE \
630 --stringparam lang $LANG \
631 --stringparam lc_all $LC_ALL \
632 --stringparam keymap $KEYMAP \
633 --stringparam grsecurity_host $GRSECURITY_HOST \
634 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
635 ;;
636 lfs)
637 echo -n " ${L_arrow}${BOLD}LFS${R_arrow} build"
638 xsltproc --nonet \
639 --xinclude \
640 --stringparam testsuite $TEST \
641 --stringparam vim-lang $VIMLANG \
642 --stringparam timezone $TIMEZONE \
643 --stringparam page $PAGE \
644 --stringparam lang $LANG \
645 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
646 ;;
[15cad16]647 *) exit 1 ;;
[877cc6a]648 esac
649
650 echo " ...OK"
651
652 # Make the scripts executable.
653 chmod -R +x $JHALFSDIR/${PROGNAME}-commands
654
[15cad16]655 # Create the packages file. We need it for proper Makefile creation
656 rm -f packages
[1ec8fce]657 echo -n "Creating <${PROGNAME}> specific packages file"
658 grep "\-version " $BOOK/packages.ent | sed -e 's@<!ENTITY @@' \
659 -e 's@">@"@' > packages
660 echo " ...OK"
[877cc6a]661
662 # Done. Moving on...
663 get_sources
664}
665
666#----------------------------#
[15cad16]667get_sources() { # Download file, write name to MISSING_FILES.DMP if an error
[93135fd]668#----------------------------#
669 local saveIFS=$IFS
[26053c4]670 local IFS line URL1 URL2 FILE BOOKMD5 MD5 HAVEMD5 fromARCHIVE
[93135fd]671
672 # Test if the packages must be downloaded
673 [ ! "$GETPKG" = "1" ] && return
674
675 gs_wrt_message(){
676 echo "${RED}$1${OFF}"
[c7dbe78]677 echo "$1" >> MISSING_FILES.DMP
678 }
[93135fd]679 # Housekeeping
680 [[ ! -d $BUILDDIR/sources ]] && mkdir $BUILDDIR/sources
681 cd $BUILDDIR/sources
682 [[ -f MD5SUMS ]] && rm MD5SUMS
683 [[ -f MISSING_FILES.DMP ]] && rm MISSING_FILES.DMP
684 [[ -f urls.lst ]] && rm urls.lst
685
686 # Generate URLs file
687 create_urls
688
689 IFS=$'\x0A' # Modify the 'internal field separator' to break on 'LF' only
690 for line in `cat urls.lst`; do
691 IFS=$saveIFS # Restore the system defaults
692
693 # Skip some packages if they aren't needed
694 case $line in
695 */tcl* | */expect* | */dejagnu* | */tree* | */gcc-testsuite* )
696 [[ "$TEST" = "0" ]] && continue
697 ;;
698 */vim-*-lang* )
699 [[ "$VIMLANG" = "0" ]] && continue
700 ;;
[0c3f2f9]701 *linux/linux-* )
[294c937]702 [[ -z "$CONFIG" ]] && [[ -z "$BOOT_CONFIG" ]] && \
703 [[ "$GETKERNEL" = "0" ]] && continue
[0c3f2f9]704 ;;
[93135fd]705 esac
706
707 # Locations
[296ae69]708 URL1=`echo $line | cut -d" " -f2` # Preferred URL
709 URL2=`echo $line | cut -d" " -f1` # Fallback Upstream URL
[26053c4]710 FILE=`basename $URL1` # File name
711 BOOKMD5=`echo $line | cut -d" " -f3` # MD5 book value
712
[8a43b5b]713 # Validation pair
714 MD5="$BOOKMD5 $FILE"
715 HAVEMD5=1
[93135fd]716
717 set -e
[c7dbe78]718 # If the file exists in the archive copy it to the
[93135fd]719 # $BUILDDIR/sources dir. MD5SUM will be validated later.
720 if [ ! -z ${SRC_ARCHIVE} ] &&
721 [ -d ${SRC_ARCHIVE} ] &&
722 [ -f ${SRC_ARCHIVE}/$FILE ]; then
723 cp ${SRC_ARCHIVE}/$FILE .
724 echo "$FILE: -- copied from $SRC_ARCHIVE"
725 fromARCHIVE=1
726 else
727 echo "${BOLD}${YELLOW}$FILE: not found in ${SRC_ARCHIVE}${OFF}"
728 fromARCHIVE=0
[8a43b5b]729 # If the file does not exist yet in /sources download a fresh one
[93135fd]730 if [ ! -f $FILE ] ; then
731 if ! wget $URL1 && ! wget $URL2 ; then
[c7dbe78]732 gs_wrt_message "$FILE not found in the SRC_ARCHIVE or on any server..SKIPPING"
733 continue
[93135fd]734 fi
735 fi
736 fi
737
[8a43b5b]738 # IF the md5sum does not match the existing files
739 if ! echo "$MD5" | md5sum -c - >/dev/null ; then
740 [[ $fromARCHIVE = "1" ]] && echo "${BOLD}${YELLOW}MD5SUM did not match SRC_ARCHIVE copy${OFF}"
741 [[ $fromARCHIVE = "0" ]] && echo "${BOLD}${YELLOW}MD5SUM did not match REMOTE copy${OFF}"
742 # Remove the old file and download a new one
743 rm -fv $FILE
744 # Force storage in SRC_ARCHIVE
745 fromARCHIVE=0;
746 # Try to retrieve again the file. Servers in reverse order.
747 if ! wget $URL2 && ! wget $URL1 ; then
748 gs_wrt_message "$FILE not found on the servers.. SKIPPING"
749 continue
[93135fd]750 fi
751 fi
752
753 # Validate the MD5SUM one last time
[8a43b5b]754 if ! echo "$MD5" | md5sum -c - >/dev/null ; then
[93135fd]755 gs_wrt_message "$FILE does not match MD5SUMS value"
[0910f55]756 # Force generation of MD5SUM
757 HAVEMD5=0
[93135fd]758 fi
759
760 # Generate a fresh MD5SUM for this file
761 if [[ "$HAVEMD5" = "0" ]] ; then
762 echo "${BOLD}${YELLOW}Generating a new MD5SUM for ${OFF}$FILE"
[8a43b5b]763 echo "NEW MD5SUM: $(md5sum $FILE)" >> MISSING_FILES.DMP
[93135fd]764 fi
765
766 # Good or bad we write the original md5sum to a file
[8a43b5b]767 echo "$MD5" >> MD5SUMS
[93135fd]768
769 # Copy the freshly downloaded file
770 # to the source archive.
771 if [ ! -z ${SRC_ARCHIVE} ] &&
772 [ -d ${SRC_ARCHIVE} ] &&
773 [ -w ${SRC_ARCHIVE} ] &&
774 [ "$fromARCHIVE" = "0" ] ; then
775 echo "Storing file:<$FILE> in the package archive"
776 cp -f $FILE ${SRC_ARCHIVE}
777 fi
778
779 done
780
781 if [[ -s MISSING_FILES.DMP ]]; then
782 echo -e "\n\n${tab_}${RED} One or more files were not retrieved or have a bad MD5SUMS chechsum.\n${tab_} Check ${L_arrow}$BUILDDIR/sources/MISSING_FILES.DMP${R_arrow} for names ${OFF}\n"
783 # Do not allow the automatic exection of the Makefile.
[261eea6]784 echo "${tab_}${BOLD}${RED}*** ${YELLOW}Automatic execution of the generated makefile has been inhibited. ${RED}***${OFF}${nl_}"
[93135fd]785 RUNMAKE=0
786 fi
787}
788
789
[877cc6a]790#----------------------------#
[15cad16]791create_urls() { #
[877cc6a]792#----------------------------#
[15cad16]793 cd $JHALFSDIR
[877cc6a]794
[15cad16]795 case ${PROGNAME} in
796 clfs)
797 echo -n "Creating CLFS <${ARCH}> specific URLs file"
798 xsltproc --nonet --xinclude \
799 --stringparam server $SERVER \
800 -o $BUILDDIR/sources/urls.lst urls.xsl \
801 $BOOK/materials/$ARCH-chapter.xml >>$LOGDIR/$LOG 2>&1
802 echo " ...OK"
803 ;;
804 hlfs)
805 echo -n "Creating HLFS <${MODEL}> specific URLs file"
806 xsltproc --nonet --xinclude \
807 --stringparam server $SERVER \
808 --stringparam model $MODEL \
809 -o $BUILDDIR/sources/urls.lst urls.xsl \
810 $BOOK/chapter04/chapter04.xml >>$LOGDIR/$LOG 2>&1
811 echo " ...OK"
812 ;;
813 lfs)
814 echo -n "Creating LFS specific URLs file"
815 xsltproc --nonet --xinclude \
816 --stringparam server $SERVER \
817 -o ../sources/urls.lst urls.xsl \
818 $BOOK/chapter03/chapter03.xml >>$LOGDIR/$LOG 2>&1
819 echo " ...OK"
820 ;;
821 esac
[877cc6a]822
[15cad16]823 cd $BUILDDIR/sources
[877cc6a]824}
Note: See TracBrowser for help on using the repository browser.