NetBSD Problem Report #34839

From kre@munnari.OZ.AU  Tue Oct 17 10:17:18 2006
Return-Path: <kre@munnari.OZ.AU>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
	by narn.NetBSD.org (Postfix) with ESMTP id 49CEA63B874
	for <gnats-bugs@gnats.NetBSD.org>; Tue, 17 Oct 2006 10:17:18 +0000 (UTC)
Message-Id: <200610171016.k9HAG15Q015641@jade.coe.psu.ac.th>
Date: Tue, 17 Oct 2006 17:16:01 +0700 (ICT)
From: kre@munnari.OZ.AU
To: gnats-bugs@NetBSD.org
Subject: pkgtools/pkg_comp suggested enhancement to leave it dirty
X-Send-Pr-Version: 3.95

>Number:         34839
>Category:       pkg
>Synopsis:       pkgtools/pkg_comp suggested enhancement to leave it dirty
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    jmmv
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Tue Oct 17 10:20:00 +0000 2006
>Last-Modified:  Thu Oct 19 00:14:56 +0000 2006
>Originator:     Robert Elz
>Release:        NetBSD 3.99.15  (pkgsrc current as of a few hours ago)
>Organization:
	Prince of Songkla University
>Environment:


System: NetBSD jade.coe.psu.ac.th 3.99.15 NetBSD 3.99.15 (GENERIC-1.696-20060125) #8: Wed Jan 25 04:59:39 ICT 2006 kre@jade.coe.psu.ac.th:/usr/obj/current/kernels/JADE_ASUS i386
Architecture: i386
Machine: i386
>Description:
	pkg_comp always does "make clean" when it is done, successful or not.
	That's fine for keeping everything nice and clean, when everything
	is working, or when you simply don't really care why something does
	not correctly build.   But if you're attempting to debug a package
	build problem, always cleaning is perhaps not the bext choice
	(and yes, I know it is possible to "pkg_comp chroot", and then
	"cd /usr/pkgsrc/whatever && make" but that isn't always convenient.

	So, I am suggesting/requesting a minor enhancement that will allow
	pkg_comp to skip the "make clean" when instructed.   (As a side
	effect of the way pkgsrc works. this allows "pkg_comp build" to continue
	from where it failed, if the problem is corrected, in the sandbox,
	rather than needing to correct things the "right way" and start
	all over again - which is great when you're still experimenting to
	try and work out what the 'right way' really is.

>How-To-Repeat:
	Build any package with pkg_comp, using "pkg_comp build", particularly
	one where the build is going to fail for some reason, durig
	compilation.   Attempt to find a simple way to keep the
	extracted/patched work files around so the problem can be diagnosed.
	Find instead just anicely cleaned sandbox (nb: I do not recommend
	interrupting the "pkg_comp build" when the error is detected,
	before the "make clean" gets a chance to run - NetBSD's union
	filesystems have bugs that can crash the kernel, and do it fr me
	repeatedly when I get viscious with the interrupt key...)

>Fix:
	Apply the following (fairly simple) patch (to the script and doc)
	in the pkgtools/pkg_comp/files directory.   This adds a "-d" flag
	to pkg_comp which simply causes it to skip all instances of
	"make clean".  A command to actually perform the "make clean" later
	might be useful - but for me, "removeroot" does that well enough
	(and is necessary to keep the sandbox truly clean anyway).


$NetBSD$

--- pkg_comp.sh	2006-06-17 19:18:24.000000000 +0700
+++ pkg_comp.sh-UPDATED
@@ -172,7 +172,7 @@ warn()
 #
 usage()
 {
-    echo "usage: $ProgName [-(c|C) conf_file] [-n] target [pkg_names]" 1>&2
+    echo "usage: $ProgName [-(c|C) conf_file] [-n] [-d] target [pkg_names]" 1>&2
     exit 1
 }

@@ -223,6 +223,8 @@ EOF
 #
 fsmount()
 {
+    test -w "${DESTDIR}" || err "Unable to write to ${DESTDIR}"
+
     echo "PKG_COMP ==> Mounting sandboxed filesystems"
     if [ -f $fsstate ]; then
         count=`cat $fsstate`
@@ -734,8 +736,8 @@ make $BUILD_TARGET
 if [ \$? != 0 ]; then
     touch /pkg_comp/tmp/`basename $statfile`
 fi
-make clean
 EOF
+	$cleanup && echo make clean >> "$script"
         chmod +x $script
         chroot $DESTDIR /pkg_comp/tmp/`basename $script`
         rm $script
@@ -779,7 +781,7 @@ fail=\$(make show-var VARNAME=PKG_FAIL_R
 if echo \$fail | grep "package tools installed on this system are out of date" >/dev/null; then
     echo "PKG_COMP ==> pkg_install is out of date; rebuilding"
     cd /usr/pkgsrc/pkgtools/pkg_install
-    make && make install && make clean
+    make && make install && $cleanup && make clean
 fi
 EOF
     chmod +x $script
@@ -888,13 +890,14 @@ pkg_removeroot()
 confdir="$HOME/pkg_comp"

 # Parse options
-args=`getopt c:C:n $*`
+args=`getopt c:C:nd $*`
 if [ $? != 0 ]; then
     usage
 fi
 set -- $args
 conffile=
 nflag=no
+cleanup=true
 while [ $# -gt 0 ]; do
     case "$1" in
         -c)
@@ -910,6 +913,9 @@ while [ $# -gt 0 ]; do
         -n)
             nflag=yes
             ;;
+	-d)
+	    cleanup=false
+	    ;;
         --)
             shift; break
             ;;
$NetBSD$

--- pkg_comp.8	2006-02-11 06:41:20.000000000 +0700
+++ pkg_comp.8-UPDATED
@@ -41,6 +41,7 @@
 .Ar conf_file
 .Oc
 .Op Fl n
+.Op Fl d
 .Ar target
 .Op Ar pkg_name ...
 .Sh DESCRIPTION
@@ -78,6 +79,13 @@ Avoid installation of
 and
 .Va BUILD_PACKAGES
 during the creation of the chroot.
+.It Fl d
+Enable package debug mode
+by not running
+.Ql "make clean
+after building a package.
+This allows the package work directory to be inspected
+to help locate build problems.
 .El
 .Ss What to use it for?
 You can use

>Release-Note:

>Audit-Trail:

Responsible-Changed-From-To: pkg-manager->jmmv
Responsible-Changed-By: ben@netbsd.org
Responsible-Changed-When: Thu, 19 Oct 2006 00:14:56 +0000
Responsible-Changed-Why:
Assigned to package maintainer, jmmv.


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.