Add helper functions to extract PKG and PSTAMP from pkginfo files

Fix list_pkgs so it actually works the way it was intended
Fix make_pkg to use the fixed list_pkgs
Remove old prototype function and PKGPROTO helper var
Add 'depend' support to add_scripts
Bash 2.03 needs (()) expansion in quotes in parse_def to avoid
a syntax error
Use $AWK instead of awk
This commit is contained in:
Tom G. Christensen 2004-04-15 08:40:46 +00:00
parent 552b58c24a
commit d15a078371

View File

@ -7,12 +7,11 @@
# generic tools go in buildpkg.functions # generic tools go in buildpkg.functions
PKGMK=/usr/bin/pkgmk PKGMK=/usr/bin/pkgmk
PKGTRANS=/usr/bin/pkgtrans PKGTRANS=/usr/bin/pkgtrans
PKGPROTO=/usr/bin/pkgproto
# Override generic location # Override generic location
STRIP=/usr/ccs/bin/strip STRIP=/usr/ccs/bin/strip
META_CLEAN="prototype prototype.in pkginfo" META_CLEAN="prototype prototype.in pkginfo files.tmp"
# Define defaults # Define defaults
# pkginfo information. # pkginfo information.
@ -48,21 +47,19 @@ distfile='$secname-$version-$secver.sb-$os-$cpu-$pkgdirdesig'
##################################################### #####################################################
# make_pkg(): Create the final package # make_pkg(): Create the final package
# params: $1 = prototype filename # params: $1 = meta file suffix
# #
make_pkg() make_pkg()
{ {
if [ $# -lt 1 ]; then if [ $# -lt 1 ]; then
error $E_MISSING_ARGS make_pkg error $E_MISSING_ARGS make_pkg
fi fi
local prototype=$($BASENAME $1) local secname=$1
local prototype=prototype.$secname
local secname=${prototype##prototype.} local secver=$(get_pkgrev $secname)
local pstamp=$($GREP PSTAMP $metadir/pkginfo.$secname)
local secver=$(_upls ${pstamp##PSTAMP=})
local dfile=$(_upls $distfile) local dfile=$(_upls $distfile)
local pn=$($GREP PKG $metadir/pkginfo.$secname) local pname=$(get_pkgname $secname)
local pname=$(_upls ${pn##PKG=})
echo "Creating package and transferring it to datastream format" echo "Creating package and transferring it to datastream format"
$PKGMK -r `pwd` -d $buildpkgbase/$topdir -o -f $metadir/$prototype $PKGMK -r `pwd` -d $buildpkgbase/$topdir -o -f $metadir/$prototype
@ -98,44 +95,16 @@ pack_info()
# params: none # params: none
list_pkgs() list_pkgs()
{ {
for i in $metadir/prototype.* local i
local it
# We can't rely on shell expansion here since we would be burned if * is empty!
for i in $($LS -1 $metadir/prototype.* 2>/dev/null)
do do
echo ${i##prototype.} it=$($BASENAME $i)
echo ${it##prototype.}
done done
} }
# prototype(): Create a prototype file for pkgmk
# params: $1 = owner $2 = group $3 = [script|noscript]
# $1 & $2 will list the owner and group that is to be applied to all files
# pkginfo and depend (if it exists) will automatically be added to prototype file
# $3 will define whether or not to automatically include any post/pre scripts found
# in $topdir/meta. Pr. default postinstall,preinstall,postremove,preremove are the filenames
# it will look for.
# $3 can be omitted and in that case prototype will behave as if $3=noscript
prototype()
{
local owner=$1
local group=$2
$FIND . -print|$PKGPROTO > $metadir/prototype.in
$CAT $metadir/prototype.in | $AWK -v owner="$owner" -v group="$group" \
'{ $5=owner; $6=group; print; }' > $metadir/prototype
add_meta_file pkginfo "$metadir/pkginfo"
# If a dependency file is available then use it
[ -r $metadir/depend -a $usedepend -eq 1 ] && add_meta_file depend "$metadir/depend"
case $3 in
'script') [ -r $metadir/preinstall ] && add_meta_file preinstall "$metadir/preinstall"
[ -r $metadir/postinstall ] && add_meta_file postinstall "$metadir/postinstall"
[ -r $metadir/preremove ] && add_meta_file preremove "$metadir/preremove"
[ -r $metadir/postremove ] && add_meta_file postremove "$metadir/postremove"
;;
'noscript') ;;
esac
}
# add_meta_file(): add a metafile entry to the prototype file # add_meta_file(): add a metafile entry to the prototype file
# params: $1 = keyword $2 = filename $3 = metafile suffix # params: $1 = keyword $2 = filename $3 = metafile suffix
# Additions will be done to the file $metadir/prototype # Additions will be done to the file $metadir/prototype
@ -160,6 +129,10 @@ add_scripts()
error $E_MISSING_ARGS add_scripts error $E_MISSING_ARGS add_scripts
fi fi
local secname=$1 local secname=$1
# If a dependency file is available then use it
[ -r $metadir/depend.$secname -a $usedepend -eq 1 ] && add_meta_file depend "$metadir/depend.$secname" $secname
if [ $usescripts -eq 1 ]; then if [ $usescripts -eq 1 ]; then
[ -r $metadir/preinstall.$secname ] && add_meta_file preinstall "$metadir/preinstall.$secname" $secname [ -r $metadir/preinstall.$secname ] && add_meta_file preinstall "$metadir/preinstall.$secname" $secname
[ -r $metadir/postinstall.$secname ] && add_meta_file postinstall "$metadir/postinstall.$secname" $secname [ -r $metadir/postinstall.$secname ] && add_meta_file postinstall "$metadir/postinstall.$secname" $secname
@ -291,10 +264,10 @@ parse_def()
local section=0 local section=0
local foundfiles=0 local foundfiles=0
local secname="" local secname=""
local secpos=0
while read line while read line
do do
echo $line
case ${line:0:1} in case ${line:0:1} in
'#') ;; '#') ;;
'[') '[')
@ -302,7 +275,7 @@ parse_def()
error $E_BAD_SECTION_BEGIN parse_def error $E_BAD_SECTION_BEGIN parse_def
else else
section=1 section=1
secname=${line:1:((${#line}-2))} secname="${line:1:((${#line}-2))}"
fi fi
;; ;;
'') '')
@ -341,9 +314,9 @@ parse_def()
else # Perhaps we hit 'files'? else # Perhaps we hit 'files'?
if [ "${line:0:5}" == "files" ]; then if [ "${line:0:5}" == "files" ]; then
triplet="${line:6:((${#line}-5-2))}" triplet="${line:6:((${#line}-5-2))}"
defaultperms=$(echo $triplet | awk -F, '{ print $1 }') defaultperms=$(echo $triplet | $AWK -F, '{ print $1 }')
defaultuid=$(echo $triplet | awk -F, '{ print $2 }') defaultuid=$(echo $triplet | $AWK -F, '{ print $2 }')
defaultgid=$(echo $triplet | awk -F, '{ print $3 }') defaultgid=$(echo $triplet | $AWK -F, '{ print $3 }')
foundfiles=1 foundfiles=1
pack_info $secname # Create pkginfo pack_info $secname # Create pkginfo
# Start the prototype file by adding the pkginfo file # Start the prototype file by adding the pkginfo file
@ -374,10 +347,32 @@ check_unpackaged()
$SORT $tmpdir/files.tmp > $tmpdir/f2 $SORT $tmpdir/files.tmp > $tmpdir/f2
if [ ! "$($CMP $tmpdir/f1 $tmpdir/f2)" == "" ]; then if [ ! "$($CMP $tmpdir/f1 $tmpdir/f2)" == "" ]; then
$RM -f $tmpdir/f1 $tmpdir/f2 $RM -f $tmpdir/f1 $tmpdir/f2
echo error $E_UNPACKAGED_FILES check_unpackaged error $E_UNPACKAGED_FILES check_unpackaged
fi fi
$RM -f $tmpdir/f1 $tmpdir/f2 $RM -f $tmpdir/f1 $tmpdir/f2
} }
# get_pkgname(): Extract pkgname (PKG) from a pkginfo file
# params: $1 = metafile suffix
get_pkgname()
{
local secname=$1
local pn=$($GREP PKG $metadir/pkginfo.$secname)
local pname=$(_upls ${pn##PKG=})
echo $pname
}
# get_pkgrev(): Extract pkgrev (PSTAMP) from pkginfo file
# params: $1 = metafile suffix
get_pkgrev()
{
local secname=$1
local pstamp=$($GREP PSTAMP $metadir/pkginfo.$secname)
local secver=$(_upls ${pstamp##PSTAMP=})
echo $secver
}
##################################################### #####################################################
# Define generic functions for different build stages # Define generic functions for different build stages
@ -402,8 +397,6 @@ generic_pack()
if [ "$ignore_unpackaged_files" -eq 0 ]; then if [ "$ignore_unpackaged_files" -eq 0 ]; then
check_unpackaged check_unpackaged
fi fi
#pack_info
#prototype root bin script
# Create a list of all the packages that we are going to build # Create a list of all the packages that we are going to build
for i in $(list_pkgs) for i in $(list_pkgs)
do do