#!/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 <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 ! [ -d ${PROGNAME}-$LFSVRS ] || ! [ -d ${PROGNAME}-$LFSVRS/.svn ]; then
      svn co $SVN/${svn_root}/${TREE} ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1
    else
      cd ${PROGNAME}-$LFSVRS
      svn up >>$LOGDIR/$LOG 2>&1
    fi
    echo -ne "done\n"

  else
    echo -ne "Using $BOOK as book's sources ...\n"
  fi
}

#----------------------------#
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

  [[ "${BLFS_TOOL}" = "y" ]] && copy_blfs_deps_scripts

  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"

}