Use inly one variable, REPO, containing the LFS git repo url. The BLFS Makefile hardcodes the LFS and BLFS git repo urls, so no need to pass them.
212 lines
7.3 KiB
Bash
212 lines
7.3 KiB
Bash
#!/bin/bash
|
|
|
|
#----------------------------#
|
|
get_book() { #
|
|
#----------------------------#
|
|
cd $JHALFSDIR
|
|
|
|
if [ -z $WORKING_COPY ] ; then
|
|
# Check for Subversion or git instead of just letting the script fail.
|
|
test `type -p git` || eval "echo \"This feature requires Git.\"
|
|
exit 1"
|
|
|
|
echo -n "Downloading the $PROGNAME document, $LFSVRS version... "
|
|
|
|
# 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}/.git ]; then
|
|
git clone $REPO ${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
|
|
# If the repo is in "detached head" state, git pull fails, so get
|
|
# back first to master:
|
|
git checkout trunk >>$LOGDIR/$LOG 2>&1
|
|
git pull >>$LOGDIR/$LOG 2>&1
|
|
if [ ! $TREE == "development" ]; then
|
|
git checkout ${TREE} >>$LOGDIR/$LOG 2>&1
|
|
fi
|
|
fi
|
|
echo -ne "done\n"
|
|
|
|
else # Working copy
|
|
echo -ne "Using $BOOK as book's sources ...\n"
|
|
fi
|
|
}
|
|
|
|
#----------------------------#
|
|
extract_commands() { #
|
|
#----------------------------#
|
|
|
|
cd $JHALFSDIR
|
|
# Clean
|
|
rm -rf ${PROGNAME}-commands
|
|
|
|
# Extract the commands
|
|
echo -n "Extracting commands for"
|
|
case ${PROGNAME} in
|
|
|
|
lfs)
|
|
echo -n " ${L_arrow}${BOLD}LFS${R_arrow} build... "
|
|
# The scripts pages are xincluded by the book, so must
|
|
# be generated for running xsltproc
|
|
pushd $BOOK > /dev/null
|
|
if [ -f process-scripts.sh ]; then
|
|
bash process-scripts.sh >> $LOGDIR/$LOG 2>&1
|
|
fi
|
|
# Recent git versions need version.ent to be generated
|
|
if [ -f git-version.sh ]; then
|
|
bash git-version.sh "$INITSYS" >> $LOGDIR/$LOG 2>&1
|
|
fi
|
|
popd > /dev/null
|
|
|
|
# First profile the book, for revision and arch. Note that
|
|
# MULTIBLIB is set to "default" if pure 64 bit book. In this
|
|
# profiling on arch is useless, but does not hurt either.
|
|
xsltproc --nonet \
|
|
--xinclude \
|
|
--stringparam profile.revision "$INITSYS" \
|
|
--stringparam profile.arch "$MULTILIB" \
|
|
--output prbook.xml \
|
|
$BOOK/stylesheets/lfs-xsl/profile.xsl \
|
|
$BOOK/index.xml >> $LOGDIR/$LOG 2>&1
|
|
|
|
# Use the profiled book for generating the scriptlets
|
|
xsltproc --nonet \
|
|
--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 \
|
|
prbook.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/chapter??/*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
|
|
# lfs does not use this anymore, but this is taken care in the
|
|
# function body
|
|
create_package_list
|
|
# On the other hand, lfs needs two auxiliary files
|
|
if [ "${PROGNAME}" = lfs ]; then
|
|
create_chroot_scripts
|
|
create_kernfs_scripts
|
|
fi
|
|
|
|
# we create the VERSION variable here. Should maybe go into its own
|
|
# function. But at this point we can use the profiled xml to get
|
|
# version from lfs-release in the lfs case.
|
|
case $PROGNAME in
|
|
lfs)
|
|
VERSION=$(grep 'echo.*lfs-release' prbook.xml | sed 's/.*echo[ ]*\([^ ]*\).*/\1/')
|
|
;;
|
|
*)
|
|
VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
|
|
esac
|
|
|
|
# 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
|
|
lfs)
|
|
# lfs does not use the package list anymore
|
|
;;
|
|
*)
|
|
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
|
|
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
|
|
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/chapter??/reboot.xml >> $LOGDIR/$LOG 2>&1
|
|
;;
|
|
*)
|
|
esac
|
|
echo "done"
|
|
|
|
}
|