source: common/common-functions@ 28fd555

experimental
Last change on this file since 28fd555 was 28fd555, checked in by George Boudreau <georgeb@…>, 18 years ago

missed 'makefile continuation -- && \ --' in wrt_unpack

  • Property mode set to 100644
File size: 24.5 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_unpack3() { # Unpack and set 'ROOT' var
233#=============================#
234 local FILE=$1
235(
236cat << EOF
237 @\$(call unpack3,$FILE)
238 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
239 echo "export PKGDIR=\$(MOUNT_PT)\$(SRC)/\$\$ROOT" > envars && \\
240
241 chown -R lfs \$(MOUNT_PT)\$(SRC)/\$\$ROOT
242EOF
243) >> $MKFILE.tmp
244}
245
246
247#----------------------------------#
248wrt_unpack2() { #
249#----------------------------------#
250 local FILE=$1
251(
252cat << EOF
253 @\$(call unpack2,$FILE)
254 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
255 echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
256EOF
257) >> $MKFILE.tmp
258}
259
260
261#=============================#
262wrt_unpack4() { # Unpack and set 'ROOT' var
263#=============================#
264 local FILE=$1
265(
266cat << EOF
267 @\$(call unpack4,$FILE)
268 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
269 echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
270EOF
271) >> $MKFILE.tmp
272}
273
274
275
276#----------------------------------#
277wrt_target_vars() { # Target vars for hlfs (cross-build method)
278#----------------------------------#
279(
280cat << EOF
281 echo "export target=$(uname -m)-${TARGET}" >> envars && \\
282 echo "export ldso=/lib/${LOADER}" >> envars
283EOF
284) >> $MKFILE.tmp
285
286}
287
288
289#----------------------------------#
290wrt_run_as_su() { #
291#----------------------------------#
292 local this_script=$1
293 local file=$2
294(
295cat << EOF
296 @echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/$this_script && \\
297 su - lfs -c "source /home/lfs/.bashrc && $JHALFSDIR/${PROGNAME}-commands/$file" >>logs/$this_script 2>&1 && \\
298 echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/$this_script
299EOF
300) >> $MKFILE.tmp
301}
302
303
304#==================================#
305wrt_run_as_lfs() { # header to log file, execute script, footer to log file
306#==================================#
307 local this_script=$1
308 local file=$2
309(
310cat << EOF
311 @echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/$this_script && \\
312 su - lfs -c "source /home/lfs/.bashrc && $JHALFSDIR/${PROGNAME}-commands/$file" >>logs/$this_script 2>&1 && \\
313 echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/$this_script
314EOF
315) >> $MKFILE.tmp
316}
317
318
319#----------------------------------#
320wrt_run_as_root() { #
321#----------------------------------#
322 local this_script=$1
323 local file=$2
324(
325cat << EOF
326 @echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/$this_script && \\
327 export LFS=\$(MOUNT_PT) && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 && \\
328 echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/$this_script
329EOF
330) >> $MKFILE.tmp
331}
332
333
334#=============================#
335wrt_run_as_root2() { # Some scripts must be run as root..
336#=============================#
337 local this_script=$1
338 local file=$2
339(
340cat << EOF
341 @echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \`\n" >logs/$this_script && \\
342 source envars && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 && \\
343 echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \`\n" >>logs/$this_script
344EOF
345) >> $MKFILE.tmp
346}
347
348
349#----------------------------------#
350wrt_remove_build_dirs() { #
351#----------------------------------#
352 local name=$1
353(
354cat << EOF
355 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
356 rm -r \$(MOUNT_PT)\$(SRC)/\$\$ROOT && \\
357 if [ -e \$(MOUNT_PT)\$(SRC)/$name-build ]; then \\
358 rm -r \$(MOUNT_PT)\$(SRC)/$name-build; \\
359 fi;
360EOF
361) >> $MKFILE.tmp
362}
363
364
365#----------------------------------#
366wrt_remove_build_dirs2() { #
367#----------------------------------#
368 local name=$1
369(
370cat << EOF
371 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
372 rm -r \$(SRC)/\$\$ROOT && \\
373 if [ -e \$(SRC)/$name-build ]; then \\
374 rm -r \$(SRC)/$name-build; \\
375 fi;
376EOF
377) >> $MKFILE.tmp
378}
379
380
381
382#----------------------------------#
383wrt_run_as_chroot1() { #
384#----------------------------------#
385 local this_script=$1
386 local file=$2
387(
388 cat << EOF
389 @echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/${this_script} && \\
390 \$(CHROOT1) 'cd /jhalfs && source envars && /jhalfs/${PROGNAME}-commands/$file >>/jhalfs/logs/${this_script} 2>&1' && \\
391 echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/${this_script}
392EOF
393) >> $MKFILE.tmp
394}
395
396
397#----------------------------------#
398wrt_run_as_chroot2() { #
399#----------------------------------#
400 local this_script=$1
401 local file=$2
402(
403cat << EOF
404 @echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/${this_script} && \\
405 \$(CHROOT2) 'cd /jhalfs && source envars && /jhalfs/${PROGNAME}-commands/$file >>/jhalfs/logs/${this_script} 2>&1' && \\
406 echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/${this_script}
407EOF
408) >> $MKFILE.tmp
409}
410
411
412#----------------------------------#
413wrt_copy_fstab() { #
414#----------------------------------#
415 local i=$1
416(
417 cat << EOF
418 @echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/$i && \\
419 cp -v $FSTAB \$(MOUNT_PT)/etc/fstab >>logs/$i 2>&1 && \\
420 echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/$i
421EOF
422) >> $MKFILE.tmp
423}
424
425#----------------------------------#
426wrt_copy_fstab2() { #
427#----------------------------------#
428 local i=$1
429(
430 cat << EOF
431 @echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \`\n" >logs/$i && \\
432 cp -v $FSTAB /etc/fstab >>logs/$i 2>&1 && \\
433 echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \`\n" >>logs/$i
434EOF
435) >> $MKFILE.tmp
436}
437
438
439#----------------------------------#
440wrt_export_timezone() { #
441#----------------------------------#
442 echo -e '\t@echo "export TIMEZONE=$(TIMEZONE)" >> envars' >> $MKFILE.tmp
443}
444
445
446#----------------------------------#
447wrt_export_pagesize() { #
448#----------------------------------#
449 echo -e '\t@echo "export PAGE=$(PAGE)" >> envars' >> $MKFILE.tmp
450}
451
452
453#----------------------------------#
454wrt_export_lang() { #
455#----------------------------------#
456 echo -e '\t@echo "export LANG=$(LANG)" > envars' >> $MKFILE.tmp
457}
458
459
460#----------------------------------#
461wrt_export_lang2() { #
462#----------------------------------#
463 echo -e '\t@echo "export LC_ALL=$(LC_ALL)" > envars' >> $MKFILE.tmp
464 echo -e '\t@echo "export LANG=$(LANG)" >> envars' >> $MKFILE.tmp
465}
466
467
468#----------------------------------#
469wrt_export_pkgdir() { #
470#----------------------------------#
471(
472 cat << EOF
473 @echo "export PKGDIR=\$(SRC)/binutils-build" > envars
474EOF
475) >> $MKFILE.tmp
476}
477
478
479#----------------------------#
480run_make() {
481#----------------------------#
482 # Test if make must be run.
483 if [ "$RUNMAKE" = "1" ] ; then
484 # Test to make sure we're running the build as root
485 if [ "$UID" != "0" ] ; then
486 echo "You must be logged in as root to successfully build LFS."
487 exit 1
488 fi
489 # Build the system
490 if [ -e $MKFILE ] ; then
491 echo -ne "Building the LFS system...\n"
492 cd $JHALFSDIR && make -f ${PROGNAME}-Makefile
493 echo -ne "done\n"
494 fi
495 fi
496}
497
498
499#----------------------------#
500clean_builddir() {
501#----------------------------#
502 # Test if the clean must be done.
503 if [ "$CLEAN" = "1" ] ; then
504 # Test to make sure we're running the clean as root
505 if [ "$UID" != "0" ] ; then
506 echo "You must be logged in as root to clean the build directory."
507 exit 1
508 fi
509 # Test to make sure that the build directory was populated by jhalfs
510 if [ ! -d $JHALFSDIR ] || [ ! -d $BUILDDIR/sources ] ; then
511 echo "Looks like $BUILDDIR was not populated by a previous jhalfs run."
512 exit 1
513 else
514 # Clean the build directory
515 echo -ne "Cleaning $BUILDDIR...\n"
516 rm -rf $BUILDDIR/{bin,boot,dev,etc,home,lib,media,mnt,opt,proc,root,sbin,srv,sys,tmp,tools,usr,var}
517 echo -ne "Cleaning $JHALFSDIR...\n"
518 rm -rf $JHALFSDIR/{0*,1*,envars,sources-dir,commands,logs,Makefile,dump-lfs-scripts.xsl,functions,packages,patches}
519 echo -ne "Cleaning remainig extracted sources in $BUILDDIR/sources...\n"
520 rm -rf `find $BUILDDIR/sources/* -maxdepth 0 -type d`
521 echo -ne "done\n"
522 fi
523 fi
524}
525
526#----------------------------#
527get_book() {
528#----------------------------#
529 cd $JHALFSDIR
530
531 if [ -z $WC ] ; then
532 # Check for Subversion instead of just letting the script hit 'svn' and fail.
533 test `type -p svn` || eval "echo \"This feature requires Subversion.\"
534 exit 1"
535 echo -n "Downloading the $PROGNAME document, $LFSVRS version... "
536
537 case $PROGNAME in
538 lfs) svn_root="LFS" ;;
539 hlfs) svn_root="HLFS" ;;
540 clfs) svn_root="cross-lfs" ;;
541 blfs) svn_root="BLFS" ;;
542 *) echo "BOOK not defined in function <get_book>"
543 exit 1 ;;
544 esac
545 # Grab a fresh LFS book if it's missing, otherwise, update it from the
546 # repo. If we've already extracted the commands, move on to getting the
547 # sources.
548 if [ -d ${PROGNAME}-$LFSVRS ] ; then
549 cd ${PROGNAME}-$LFSVRS
550 if LC_ALL=C svn up | grep -q At && test -d $JHALFSDIR/commands && \
551 test -f $JHALFSDIR/packages && test -f $JHALFSDIR/patches ; then
552 echo -ne "done\n"
553 # Set the canonical book version
554 cd $JHALFSDIR
555 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
556 get_sources
557 else
558 echo -ne "done\n"
559 # Set the canonical book version
560 cd $JHALFSDIR
561 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
562 extract_commands
563 fi
564 else
565 case $LFSVRS in
566 development)
567 svn co $SVN/${svn_root}/trunk/BOOK ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
568 alphabetical)
569 svn co $SVN/${svn_root}/branches/$LFSVRS/BOOK ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
570 udev_update)
571 svn co $SVN/LFS/branches/$LFSVRS/BOOK lfs-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
572 esac
573 echo -ne "done\n"
574 # Set the canonical book version
575 cd $JHALFSDIR
576 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
577 extract_commands
578 fi
579 else
580 echo -ne "Using $BOOK as book's sources ...\n"
581 # Set the canonical book version
582 cd $JHALFSDIR
583 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
584 extract_commands
585 fi
586}
587
588
589#----------------------------#
590build_patches_file() { # Supply a suitably formated list of patches.
591#----------------------------#
592 local saveIFS=$IFS
593 local IFS
594 echo -ne "Creating the patch file list "
595
596 LOC_add_patches_entry() {
597 for f in `grep "/$1-" patcheslist_.wget`; do
598 basename $f | sed "s|${2}|\&${1}-version;|" >> patches
599 done
600 }
601
602 xsltproc --nonet \
603 --xinclude \
604 -o patcheslist_.wget \
605 patcheslist.xsl \
606 $BOOK/chapter04/patches.xml
607 #> /dev/null 2>&1
608
609 rm -f patches
610
611 IFS=$'\x0A' # Modify the 'internal field separator' to break on 'LF' only
612 for f in `cat packages`; do
613 IFS=$saveIFS # Restore the system defaults
614 LOC_add_patches_entry \
615 `echo $f | sed -e 's/-version//' \
616 -e 's/-file.*//' \
617 -e 's/"//g' \
618 -e 's/uclibc/uClibc/'`
619 done
620
621 # .... U G L Y .... what to do with the grsecurity patch to the kernel..
622 for f in `grep "/grsecurity-" patcheslist_.wget`; do
623 basename $f >> patches
624 done
625
626 rm -f patcheslist_.wget
627 echo "...OK"
628}
629
630
631
632#----------------------------#
633extract_commands() { #
634#----------------------------#
635 # Check for libxslt instead of just letting the script hit 'xsltproc' and fail.
636 test `type -p xsltproc` || eval "echo \"This feature requires libxslt.\"
637 exit 1"
638
639 cd $JHALFSDIR
640 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
641
642 # Start clean
643 if [ -d commands ]; then
644 rm -rf commands
645 mkdir -v commands
646 fi
647 echo -n "Extracting commands for"
648
649 # Dump the commands in shell script form from the HLFS book.
650 case ${PROGNAME} in
651 clfs)
652 echo -n "${tab_} ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture"
653 xsltproc --xinclude \
654 --nonet \
655 --output ./${PROGNAME}-commands/ \
656 $BOOK/stylesheets/dump-commands.xsl $BOOK/$ARCH-index.xml
657 ;;
658 hlfs)
659 echo -n "${tab_} ${L_arrow}${BOLD}$MODEL${R_arrow} HLFS architecture"
660 xsltproc --nonet \
661 --xinclude \
662 --stringparam model $MODEL \
663 --stringparam testsuite $TEST \
664 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
665 for i in $(find ./${PROGNAME}-commands/chapter07/*) ; do
666 sed -i 's/"EOF"/EOF/g' $i ;
667 done
668 ;;
669 lfs)
670 echo -n "${tab_} ${L_arrow}${BOLD}LFS${R_arrow} build"
671 xsltproc --nonet \
672 --xinclude \
673 --stringparam testsuite $TEST \
674 --stringparam vim-lang $VIMLANG \
675 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
676 for i in $(find ./${PROGNAME}-commands/chapter07/*) ; do
677 sed -i 's/"EOF"/EOF/g' $i ;
678 done
679 ;;
680 blfs)
681 echo -n "${tab_} ${L_arrow}${BOLD}BLFS${R_arrow} build"
682 xsltproc --nonet \
683 --xinclude \
684 --stringparam testsuite $TEST \
685 --stringparam server $SERVER \
686 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
687 ;;
688 *) exit 1
689 esac
690
691 echo " ...OK"
692
693 # Make the scripts executable.
694 chmod -R +x $JHALFSDIR/${PROGNAME}-commands
695
696 # Grab the patches and package names.
697 cd $JHALFSDIR
698 for i in patches packages ; do rm -f $i ; done
699 grep "\-version" $BOOK/general.ent | sed -e 's@<!ENTITY @@' -e 's@">@"@' \
700 -e '/generic/d' >> packages
701
702 # Download the vim-lang package if it must be installed
703 if [ "$VIMLANG" = "1" ] && [ ! "$PROGNAME" = "hlfs" ] ; then
704 echo `grep "vim" packages | sed 's@vim@&-lang@'` >> packages
705 fi
706 echo `grep "udev-config-file" $BOOK/general.ent | sed -e 's@<!ENTITY @@' -e 's@">@"@'` >> packages
707
708 # There is no HLFS patches.ent file so we will create one.
709
710 case "${PROGNAME}" in
711 hlfs) build_patches_file ;;
712 clfs) ;;
713 lfs)
714 grep "^<\!ENTITY" $BOOK/patches.ent | sed -e 's/.* "//' -e 's/">//' >> patches
715 ;;
716 blfs) ;;
717 *) exit 1
718 esac
719
720 # Done. Moving on...
721 get_sources
722}
723
724
725#----------------------------#
726download() { # Download file, write name to MISSING_FILES.DMP if an error
727#----------------------------#
728 cd $BUILDDIR/sources
729
730 # Hackish fix for the bash-doc, glibc-{linuxthreads,libidn}
731 # that don't conform to norms in the URL scheme.
732 DIR=`echo $1 | sed 's@-doc@@;s@-linuxthreads@@;s@-libidn@@;s@-testsuite@@'`
733
734 # If the file exists in the archive copy it to the $BUILDDIR/sources dir
735 # MD5SUM is assumed to be correct from previous download
736 if [ ! -z ${SRC_ARCHIVE} ] &&
737 [ -d ${SRC_ARCHIVE} ] &&
738 [ -f ${SRC_ARCHIVE}/$2 ]; then
739 cp ${SRC_ARCHIVE}/$2 .
740 echo "$2: -- ok"
741 return
742 fi
743
744 # Find the md5 sum for this package.
745 if [ $2 != MD5SUMS ] ; then
746 set +e
747 MD5=`grep " $2" MD5SUMS`
748 if [ $? -ne 0 ]; then
749 set -e
750 echo "${RED}$2 not found in MD5SUMS${OFF}"
751 echo "$2 not found in MD5SUMS" >> MISSING_FILES.DMP
752 return
753 fi
754 set -e
755 fi
756
757 if [ ! -f $2 ] ; then
758 case $DL in
759 wget ) wget --passive $FTP/$DIR/$2 ;;
760 curl ) `curl -# $FTP/$DIR/$2 -o $2` ;;
761 * ) echo "$DL not supported at this time." ;;
762 esac
763 elif ! echo "$MD5" | md5sum -c - >/dev/null 2>/dev/null ; then
764 case $DL in
765 wget ) wget --passive -c $FTP/$DIR/$2 ;;
766 curl ) `curl -# -C - $FTP/$DIR/$2 -o $2` ;;
767 * ) echo "$DL not supported at this time." ;;
768 esac
769 fi
770
771 if [ $2 != MD5SUMS ] && ! echo "$MD5" | md5sum -c - ; then
772 exit 1
773 fi
774 if [ $2 != MD5SUMS ] ; then
775 echo `grep "$MD5" MD5SUMS` >> MD5SUMS-$VERSION
776 fi
777
778 # If we make it this far we should copy the freshly downloaded file
779 # to the source archive.
780 if [ ! -z ${SRC_ARCHIVE} ] &&
781 [ -d ${SRC_ARCHIVE} ] &&
782 [ -w ${SRC_ARCHIVE} ] &&
783 [ $2 != MD5SUMS ]; then
784 echo "Store file:<$2> in package archive"
785 cp -v $2 ${SRC_ARCHIVE}
786 fi
787
788}
789
790
791#----------------------------#
792get_sources() {
793#----------------------------#
794
795 # Test if the packages must be downloaded
796 if [ "$HPKG" = "1" ] ; then
797
798 # This variable is necessary to make sure the `cat $JHALFSDIR/packages`
799 # separates each iteration by lines.
800 # Modify the 'internal field separator' to break on 'LF' only
801 IFS=$'\x0A'
802
803 if [ ! -d $BUILDDIR/sources ] ; then mkdir $BUILDDIR/sources ; fi
804 cd $BUILDDIR/sources
805 if [ -f MD5SUMS ] ; then rm MD5SUMS ; fi
806 if [ -f MD5SUMS-$VERSION ] ; then rm MD5SUMS-$VERSION ; fi
807 if [ -f MISSING_FILES.DMP ] ; then rm MISSING_FILES.DMP ; fi
808
809 download "" MD5SUMS
810
811 # Iterate through each package and grab it, along with any patches it needs.
812 for i in `cat $JHALFSDIR/packages` ; do
813 PKG=`echo $i | sed -e 's/-version.*//' -e 's/-file.*//'`
814
815 # There are some entities that aren't valid packages.
816 if [ "$PKG" = "expect-lib" -o "$PKG" = "linux-dl" ] ; then continue ; fi
817
818 VRS=`echo $i | sed -e 's/.* //' -e 's/"//g'`
819 case $PKG in
820 tcl) FILE="$PKG$VRS-src.tar.bz2" ;;
821 vim-lang) PKG="vim"
822 FILE="vim-$VRS-lang.tar.bz2" ;;
823 udev-config) PKG="udev"
824 FILE="$VRS" ;;
825 *) FILE="$PKG-$VRS.tar.bz2" ;;
826 esac
827 download $PKG $FILE
828
829 # Download any associated patches
830 for patch in `grep "&$PKG-version" $JHALFSDIR/patches` ; do
831 PATCH=`echo $patch | sed 's@&'$PKG'-version;@'$VRS'@'`
832 download $PKG $PATCH
833 done
834 done
835 fi
836}
837
838#-----------------------------------------------#
839_IS_() # Function to test build scripts names
840#-----------------------------------------------#
841{
842 # Returns substr $2 or null str
843 # Must use string testing
844 case $1 in
845 *$2*) echo "$2" ;;
846 *) echo "" ;;
847 esac
848}
Note: See TracBrowser for help on using the repository browser.