#!/bin/bash # $Id$ #----------------------------# get_book() { # #----------------------------# cd $JHALFSDIR if [ -z $WORKING_COPY ] ; then # Check for Subversion instead of just letting the script hit 'svn' and fail. test `type -p svn` || eval "echo \"This feature requires Subversion.\" exit 1" echo -n "Downloading the $PROGNAME document, $LFSVRS version... " case $PROGNAME in lfs) svn_root="LFS" ;; hlfs) svn_root="HLFS" ;; clfs) svn_root="cross-lfs" ;; clfs2) svn_root="cross-lfs" ;; clfs3) svn_root="cross-lfs" ;; *) echo "BOOK not defined in function " exit 1 ;; esac # Grab a fresh book if it's missing, otherwise, update it from the # repo. If we've already extracted the commands, move on to getting the # sources. if [ -d ${PROGNAME}-$LFSVRS ] ; then cd ${PROGNAME}-$LFSVRS if LC_ALL=C svn up | grep -q At && \ test -d $JHALFSDIR/${PROGNAME}-commands && \ test -f $JHALFSDIR/pkg_tarball_list ; then # Set the canonical book version echo -ne "done\n" cd $JHALFSDIR case $PROGNAME in clfs | clfs2 | clfs3 ) VERSION=$(xmllint --noent $BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;; *) VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;; esac get_sources else echo -ne "done\n" extract_commands fi else svn co $SVN/${svn_root}/${TREE} ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 echo -ne "done\n" extract_commands fi else echo -ne "Using $BOOK as book's sources ...\n" extract_commands fi echo -ne " Document version ${L_arrow}${BOLD}${VERSION}${R_arrow}\n" } #----------------------------# extract_commands() { # #----------------------------# # Check for libxslt instead of just letting the script hit 'xsltproc' and fail. test `type -p xsltproc` || eval "echo \"This feature requires libxslt.\" exit 1" cd $JHALFSDIR case $PROGNAME in clfs | clfs2 | clfs3 ) VERSION=$(xmllint --noent $BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;; *) VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;; esac # Start clean if [ -d ${PROGNAME}-commands ]; then rm -rf ${PROGNAME}-commands mkdir -v ${PROGNAME}-commands fi echo -n "Extracting commands for" # Dump the commands in shell script form from the HLFS book. case ${PROGNAME} in clfs) echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture... " xsltproc --nonet \ --xinclude \ --stringparam method $METHOD \ --stringparam testsuite $TEST \ --stringparam bomb-testsuite $BOMB_TEST \ --stringparam vim-lang $VIMLANG \ --stringparam timezone $TIMEZONE \ --stringparam page $PAGE \ --stringparam lang $LANG \ --stringparam sparc $SPARC64_PROC \ -o ./${PROGNAME}-commands/ $XSL $BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1 ;; clfs2) echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture... " xsltproc --nonet \ --xinclude \ --stringparam vim-lang $VIMLANG \ --stringparam timezone $TIMEZONE \ --stringparam page $PAGE \ --stringparam lang $LANG \ -o ./${PROGNAME}-commands/ $XSL $BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1 ;; clfs3) echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture... " xsltproc --nonet \ --xinclude \ --stringparam endian x$ENDIAN \ --stringparam timezone $TIMEZONE \ --stringparam page $PAGE \ --stringparam lang $LANG \ -o ./${PROGNAME}-commands/ $XSL $BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1 ;; hlfs) echo -n " ${L_arrow}${BOLD}$MODEL + $KERNEL${R_arrow} HLFS flavour... " xsltproc --nonet \ --xinclude \ --stringparam model $MODEL \ --stringparam kernel $KERNEL \ --stringparam testsuite $TEST \ --stringparam bomb-testsuite $BOMB_TEST \ --stringparam features x$SSP$ASLR$PAX$HARDENED_TMP$WARNINGS$MISC$BLOWFISH \ --stringparam timezone $TIMEZONE \ --stringparam page $PAGE \ --stringparam lang $LANG \ --stringparam grsecurity_host $GRSECURITY_HOST \ -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1 ;; lfs) echo -n " ${L_arrow}${BOLD}LFS${R_arrow} build... " pushd $BOOK > /dev/null if [ -f process.scripts.sh ]; then bash process-scripts.sh >> $LOGDIR/$LOG 2>&1 fi popd > /dev/null xsltproc --nonet \ --xinclude \ --stringparam testsuite $TEST \ --stringparam bomb-testsuite $BOMB_TEST \ --stringparam vim-lang $VIMLANG \ --stringparam full-locale $FULL_LOCALE \ --stringparam timezone $TIMEZONE \ --stringparam page $PAGE \ --stringparam lang $LANG \ --stringparam pkgmngt $PKGMNGT \ -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1 ;; *) echo -n " ${L_arrow}${BOLD}${PROGNAME}${R_arrow} book invalid, terminate build... " exit 1 ;; esac echo "done" # Make the scripts executable. chmod -R +x $JHALFSDIR/${PROGNAME}-commands # Create the packages file. We need it for proper Makefile creation create_package_list # Done. Moving on... get_sources } #----------------------------# create_package_list() { # #----------------------------# # Create the packages file. We need it for proper Makefile creation rm -f pkg_tarball_list echo -n "Creating <${PROGNAME}> list of tarball names for $BOOK" if [ ! -z $ARCH ] ; then echo -n " $ARCH" ; fi echo -n "... " case ${PROGNAME} in clfs | clfs2 | clfs3 ) xsltproc --nonet --xinclude -o pkg_tarball_list packages.xsl \ $BOOK/materials/${ARCH}-chapter.xml >>$LOGDIR/$LOG 2>&1 ;; hlfs) xsltproc --nonet --xinclude \ --stringparam model $MODEL \ --stringparam kernel $KERNEL \ -o pkg_tarball_list packages.xsl \ $BOOK/chapter04/chapter04.xml >>$LOGDIR/$LOG 2>&1 ;; lfs) xsltproc --nonet --xinclude \ --stringparam pkgmngt $PKGMNGT \ -o pkg_tarball_list packages.xsl \ $BOOK/chapter03/chapter03.xml >>$LOGDIR/$LOG 2>&1 ;; esac if [[ "${BLFS_TOOL}" = "y" ]] ; then ( cat << EOF $LIBXML_PKG $LIBXSLT_PKG $TIDY_PKG $UNZIP_PKG $DBXML_PKG $DBXSL_PKG $LYNX_PKG $SUDO_PKG $WGET_PKG $SQLITE_PKG $APR_PKG $APR_U_PKG $SVN_PKG $GPM_PKG EOF ) >> pkg_tarball_list fi echo "done" }