source: common/common-functions@ fd5cb46

experimental
Last change on this file since fd5cb46 was fcaf131, checked in by George Boudreau <georgeb@…>, 19 years ago

CLFS, handle a change from lfs-bootscripts to bootscripts-cross-lfs

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