Mercurial > hg > aboriginal
changeset 428:c88e25996320
Split function definitions out from include.sh.
author | Rob Landley <rob@landley.net> |
---|---|
date | Wed, 29 Oct 2008 21:05:50 -0500 |
parents | 3ba5bcc24b13 |
children | 2dd70124d38b |
files | include.sh sources/functions.sh |
diffstat | 2 files changed, 301 insertions(+), 296 deletions(-) [+] |
line wrap: on
line diff
--- a/include.sh Wed Oct 29 21:02:35 2008 -0500 +++ b/include.sh Wed Oct 29 21:05:50 2008 -0500 @@ -3,6 +3,8 @@ [ -e config ] && source config +source sources/functions.sh + # What host compiler should we use? [ -z "$CC" ] && CC=gcc @@ -105,299 +107,3 @@ [ $? -ne 0 ] && dienow -# Everything after here is utility functions used by the other scripts. - -# Figure out if we're using the stable or unstable versions of a package. - -function unstable() -{ - [ ! -z "$(echo ,"$USE_UNSTABLE", | grep ,"$1",)" ] -} - -# Strip the version number off a tarball - -function cleanup() -{ - - [ $? -ne 0 ] && dienow - - for i in "$@" - do - unstable "$i" && i="$PACKAGE" - echo "cleanup $i" - rm -rf "$i" || dienow - done -} - -# Give filename.tar.ext minus the version number. - -function noversion() -{ - echo "$1" | sed -e 's/-*\(\([0-9\.]\)*\([_-]rc\)*\(-pre\)*\([0-9][a-zA-Z]\)*\)*\(\.tar\..z2*\)$/'"$2"'\6/' -} - -# Give package name, minus file's version number and archive extension. - -function basename() -{ - noversion $1 | sed 's/\.tar\..z2*$//' -} - -# output the sha1sum of a file -function sha1file() -{ - sha1sum "$@" | awk '{print $1}' -} - -# Extract tarball named in $1 and apply all relevant patches into -# "$BUILD/sources/$1". Record sha1sum of tarball and patch files in -# sha1-for-source.txt. Re-extract if tarball or patches change. - -function extract() -{ - SRCTREE="${BUILD}/sources" - BASENAME="$(basename "$1")" - SHA1FILE="$(echo "${SRCTREE}/${BASENAME}/sha1-for-source.txt")" - SHA1TAR="$(sha1file "${SRCDIR}/$1")" - - # Sanity check: don't ever "rm -rf /". Just don't. - - if [ -z "$BASENAME" ] || [ -z "$SRCTREE" ] - then - dienow - fi - - # If it's already extracted and up to date (including patches), do nothing. - SHALIST=$(cat "$SHA1FILE" 2> /dev/null) - if [ ! -z "$SHALIST" ] - then - for i in "$SHA1TAR" $(sha1file "${SOURCES}/patches/$BASENAME"* 2>/dev/null) - do - # Is this sha1 in the file? - if [ -z "$(echo "$SHALIST" | sed -n "s/$i/$i/p" )" ] - then - SHALIST=missing - break - fi - # Remove it - SHALIST="$(echo "$SHALIST" | sed "s/$i//" )" - done - # If we matched all the sha1sums, nothing more to do. - [ -z "$SHALIST" ] && return 0 - fi - - echo -n "Extracting '${BASENAME}'" - # Delete the old tree (if any). Create new empty working directories. - rm -rf "${BUILD}/temp" "${SRCTREE}/${BASENAME}" 2>/dev/null - mkdir -p "${BUILD}"/{temp,sources} || dienow - - # Is it a bzip2 or gzip tarball? - DECOMPRESS="" - [ "$1" != "${1/%\.tar\.bz2/}" ] && DECOMPRESS="j" - [ "$1" != "${1/%\.tar\.gz/}" ] && DECOMPRESS="z" - - cd "${WORK}" && - { tar -xv${DECOMPRESS} -f "${SRCDIR}/$1" -C "${BUILD}/temp" || dienow - } | dotprogress - - mv "${BUILD}/temp/"* "${SRCTREE}/${BASENAME}" && - rmdir "${BUILD}/temp" && - echo "$SHA1TAR" > "$SHA1FILE" - - [ $? -ne 0 ] && dienow - - # Apply any patches to this package - - ls "${SOURCES}/patches/$BASENAME"* 2> /dev/null | sort | while read i - do - if [ -f "$i" ] - then - echo "Applying $i" - (cd "${SRCTREE}/${BASENAME}" && patch -p1 -i "$i") || dienow - sha1file "$i" >> "$SHA1FILE" - fi - done -} - -function try_checksum() -{ - SUM="$(sha1file "$SRCDIR/$FILENAME" 2>/dev/null)" - if [ x"$SUM" == x"$SHA1" ] || [ -z "$SHA1" ] && [ -f "$SRCDIR/$FILENAME" ] - then - touch "$SRCDIR/$FILENAME" - if [ -z "$SHA1" ] - then - echo "No SHA1 for $FILENAME ($SUM)" - else - echo "Confirmed $FILENAME" - fi - - [ -z "$EXTRACT_ALL" ] && return 0 - extract "$FILENAME" - return $? - fi - - return 1 -} - - -function try_download() -{ - # Return success if we have a valid copy of the file - - try_checksum && return 0 - - # If there's a corrupted file, delete it. In theory it would be nice - # to resume downloads, but wget creates "*.1" files instead. - - rm "$SRCDIR/$FILENAME" 2> /dev/null - - # If we have another source, try to download file. - - if [ -n "$1" ] - then - wget -t 2 -T 20 -O "$SRCDIR/$FILENAME" "$1" || return 2 - fi - - try_checksum -} - -# Confirm a file matches sha1sum, else try to download it from mirror list. - -function download() -{ - FILENAME=`echo "$URL" | sed 's .*/ '` - ALTFILENAME=alt-"$(noversion "$FILENAME" -0)" - - # Is there an unstable version to download, and is it selected? - if [ ! -z "$UNSTABLE" ] && unstable "$(basename "$FILENAME")" - then - # Keep old version around, if present. - touch -c "$SRCDIR/$FILENAME" 2>/dev/null - - # Download new one as alt-packagename.tar.ext - FILENAME="$ALTFILENAME" SHA1= try_download "$UNSTABLE" - return $? - fi - - # If environment variable specifies a preferred mirror, try that first. - - if [ ! -z "$PREFERRED_MIRROR" ] - then - try_download "$PREFERRED_MIRROR/$FILENAME" && return 0 - fi - - # Try standard locations - - for i in "$URL" http://impactlinux.com/firmware/mirror/"$FILENAME" \ - http://landley.net/code/firmware/mirror/"$FILENAME" - do - try_download "$i" && return 0 - done - - # Return failure. - - echo "Could not download $FILENAME" - echo -en "\e[0m" - return 1 -} - -# Clean obsolete files out of the source directory - -START_TIME=`date +%s` - -function cleanup_oldfiles() -{ - for i in "${SRCDIR}"/* - do - if [ -f "$i" ] && [ "$(date +%s -r "$i")" -lt "${START_TIME}" ] - then - echo Removing old file "$i" - rm -rf "$i" - fi - done -} - -function actually_dienow() -{ - echo -e "\e[31mExiting due to errors\e[0m" - exit 1 -} - - -trap actually_dienow SIGUSR1 -TOPSHELL=$$ - -function dienow() -{ - kill -USR1 $TOPSHELL - exit 1 -} - -function dotprogress() -{ - x=0 - while read i - do - x=$[$x + 1] - if [[ "$x" -eq 25 ]] - then - x=0 - echo -n . - fi - done - echo -} - -# Extract package $1, use out-of-tree build directory $2 (or $1 if no $2) -# Use symlink directory $3 (or $1 if no $3) - -function setupfor() -{ - export WRAPPY_LOGPATH="$WRAPPY_LOGDIR/cmdlines.${STAGE_NAME}.setupfor" - - # Figure out whether we're using an unstable package. - - PACKAGE="$1" - unstable "$PACKAGE" && PACKAGE=alt-"$PACKAGE" - - # Make sure the source is already extracted and up-to-date. - cd "${SRCDIR}" && - extract "${PACKAGE}-"*.tar* || exit 1 - - # Set CURSRC - CURSRC="$PACKAGE" - if [ ! -z "$3" ] - then - CURSRC="$3" - unstable "$CURSRC" && CURSRC=alt-"$CURSRC" - fi - export CURSRC="${WORK}/${CURSRC}" - - # Announce package, with easy-to-grep-for "===" marker. - - echo "=== Building $PACKAGE ($ARCH_NAME)" - echo "Snapshot '$PACKAGE'..." - cd "${WORK}" || dienow - if [ $# -lt 3 ] - then - rm -rf "${CURSRC}" || dienow - fi - mkdir -p "${CURSRC}" && - cp -lfR "${SRCTREE}/$PACKAGE/"* "${CURSRC}" - - [ $? -ne 0 ] && dienow - - # Do we have a separate working directory? - - if [ -z "$2" ] - then - cd "$PACKAGE"* || dienow - else - mkdir -p "$2" && cd "$2" || dienow - fi - export WRAPPY_LOGPATH="$WRAPPY_LOGDIR/cmdlines.${STAGE_NAME}.$1" - - # Change window title bar to package now - echo -en "\033]2;Building $STAGE_NAME $1\007" -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/functions.sh Wed Oct 29 21:05:50 2008 -0500 @@ -0,0 +1,299 @@ +# Lots of reusable functions. This file is sourced, not run. + +# Figure out if we're using the stable or unstable versions of a package. + +function unstable() +{ + [ ! -z "$(echo ,"$USE_UNSTABLE", | grep ,"$1",)" ] +} + +# Strip the version number off a tarball + +function cleanup() +{ + + [ $? -ne 0 ] && dienow + + for i in "$@" + do + unstable "$i" && i="$PACKAGE" + echo "cleanup $i" + rm -rf "$i" || dienow + done +} + +# Give filename.tar.ext minus the version number. + +function noversion() +{ + echo "$1" | sed -e 's/-*\(\([0-9\.]\)*\([_-]rc\)*\(-pre\)*\([0-9][a-zA-Z]\)*\)*\(\.tar\..z2*\)$/'"$2"'\6/' +} + +# Give package name, minus file's version number and archive extension. + +function basename() +{ + noversion $1 | sed 's/\.tar\..z2*$//' +} + +# output the sha1sum of a file +function sha1file() +{ + sha1sum "$@" | awk '{print $1}' +} + +# Extract tarball named in $1 and apply all relevant patches into +# "$BUILD/sources/$1". Record sha1sum of tarball and patch files in +# sha1-for-source.txt. Re-extract if tarball or patches change. + +function extract() +{ + SRCTREE="${BUILD}/sources" + BASENAME="$(basename "$1")" + SHA1FILE="$(echo "${SRCTREE}/${BASENAME}/sha1-for-source.txt")" + SHA1TAR="$(sha1file "${SRCDIR}/$1")" + + # Sanity check: don't ever "rm -rf /". Just don't. + + if [ -z "$BASENAME" ] || [ -z "$SRCTREE" ] + then + dienow + fi + + # If it's already extracted and up to date (including patches), do nothing. + SHALIST=$(cat "$SHA1FILE" 2> /dev/null) + if [ ! -z "$SHALIST" ] + then + for i in "$SHA1TAR" $(sha1file "${SOURCES}/patches/$BASENAME"* 2>/dev/null) + do + # Is this sha1 in the file? + if [ -z "$(echo "$SHALIST" | sed -n "s/$i/$i/p" )" ] + then + SHALIST=missing + break + fi + # Remove it + SHALIST="$(echo "$SHALIST" | sed "s/$i//" )" + done + # If we matched all the sha1sums, nothing more to do. + [ -z "$SHALIST" ] && return 0 + fi + + echo -n "Extracting '${BASENAME}'" + # Delete the old tree (if any). Create new empty working directories. + rm -rf "${BUILD}/temp" "${SRCTREE}/${BASENAME}" 2>/dev/null + mkdir -p "${BUILD}"/{temp,sources} || dienow + + # Is it a bzip2 or gzip tarball? + DECOMPRESS="" + [ "$1" != "${1/%\.tar\.bz2/}" ] && DECOMPRESS="j" + [ "$1" != "${1/%\.tar\.gz/}" ] && DECOMPRESS="z" + + cd "${WORK}" && + { tar -xv${DECOMPRESS} -f "${SRCDIR}/$1" -C "${BUILD}/temp" || dienow + } | dotprogress + + mv "${BUILD}/temp/"* "${SRCTREE}/${BASENAME}" && + rmdir "${BUILD}/temp" && + echo "$SHA1TAR" > "$SHA1FILE" + + [ $? -ne 0 ] && dienow + + # Apply any patches to this package + + ls "${SOURCES}/patches/$BASENAME"* 2> /dev/null | sort | while read i + do + if [ -f "$i" ] + then + echo "Applying $i" + (cd "${SRCTREE}/${BASENAME}" && patch -p1 -i "$i") || dienow + sha1file "$i" >> "$SHA1FILE" + fi + done +} + +function try_checksum() +{ + SUM="$(sha1file "$SRCDIR/$FILENAME" 2>/dev/null)" + if [ x"$SUM" == x"$SHA1" ] || [ -z "$SHA1" ] && [ -f "$SRCDIR/$FILENAME" ] + then + touch "$SRCDIR/$FILENAME" + if [ -z "$SHA1" ] + then + echo "No SHA1 for $FILENAME ($SUM)" + else + echo "Confirmed $FILENAME" + fi + + [ -z "$EXTRACT_ALL" ] && return 0 + extract "$FILENAME" + return $? + fi + + return 1 +} + + +function try_download() +{ + # Return success if we have a valid copy of the file + + try_checksum && return 0 + + # If there's a corrupted file, delete it. In theory it would be nice + # to resume downloads, but wget creates "*.1" files instead. + + rm "$SRCDIR/$FILENAME" 2> /dev/null + + # If we have another source, try to download file. + + if [ -n "$1" ] + then + wget -t 2 -T 20 -O "$SRCDIR/$FILENAME" "$1" || return 2 + fi + + try_checksum +} + +# Confirm a file matches sha1sum, else try to download it from mirror list. + +function download() +{ + FILENAME=`echo "$URL" | sed 's .*/ '` + ALTFILENAME=alt-"$(noversion "$FILENAME" -0)" + + # Is there an unstable version to download, and is it selected? + if [ ! -z "$UNSTABLE" ] && unstable "$(basename "$FILENAME")" + then + # Keep old version around, if present. + touch -c "$SRCDIR/$FILENAME" 2>/dev/null + + # Download new one as alt-packagename.tar.ext + FILENAME="$ALTFILENAME" SHA1= try_download "$UNSTABLE" + return $? + fi + + # If environment variable specifies a preferred mirror, try that first. + + if [ ! -z "$PREFERRED_MIRROR" ] + then + try_download "$PREFERRED_MIRROR/$FILENAME" && return 0 + fi + + # Try standard locations + + for i in "$URL" http://impactlinux.com/firmware/mirror/"$FILENAME" \ + http://landley.net/code/firmware/mirror/"$FILENAME" + do + try_download "$i" && return 0 + done + + # Return failure. + + echo "Could not download $FILENAME" + echo -en "\e[0m" + return 1 +} + +# Clean obsolete files out of the source directory + +START_TIME=`date +%s` + +function cleanup_oldfiles() +{ + for i in "${SRCDIR}"/* + do + if [ -f "$i" ] && [ "$(date +%s -r "$i")" -lt "${START_TIME}" ] + then + echo Removing old file "$i" + rm -rf "$i" + fi + done +} + +# An exit function that works properly even from a subshell. + +function actually_dienow() +{ + echo -e "\e[31mExiting due to errors\e[0m" + exit 1 +} + +trap actually_dienow SIGUSR1 +TOPSHELL=$$ + +function dienow() +{ + kill -USR1 $TOPSHELL + exit 1 +} + +# Turn a bunch of output lines into a much quieter series of periods. + +function dotprogress() +{ + x=0 + while read i + do + x=$[$x + 1] + if [[ "$x" -eq 25 ]] + then + x=0 + echo -n . + fi + done + echo +} + +# Extract package $1, use out-of-tree build directory $2 (or $1 if no $2) +# Use link directory $3 (or $1 if no $3) + +function setupfor() +{ + export WRAPPY_LOGPATH="$WRAPPY_LOGDIR/cmdlines.${STAGE_NAME}.setupfor" + + # Figure out whether we're using an unstable package. + + PACKAGE="$1" + unstable "$PACKAGE" && PACKAGE=alt-"$PACKAGE" + + # Make sure the source is already extracted and up-to-date. + cd "${SRCDIR}" && + extract "${PACKAGE}-"*.tar* || exit 1 + + # Set CURSRC + CURSRC="$PACKAGE" + if [ ! -z "$3" ] + then + CURSRC="$3" + unstable "$CURSRC" && CURSRC=alt-"$CURSRC" + fi + export CURSRC="${WORK}/${CURSRC}" + + # Announce package, with easy-to-grep-for "===" marker. + + echo "=== Building $PACKAGE ($ARCH_NAME)" + echo "Snapshot '$PACKAGE'..." + cd "${WORK}" || dienow + if [ $# -lt 3 ] + then + rm -rf "${CURSRC}" || dienow + fi + mkdir -p "${CURSRC}" && + cp -lfR "${SRCTREE}/$PACKAGE/"* "${CURSRC}" + + [ $? -ne 0 ] && dienow + + # Do we have a separate working directory? + + if [ -z "$2" ] + then + cd "$PACKAGE"* || dienow + else + mkdir -p "$2" && cd "$2" || dienow + fi + export WRAPPY_LOGPATH="$WRAPPY_LOGDIR/cmdlines.${STAGE_NAME}.$1" + + # Change window title bar to package now + echo -en "\033]2;Building $STAGE_NAME $1\007" +}