source: common/common-functions@ 26a8fdf

experimental
Last change on this file since 26a8fdf was 26a8fdf, checked in by Manuel Canales Esparcia <manuel@…>, 19 years ago

Added verbosity envar.

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