Bring Irix into line with the latest changes

Now Irix also uses pkgdef and checks for unpackaged files in the stagedir.
subsys.conf will only contain descriptions like image.conf

What missing?
ops & depend functionality is untested

strip function needs to be either generalized or moved to the pr. pkgsystem
function libraries.

Perhaps introduce something like attr from RPM to set specific permissions
in pkgdef.
This commit is contained in:
Tom G. Christensen 2004-07-14 10:07:18 +00:00
parent 6ca155d0c4
commit 0958686fd0
3 changed files with 220 additions and 92 deletions

View File

@ -26,7 +26,14 @@ hidefile=$metadir/hide
# Preformat manpages since Irix is not likely to have nroff available # Preformat manpages since Irix is not likely to have nroff available
catman=1 catman=1
# strip?
dostrip=0
# Other # Other
usedepend=0 # Don't use depend file even if it's available
usescripts=0 # Don't add ops even if they're available
ignore_unpackaged_files=0 # default to check for unpackaged files in the stage area
# Comment these 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 pc # Array of product categories (image.subsys)
declare -a pd # Array of matching descriptions declare -a pd # Array of matching descriptions
@ -47,12 +54,12 @@ cpu=mips3
configure_args='--prefix=$prefix' configure_args='--prefix=$prefix'
META_CLEAN="$topdir.spec $topdir.idb" META_CLEAN="$topdir.spec $topdir.idb files.tmp"
# Host specific configuration # Host specific configuration
[ -r $buildpkgbase/scripts/config.$($HOSTNAME -s).irix ] && . $buildpkgbase/scripts/config.$($HOSTNAME -s).irix [ -r $buildpkgbase/scripts/config.$($HOSTNAME -s).irix ] && . $buildpkgbase/scripts/config.$($HOSTNAME -s).irix
distfile=$topdir-$version-$pkgver.tgc-$os-$cpu-$pkgdirdesig.tardist distfile='$topdir-$version-$pkgver.tgc-$os-$cpu-$pkgdirdesig.tardist'
##################################################### #####################################################
# Internal helper functions # Internal helper functions
@ -130,24 +137,15 @@ spec_subsys_footer()
echo "$indent8 endsubsys" echo "$indent8 endsubsys"
} }
# 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 # check_ops(): Is there an opscript associated with $1
# param: $1=file to check # param: $1=file to check
check_ops() check_ops()
{ {
local file="$1" local file="$1"
local return local return=""
if [ "$usescripts" -eq 0 ]; then
echo $return
fi
#echo "file is $file" >> /tmp/debug #echo "file is $file" >> /tmp/debug
for ((i=0; $i < ${#opfiles[@]}; i++)) for ((i=0; $i < ${#opfiles[@]}; i++))
do do
@ -180,51 +178,57 @@ fix_fname()
# $3 = permissions to set on the files we find # $3 = permissions to set on the files we find
# $4 = user # $4 = user
# $5 = group # $5 = group
# $6 = special attribute
add_files() add_files()
{ {
local perm=$3 local fspec=$(_upls $1)
local FILES=`$FIND $1 -type f -print` local prodcat=$2
local defperm=$3
local owner=$4
local group=$5
local specattr=$6
local FILES=$($FIND $fspec -type f -print|$TEE -a $metadir/files.tmp)
OIFS=$IFS # We play IFS tricks so we can handle filenames with embedded spaces OIFS=$IFS # We play IFS tricks so we can handle filenames with embedded spaces
IFS=" IFS="
" "
for i in $FILES for i in $FILES
do do
IFS=$OIFS IFS=$OIFS
if [ "$3" == "keep" ]; then if [ "$defperm" == "-" ]; then
permlist=`$LS -l "$i" | $CUT -d " " -f 1` permlist=`$LS -l "$i" | $CUT -d " " -f 1`
perm=$(compute_octal $permlist) perm=$(compute_octal $permlist)
fi fi
nohist=$(check_hide "$i")
doop=$(check_ops "$i") doop=$(check_ops "$i")
fname=$(fix_fname "$i") fname=$(fix_fname "$i")
if [ ! -z "$nohist" ]; then if [ ! -z "$specattr" ]; then
echo "f $perm $4 $5 ${topinstalldir:1}/$fname $i $pkgname.$2 nohist" >>$idbfile echo "f $perm $owner $group ${topinstalldir:1}/$fname $i ${pkgname}.${prodcat} $specattr" >>$idbfile
else else
if [ ! -z "$doop" ]; then if [ ! -z "$doop" ]; then
echo "f $perm $4 $5 ${topinstalldir:1}/$fname $i $pkgname.$2 $doop" >>$idbfile echo "f $perm $owner $group ${topinstalldir:1}/$fname $i ${pkgname}.${prodcat} $doop" >>$idbfile
else else
echo "f $perm $4 $5 ${topinstalldir:1}/$fname $i $pkgname.$2" >>$idbfile echo "f $perm $owner $group ${topinstalldir:1}/$fname $i ${pkgname}.${prodcat}" >>$idbfile
fi fi
fi fi
done done
IFS=$OIFS IFS=$OIFS
# Handle symlinks # Handle symlinks
local FILES=`$FIND $1 -type l -print` local FILES=$($FIND $fspec -type l -print|$TEE -a $metadir/files.tmp)
OIFS=$IFS OIFS=$IFS
IFS=" IFS="
" "
for i in $FILES for i in $FILES
do do
IFS=$OIFS IFS=$OIFS
if [ "$3" == "keep" ]; then if [ "$defperm" == "-" ]; then
permlist=`$LS -l "$i" | $CUT -d " " -f 1` permlist=`$LS -l "$i" | $CUT -d " " -f 1`
perm=`compute_octal $permlist` perm=`compute_octal $permlist`
fi fi
local temp=`$LS -l "$i"|$CUT -d '>' -f 2` local temp=`$LS -l "$i"|$CUT -d '>' -f 2`
local symval=${temp# } local symval=${temp# }
fname=$(fix_fname "$i") fname=$(fix_fname "$i")
echo "l $perm $4 $5 ${topinstalldir:1}/$fname $i $pkgname.$2 symval($symval)" >>$idbfile echo "l $perm $owner $group ${topinstalldir:1}/$fname $i ${pkgname}.${prodcat} symval($symval)" >>$idbfile
done done
IFS=$OIFS IFS=$OIFS
} }
@ -243,6 +247,25 @@ fetch_imageconf()
done < $imageconf done < $imageconf
} }
# fetch_subsysdesc(): Fetch a list of subsystem descriptions
# params: none
fetch_subsysdesc()
{
local i=0
local numloops=${#pc[@]}
while read ss desc
do
for ((i=0; i < $numloops; i++)) # Find subsystem...
do
if [ "${pc[$i]}" = "$ss" ]; then
pd[$i]="$desc"
break # Found it, skip to the next line
fi
done
done < $subsysconf
}
# fetch_depends(): Fetch a list of subsystems and their prereqs # fetch_depends(): Fetch a list of subsystems and their prereqs
# params: none # params: none
# #
@ -288,58 +311,18 @@ fetch_ops()
fi fi
} }
#fetch_hide(): Fetch list of files to "hide"
#params: none
fetch_hide()
{
if [ -r $hidefile ]; then
hideidx=0
while read filen
do
hide[$hideidx]=$filen
let "hideidx = $hideidx + 1"
done < $hidefile
fi
}
################################## ##################################
# "external" functions # "external" functions
################################## ##################################
# create_idb(): Create the .idb file # create_idb(): Create the .idb file
# params: none # params: none
# Read each line in the subsys config file # Create idb file and insert any firstop/lastops
# and check if we have a $dir in our staging area # Note that parse_def does most of the work.
create_idb() create_idb()
{ {
fetch_hide
fetch_ops fetch_ops
local index=0 parse_def
local found=0
while read dir pdcat perm user group desc
do
#local wildcardpos=$($EXPR index "$dir" '*?')
#if [ $wildcardpos -gt 2 ]; then
# dironly=${dir:0:(($wildcardpos-2))}
#else
# dironly=$($DIRNAME $dir)
#fi
found=0
#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
found=1
break # It's already there so skip out
fi
done
if [ $found -eq 0 ]; then
pc[$index]=$pdcat
pd[$index]=$desc
let "index = $index + 1"
fi
#fi
done < $subsysconf
$SORT +4u -6 < $idbfile > $metadir/idbtemp $SORT +4u -6 < $idbfile > $metadir/idbtemp
lines=$(wc -l < $metadir/idbtemp) lines=$(wc -l < $metadir/idbtemp)
if [ ! -z $firstop ]; then if [ ! -z $firstop ]; then
@ -360,13 +343,14 @@ create_idb()
# create_spec(): Create the .spec file. # create_spec(): Create the .spec file.
# params: none # params: none
# Uses pkgname & pkgdesc variables # Uses name, pkgname & pkgver variables
# Iterate through pctop and for each iteration find # Iterate through pctop and for each iteration find
# all entries in pc belonging to that image # all entries in pc belonging to that image
# #
create_spec() create_spec()
{ {
fetch_imageconf fetch_imageconf
fetch_subsysdesc
fetch_depends fetch_depends
spec_header $pkgname "$name $version-$pkgver" > $specfile spec_header $pkgname "$name $version-$pkgver" > $specfile
local pcsize=${#pc[@]} local pcsize=${#pc[@]}
@ -432,13 +416,146 @@ make_dist()
local disttmp=/tmp/disttmp$$ local disttmp=/tmp/disttmp$$
$MKDIR $disttmp $MKDIR $disttmp
local dfile=$(_upls $distfile)
$GENDIST -rbase $topinstalldir -sbase $sbase -idb $idbfile -spec $specfile -dist $disttmp $GENDIST -rbase $topinstalldir -sbase $sbase -idb $idbfile -spec $specfile -dist $disttmp
setdir $disttmp setdir $disttmp
$VTAR -cf $distdir/$distfile $pkgname* $VTAR -cf $distdir/$dfile $pkgname*
setdir stage setdir stage
$RM -rf $disttmp $RM -rf $disttmp
echo "Done. Package was created as $distfile" echo "Done. Package was created as $dfile"
}
# parse_pkgdef(): Read in $metadir/pkgdef
# params: none
# This will parse the package descriptions in
# pkgdef that tells us how many packages there
# should be and what they include.
parse_def()
{
local section=0
local foundfiles=0
local secname=""
local secpos=0
local legalend=0
local index=0
local found=0
while read line
do
case ${line:0:1} in
'#') ;;
'[')
if [ $section -eq 1 ]; then
error $E_BAD_SECTION_BEGIN parse_def
else
section=1
secname="${line:1:((${#line}-2))}"
legalend=0
fi
;;
'')
if [ $section -eq 0 ]; then
error $E_BAD_SECTION_END parse_def
else
section=0 # Finished this section
foundfiles=0 #
legalend=1 # We encountered a syntacticly correct section end
fi
;;
*)
equalindex=$(expr index "$line" =)
if [ ! $equalindex -eq 0 ]; then
case "${line:0:(($equalindex-1))}" in
'pkgname')
pkgname="$(_upls ${line:$equalindex:${#line}})"
;;
'name')
name="$(_upls ${line:$equalindex:${#line}})"
;;
'pkgver')
pkgver="$(_upls ${line:$equalindex:${#line}})"
;;
'subsys') subsys="$(_upls ${line:$equalindex:${#line}})"
found=0
for i in ${pc[@]} # If $subsys is already there then don't add it again
do
if [ "$i" = "$subsys" ]; then
found=1
break # It's already there so skip out
fi
done
if [ $found -eq 0 ]; then
pc[$index]=$subsys
let "index = $index + 1"
fi
;;
esac
else # Perhaps we hit 'files'?
if [ "${line:0:5}" == "files" ]; then
triplet="${line:6:((${#line}-5-2))}"
defaultperms=$(echo $triplet | $AWK -F, '{ print $1 }')
defaultuid=$(echo $triplet | $AWK -F, '{ print $2 }')
defaultgid=$(echo $triplet | $AWK -F, '{ print $3 }')
foundfiles=1
else
if [ $foundfiles -eq 1 ]; then # We already found the 'files' line so this must be the filelist
if [ "${line:0:5}" == "hide " ]; then
specattr="nohist"
line=${line:5}
fi
if [ "${line:0:4}" == "dir " ]; then
echo "Hit unsupported 'dir' directive"
#add_dir $defaultperms $defaultuid $defaultgid "${line:4}" $secname # Add dir entry
else
add_files "$line" $subsys $defaultperms $defaultuid $defaultgid "$specattr" # Build idb file from filespec
fi
specattr="" # Reset special attribute
fi
fi
fi
;;
esac
done < $metadir/pkgdef
# If there is no blank line at the end of a pkgdef section (if there is only one section that is very
# likely) then we end up here without having executed the 'section end' actions (case '' above)
if [ $legalend -eq 0 ]; then
if [ $section -eq 0 ]; then
error $E_BAD_SECTION_END parse_def
else
section=0 # Finished this section
foundfiles=0 #
fi
fi
}
# check_unpackaged(): Check if there are unpackaged files in the stage area
# params: none
check_unpackaged()
{
local upf
local i
$FIND . -type f -print|$SED -e 's/\.\///g' > $tmpdir/files.tmp
$FIND . -type l -print|$SED -e 's/\.\///g' >> $tmpdir/files.tmp
# $FIND . -type d -print|$SED -e 's/\.\///g'|$GREP -v '^\.' >> $tmpdir/files.tmp
$SORT $metadir/files.tmp|$UNIQ > $tmpdir/f1
$SORT $tmpdir/files.tmp > $tmpdir/f2
if [ ! "$($CMP $tmpdir/f1 $tmpdir/f2)" == "" ]; then
upf="$($CAT $tmpdir/f1 $tmpdir/f2 | $SORT | $UNIQ -u)"
if [ ! -z "$upf" ]; then
echo "There are unpackaged files in the stagedir:"
for i in $upf
do
echo "${indent4}${i}"
done
fi
$RM -f $tmpdir/f1 $tmpdir/f2
if [ "$ignore_unpackaged_files" -eq 0 ]; then
error $E_UNPACKAGED_FILES check_unpackaged
fi
fi
$RM -f $tmpdir/f1 $tmpdir/f2
} }
# generic_pack(): Build package using files from 'install' stage # generic_pack(): Build package using files from 'install' stage
@ -468,5 +585,6 @@ generic_pack()
fi fi
create_idb create_idb
create_spec create_spec
check_unpackaged
make_dist make_dist
} }

25
pkgdef.template.irix Normal file
View File

@ -0,0 +1,25 @@
[common]
pkgname="$pkgprefix""$topdir"
name="$topdir"
pkgver="$pkgver"
[base]
subsys=sw.base
files(-,root,sys)
$_bindir
$_sharedir
$_libdir/*.so.*
$_docdir
[man]
subsys=man.manpages
files(-,root,sys)
$_mandir
$_infodir
[devel]
subsys=sw.devel
files(-,root,sys)
$_includedir
$_libdir/*.so
$_libdir/*.a

View File

@ -1,19 +1,4 @@
bin/* sw.base keep root sys Base Software sw.base Base Software
sbin/* sw.base 0744 root sys Base Software sw.devel Development files
etc/* sw.base keep root sys Base Software man.doc Documentation
libexec/* sw.base keep root sys Base Software man.manpages Manpages
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/*.la sw.devel keep root sys Development files
lib/pkgconfig/* sw.devel keep root sys Development files
lib/*.so.* sw.base keep root sys Base Software
lib/GNUstep/* sw.base keep root sys Base Software
lib/locale/* 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