A major overhaul.

New functionality added:
- 'hide' meta file to list files that should be 'nohist' in the IDB
- 'ops' meta file to list files and associated ops
- 'depends' meta file to list prereqs for the specfile.

Several new functions where introduced and a few old ones where
updated.

Fixed a bug in create_idb which resulted in all toplevel image
descriptions being set to the first one listed in image.conf

Extended subsys.conf to use wildcards to match files
for the subsystems

What's missing currently is the ability to check
if there are unpackaged files left in the staging
area, like rpm does.

New functionality has been ligthly tested
This commit is contained in:
Tom G. Christensen 2003-12-06 14:55:30 +00:00
parent 39348b938d
commit 432baeee55
2 changed files with 169 additions and 29 deletions

View File

@ -16,16 +16,24 @@ imageconf=$buildpkgbase/scripts/image.conf
subsysconf=$buildpkgbase/scripts/subsys.conf
idbfile=$metadir/$topdir.idb
specfile=$metadir/$topdir.spec
depends=$metadir/depends
opsfile=$metadir/ops
hidefile=$metadir/hide
# Preformat manpages since Irix is not likely to have nroff available
catman=1
# Other
# Comment these 4 declarations to get it to run with ksh
# Comment these declarations to get it to run with ksh
declare -a pc # Array of product categories (image.subsys)
declare -a pd # Array of matching descriptions
declare -a pctop # Array of toplevel product categories (image)
declare -a pdtop # Array of matching descriptions
declare -a reqs # Array of subsystems with prereqs
declare -a reqp # Array of prereqs (should match up with reqs)
declare -a hide # Files that should be "hidden" with nohist
declare -a opfiles # Files that should have an ops associated
declare -a opscript # Ops to associate with opfiles
#override defaults
pkgprefix=tgc_
@ -43,6 +51,7 @@ META_CLEAN="$topdir.spec $topdir.idb"
indent4=" "
indent8=" "
indent12=" "
indent16=" "
# fix_ver(): "normalize" a version-pkgver pair
# params: $1=version
# Removes any '.' and '-' characters from a version string
@ -77,14 +86,25 @@ spec_img_footer()
{
echo "$indent4 endimage"
}
# spec_subsys()
# spec_subsys_header()
# param: $1=image $2=subsys $3=description
spec_subsys()
spec_subsys_header()
{
echo "$indent8 subsys $2 default"
echo "$indent12 id \"$3\""
echo "$indent12 replaces self"
echo "$indent12 exp $pkgname.$1.$2"
}
# spec_subsys_req()
# param: $1=prereq
spec_subsys_req()
{
echo "$indent16 prereq ( $1 )"
}
# spec_subsys_footer()
# param: none
spec_subsys_footer()
{
echo "$indent8 endsubsys"
}
@ -138,6 +158,34 @@ compute_octal()
echo $d1$d2$d3$d4
}
# check_hide(): Should the file be "hidden"
# params: $1=file to check against $hide
check_hide()
{
local file=$1
for ((i=0; $i < ${#hide[@]}; i++))
do
if [ "${hide[$i]}" == "$file" ]; then
echo 1
fi
done
}
# check_ops(): Is there an opscript associated with $1
# param: $1=file to check
check_ops()
{
local file=$1
local return
echo "file is $file" >> /tmp/debug
for ((i=0; $i < ${#opfiles[@]}; i++))
do
echo "opfiles $i is ${opfiles[$i]}" >> /tmp/debug
if [ "${opfiles[$i]}" == "$file" ]; then
return="${opscript[$i]}"
fi
done
echo $return
}
# add_files()
# Create IDB entries for all files in a specfic product category
# Takes the following parameters
@ -149,16 +197,27 @@ compute_octal()
add_files()
{
local perm=$3
local FILES=`$FIND $1/* -type f -print`
local FILES=`$FIND $1 -type f -print`
for i in $FILES
do
if [ "$3" == "keep" ]; then
permlist=`$LS -l $i | $CUT -d " " -f 1`
perm=$(compute_octal $permlist)
fi
nohist=$(check_hide $i)
doop=$(check_ops $i)
if [ ! -z "$nohist" ]; then
echo "f $perm $4 $5 ${topinstalldir:1}/$i $i $pkgname.$2 nohist" >>$idbfile
else
if [ ! -z "$doop" ]; then
echo "f $perm $4 $5 ${topinstalldir:1}/$i $i $pkgname.$2 $doop" >>$idbfile
else
echo "f $perm $4 $5 ${topinstalldir:1}/$i $i $pkgname.$2" >>$idbfile
fi
fi
done
FILES=`$FIND $1/* -type l -print`
local FILES=`$FIND $1 -type l -print`
for i in $FILES
do
if [ "$3" == "keep" ]; then
@ -185,6 +244,59 @@ fetch_imageconf()
done < $imageconf
}
# fetch_depends(): Fetch a list of subsystems and their prereqs
# params: none
#
fetch_depends()
{
reqidx=0
while read ss req
do
reqs[$reqidx]=$ss
if [ "$req" == "auto" ]; then # auto create depend on sw.base
nver=$(fix_ver "$version-$pkgver")
req="$pkgname $nver $nver"
fi
reqp[$reqidx]=$req
let "reqidx = $reqidx + 1"
done < $depends
}
# fetch_ops(): Fetch ops
# params: none
# Populates the firstop and lastop variables
# and the opfiles and opscript arrays
fetch_ops()
{
opsidx=0
while read optype op
do
case $optype in
'firstop')
firstop="$op"
;;
'lastop')
lastop="$op"
;;
esac
opfiles[$opsidx]=$optype
opscript[$opsidx]=$op
let "opsidx = $opsidx + 1"
done < $opsfile
}
#fetch_hide(): Fetch list of files to "hide"
#params: none
fetch_hide()
{
hideidx=0
while read filen
do
hide[$hideidx]=$filen
let "hideidx = $hideidx + 1"
done < $hidefile
}
##################################
# "external" functions
##################################
@ -194,13 +306,16 @@ fetch_imageconf()
# and check if we have a $dir in our staging area
create_idb()
{
fetch_hide
fetch_ops
local index=0
local found=0
while read dir pdcat perm user group desc
do
dironly=${dir%/*}
found=0
if [ -d $dir ]; then # This exists
add_files $dir $pdcat $perm $user $group
if [ -d $dironly ]; then # This exists
add_files "$dir" $pdcat $perm $user $group
for i in ${pc[@]} # If $pdcat is already there then don't add it again
do
if [ "$i" = "$pdcat" ]; then
@ -216,8 +331,21 @@ create_idb()
fi
done < $subsysconf
$SORT +4u -6 < $idbfile > $metadir/idbtemp
mv $metadir/idbtemp $idbfile
$RM -f $metadir/idbtemp
lines=$(wc -l < $metadir/idbtemp)
if [ ! -z $firstop ]; then
echo "$(head -1 $metadir/idbtemp) $firstop" > $metadir/idbtemp2
tail +2 $metadir/idbtemp >> $metadir/idbtemp2
else
mv $metadir/idbtemp $metadir/idbtemp2
fi
if [ ! -z $lastop ]; then
let "lines=$lines - 1"
echo "$(head -$lines $metadir/idbtemp2)" > $idbfile
echo "$(tail -1 $metadir/idbtemp2) $lastop" >> $idbfile
else
mv $metadir/idbtemp2 $idbfile
fi
$RM -f $metadir/idbtemp $metadir/idbtemp2
}
# create_spec(): Create the .spec file.
@ -229,17 +357,27 @@ create_idb()
create_spec()
{
fetch_imageconf
fetch_depends
spec_header $pkgname "$name $version-$pkgver" > $specfile
pcsize=${#pc[@]}
for i in ${pctop[@]}
pctopsize=${#pctop[@]}
for ((i=0; i < $pctopsize; i++))
do
pcidx=0
spec_img_header $i "${pdtop[$pcidx]}" $version-$pkgver >> $specfile
local pcidx=0
spec_img_header ${pctop[$i]} "${pdtop[$i]}" $version-$pkgver >> $specfile
while [ "$pcidx" -lt "$pcsize" ]
do
rv=`$EXPR match "${pc[$pcidx]}" ''$i''`
rv=`$EXPR match "${pc[$pcidx]}" ''${pctop[$i]}''`
if [ ! "$rv" -eq 0 ]; then # We got a hit!
spec_subsys $i `echo ${pc[$pcidx]}|$CUT -d . -f 2` "${pd[$pcidx]}" >> $specfile
spec_subsys_header ${pctop[$i]} `echo ${pc[$pcidx]}|$CUT -d . -f 2` "${pd[$pcidx]}" >> $specfile
reqsize=${#reqs[@]}
for ((j=0; j < $reqsize; j++))
do
if [ "${reqs[$j]}" == "${pc[$pcidx]}" ]; then
spec_subsys_req "${reqp[$j]}" >> $specfile
fi
done
spec_subsys_footer >> $specfile
fi
let "pcidx = $pcidx + 1"
done

View File

@ -1,13 +1,15 @@
bin sw.base keep root sys Base Software
sbin sw.base 0744 root sys Base Software
etc sw.base keep root sys Base Software
libexec sw.base keep root sys Base Software
mips-sgi-irix5.3 sw.base keep root sys Base Software
mips-sgi-irix6.2 sw.base keep root sys Base Software
lib sw.base keep root sys Base Software
include sw.base keep root sys Base Software
info man.doc keep root sys Documentation
man man.manpages keep root sys Manpages
doc man.doc keep root sys Documentation
share sw.base keep root sys Base Software
ssl sw.base keep root sys Base Software
bin/* sw.base keep root sys Base Software
sbin/* sw.base 0744 root sys Base Software
etc/* sw.base keep root sys Base Software
libexec/* sw.base keep root sys Base Software
mips-sgi-irix5.3/* sw.base keep root sys Base Software
mips-sgi-irix6.2/* sw.base keep root sys Base Software
lib/*.so sw.devel keep root sys Development files
lib/*.a sw.devel keep root sys Development files
lib/*.so.* sw.base keep root sys Base Software
include/* sw.devel keep root sys Development files
info/* man.doc keep root sys Documentation
man/* man.manpages keep root sys Manpages
doc/* man.doc keep root sys Documentation
share/* sw.base keep root sys Base Software
ssl/* sw.base keep root sys Base Software