Revision: 6203
          http://gar.svn.sourceforge.net/gar/?rev=6203&view=rev
Author:   bdwalton
Date:     2009-09-06 01:04:38 +0000 (Sun, 06 Sep 2009)

Log Message:
-----------
GAR: update checkpkg to handle multiple package sets (inter-dependencies)

Modified Paths:
--------------
    csw/mgar/gar/v2/bin/checkpkg

Modified: csw/mgar/gar/v2/bin/checkpkg
===================================================================
--- csw/mgar/gar/v2/bin/checkpkg        2009-09-05 22:18:43 UTC (rev 6202)
+++ csw/mgar/gar/v2/bin/checkpkg        2009-09-06 01:04:38 UTC (rev 6203)
@@ -1,8 +1,8 @@
 #!/bin/ksh -p
 
-# checkpkg 1.46a (diff to 1.46: modified errmsg -> warnmsg on two places)
+# checkpkg 1.50 (diff to 1.46a: check multiple package files)
 # This script examines a package that has been put together
-# for submittal to the CSW archive
+# for submittal to the CSW archive at opencsw.org
 #
 # It examines it for compliance with the packaging standards at
 # http://www.opencsw.org/standards/
@@ -29,10 +29,15 @@
                rm -rf $EXTRACTDIR
        fi
        if [[ "$TMPARCHIVE" != "" ]] ; then
-               rm $TMPARCHIVE
+               [ -f "$TMPARCHIVE" ] && rm $TMPARCHIVE
        fi
 }
 
+cleanupset(){
+    if [ "`echo $SETINF*`" != "$SETINF*" ]; then
+       rm $SETINF*
+    fi
+}
 warnmsg(){
        print WARNING: $* >/dev/fd/2
        if [[ "$quit_on_warn" != "" ]] ; then
@@ -45,6 +50,7 @@
 errmsg(){
        print ERROR: $* >/dev/fd/2
        cleanup
+       cleanupset
        exit 1
 }
 
@@ -58,6 +64,12 @@
        shift
 fi
 
+# a unique filename for the list of package deps and libs we see in a 'set'
+SETINF=/tmp/checkpkg.$$.`date +%Y%m%d%H%M%S`
+SETLIBS=$SETINF.libs
+SETDEPS=$SETINF.deps
+
+
 for f in "$@"
 do
 
@@ -123,7 +135,6 @@
 TMPFILE=$EXTRACTDIR/pkginfo
 
 
-
 dd if=$f skip=1 | (cd $EXTRACTDIR; cpio -ivd $pkgname/pkginfo)
 if [[ $? -ne 0 ]] ; then
        print ERROR: could not extract $f
@@ -217,6 +228,13 @@
                print ERROR: VERSION field not allowed to have '"-"' in it
                exit 1
        ;;
+       *,REV=20[01][0-9].[0-9][0-9].[0-9][0-9]*)
+               :
+       ;;
+       *)
+               print ERROR: no REV=YYYY.MM.DD field in VERSION
+               exit 1
+       ;;
 esac
 
 case $pkgarch in
@@ -377,17 +395,19 @@
        # man ld.so.1 for more info on this hack
        export LD_NOAUXFLTR=1
 
-       listbinaries $EXTRACTDIR/$pkgname >$EXTRACTDIR/tmplist
+       listbinaries $EXTRACTDIR/$pkgname >$EXTRACTDIR/elflist
        # have to do this for ldd to work. arrg.
-       if [ -s "$EXTRACTDIR/tmplist" ] ; then
-               chmod 0755 `cat $EXTRACTDIR/tmplist`
+       if [ -s "$EXTRACTDIR/elflist" ] ; then
+               chmod 0755 `cat $EXTRACTDIR/elflist`
 
-       #cat $EXTRACTDIR/tmplist| xargs ldd  2>/dev/null |fgrep  '.so' |
+       #cat $EXTRACTDIR/elflist| xargs ldd  2>/dev/null |fgrep  '.so' |
        #              sed 's:^.*=>[^/]*::' | nawk '{print $1}' |sort -u 
>$EXTRACTDIR/liblist
 
-               cat $EXTRACTDIR/tmplist| xargs dump -Lv |nawk 
'$2=="NEEDED"{print $3}' |
+               cat $EXTRACTDIR/elflist| xargs dump -Lv |nawk 
'$2=="NEEDED"{print $3}' |
                        sort -u | egrep -v $EXTRACTDIR >$EXTRACTDIR/liblist
 
+                       
+
                print libraries used are:
                cat $EXTRACTDIR/liblist
                print "cross-referencing with depend file (May take a while)"
@@ -399,6 +419,10 @@
 #If these dont exist, it is Bad.
 touch $EXTRACTDIR/liblist $EXTRACTDIR/libpkgs
 
+# store things that look like shared objects from the package map for
+# delayed library validation.
+grep "\.so" $EXTRACTDIR/$pkgname/pkgmap >> $SETLIBS
+
 if [[ -f $EXTRACTDIR/$pkgname/install/depend ]] ; then
        print 
        print "Examining 'depend' file"
@@ -416,11 +440,26 @@
        exit 1
 fi
 
+#to retain a record of all packages currently being examined from $@
+echo $pkgname >> $SETDEPS
+
 nawk '$1=="P" {print $2}'  $EXTRACTDIR/$pkgname/install/depend |
        sort >$EXTRACTDIR/deppkgs
 for dep in `cat $EXTRACTDIR/deppkgs`
 do
-       pkginfo $dep || warnmsg  invalid package $dep specified
+    pkginfo $dep
+    if [[ $? -ne 0 ]]; then
+       #if we've already looked at the package named $dep,
+       #it'll be in the file.
+       awk "\$1 == \"$dep\" {print}" $SETDEPS | /usr/xpg4/bin/grep -q $dep
+       if [[ $? -ne 0 ]]; then #we haven't yet seen this package in our set
+           echo "Can't validate dependence on $dep.  Storing for delayed 
validation."
+           #store for validation at the end.
+           echo "$dep $pkgname" >> $SETDEPS.missing
+       else
+           echo "Found $dep as part of the package set being evaluated."
+       fi
+    fi
 done
 
 egrep -v 'SUNWbcp|SUNWowbcp|SUNWucb' /var/sadm/install/contents |
@@ -433,13 +472,20 @@
        if [[ $? -eq 0 ]] ; then
                echo $lib provided by package itself
                continue
+       else
+           grep "[/=]$lib[ =]" $SETLIBS
+           if [[ $? -eq 0 ]]; then
+               echo "$lib provided by package set being evaluated."
+               continue
+           fi
        fi
 
        libpkg=`grep /$lib $EXTRACTDIR/shortcatalog |
              sed 's/^.* \([^ ]*\)$/\1/' |sort -u`
 
        if [[ -z "$libpkg" ]] ; then
-               warnmsg cannot find package for $lib
+               echo "$lib $pkgname" >> $SETLIBS.missing
+               print Cannot find package providing $lib.  Storing for delayed 
validation.
        else
                print $libpkg | fmt -1 >>$EXTRACTDIR/libpkgs
        fi
@@ -458,19 +504,53 @@
 
 
 if [[ "$basedir" != "" ]] ; then
-       print 
-       print "Checking relocation ability..."
-       xargs strings <$EXTRACTDIR/tmplist | grep /opt/csw
-       if [[ $? -eq 0 ]] ; then
-               errmsg package build as relocatable, but binaries have 
hardcoded /opt/csw paths in them
+       print
+       if [[ -f $EXTRACTDIR/elflist ]] ; then
+               print "Checking relocation ability..."
+               xargs strings < $EXTRACTDIR/elflist| grep /opt/csw
+               if [[ $? -eq 0 ]] ; then
+                       errmsg package build as relocatable, but binaries have 
hardcoded /opt/csw paths in them
+               else
+                       print trivial check passed
+               fi
        else
-               print trivial check passed
+               echo No relocation check done for non-binary relocatable 
package.
        fi
 fi
 
+
 cleanup
 
-
 print ""
 
 done
+
+if [ -s $SETDEPS.missing ]; then
+    print "Doing late evaluations of package dependencies."
+    while read mdep; do
+       dep=`echo $mdep | nawk '{print $1}'`
+       pkg=`echo $mdep | nawk '{print $2}'`
+       /usr/xpg4/bin/grep -q $dep $SETDEPS
+       if [ $? -ne 0 ]; then
+           errmsg "Couldn't validate $dep as a dependency in package $pkg"
+       else
+           print "Validated $dep as a dependency for $pkg."
+       fi
+    done < $SETDEPS.missing
+fi
+
+if [ -s $SETLIBS.missing ]; then
+    print "Doing late evaluations of package library dependencies."
+    while read ldep; do
+       lib=`echo $ldep | nawk '{print $1}'`
+       pkg=`echo $ldep | nawk '{print $2}'`
+       /usr/xpg4/bin/grep -q "[/=]$lib[ =]" $SETLIBS
+       if [ $? -ne 0 ]; then
+           errmsg "Couldn't find a package providing $lib"
+       else
+           print "A package in the set being evaluated provides $lib"
+       fi
+    done < $SETLIBS.missing
+fi
+
+cleanupset


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.
_______________________________________________
devel mailing list
[email protected]
https://lists.opencsw.org/mailman/listinfo/devel

Reply via email to