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"
+}