04de9bc4db
We use those files to generate code snippets to use in Makefile. They used to be in chapter 6, but the new book will have some of them in chapter 5.
324 lines
12 KiB
Bash
324 lines
12 KiB
Bash
#!/bin/bash
|
|
|
|
# $Id$
|
|
|
|
#----------------------------#
|
|
get_book() { #
|
|
#----------------------------#
|
|
cd $JHALFSDIR
|
|
|
|
if [ -z $WORKING_COPY ] ; then
|
|
# Check for Subversion or git instead of just letting the script fail.
|
|
case $PROGNAME in
|
|
lfs | hlfs)
|
|
test `type -p svn` || eval "echo \"This feature requires Subversion.\"
|
|
exit 1"
|
|
;;
|
|
clfs*)
|
|
test `type -p git` || eval "echo \"This feature requires Git.\"
|
|
exit 1"
|
|
;;
|
|
esac
|
|
|
|
echo -n "Downloading the $PROGNAME document, $LFSVRS version... "
|
|
|
|
case $PROGNAME in
|
|
lfs) svn_root="LFS" ;;
|
|
hlfs) svn_root="HLFS" ;;
|
|
clfs*) ;;
|
|
*) echo "BOOK not defined in function <get_book>"
|
|
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 [ $PROGNAME == "lfs" ] || [ $PROGNAME == "hlfs" ] &&
|
|
[ ! -d ${PROGNAME}-${LFSVRS}/.svn ]; then
|
|
svn co $SVN/${svn_root}/${TREE} ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1
|
|
elif [ $PROGNAME == "clfs" ] || [ $PROGNAME == "clfs2" ] ||
|
|
[ $PROGNAME == "clfs3" ] && [ ! -d ${PROGNAME}-${LFSVRS}/.git ]; then
|
|
echo $TREE
|
|
git clone $GIT ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1
|
|
if [ ! $TREE == "development" ]; then
|
|
pushd ${PROGNAME}-$LFSVRS > /dev/null
|
|
echo "Checking out $LFSVRS at $PWD in $TREE"
|
|
git checkout ${TREE} >>$LOGDIR/$LOG 2>&1
|
|
popd > /dev/null
|
|
fi
|
|
else
|
|
cd ${PROGNAME}-$LFSVRS
|
|
case $PROGNAME in
|
|
clfs*)
|
|
# If the repo is in "detached head" state, git pull fails, so get
|
|
# back first to master:
|
|
git checkout master >>$LOGDIR/$LOG 2>&1
|
|
git pull >>$LOGDIR/$LOG 2>&1
|
|
if [ ! $TREE == "development" ]; then
|
|
git checkout ${TREE} >>$LOGDIR/$LOG 2>&1
|
|
fi
|
|
;;
|
|
lfs | hlfs) svn up >>$LOGDIR/$LOG 2>&1 ;;
|
|
*) ;;
|
|
esac
|
|
fi
|
|
echo -ne "done\n"
|
|
|
|
else # Working copy
|
|
echo -ne "Using $BOOK as book's sources ...\n"
|
|
fi
|
|
}
|
|
|
|
#----------------------------#
|
|
extract_commands() { #
|
|
#----------------------------#
|
|
|
|
cd $JHALFSDIR
|
|
case $PROGNAME in
|
|
clfs*)
|
|
VERSION=$(xmllint --noent $BOOK/BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
|
|
lfs)
|
|
if [ "$INITSYS" = "sysv" ] ; then
|
|
VERSION=$(grep 'ENTITY version ' $BOOK/general.ent| cut -d\" -f2)
|
|
else
|
|
VERSION=$(grep 'ENTITY versiond' $BOOK/general.ent| cut -d\" -f2)
|
|
fi
|
|
;;
|
|
*)
|
|
VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
|
|
esac
|
|
|
|
# Clean
|
|
rm -rf ${PROGNAME}-commands
|
|
|
|
# Extract the commands
|
|
echo -n "Extracting commands for"
|
|
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 timezone "$TIMEZONE" \
|
|
--stringparam page "$PAGE" \
|
|
--stringparam lang "$LANG" \
|
|
--stringparam sparc "$SPARC64_PROC" \
|
|
--stringparam x86 "$TARGET" \
|
|
--stringparam mips "$TARGET" \
|
|
-o ./${PROGNAME}-commands/ \
|
|
$XSL \
|
|
$BOOK/BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1
|
|
;;
|
|
|
|
clfs2)
|
|
echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture... "
|
|
xsltproc --nonet \
|
|
--xinclude \
|
|
--stringparam timezone "$TIMEZONE" \
|
|
--stringparam page "$PAGE" \
|
|
--stringparam lang "$LANG" \
|
|
--output ./${PROGNAME}-commands/ \
|
|
$XSL \
|
|
$BOOK/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" \
|
|
--output ./${PROGNAME}-commands/ \
|
|
$XSL \
|
|
$BOOK/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" \
|
|
--output ./${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 revision "$INITSYS" \
|
|
--stringparam testsuite "$TEST" \
|
|
--stringparam bomb-testsuite "$BOMB_TEST" \
|
|
--stringparam ncurses5 "$NCURSES5" \
|
|
--stringparam strip "$STRIP" \
|
|
--stringparam del-la-files "$DEL_LA_FILES" \
|
|
--stringparam full-locale "$FULL_LOCALE" \
|
|
--stringparam timezone "$TIMEZONE" \
|
|
--stringparam page "$PAGE" \
|
|
--stringparam lang "$LANG" \
|
|
--stringparam pkgmngt "$PKGMNGT" \
|
|
--stringparam wrap-install "$WRAP_INSTALL" \
|
|
--stringparam hostname "$HOSTNAME" \
|
|
--stringparam interface "$INTERFACE" \
|
|
--stringparam ip "$IP_ADDR" \
|
|
--stringparam gateway "$GATEWAY" \
|
|
--stringparam prefix "$PREFIX" \
|
|
--stringparam broadcast "$BROADCAST" \
|
|
--stringparam domain "$DOMAIN" \
|
|
--stringparam nameserver1 "$DNS1" \
|
|
--stringparam nameserver2 "$DNS2" \
|
|
--stringparam font "$FONT" \
|
|
--stringparam fontmap "$FONTMAP" \
|
|
--stringparam unicode "$UNICODE" \
|
|
--stringparam keymap "$KEYMAP" \
|
|
--stringparam local "$LOCAL" \
|
|
--stringparam log-level "$LOG_LEVEL" \
|
|
--stringparam script-root "$SCRIPT_ROOT" \
|
|
--output ./${PROGNAME}-commands/ \
|
|
$XSL \
|
|
$BOOK/index.xml >> $LOGDIR/$LOG 2>&1
|
|
# Remove flags requesting user action in some cases. Much easier here than
|
|
# in the stylesheet...
|
|
sed -i 's/-iv /-v /' ./${PROGNAME}-commands/chapter08/*kernel*
|
|
;;
|
|
*) echo -n " ${L_arrow}${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
|
|
if [ "${PROGNAME}" = lfs ]; then
|
|
create_chroot_scripts
|
|
create_kernfs_scripts
|
|
fi
|
|
|
|
# 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*)
|
|
xsltproc --nonet --xinclude \
|
|
-o pkg_tarball_list \
|
|
packages.xsl \
|
|
$BOOK/BOOK/materials/${ARCH}-chapter.xml >>$LOGDIR/$LOG 2>&1
|
|
;;
|
|
hlfs)
|
|
xsltproc --nonet --xinclude \
|
|
--stringparam model "$MODEL" \
|
|
--stringparam kernel "$KERNEL" \
|
|
--output pkg_tarball_list \
|
|
packages.xsl \
|
|
$BOOK/chapter04/chapter04.xml >>$LOGDIR/$LOG 2>&1
|
|
;;
|
|
lfs)
|
|
xsltproc --nonet --xinclude \
|
|
--stringparam pkgmngt "$PKGMNGT" \
|
|
--stringparam revision "$INITSYS" \
|
|
--output pkg_tarball_list \
|
|
packages.xsl \
|
|
$BOOK/chapter03/chapter03.xml >>$LOGDIR/$LOG 2>&1
|
|
;;
|
|
*)
|
|
esac
|
|
|
|
echo "done"
|
|
|
|
}
|
|
|
|
#----------------------------#
|
|
create_chroot_scripts() { #
|
|
#----------------------------#
|
|
|
|
rm -rf chroot-scripts
|
|
echo -n "Creating chroot commands scripts from $BOOK"
|
|
if [ ! -z $ARCH ] ; then echo -n " $ARCH" ; fi
|
|
echo -n "... "
|
|
case ${PROGNAME} in
|
|
clfs*)
|
|
xsltproc --nonet --xinclude \
|
|
-o chroot-scripts/ chroot.xsl \
|
|
$BOOK/BOOK/${ARCH}-index.xml >> $LOGDIR/$LOG 2>&1
|
|
;;
|
|
hlfs)
|
|
xsltproc --nonet --xinclude \
|
|
-o chroot-scripts/ chroot.xsl \
|
|
$BOOK/index.xml >> $LOGDIR/$LOG 2>&1
|
|
;;
|
|
lfs)
|
|
xsltproc --nonet --xinclude \
|
|
-o chroot-scripts/ chroot.xsl \
|
|
$BOOK/chapter0?/*chroot*.xml >> $LOGDIR/$LOG 2>&1
|
|
;;
|
|
*)
|
|
esac
|
|
echo "done"
|
|
|
|
}
|
|
|
|
#----------------------------#
|
|
create_kernfs_scripts() { #
|
|
#----------------------------#
|
|
|
|
rm -rf kernfs-scripts
|
|
mkdir kernfs-scripts
|
|
echo -n "Creating virtual kernel FS commands scripts from $BOOK"
|
|
if [ ! -z $ARCH ] ; then echo -n " $ARCH" ; fi
|
|
echo -n "... "
|
|
case ${PROGNAME} in
|
|
clfs*)
|
|
xsltproc --nonet --xinclude \
|
|
-o kernfs-scripts/ kernfs.xsl \
|
|
$BOOK/BOOK/${ARCH}-index.xml >> $LOGDIR/$LOG 2>&1
|
|
;;
|
|
hlfs)
|
|
xsltproc --nonet --xinclude \
|
|
-o kernfs-scripts/ kernfs.xsl \
|
|
$BOOK/index.xml >> $LOGDIR/$LOG 2>&1
|
|
;;
|
|
lfs)
|
|
xsltproc --nonet \
|
|
-o kernfs-scripts/devices.sh kernfs.xsl \
|
|
$BOOK/*/kernfs.xml >> $LOGDIR/$LOG 2>&1
|
|
xsltproc --nonet \
|
|
-o kernfs-scripts/teardown.sh kernfs.xsl \
|
|
$BOOK/chapter09/reboot.xml >> $LOGDIR/$LOG 2>&1
|
|
;;
|
|
*)
|
|
esac
|
|
echo "done"
|
|
|
|
}
|