source: common/common-functions@ 2f109c6

experimental
Last change on this file since 2f109c6 was 9e4b9a1, checked in by Manuel Canales Esparcia <manuel@…>, 19 years ago

Merged r2575 and r2576 from trunk.

  • Property mode set to 100644
File size: 26.0 KB
RevLine 
[0170229]1#!/bin/bash
[dd810ea]2
3# $Id$
4
5set +e
[0170229]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}${WHITE}==============================================================================${OFF}"
28declare -r SD_BORDER="${BOLD}${WHITE}------------------------------------------------------------------------------${OFF}"
29declare -r STAR_BORDER="${BOLD}${WHITE}******************************************************************************${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
36usage() {
37cat <<- -EOF-
38${DD_BORDER}
39${BOLD}
40 Usage: $0 ${BOLD}[OPTION]
41
[0297f33]42Options:
43${BOLD} -h, --help${OFF}
44 print this help, then exit
[b1624ac]45
[0297f33]46${BOLD} -V, --version${OFF}
[2db0869]47 print version information, then exit
[b1624ac]48
49${BOLD} -B, --book VER${OFF}
50 checkout VER version of the book. Supported versions at this time are:
51 dev* | trunk | SVN aliases for Development {C,H,B}LFS
52 udev* aliases for the LFS udev_update branch
53
[0297f33]54${BOLD} -D --directory DIR${OFF}
[b1624ac]55 use DIR directory for building ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])${OFF}; all files jhalfs-X produces
56 will be in the directory DIR/jhalfs.
57
[0297f33]58${BOLD} -G, --get-packages${OFF}
[b1624ac]59 download the packages and patches. This assumes that the server declared
60 in the configuration file has the proper packages and patches for the
61 book version being processed.
62
[0297f33]63${BOLD} -T, --testsuites N ${OFF}
64 Run test suites [0-3]
65 0 = none
66 1 = only chapter06 Glibc, GCC and Binutils testsuites
[b1624ac]67 2 = all chapter06 testsuites (in BLFS, alias to 1)
[6afdfcc]68 3 = all chapter05 and chapter06 testsuites
[b1624ac]69 In BLFS, 2 and 3 are aliases to 1
70 In CLFS, 3 is an alias to 2
71
[0297f33]72${BOLD} -W, --working-copy DIR${OFF}
[2db0869]73 use the local working copy placed in DIR as the $(echo $PROGNAME | tr [a-z] [A-Z]) book
[b1624ac]74-EOF-
75
76[[ ${PROGNAME} != "blfs" ]] &&
77cat <<- -EOF-
78
[4612459]79${BOLD} -C, --comparasion TYPE${OFF}
80 do iterative comparison analysis. That will take several time due that
81 the final system packages wil be rebuilded the times defined in the
82 ITERATIONS config option.
83 Analisys types allowed are:
84 ICA = do the ICA analisys designed by Greg Schafer
85 farce = do the farce analisys designed by Ken Moffat
86 both = perfom both ICA and farce analisys
[42346b2]87
[0297f33]88${BOLD} -F, --fstab FILE${OFF}
89 use FILE as the /etc/fstab file for the ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])${OFF} system. If not specified,
90 a default /etc/fstab file with dummy values is created.
[b1624ac]91
[0297f33]92${BOLD} -K, --kernel-config FILE${OFF}
93 use the kernel configuration file specified in FILE to build the kernel.
94 if the file is not found, or if not specified, the kernel build is skipped.
[b1624ac]95
[0297f33]96${BOLD} -M, --run-make${OFF}
97 run make on the generated Makefile
[b1624ac]98
99${BOLD} -R --rebuild${OFF}
100 clean the build directory before to perfom any other task. The directory
101 is cleaned only if it was populated by a previous jhalfs-X run.
[0297f33]102-EOF-
103
104[[ ${PROGNAME} = "clfs" ]] &&
105cat <<- -EOF-
[e794f06]106
[0297f33]107${BOLD} -A, --arch ARCH ${OFF}
108 Select the TARGET architecture, valid selections are:
109 32bit builds
[6afdfcc]110 x86, i486, i586, ppc, mips, mipsel, sparc, sparcv8
[0297f33]111 64bit builds
112 x86_64-64, mips64-64, mipsel64-64, sparc64-64, alpha
113 64bit multi-lib
114 x86_64, mips64, mipsel64, sparc64, ppc64
[b1624ac]115
[0297f33]116${BOLD} --boot_config FILE ${OFF}
117 The configuration file for the bootstrap kernel if method=boot
[b1624ac]118
119${BOLD} --method BUILDMETHOD ${OFF}
120 Select the build method, chroot or boot
[0297f33]121-EOF-
122
123[[ ${PROGNAME} = "hlfs" ]] &&
124cat <<- -EOF-
[e794f06]125
[0297f33]126${BOLD} --model STYLE ${OFF}
127 Select the library model for the HLFS system
[6afdfcc]128 Valid choices are: glibc or uclibc
[0297f33]129-EOF-
[0170229]130
[e794f06]131[[ ${PROGNAME} = "blfs" ]] &&
[0170229]132cat <<- -EOF-
133
[e794f06]134${BOLD} --dependencies 0/1/2${OFF}
[0170229]135 add dependencies of type TYPE to the build tree.
[623c323]136 If not set, both required and recommended are used.
[0170229]137
138 Possible values are:
[e794f06]139 0 - required only required dependecies are used
140 1 - recommended both required a recommended dependencies are used
141 2 - optional all dependencies are used
142-EOF-
143
144cat <<- -EOF-
[0170229]145${DD_BORDER}
146-EOF-
147 exit
148}
149
150version="
[6608a67]151${BOLD} \"jhalfs-X\"${OFF} builder tool (experimental) \$Rev$
[6afdfcc]152\$Date$
153
154${BOLD} \"${PROGNAME}\"${OFF} script module
[0170229]155
[67e3bc3]156Written by George Boudreau,
[6afdfcc]157 Manuel Canales Esparcia,
[67e3bc3]158 Jeremy Huntwork
[0170229]159
160This program is published under the ${BOLD}Gnu General Public License, Version 2.${OFF}
161"
162
163
164no_empty_builddir() {
165 'clear'
166cat <<- -EOF-
167${DD_BORDER}
168
169${tab_}${tab_}${BOLD}${RED}W A R N I N G${OFF}
170 Looks like the \$BUILDDIR directory contains subdirectories
171 from a previous HLFS build.
172
173 Please format the partition mounted on \$BUILDDIR or set
[60b56fd]174 a different build directory before running jhalfs-X.
[0170229]175${OFF}
176${DD_BORDER}
177-EOF-
178 exit
179}
180
181
182help="${nl_}Try '$0 --help' for more information."
183
184
185exit_missing_arg="\
186echo \"Option '\$1' requires an argument\" >&2
187echo \"\$help\" >&2
188exit 1"
189
190no_dl_client="\
[f80c1e0]191echo \"Could not find a way to download the ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])${OFF} sources.\" >&2
[0170229]192echo \"Attempting to continue.\" >&2"
193
[60b56fd]194HEADER="# This file is automatically generated by jhalfs-X
[0170229]195# DO NOT EDIT THIS FILE MANUALLY
196#
197# Generated on `date \"+%F %X %Z\"`"
198
199
200
201
202
203#----------------------------------#
[5359c48]204wrt_target() { # Create target and initialize log file
[0170229]205#----------------------------------#
206 local i=$1
207 local PREV=$2
208(
209cat << EOF
210
211$i: $PREV
212 @\$(call echo_message, Building)
[5359c48]213 @echo -e "\n\`date\`\n\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >logs/$this_script
[0170229]214EOF
215) >> $MKFILE.tmp
216}
217
218
219#----------------------------------#
[60b56fd]220wrt_unpack() { # Unpack and set 'ROOT' var
[0170229]221#----------------------------------#
222 local FILE=$1
223(
224cat << EOF
225 @\$(call unpack,$FILE)
226 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
227 echo "export PKGDIR=\$(MOUNT_PT)\$(SRC)/\$\$ROOT" > envars && \\
[7d018d1]228 chown -R lfs \$(MOUNT_PT)\$(SRC)/\$\$ROOT && \\
[0170229]229EOF
230) >> $MKFILE.tmp
231}
232
233
234#----------------------------------#
235wrt_unpack2() { #
236#----------------------------------#
237 local FILE=$1
238(
239cat << EOF
240 @\$(call unpack2,$FILE)
241 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
242 echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
243EOF
244) >> $MKFILE.tmp
245}
246
247
248#=============================#
[60b56fd]249wrt_unpack3() { #
[0170229]250#=============================#
251 local FILE=$1
252(
253cat << EOF
[c3c4e1d]254 @\$(call unpack3,$FILE)
[0170229]255 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
256 echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
257EOF
258) >> $MKFILE.tmp
259}
260
261
262
263#----------------------------------#
264wrt_target_vars() { # Target vars for hlfs (cross-build method)
265#----------------------------------#
266(
267cat << EOF
[7d018d1]268 @echo "export target=$(uname -m)-${TARGET}" >> envars && \\
[0170229]269 echo "export ldso=/lib/${LOADER}" >> envars
270EOF
271) >> $MKFILE.tmp
272
273}
274
275
276#----------------------------------#
[5359c48]277wrt_run_as_su() { # Execute script inside time { }, footer to log file
[0170229]278#----------------------------------#
279 local this_script=$1
280 local file=$2
281(
282cat << EOF
[5359c48]283 @( time { su - lfs -c "source /home/lfs/.bashrc && $JHALFSDIR/${PROGNAME}-commands/$file" >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
284 echo -e "\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >>logs/$this_script
[0170229]285EOF
286) >> $MKFILE.tmp
287}
288
289
290#----------------------------------#
[5359c48]291wrt_run_as_root() { # Some scripts must be run as root..
[0170229]292#----------------------------------#
293 local this_script=$1
294 local file=$2
295(
296cat << EOF
[5359c48]297 @( time { export LFS=\$(MOUNT_PT) && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
298 echo -e "\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >>logs/$this_script
[0170229]299EOF
300) >> $MKFILE.tmp
301}
302
303
304#=============================#
[5359c48]305wrt_run_as_root2() { #
[0170229]306#=============================#
307 local this_script=$1
308 local file=$2
309(
310cat << EOF
[5359c48]311 @( time { source envars && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
312 echo -e "\nKB: \`du -skx --exclude=jhalfs \`\n" >>logs/$this_script
[0170229]313EOF
314) >> $MKFILE.tmp
315}
316
317
318
319#----------------------------------#
320wrt_run_as_chroot1() { #
321#----------------------------------#
322 local this_script=$1
323 local file=$2
324(
325 cat << EOF
[5359c48]326 @( time { \$(CHROOT1) 'cd /jhalfs && source envars && /jhalfs/${PROGNAME}-commands/$file >>/jhalfs/logs/${this_script} 2>&1' ; } ) 2>>logs/$this_script && \\
327 echo -e "\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >>logs/${this_script}
[0170229]328EOF
329) >> $MKFILE.tmp
330}
331
332
333#----------------------------------#
334wrt_run_as_chroot2() { #
335#----------------------------------#
336 local this_script=$1
337 local file=$2
338(
339cat << EOF
[5359c48]340 @( time { \$(CHROOT2) 'cd /jhalfs && source envars && /jhalfs/${PROGNAME}-commands/$file >>/jhalfs/logs/${this_script} 2>&1' ; } ) 2>>logs/$this_script && \\
341 echo -e "\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >>logs/${this_script}
[0170229]342EOF
343) >> $MKFILE.tmp
344}
345
346
347#----------------------------------#
348wrt_copy_fstab() { #
349#----------------------------------#
350 local i=$1
351(
352 cat << EOF
[5359c48]353 @cp -v $FSTAB \$(MOUNT_PT)/etc/fstab >>logs/$i 2>&1
[0170229]354EOF
355) >> $MKFILE.tmp
356}
357
358#----------------------------------#
[5359c48]359wrt_copy_fstab2() { #
[0170229]360#----------------------------------#
361 local i=$1
362(
363 cat << EOF
[5359c48]364 @cp -v /sources/fstab /etc/fstab >>logs/$i 2>&1
[0170229]365EOF
366) >> $MKFILE.tmp
367}
368
369
370#----------------------------------#
[5359c48]371wrt_remove_build_dirs() { #
[0170229]372#----------------------------------#
[5359c48]373 local name=$1
[0170229]374(
[5359c48]375cat << EOF
376 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
377 rm -r \$(MOUNT_PT)\$(SRC)/\$\$ROOT && \\
378 if [ -e \$(MOUNT_PT)\$(SRC)/$name-build ]; then \\
379 rm -r \$(MOUNT_PT)\$(SRC)/$name-build; \\
380 fi;
381EOF
382) >> $MKFILE.tmp
383}
384
385
386#----------------------------------#
387wrt_remove_build_dirs2() { #
388#----------------------------------#
389 local name=$1
390(
391cat << EOF
392 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
393 rm -r \$(SRC)/\$\$ROOT && \\
394 if [ -e \$(SRC)/$name-build ]; then \\
395 rm -r \$(SRC)/$name-build; \\
396 fi;
[0170229]397EOF
398) >> $MKFILE.tmp
399}
400
401
[9e4b9a1]402#----------------------------------#
403wrt_report() { #
404#----------------------------------#
405(
406cat << EOF
407
408create-sbu_du-report: $PREV
409 @\$(call echo_message, Building)
410 @./create-sbu_du-report.sh logs $VERSION $TEST
411 @\$(call echo_report,$VERSION-SBU_DU-$(date --iso-8601).report)
412 @touch \$@
413EOF
414) >> $MKFILE.tmp
415
416chapter789="$chapter789 create-sbu_du-report"
417}
418
419
[0170229]420#----------------------------#
421run_make() {
422#----------------------------#
423 # Test if make must be run.
424 if [ "$RUNMAKE" = "1" ] ; then
425 # Test to make sure we're running the build as root
426 if [ "$UID" != "0" ] ; then
[60b56fd]427 echo "You must be logged in as root to successfully build the system."
[0170229]428 exit 1
429 fi
430 # Build the system
431 if [ -e $MKFILE ] ; then
[60b56fd]432 echo -ne "Building the system...\n"
[54b4b32]433 cd $JHALFSDIR && make
[0170229]434 echo -ne "done\n"
435 fi
436 fi
437}
438
439
440#----------------------------#
441clean_builddir() {
442#----------------------------#
443 # Test if the clean must be done.
444 if [ "$CLEAN" = "1" ] ; then
445 # Test to make sure we're running the clean as root
446 if [ "$UID" != "0" ] ; then
447 echo "You must be logged in as root to clean the build directory."
448 exit 1
449 fi
450 # Test to make sure that the build directory was populated by jhalfs
451 if [ ! -d $JHALFSDIR ] || [ ! -d $BUILDDIR/sources ] ; then
[60b56fd]452 echo "Looks like $BUILDDIR was not populated by a previous jhalfs-X run."
[0170229]453 exit 1
454 else
455 # Clean the build directory
456 echo -ne "Cleaning $BUILDDIR...\n"
[3465451]457 rm -rf $BUILDDIR/{bin,boot,dev,etc,home,lib,media,mnt,opt,proc,root,sbin,srv,sys,tmp,tools,cross-tools,usr,var}
[0170229]458 echo -ne "Cleaning $JHALFSDIR...\n"
[3465451]459 rm -rf $JHALFSDIR/{0*,1*,envars,sources-dir,*commands,logs,Makefile,*.xsl,makefile-functions,packages,patches}
[0170229]460 echo -ne "Cleaning remainig extracted sources in $BUILDDIR/sources...\n"
461 rm -rf `find $BUILDDIR/sources/* -maxdepth 0 -type d`
462 echo -ne "done\n"
463 fi
464 fi
465}
466
467#----------------------------#
468get_book() {
469#----------------------------#
470 cd $JHALFSDIR
471
472 if [ -z $WC ] ; then
473 # Check for Subversion instead of just letting the script hit 'svn' and fail.
474 test `type -p svn` || eval "echo \"This feature requires Subversion.\"
475 exit 1"
476 echo -n "Downloading the $PROGNAME document, $LFSVRS version... "
477
478 case $PROGNAME in
479 lfs) svn_root="LFS" ;;
480 hlfs) svn_root="HLFS" ;;
481 clfs) svn_root="cross-lfs" ;;
482 blfs) svn_root="BLFS" ;;
483 *) echo "BOOK not defined in function <get_book>"
484 exit 1 ;;
485 esac
[60b56fd]486 # Grab a fresh book if it's missing, otherwise, update it from the
[0170229]487 # repo. If we've already extracted the commands, move on to getting the
488 # sources.
489 if [ -d ${PROGNAME}-$LFSVRS ] ; then
490 cd ${PROGNAME}-$LFSVRS
491 if LC_ALL=C svn up | grep -q At && test -d $JHALFSDIR/commands && \
492 test -f $JHALFSDIR/packages && test -f $JHALFSDIR/patches ; then
493 echo -ne "done\n"
494 # Set the canonical book version
495 cd $JHALFSDIR
496 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
497 get_sources
498 else
499 echo -ne "done\n"
500 # Set the canonical book version
501 cd $JHALFSDIR
502 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
503 extract_commands
504 fi
505 else
506 case $LFSVRS in
[60b56fd]507 development)
[0170229]508 svn co $SVN/${svn_root}/trunk/BOOK ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
[60b56fd]509 alphabetical)
[0170229]510 svn co $SVN/${svn_root}/branches/$LFSVRS/BOOK ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
[60b56fd]511 udev_update)
[6aeb5b7]512 svn co $SVN/LFS/branches/$LFSVRS/BOOK lfs-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
[0170229]513 esac
514 echo -ne "done\n"
515 # Set the canonical book version
516 cd $JHALFSDIR
517 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
518 extract_commands
519 fi
520 else
521 echo -ne "Using $BOOK as book's sources ...\n"
522 # Set the canonical book version
523 cd $JHALFSDIR
524 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
525 extract_commands
526 fi
527}
528
529
530#----------------------------#
531build_patches_file() { # Supply a suitably formated list of patches.
532#----------------------------#
[8f4d140]533 local saveIFS=$IFS
[bef0a98]534 local IFS
[9c90294]535
536 rm -f patches
[0170229]537
538 LOC_add_patches_entry() {
539 for f in `grep "/$1-" patcheslist_.wget`; do
540 basename $f | sed "s|${2}|\&${1}-version;|" >> patches
541 done
542 }
543
[9c90294]544 case ${PROGNAME} in
545 hlfs)
[60b56fd]546 echo -n "Creating the HLFS ${L_arrow}${BOLD}$MODEL${R_arrow} specific patches file"
[9c90294]547 xsltproc --nonet \
548 --xinclude \
549 --stringparam model $MODEL \
550 -o patcheslist_.wget \
551 patcheslist.xsl \
552 $BOOK/chapter04/patches.xml
553 #> /dev/null 2>&1
554
555 # .... U G L Y .... what to do with the grsecurity patch to the kernel..
556 for f in `grep "/grsecurity-" patcheslist_.wget`; do
557 basename $f >> patches
558 done
559 ;;
560
561 clfs) # Pull out a list of arch specific patches
[60b56fd]562 echo -n "Creating CLFS ${L_arrow}${BOLD}$ARCH${R_arrow} specific patches file"
[9c90294]563 xsltproc -xinclude \
564 -o patcheslist_.wget \
565 patcheslist.xsl \
[9e1915a]566 $BOOK/materials/${ARCH}-chapter.xml
[9c90294]567 ;;
568 *) return
569 esac
[0170229]570
571
572 IFS=$'\x0A' # Modify the 'internal field separator' to break on 'LF' only
573 for f in `cat packages`; do
[8f4d140]574 IFS=$saveIFS # Restore the system defaults
[0170229]575 LOC_add_patches_entry \
576 `echo $f | sed -e 's/-version//' \
577 -e 's/-file.*//' \
578 -e 's/"//g' \
579 -e 's/uclibc/uClibc/'`
580 done
581
[60b56fd]582 rm -f patcheslist_.wget
583
[9c90294]584 echo " ...OK"
[0170229]585}
586
587
588#----------------------------#
589extract_commands() { #
590#----------------------------#
[9c90294]591 local saveIFS=$IFS
[9e1915a]592
[0170229]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
[3e3e28b]601 if [ -d ${PROGNAME}-commands ]; then
602 rm -rf ${PROGNAME}-commands
603 mkdir -v ${PROGNAME}-commands
[0170229]604 fi
[bef0a98]605 echo -n "Extracting commands for"
[0170229]606
607 # Dump the commands in shell script form from the HLFS book.
608 case ${PROGNAME} in
609 clfs)
[9c90294]610 echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture"
[e676ffa]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 \
[a9490ab]620 -o ./${PROGNAME}-commands/ $XSL $BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1
[0170229]621 ;;
622 hlfs)
[60b56fd]623 echo -n " ${L_arrow}${BOLD}$MODEL${R_arrow} HLFS libc implementation"
[ad71d98]624 xsltproc --nonet \
625 --xinclude \
626 --stringparam model $MODEL \
627 --stringparam testsuite $TEST \
628 --stringparam timezone $TIMEZONE \
629 --stringparam page $PAGE \
[d87b293]630 --stringparam lang $LANG \
631 --stringparam lc_all $LC_ALL \
[ad71d98]632 --stringparam keymap $KEYMAP \
633 --stringparam grsecurity_host $GRSECURITY_HOST \
634 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
[0170229]635 ;;
636 lfs)
[9c90294]637 echo -n " ${L_arrow}${BOLD}LFS${R_arrow} build"
[0170229]638 xsltproc --nonet \
639 --xinclude \
640 --stringparam testsuite $TEST \
641 --stringparam vim-lang $VIMLANG \
[ad71d98]642 --stringparam timezone $TIMEZONE \
643 --stringparam page $PAGE \
[d87b293]644 --stringparam lang $LANG \
[0170229]645 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
646 ;;
647 blfs)
[9c90294]648 echo -n " ${L_arrow}${BOLD}BLFS${R_arrow} build"
[0170229]649 xsltproc --nonet \
650 --xinclude \
[c6225224]651 --stringparam testsuite $TEST \
652 --stringparam server $SERVER \
[0170229]653 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
654 ;;
655 *) exit 1
656 esac
[dd810ea]657
[bef0a98]658 echo " ...OK"
[0170229]659
660 # Make the scripts executable.
661 chmod -R +x $JHALFSDIR/${PROGNAME}-commands
662
663 # Grab the patches and package names.
[9e1915a]664 for i in patches packages ; do
[9c90294]665 rm -f $i
666 done
667 #
668 case "${PROGNAME}" in
669 clfs)
670 ################################
671 # A LOCAL function
672 # xx_.wget contains arch specific files but in URL format
673 # Build a file with only arch specific files.. small ugly..
674 LOC_add_packages_entry() {
675 local fileMATCH aFILE
[386bc75]676
[fcaf131]677 # Deal with a non-standard format
678 if [[ "$1" = "clfs-bootscripts" ]]; then
679 set -- "bootscripts-cross-lfs" $2
680 fi
[9c90294]681 fileMATCH="/$1"
[fcaf131]682
[9c90294]683 # format.. Filename-Version or FilenameVersion
684 for aFILE in `grep ${fileMATCH}-*[[:digit:]] packageslist_.wget`; do
[386bc75]685 # Block vim-x.x-lang file, will add it later based on config flag
686 if [[ ! "${aFILE}" =~ "vim-$2-lang" ]]; then
687 echo "$1-version \"$2\"" >> packages
688 fi
[9c90294]689 done
690 }
691 #################################
[9e1915a]692
[9c90294]693 # We only want a list arch specific files..
694 # Unfortunately this script produces URL's which must be converted to a std format
[60b56fd]695 echo -n "Creating CLFS ${L_arrow}${BOLD}${ARCH}${R_arrow} specific packages file"
[9c90294]696 xsltproc -xinclude \
697 -o packageslist_.wget \
698 packageslist.xsl \
[9e1915a]699 $BOOK/materials/${ARCH}-chapter.xml
[9c90294]700
[9e1915a]701 # This has the correct format but contains packages from every book
[9c90294]702 grep "\-version " $BOOK/packages.ent | sed -e 's@<!ENTITY @@' \
703 -e 's@">@"@' \
704 -e '/generic/d' > packages.tmp
705 # This variable is necessary to make sure the `cat $JHALFSDIR/packages`
706 # separates each iteration by lines.
707 # Modify the 'internal field separator' to break on 'LF' only
708 IFS=$'\x0A'
709 for f in `cat packages.tmp`; do
[9e1915a]710 IFS=$saveIFS # Restore the system defaults
[9c90294]711 LOC_add_packages_entry \
712 `echo $f | sed -e 's/-version//' \
713 -e 's/-file.*//' \
714 -e 's/"//g'`
715 done
[60b56fd]716
717 rm -f packageslist_.wget packages.tmp
718
[9c90294]719 echo " ...OK"
720 ;;
[9e1915a]721
[d2a9d60]722 hlfs)
[60b56fd]723 echo -n "Creating <${PROGNAME}> specific packages file"
[d2a9d60]724 grep "\-version" $BOOK/general.ent | sed -e 's@<!ENTITY @@' \
725 -e 's@">@"@' \
726 -e '/generic/d' >> packages
727 echo " ...OK"
728 ;;
729
730 lfs)
[60b56fd]731 echo -n "Creating <${PROGNAME}> specific packages file"
[9c90294]732 grep "\-version" $BOOK/general.ent | sed -e 's@<!ENTITY @@' \
733 -e 's@">@"@' \
734 -e '/generic/d' >> packages
[d2a9d60]735 echo `grep "glibc" packages | sed 's@glibc@glibc-libidn@'` >> packages
736 echo `grep "udev-config-file" $BOOK/general.ent | sed -e 's@<!ENTITY @@' -e 's@">@"@'` >> packages
[0271c0c]737 echo " ...OK"
[9e1915a]738 ;;
[9c90294]739 esac
[0170229]740
741 # Download the vim-lang package if it must be installed
[ca0ac30]742 if [ "$VIMLANG" = "1" ] && [ ! "$PROGNAME" = "hlfs" ] ; then
[0170229]743 echo `grep "vim" packages | sed 's@vim@&-lang@'` >> packages
744 fi
745
[60b56fd]746 # Create the patches file
[0170229]747 case "${PROGNAME}" in
[9c90294]748 hlfs)
749 build_patches_file ;;
750 clfs )
751 build_patches_file ;;
[1acbc0f]752 lfs)
753 grep "^<\!ENTITY" $BOOK/patches.ent | sed -e 's/.* "//' -e 's/">//' >> patches
754 ;;
[0170229]755 blfs) ;;
756 *) exit 1
757 esac
[dd810ea]758
[0170229]759 # Done. Moving on...
760 get_sources
761}
762
763
764#----------------------------#
765download() { # Download file, write name to MISSING_FILES.DMP if an error
766#----------------------------#
767 cd $BUILDDIR/sources
768
[dd810ea]769 # Hackish fix for the bash-doc, glibc-{linuxthreads,libidn}
[12a5707]770 # that don't conform to norms in the URL scheme.
[0170229]771 DIR=`echo $1 | sed 's@-doc@@;s@-linuxthreads@@;s@-libidn@@;s@-testsuite@@'`
772
[e1edff3]773 # If the file exists in the archive copy it to the $BUILDDIR/sources dir
[c6225224]774 # MD5SUM is assumed to be correct from previous download
[e1edff3]775 if [ ! -z ${SRC_ARCHIVE} ] &&
776 [ -d ${SRC_ARCHIVE} ] &&
777 [ -f ${SRC_ARCHIVE}/$2 ]; then
778 cp ${SRC_ARCHIVE}/$2 .
779 echo "$2: -- ok"
780 return
781 fi
782
[0170229]783 # Find the md5 sum for this package.
784 if [ $2 != MD5SUMS ] ; then
785 set +e
786 MD5=`grep " $2" MD5SUMS`
787 if [ $? -ne 0 ]; then
788 set -e
789 echo "${RED}$2 not found in MD5SUMS${OFF}"
790 echo "$2 not found in MD5SUMS" >> MISSING_FILES.DMP
791 return
792 fi
793 set -e
794 fi
795
796 if [ ! -f $2 ] ; then
797 case $DL in
[d591ee5]798 wgetFTP ) wget --passive $FTP/$DIR/$2 ;;
799 wget ) wget $HTTP/$DIR/$2 ;;
[12a5707]800 curl ) `curl -# $FTP/$DIR/$2 -o $2` ;;
[0170229]801 * ) echo "$DL not supported at this time." ;;
802 esac
803 elif ! echo "$MD5" | md5sum -c - >/dev/null 2>/dev/null ; then
804 case $DL in
[d591ee5]805 wgetFTP ) wget --passive -c $FTP/$DIR/$2 ;;
806 wget ) wget -c $HTTP/$DIR/$2 ;;
[12a5707]807 curl ) `curl -# -C - $FTP/$DIR/$2 -o $2` ;;
[0170229]808 * ) echo "$DL not supported at this time." ;;
809 esac
810 fi
811
812 if [ $2 != MD5SUMS ] && ! echo "$MD5" | md5sum -c - ; then
813 exit 1
814 fi
815 if [ $2 != MD5SUMS ] ; then
816 echo `grep "$MD5" MD5SUMS` >> MD5SUMS-$VERSION
817 fi
[e1edff3]818
819 # If we make it this far we should copy the freshly downloaded file
[c6225224]820 # to the source archive.
[e1edff3]821 if [ ! -z ${SRC_ARCHIVE} ] &&
822 [ -d ${SRC_ARCHIVE} ] &&
823 [ -w ${SRC_ARCHIVE} ] &&
824 [ $2 != MD5SUMS ]; then
825 echo "Store file:<$2> in package archive"
826 cp -v $2 ${SRC_ARCHIVE}
827 fi
828
[0170229]829}
830
831
832#----------------------------#
833get_sources() {
834#----------------------------#
835
836 # Test if the packages must be downloaded
837 if [ "$HPKG" = "1" ] ; then
838
839 # This variable is necessary to make sure the `cat $JHALFSDIR/packages`
[4bf0fc3]840 # separates each iteration by lines.
841 # Modify the 'internal field separator' to break on 'LF' only
842 IFS=$'\x0A'
[0170229]843
844 if [ ! -d $BUILDDIR/sources ] ; then mkdir $BUILDDIR/sources ; fi
845 cd $BUILDDIR/sources
846 if [ -f MD5SUMS ] ; then rm MD5SUMS ; fi
847 if [ -f MD5SUMS-$VERSION ] ; then rm MD5SUMS-$VERSION ; fi
[49b1e9a]848 if [ -f MISSING_FILES.DMP ] ; then rm MISSING_FILES.DMP ; fi
[0170229]849
850 download "" MD5SUMS
851
852 # Iterate through each package and grab it, along with any patches it needs.
853 for i in `cat $JHALFSDIR/packages` ; do
854 PKG=`echo $i | sed -e 's/-version.*//' -e 's/-file.*//'`
855
856 # There are some entities that aren't valid packages.
[12a5707]857 if [ "$PKG" = "expect-lib" -o "$PKG" = "linux-dl" ] ; then continue ; fi
[0170229]858
859 VRS=`echo $i | sed -e 's/.* //' -e 's/"//g'`
[dd810ea]860 case $PKG in
[60b56fd]861 tcl) FILE="$PKG$VRS-src.tar.bz2" ;;
[0170229]862 vim-lang) PKG="vim"
863 FILE="vim-$VRS-lang.tar.bz2" ;;
[60b56fd]864 udev-config) PKG="udev"
[0170229]865 FILE="$VRS" ;;
[60b56fd]866 *) FILE="$PKG-$VRS.tar.bz2" ;;
[0170229]867 esac
868 download $PKG $FILE
869
870 # Download any associated patches
871 for patch in `grep "&$PKG-version" $JHALFSDIR/patches` ; do
872 PATCH=`echo $patch | sed 's@&'$PKG'-version;@'$VRS'@'`
873 download $PKG $PATCH
874 done
875 done
[31ad03a]876 if [[ -s $BUILDDIR/sources/MISSING_FILES.DMP ]]; then
877 echo -e "\n\n${tab_}${RED} One or more files were not retrieved.\n${tab_} Check ${L_arrow}$BUILDDIR/sources/MISSING_FILES.DMP${R_arrow} for names ${OFF}\n\n"
878 fi
[0170229]879 fi
880}
881
Note: See TracBrowser for help on using the repository browser.