Subject: pkg/17069: [PATCH]: Enable $PKG_DBDIR and $MAKECONF support in pkg_chk(8)
To: None <gnats-bugs@gnats.netbsd.org>
From: None <sketch@rd.bbc.co.uk>
List: netbsd-bugs
Date: 05/27/2002 08:42:46
>Number:         17069
>Category:       pkg
>Synopsis:       [PATCH]: Enable $PKG_DBDIR and $MAKECONF support in pkg_chk(8)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon May 27 08:43:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Jonathan Perkin
>Release:        1.5ZC
>Organization:
British Broadcasting Corporation
>Environment:
NetBSD batfink.intra.nut 1.5ZC NetBSD 1.5ZC (BATFINK) #0: Tue May 21 14:04:10 BST 2002     sketch@batfink.intra.nut:/usr/src/sys/arch/i386/compile/BATFINK i386
>Description:
pkg_chk is nice, but has some hard-coded pathnames which is sub-optimal
for those of us on i.e. solaris machines using zoularis without root :)

The following patch also cleans it up a bit, adding $MAKECONF support.

Not very well tested, especially on real NetBSD machines.  All breakages
are my own.
>How-To-Repeat:

>Fix:
Index: pkgchk.8
===================================================================
RCS file: /cache/ncvs/pkgsrc/pkgtools/pkgchk/files/pkgchk.8,v
retrieving revision 1.12
diff -u -r1.12 pkgchk.8
--- pkgchk.8    2002/03/17 22:47:40     1.12
+++ pkgchk.8    2002/05/27 15:37:14
@@ -150,9 +150,18 @@
 .Bl -tag -width xxxx
 .It Ev PKGSRCDIR
 Base of pkgsrc tree. If not set in environment then read from
+.Pa ${MAKECONF}
+or
 .Pa /etc/mk.conf .
 Defaults to
 .Pa /usr/pkgsrc
+.It Ev PKG_DBDIR
+pkgsrc database directory. If not set in environment then read from
+.Pa ${MAKECONF}
+or
+.Pa /etc/mk.conf .
+Defaults to
+.Pa /var/db/pkg
 .It Ev PACKAGES
 Location of binary packages. If not set in environment then read from
 .Pa /etc/mk.conf .
Index: pkgchk.sh
===================================================================
RCS file: /cache/ncvs/pkgsrc/pkgtools/pkgchk/files/pkgchk.sh,v
retrieving revision 1.31
diff -u -r1.31 pkgchk.sh
--- pkgchk.sh   2002/04/01 20:20:05     1.31
+++ pkgchk.sh   2002/05/27 15:24:43
@@ -28,7 +28,7 @@
            echo "Unable to extract PKGNAME for $pkgdir"
            exit 1
        fi
-       if [ ! -d /var/db/pkg/$PKGNAME ];then
+       if [ ! -d $PKG_DBDIR/$PKGNAME ];then
            echo_n "$PKGNAME: "
            pkg=`echo $PKGNAME | sed 's/-[0-9].*//'`
            pkginstalled=`sh -c "${PKG_INFO} -e $pkg" || true`
@@ -48,7 +48,7 @@
        else
            if [ -n "$opt_B" ];then
                current_build_ver=`get_build_ver`
-               installed_build_ver=`sed "s|^[^:]*/[^:]*:||" /var/db/pkg/$PKGNAME/+BUILD_VERSION`
+               installed_build_ver=`sed "s|^[^:]*/[^:]*:||" $PKG_DBDIR/$PKGNAME/+BUILD_VERSION`
                if [ x"$current_build_ver" != x"$installed_build_ver" ];then
                    echo "$PKGNAME: build version information mismatch"
                    MISMATCH_TODO="$MISMATCH_TODO $PKGNAME"
@@ -84,7 +84,9 @@
     #
 
     if [ -z "$PKGSRCDIR" ];then
-       if [ -f /etc/mk.conf ] ;then
+       if [ -f $MAKECONF ];then
+           eval `printf 'BSD_PKG_MK=1\nx:\n\t@echo PKGSRCDIR=${PKGSRCDIR}\n' | ${MAKE} -f - -f $MAKECONF x`
+       elif [ -f /etc/mk.conf ];then
            eval `printf 'BSD_PKG_MK=1\nx:\n\t@echo PKGSRCDIR=${PKGSRCDIR}\n' | ${MAKE} -f - -f /etc/mk.conf x` 
        fi
        if [ -z "$PKGSRCDIR" ];then
@@ -96,6 +98,24 @@
        exit 1;
     fi
 
+    # Establish PKG_DBDIR
+    #
+
+    if [ -z "$PKG_DBDIR" ];then
+       if [ -f $MAKECONF ];then
+           eval `printf 'BSD_PKG_MK=1\nx:\n\t@echo PKG_DBDIR=${PKG_DBDIR}\n' | ${MAKE} -f - -f $MAKECONF x`
+       elif [ -f /etc/mk.conf ];then
+           eval `printf 'BSD_PKG_MK=1\nx:\n\t@echo PKG_DBDIR=${PKG_DBDIR}\n' | ${MAKE} -f - -f /etc/mk.conf x`
+       fi
+       if [ -z "$PKG_DBDIR" ];then
+           PKGSRCDIR=/var/db/pkg
+       fi
+    fi
+    if [ ! -d $PKG_DBDIR ];then
+       echo "Unable to locate PKG_DBDIR '$PKG_DBDIR'"
+       exit 1;
+    fi
+
     # Now we have PKGSRCDIR, use it to determine PACKAGES, and PKGCHK_CONF
     # as well as AWK, GREP, SED, PKGCHK_TAGS and PKGCHK_NOTAGS
     #
@@ -159,7 +179,7 @@
     PKGDIR=$2
     INSTALL=$3
 
-    if [ -d /var/db/pkg/$PKGNAME ];then
+    if [ -d $PKG_DBDIR/$PKGNAME ];then
        echo "$PKGNAME installed in previous stage"
     elif [ -n "$opt_b" -a -f $PACKAGES/All/$PKGNAME.tgz ] ; then
        if [ $INSTALL = Update ];then
@@ -175,7 +195,7 @@
        run_cmd "cd $PKGSRCDIR/$PKGDIR && ${MAKE} update"
     fi
 
-    if [ -z "$opt_n" -a ! -d /var/db/pkg/$PKGNAME ];then
+    if [ -z "$opt_n" -a ! -d $PKG_DBDIR/$PKGNAME ];then
        FAIL=1
     fi
 
@@ -423,8 +443,8 @@
     set -- $UPDATE_TODO
     while [ $# != 0 ]; do
        PKGNAME=`echo $1 | sed 's/-[0-9].*//'`
-       if [ -f /var/db/pkg/$PKGNAME-[0-9]*/+REQUIRED_BY ];then
-           LIST="$LIST$1|$2|`cat /var/db/pkg/$PKGNAME-[0-9]*/+REQUIRED_BY | xargs echo`\n"
+       if [ -f $PKG_DBDIR/$PKGNAME-[0-9]*/+REQUIRED_BY ];then
+           LIST="$LIST$1|$2|`cat $PKG_DBDIR/$PKGNAME-[0-9]*/+REQUIRED_BY | xargs echo`\n"
        else
            LIST="$LIST$1|$2\n"
        fi
>Release-Note:
>Audit-Trail:
>Unformatted: