buildpkg/buildpkg.functions
Tom G. Christensen cff842efd5 generic_prep seems to be working now
patch and unpack functions have not been thoroughly tested though :)
2003-06-30 14:20:19 +00:00

211 lines
5.8 KiB
Plaintext

#
# Global config file for buildpkg
#
# This file is designed to be sourced by pr. package buildscripts
#
# Variables that *must* be overridden pr. package
# They are used to construct paths and more so they
# must have sane values
# topdir= The toplevel dir name under $buildpkgbase
# It is also used pr. default in the pkgname
# and it is also used pr. default as the toplevel name inside the sourcetar ($tarname)
# version= source version ie. 0.14.2b
# pkgver= the package revision, an increasing number is recommended but a date could be used instead
# source[0..x] = source filenames - source[0] *must* be defined and contain a legal filename
# pr. default we will look for source[0] relative to $srcfiles
# A filename that begin with / will be treated as absolute paths
# Note! only source[0] will be automatically unpacked
# patch[0..x] = patch filenames - patch[0] must be defined but *can* be empty
# pr. default we expect these to be listed relative to $srcdir
# filenames that begin with / will be treated as absolute paths
# All patching will be done from *within* $srcdir/$tarname directory with patch -p1
# patches must be in uncompressed format
# Define tool programs
PKGMK=/usr/bin/pkgmk
PKGTRANS=/usr/bin/pkgtrans
STRIP=/usr/ccs/bin/strip
UNAME=/usr/bin/uname
TAR=/usr/local/bin/tar # GNU tar please!
BZIP2=/usr/bin/bzip2
GZIP=/usr/bin/gzip
PATCH=/usr/local/bin/patch # GNU patch 2.5 or better please!
# Define defaults
buildpkgbase=${HOME}/buildpkg
stagedir=$buildpkgbase/$topdir/build
srcdir=$buildpkgbase/$topdir/src
metadir=$buildpkgbase/$topdir/meta
tarname=$topdir-$version
srcfiles=$buildpkgbase/srcfiles
# defaults used for prepping the source
topinstalldir=/usr/local
prefix=$topinstalldir
pkgname=SB$topdir
cpu=sparcv9
os=sol`$UNAME -s`
pkgdirdesig=${topinstalldir##/*/} # topinstalldir suffix
# Distfiles should be named like this
# <name>-<version>-<pkgver>-sb-<os>-<cpu>-<pkgdirdesig>
# ie: libmad-0.14.2b-1.sb-sol5.8-sparcv9-local
distfile=$topdir-$version-$pkgver.sb-$os-$cpu-$pkgdirdesig
# Define error codes and texts
E_MISSING_STAGEDIR=30
E_BAD_FILE=32
E_PATCH_FAILED=33
E_BAD_DIR=34
E_BAD_UNPACK=35
E_BAD_COMPRESS=36
error_txt[$E_BAD_FILE]="File not found"
error_txt[$E_PATCH_FAILED]="Patch failed"
error_txt[$E_BAD_DIR]="Directory not found"
error_txt[$E_BAD_UNPACK]="Unable to decompress sourcearchive"
error_txt[$E_BAD_COMPRESS]="Unknown compression method"
#
# Helper functions
#
#
# error(): exit with errorcode and possibly a message
# params: $1 = errorcode
error()
{
if [ ! -z "${error_txt[$1]}" ]; then
echo "$1: ${error_txt[$1]}"
fi
exit $1
}
#
# patch(): patch unpacked source
# params: $1 = patch number (arrayindex) $2 = patch params (defaults to -p1)
# It will verify the existence of the patch file passed to it and
# exit gracefully if it cannot be found.
# An empty $2 argument will be treated as undefined
patch()
{
local pnum=$1
local p2=$2
local pparam=${p2:-"-p1"}
echo "Switching to $srcdir/$tarname"
if [ -d "$srcdir/$tarname" ]; then
cd $srcdir/$tarname
else
error $E_BAD_DIR
fi
if [ ! -z ${patch[$pnum]} ]; then # They didn't give us an empty string
if [ ! "${patch[$pnum]:0:1}" == "/" ]; then # We have a relative pathname
# expand to absolute
patch[$pnum]=$srcdir/${patch[$pnum]}
fi # We are now sure that $patch[$pnum] contains file with absolute path
echo "Processing patch[$pnum] - ${patch[$pnum]}"
if [ -r ${patch[$pnum]} ]; then # file is readable
$PATCH -Es $2 < ${patch[$pnum]}
if [ $? -ne 0 ]; then
error $E_PATCH_FAILED
fi
else
error $E_BAD_FILE
fi
else
echo "No such patchnumber defined - $1"
fi
}
# unpack(): Unpack source
# params: $1 = source number (arrayindex)
# It will detect filetype and unpack
# .tar, .tgz, .gz, .bz2 and .Z supported
unpack()
{
local snum=$1
echo "Switching to $srcdir"
if [ -d $srcdir ]; then
cd $srcdir
else
error $E_BAD_DIR
fi
if [ ! "${source[$snum]:0:1}" == "/" ]; then # We have a relative pathname
# expand to absolute
source[$snum]=$srcfiles/${source[$snum]}
fi # We are now sure that ${source[$snum]} contains file with absolute path
echo "Unpacking ${source[$snum]}"
if [ -r ${source[$snum]} ]; then # file is readable
local absfilename=${source[$snum]}
local filename=${absfilename##/*/} # Strip down to the filename
local suffix=${filename##*.} # Strip down to filename suffix (strip down to the last .)
# Determine filetype and unpack
case $suffix in
'tar') $TAR -xf ${source[$snum]};;
'gz') $GZIP -dc ${source[$snum]} | $TAR -xf -;;
'bz2') $BZIP2 -dc ${source[$snum]} | $TAR -xf -;;
'Z') $GZIP -dc ${source[$snum]} | $TAR -xf -;;
'tgz') $GZIP -dc ${source[$snum]} | $TAR -xf -;;
*) error $E_BAD_COMPRESS
esac
if [ $? -ne 0 ]; then
error $E_BAD_UNPACK
fi
else
error $E_BAD_FILE
fi
}
#
# Define generic functions for different build stages
#
# generic_prep(): Unpack source and apply any patches
# params: none
generic_prep()
{
unpack 0
# Patching
local numpatch=${#patch[@]}
local i=0
# Argh! - The C-style for loop doesn't work in bash-2.0.3 as distributed
# with Solaris 8 :( (it works just fine on Redhat Linux 7.3, bash 2.0.5a)
# for ((i=0; i < numpatch; i++))
# do
# patch $i -p1
# done
while [ $i -lt $numpatch ]
do
patch $i -p1
let i=i+1
done
}
# generic_build(): Take the necessary steps to build already prepared source
# params: [$1 = topsrcdir]
# topsrcdir is the toplevel dir *inside* the sourcepackage
# It may be necessary to set this if it differs from $topdir-$version
generic_build()
{
echo
}
# generic_install(): Install already built source
generic_install()
{
if [ -z "$stagedir" ]; then
exit $E_MISSING_STAGEDIR
fi
}
# generic_pack(): Build package using files from 'install' stage
generic_pack()
{
echo
}