This repository has been archived on 2024-10-17. You can view files and clone it, but cannot push or open issues or pull requests.
MahiroOS-jhalfs/common/common-functions

874 lines
26 KiB
Text
Raw Normal View History

#!/bin/bash
# $Id$
set +e
# VT100 colors
declare -r BLACK=$'\e[1;30m'
declare -r DK_GRAY=$'\e[0;30m'
declare -r RED=$'\e[31m'
declare -r GREEN=$'\e[32m'
declare -r YELLOW=$'\e[33m'
declare -r BLUE=$'\e[34m'
declare -r MAGENTA=$'\e[35m'
declare -r CYAN=$'\e[36m'
declare -r WHITE=$'\e[37m'
declare -r OFF=$'\e[0m'
declare -r BOLD=$'\e[1m'
declare -r REVERSE=$'\e[7m'
declare -r HIDDEN=$'\e[8m'
declare -r tab_=$'\t'
declare -r nl_=$'\n'
declare -r DD_BORDER="${BOLD}${WHITE}==============================================================================${OFF}"
declare -r SD_BORDER="${BOLD}${WHITE}------------------------------------------------------------------------------${OFF}"
declare -r STAR_BORDER="${BOLD}${WHITE}******************************************************************************${OFF}"
# bold yellow > < pair
declare -r R_arrow=$'\e[1;33m>\e[0m'
declare -r L_arrow=$'\e[1;33m<\e[0m'
usage() {
'clear'
cat <<- -EOF-
${DD_BORDER}
${BOLD}
Usage: $0 ${BOLD}[OPTION]
Options:
${BOLD} -h, --help${OFF}
print this help, then exit
${BOLD} --readme${OFF}
print a small readme file, then exit
${BOLD} -V, --version${OFF}
print version number, then exit
${BOLD} -d --directory DIR${OFF}
use DIR directory for building HLFS; all files jhahlfs produces will be
in the directory DIR/jhahlfs. Default is \"/mnt/lfs\".
${BOLD} --rebuild${OFF}
clean the build directory before to perfom any other task. The directory
is cleaned only if it was populated by a previous jhahlfs run.
${BOLD} -P, --get-packages${OFF}
download the packages and patches. This assumes that the server declared in the
jhahlfs.conf file has the proper packages and patches for the book version being
processed.
${BOLD} -D, --download-client CLIENT
use CLIENT as the program for retrieving packages (use in conjunction with -P)
${BOLD} -W, --working-copy DIR${OFF}
use the local working copy placed in DIR as the HLFS book
${BOLD} -L, --HLFS-version VER${OFF}
checkout VER version of the HLFS book. Supported versions at this time are:
dev* | trunk | SVN aliases for Development HLFS
2006-03-10 21:15:31 +01:00
alpha* aliases for the alphabetical branch
udev* aliases for the udev_update branch
${BOLD} --fstab FILE${OFF}
use FILE as the /etc/fstab file for the HLFS system. If not specified,
a default /etc/fstab file with dummy values is created.
${BOLD} -C, --kernel-config FILE${OFF}
use the kernel configuration file specified in FILE to build the kernel.
if the file is not found, or if not specified, the kernel build is skipped.
${BOLD} -M, --run-make${OFF}
run make on the generated Makefile
${DD_BORDER}
-EOF-
exit
}
blfs_usage() {
'clear'
cat <<- -EOF-
${DD_BORDER}
${BOLD}
Usage: $0 ${BOLD}[OPTION]
Options:
${BOLD} -h, --help${OFF}
print this help, then exit
${BOLD} -V, --version${OFF}
print version number, then exit
${BOLD} -B, --BLFS-version VER${OFF}
checkout VER version of the BLFS book.
If not set, the development version is used.
Supported versions at this time are:
dev* | trunk | SVN aliases for Development BLFS
${BOLD} -W, --working-copy DIR${OFF}
use the local working copy placed in DIR as the BLFS book
${BOLD} -D, --dependencies TYPE${OFF}
add dependencies of type TYPE to the build tree.
If not set, both required a recommended are used.
Possible values are:
required only required dependecies are used
recommended both required a recommended dependencies are used
optional all dependencies are used
${BOLD} -S, --server SERVER${OFF}
set the FTP/HTTP server used as fallback to download the packages.
If not specified, the one set in jhablfs.conf is used.
${BOLD} -T, --testsuites${OFF}
add support to run the optional testsuites
${DD_BORDER}
-EOF-
exit
}
_inline_doc="
This script, ${PROGNAME}, strives to create an accurate makefile
directly from the xml files used to generate the Hardened Linux From
Scratch document.
The usage of this script assumes you have read and are familiar with
the book and therefore the configuration variables found in jhahlfs.conf
will have meaning to you. There are a limited number of command line
switches which, if used, will override the config file settings.
NOTES::
*. The resulting Makefile takes considerable time to run to completion,
lay in a supply of caffeine beverages.
*. It is recommended that you temporarily unpack your linux kernel and
run <make menuconfig> and configure the kernal as per the book and save
the resulting .config file.
*. Chapter07 contains numerous command files which require customizing
before you start console, profile, hosts, network, fstab, kernel.
"
version="
${BOLD}\"${PROGNAME}\"${OFF} script module (development) \$Date$
Written by Jeremy Huntwork,
Manuel Caneles Esparcia,
George Boudreau
This program is published under the ${BOLD}Gnu General Public License, Version 2.${OFF}
"
no_empty_builddir() {
'clear'
cat <<- -EOF-
${DD_BORDER}
${tab_}${tab_}${BOLD}${RED}W A R N I N G${OFF}
Looks like the \$BUILDDIR directory contains subdirectories
from a previous HLFS build.
Please format the partition mounted on \$BUILDDIR or set
a different build directory before running jhahlfs.
${OFF}
${DD_BORDER}
-EOF-
exit
}
help="${nl_}Try '$0 --help' for more information."
exit_missing_arg="\
echo \"Option '\$1' requires an argument\" >&2
echo \"\$help\" >&2
exit 1"
no_dl_client="\
echo \"Could not find a way to download the CLFS sources.\" >&2
echo \"Attempting to continue.\" >&2"
HEADER="# This file is automatically generated by jhalfs
# DO NOT EDIT THIS FILE MANUALLY
#
# Generated on `date \"+%F %X %Z\"`"
#----------------------------------#
wrt_target() { #
#----------------------------------#
local i=$1
local PREV=$2
(
cat << EOF
$i: $PREV
@\$(call echo_message, Building)
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_unpack() { #
#----------------------------------#
local FILE=$1
(
cat << EOF
@\$(call unpack,$FILE)
@ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
echo "export PKGDIR=\$(MOUNT_PT)\$(SRC)/\$\$ROOT" > envars && \\
chown -R lfs \$(MOUNT_PT)\$(SRC)/\$\$ROOT && \\
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_unpack2() { #
#----------------------------------#
local FILE=$1
(
cat << EOF
@\$(call unpack2,$FILE)
@ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
EOF
) >> $MKFILE.tmp
}
#=============================#
wrt_unpack3() { # Unpack and set 'ROOT' var
#=============================#
local FILE=$1
(
cat << EOF
@\$(call unpack3,$FILE)
@ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_target_vars() { # Target vars for hlfs (cross-build method)
#----------------------------------#
(
cat << EOF
@echo "export target=$(uname -m)-${TARGET}" >> envars && \\
echo "export ldso=/lib/${LOADER}" >> envars
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_run_as_su() { #
#----------------------------------#
local this_script=$1
local file=$2
(
cat << EOF
@echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/$this_script && \\
su - lfs -c "source /home/lfs/.bashrc && $JHALFSDIR/${PROGNAME}-commands/$file" >>logs/$this_script 2>&1 && \\
echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/$this_script
EOF
) >> $MKFILE.tmp
}
#==================================#
wrt_run_as_lfs() { # header to log file, execute script, footer to log file
#==================================#
local this_script=$1
local file=$2
(
cat << EOF
@echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/$this_script && \\
su - lfs -c "source /home/lfs/.bashrc && $JHALFSDIR/${PROGNAME}-commands/$file" >>logs/$this_script 2>&1 && \\
echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/$this_script
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_run_as_root() { #
#----------------------------------#
local this_script=$1
local file=$2
(
cat << EOF
@echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/$this_script && \\
export LFS=\$(MOUNT_PT) && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 && \\
echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/$this_script
EOF
) >> $MKFILE.tmp
}
#=============================#
wrt_run_as_root2() { # Some scripts must be run as root..
#=============================#
local this_script=$1
local file=$2
(
cat << EOF
@echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \`\n" >logs/$this_script && \\
source envars && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 && \\
echo -e "\n\`date\`\n\nKB: \`du -sk --exclude={0,1}??-* \`\n" >>logs/$this_script
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_remove_build_dirs() { #
#----------------------------------#
local name=$1
(
cat << EOF
@ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
rm -r \$(MOUNT_PT)\$(SRC)/\$\$ROOT && \\
if [ -e \$(MOUNT_PT)\$(SRC)/$name-build ]; then \\
rm -r \$(MOUNT_PT)\$(SRC)/$name-build; \\
fi;
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_remove_build_dirs2() { #
#----------------------------------#
local name=$1
(
cat << EOF
@ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
rm -r \$(SRC)/\$\$ROOT && \\
if [ -e \$(SRC)/$name-build ]; then \\
rm -r \$(SRC)/$name-build; \\
fi;
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_run_as_chroot1() { #
#----------------------------------#
local this_script=$1
local file=$2
(
cat << EOF
@echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/${this_script} && \\
\$(CHROOT1) 'cd /jhalfs && source envars && /jhalfs/${PROGNAME}-commands/$file >>/jhalfs/logs/${this_script} 2>&1' && \\
echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/${this_script}
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_run_as_chroot2() { #
#----------------------------------#
local this_script=$1
local file=$2
(
cat << EOF
@echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/${this_script} && \\
\$(CHROOT2) 'cd /jhalfs && source envars && /jhalfs/${PROGNAME}-commands/$file >>/jhalfs/logs/${this_script} 2>&1' && \\
echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/${this_script}
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_copy_fstab() { #
#----------------------------------#
local i=$1
(
cat << EOF
@echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >logs/$i && \\
cp -v $FSTAB \$(MOUNT_PT)/etc/fstab >>logs/$i 2>&1 && \\
echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \$(MOUNT_PT)\`\n" >>logs/$i
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_copy_fstab2() { #
#----------------------------------#
local i=$1
(
cat << EOF
@echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \`\n" >logs/$i && \\
cp -v $FSTAB /etc/fstab >>logs/$i 2>&1 && \\
echo -e "\n\`date\`\n\nKB: \`du -skx --exclude={0,1}??-* \`\n" >>logs/$i
EOF
) >> $MKFILE.tmp
}
#----------------------------------#
wrt_export_pkgdir() { #
#----------------------------------#
(
cat << EOF
@echo "export PKGDIR=\$(SRC)/binutils-build" > envars
EOF
) >> $MKFILE.tmp
}
#----------------------------#
run_make() {
#----------------------------#
# Test if make must be run.
if [ "$RUNMAKE" = "1" ] ; then
# Test to make sure we're running the build as root
if [ "$UID" != "0" ] ; then
echo "You must be logged in as root to successfully build LFS."
exit 1
fi
# Build the system
if [ -e $MKFILE ] ; then
echo -ne "Building the LFS system...\n"
cd $JHALFSDIR && make -f ${PROGNAME}-Makefile
echo -ne "done\n"
fi
fi
}
#----------------------------#
clean_builddir() {
#----------------------------#
# Test if the clean must be done.
if [ "$CLEAN" = "1" ] ; then
# Test to make sure we're running the clean as root
if [ "$UID" != "0" ] ; then
echo "You must be logged in as root to clean the build directory."
exit 1
fi
# Test to make sure that the build directory was populated by jhalfs
if [ ! -d $JHALFSDIR ] || [ ! -d $BUILDDIR/sources ] ; then
echo "Looks like $BUILDDIR was not populated by a previous jhalfs run."
exit 1
else
# Clean the build directory
echo -ne "Cleaning $BUILDDIR...\n"
rm -rf $BUILDDIR/{bin,boot,dev,etc,home,lib,media,mnt,opt,proc,root,sbin,srv,sys,tmp,tools,usr,var}
echo -ne "Cleaning $JHALFSDIR...\n"
rm -rf $JHALFSDIR/{0*,1*,envars,sources-dir,commands,logs,Makefile,dump-lfs-scripts.xsl,functions,packages,patches}
echo -ne "Cleaning remainig extracted sources in $BUILDDIR/sources...\n"
rm -rf `find $BUILDDIR/sources/* -maxdepth 0 -type d`
echo -ne "done\n"
fi
fi
}
#----------------------------#
get_book() {
#----------------------------#
cd $JHALFSDIR
if [ -z $WC ] ; 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" ;;
blfs) svn_root="BLFS" ;;
*) echo "BOOK not defined in function <get_book>"
exit 1 ;;
esac
# Grab a fresh LFS 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/commands && \
test -f $JHALFSDIR/packages && test -f $JHALFSDIR/patches ; then
echo -ne "done\n"
# Set the canonical book version
cd $JHALFSDIR
VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
get_sources
else
echo -ne "done\n"
# Set the canonical book version
cd $JHALFSDIR
VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
extract_commands
fi
else
case $LFSVRS in
development)
svn co $SVN/${svn_root}/trunk/BOOK ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
alphabetical)
svn co $SVN/${svn_root}/branches/$LFSVRS/BOOK ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
2006-03-10 21:15:31 +01:00
udev_update)
svn co $SVN/LFS/branches/$LFSVRS/BOOK lfs-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
esac
echo -ne "done\n"
# Set the canonical book version
cd $JHALFSDIR
VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
extract_commands
fi
else
echo -ne "Using $BOOK as book's sources ...\n"
# Set the canonical book version
cd $JHALFSDIR
VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
extract_commands
fi
}
#----------------------------#
build_patches_file() { # Supply a suitably formated list of patches.
#----------------------------#
local saveIFS=$IFS
local IFS
rm -f patches
LOC_add_patches_entry() {
for f in `grep "/$1-" patcheslist_.wget`; do
basename $f | sed "s|${2}|\&${1}-version;|" >> patches
done
}
case ${PROGNAME} in
hlfs)
echo -n "Creating the ${L_arrow}${BOLD}HLFS${R_arrow} specific patcheslist_.wget file"
xsltproc --nonet \
--xinclude \
--stringparam model $MODEL \
-o patcheslist_.wget \
patcheslist.xsl \
$BOOK/chapter04/patches.xml
#> /dev/null 2>&1
# .... U G L Y .... what to do with the grsecurity patch to the kernel..
for f in `grep "/grsecurity-" patcheslist_.wget`; do
basename $f >> patches
done
;;
clfs) # Pull out a list of arch specific patches
echo -n "Creating ${L_arrow}${BOLD}$ARCH${R_arrow} specific patcheslist_.wget file"
xsltproc -xinclude \
-o patcheslist_.wget \
patcheslist.xsl \
$BOOK/${ARCH}-index.xml
;;
*) return
esac
IFS=$'\x0A' # Modify the 'internal field separator' to break on 'LF' only
for f in `cat packages`; do
IFS=$saveIFS # Restore the system defaults
LOC_add_patches_entry \
`echo $f | sed -e 's/-version//' \
-e 's/-file.*//' \
-e 's/"//g' \
-e 's/uclibc/uClibc/'`
done
echo " ...OK"
}
#----------------------------#
extract_commands() { #
#----------------------------#
local saveIFS=$IFS
# 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
VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
# Start clean
if [ -d commands ]; then
rm -rf commands
mkdir -v 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 --xinclude \
--nonet \
--output ./${PROGNAME}-commands/ \
$BOOK/stylesheets/dump-commands.xsl $BOOK/$ARCH-index.xml
;;
hlfs)
echo -n " ${L_arrow}${BOLD}$MODEL${R_arrow} HLFS architecture"
xsltproc --nonet \
--xinclude \
--stringparam model $MODEL \
--stringparam testsuite $TEST \
--stringparam timezone $TIMEZONE \
--stringparam page $PAGE \
--stringparam lang $LANG \
--stringparam lc_all $LC_ALL \
--stringparam keymap $KEYMAP \
--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"
xsltproc --nonet \
--xinclude \
--stringparam testsuite $TEST \
--stringparam vim-lang $VIMLANG \
--stringparam timezone $TIMEZONE \
--stringparam page $PAGE \
--stringparam lang $LANG \
-o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
;;
blfs)
echo -n " ${L_arrow}${BOLD}BLFS${R_arrow} build"
xsltproc --nonet \
--xinclude \
--stringparam testsuite $TEST \
--stringparam server $SERVER \
-o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
;;
*) exit 1
esac
echo " ...OK"
# Make the scripts executable.
chmod -R +x $JHALFSDIR/${PROGNAME}-commands
# Grab the patches and package names.
for i in patches packages ; do
rm -f $i
done
#
case "${PROGNAME}" in
clfs)
################################
# A LOCAL function
# xx_.wget contains arch specific files but in URL format
# Build a file with only arch specific files.. small ugly..
LOC_add_packages_entry() {
local fileMATCH aFILE
fileMATCH="/$1"
# format.. Filename-Version or FilenameVersion
for aFILE in `grep ${fileMATCH}-*[[:digit:]] packageslist_.wget`; do
# The aFILE%\?* is necessary to strip the "?download" appended to sourceforge files
echo "$1-version \"$2\"" >> packages
done
}
#################################
# We only want a list arch specific files..
# Unfortunately this script produces URL's which must be converted to a std format
echo -n "Creating CLFS ${L_arrow}${BOLD}${ARCH}${R_arrow} specific packageslist_.wget file"
xsltproc -xinclude \
-o packageslist_.wget \
packageslist.xsl \
$BOOK/${ARCH}-index.xml
# This has the correct format but contains packages from every book
grep "\-version " $BOOK/packages.ent | sed -e 's@<!ENTITY @@' \
-e 's@">@"@' \
-e '/generic/d' > packages.tmp
# This variable is necessary to make sure the `cat $JHALFSDIR/packages`
# separates each iteration by lines.
# Modify the 'internal field separator' to break on 'LF' only
IFS=$'\x0A'
for f in `cat packages.tmp`; do
IFS=$saveIFS # Restore the system defaults
LOC_add_packages_entry \
`echo $f | sed -e 's/-version//' \
-e 's/-file.*//' \
-e 's/"//g'`
done
echo " ...OK"
;;
*)
echo -n "Creating <${PROGNAME}> specific packageslist_.wget file"
grep "\-version" $BOOK/general.ent | sed -e 's@<!ENTITY @@' \
-e 's@">@"@' \
-e '/generic/d' >> packages
;;
esac
# Download the vim-lang package if it must be installed
if [ "$VIMLANG" = "1" ] && [ ! "$PROGNAME" = "hlfs" ] ; then
echo `grep "vim" packages | sed 's@vim@&-lang@'` >> packages
fi
echo `grep "udev-config-file" $BOOK/general.ent | sed -e 's@<!ENTITY @@' -e 's@">@"@'` >> packages
# There is no useful patches.ent file so we will create one.
case "${PROGNAME}" in
hlfs)
build_patches_file ;;
clfs )
build_patches_file ;;
2006-03-12 14:11:39 +01:00
lfs)
grep "^<\!ENTITY" $BOOK/patches.ent | sed -e 's/.* "//' -e 's/">//' >> patches
;;
blfs) ;;
*) exit 1
esac
# Done. Moving on...
get_sources
}
#----------------------------#
download() { # Download file, write name to MISSING_FILES.DMP if an error
#----------------------------#
cd $BUILDDIR/sources
# Hackish fix for the bash-doc, glibc-{linuxthreads,libidn}
# that don't conform to norms in the URL scheme.
DIR=`echo $1 | sed 's@-doc@@;s@-linuxthreads@@;s@-libidn@@;s@-testsuite@@'`
# If the file exists in the archive copy it to the $BUILDDIR/sources dir
# MD5SUM is assumed to be correct from previous download
if [ ! -z ${SRC_ARCHIVE} ] &&
[ -d ${SRC_ARCHIVE} ] &&
[ -f ${SRC_ARCHIVE}/$2 ]; then
cp ${SRC_ARCHIVE}/$2 .
echo "$2: -- ok"
return
fi
# Find the md5 sum for this package.
if [ $2 != MD5SUMS ] ; then
set +e
MD5=`grep " $2" MD5SUMS`
if [ $? -ne 0 ]; then
set -e
echo "${RED}$2 not found in MD5SUMS${OFF}"
echo "$2 not found in MD5SUMS" >> MISSING_FILES.DMP
return
fi
set -e
fi
if [ ! -f $2 ] ; then
case $DL in
wget ) wget --passive $FTP/$DIR/$2 ;;
curl ) `curl -# $FTP/$DIR/$2 -o $2` ;;
* ) echo "$DL not supported at this time." ;;
esac
elif ! echo "$MD5" | md5sum -c - >/dev/null 2>/dev/null ; then
case $DL in
wget ) wget --passive -c $FTP/$DIR/$2 ;;
curl ) `curl -# -C - $FTP/$DIR/$2 -o $2` ;;
* ) echo "$DL not supported at this time." ;;
esac
fi
if [ $2 != MD5SUMS ] && ! echo "$MD5" | md5sum -c - ; then
exit 1
fi
if [ $2 != MD5SUMS ] ; then
echo `grep "$MD5" MD5SUMS` >> MD5SUMS-$VERSION
fi
# If we make it this far we should copy the freshly downloaded file
# to the source archive.
if [ ! -z ${SRC_ARCHIVE} ] &&
[ -d ${SRC_ARCHIVE} ] &&
[ -w ${SRC_ARCHIVE} ] &&
[ $2 != MD5SUMS ]; then
echo "Store file:<$2> in package archive"
cp -v $2 ${SRC_ARCHIVE}
fi
}
#----------------------------#
get_sources() {
#----------------------------#
# Test if the packages must be downloaded
if [ "$HPKG" = "1" ] ; then
# This variable is necessary to make sure the `cat $JHALFSDIR/packages`
# separates each iteration by lines.
# Modify the 'internal field separator' to break on 'LF' only
IFS=$'\x0A'
if [ ! -d $BUILDDIR/sources ] ; then mkdir $BUILDDIR/sources ; fi
cd $BUILDDIR/sources
if [ -f MD5SUMS ] ; then rm MD5SUMS ; fi
if [ -f MD5SUMS-$VERSION ] ; then rm MD5SUMS-$VERSION ; fi
if [ -f MISSING_FILES.DMP ] ; then rm MISSING_FILES.DMP ; fi
download "" MD5SUMS
# Iterate through each package and grab it, along with any patches it needs.
for i in `cat $JHALFSDIR/packages` ; do
PKG=`echo $i | sed -e 's/-version.*//' -e 's/-file.*//'`
# There are some entities that aren't valid packages.
if [ "$PKG" = "expect-lib" -o "$PKG" = "linux-dl" ] ; then continue ; fi
VRS=`echo $i | sed -e 's/.* //' -e 's/"//g'`
case $PKG in
tcl) FILE="$PKG$VRS-src.tar.bz2" ;;
vim-lang) PKG="vim"
FILE="vim-$VRS-lang.tar.bz2" ;;
udev-config) PKG="udev"
FILE="$VRS" ;;
*) FILE="$PKG-$VRS.tar.bz2" ;;
esac
download $PKG $FILE
# Download any associated patches
for patch in `grep "&$PKG-version" $JHALFSDIR/patches` ; do
PATCH=`echo $patch | sed 's@&'$PKG'-version;@'$VRS'@'`
download $PKG $PATCH
done
done
fi
}
#-----------------------------------------------#
_IS_() # Function to test build scripts names
#-----------------------------------------------#
{
# Returns substr $2 or null str
# Must use string testing
case $1 in
*$2*) echo "$2" ;;
*) echo "" ;;
esac
}