Subject: misc/9350: make build with DESTDIR set uses old *.mk files
To: None <gnats-bugs@gnats.netbsd.org>
From: None <jbernard@mines.edu>
List: netbsd-bugs
Date: 02/04/2000 10:06:38
>Number:         9350
>Category:       misc
>Synopsis:       make build with DESTDIR set uses old *.mk files
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    misc-bug-people (Misc Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb  4 10:06:00 2000
>Last-Modified:
>Originator:     Jim Bernard
>Organization:
	Speaking for myself
>Release:        February 4, 2000
>Environment:
System: NetBSD nool 1.4R NetBSD 1.4R (NOOL-$Revision: 1.6 $) #0: Thu Feb 3 08:50:33 MST 2000 jbernard@nool:/home/tmp/compile/sys/arch/i386/compile/NOOL i386


>Description:
	If one does a "make build", the system makefiles that are used
	by .include statements in the source-tree makefiles are those that
	are in the default location, /usr/share/mk.  If DESTDIR is /, this
	isn't usually a problem, since those files are updated early in the
	build process.  However, with a non-default value of DESTDIR, those
	aren't updated, and critical changes since the build-system's
	installation can be missed.  It would be nice not to have to alter
	the build-system's installation in order to build successfully
	in DESTDIR.

>How-To-Repeat:
	I noticed this during a build following the recent changes (Jan.
	22-ish, IIRC) from "all" to "realall" targets, which caused some
	things not to build, even after I updated the installed make program
	(but not the system makefiles).

>Fix:
	One way to work around this is to always give the "-m" flag to
	make when using DESTDIR (e.g., make -m /usr/src/share/mk ...).
	At the very least, a comment to this effect should be put into
	the top-level Makefile to warn about this.  However, it seems
	reasonable to use .MAKEFLAGS to do this automatically within
	the Makefile itself.  Indeed, it might be best just to do this
	for all builds, even if DESTDIR is not set, but the patch below
	only does it if DESTDIR is set.  Note that it uses the source mk
	directory rather than that in DESTDIR/usr/share/mk, since the
	latter doesn't exist at the beginning of a build.  One could use
	two instances of "-m" to build up a path containing DESTDIR/...
	and /usr/share/mk, if one felt a real need to use the DESTDIR
	files, but it doesn't seem necessary to do that.

	The patch is untested, other than to verify that it does indeed
	set MAKEFLAGS when and only when DESTDIR is set.

--- Makefile-dist	Fri Feb  4 10:22:26 2000
+++ Makefile	Fri Feb  4 10:34:19 2000
@@ -42,10 +42,14 @@
 
 .if defined(NBUILDJOBS)
 _J= -j${NBUILDJOBS}
 .endif
 
+.ifdef DESTDIR
+.MAKEFLAGS+= -m ${.CURDIR}/share/mk
+.endif
+
 # NOTE THAT etc *DOES NOT* BELONG IN THE LIST BELOW
 
 SUBDIR+= lib include bin libexec sbin usr.bin usr.sbin share sys
 
 includes-lib: includes-include includes-sys
>Audit-Trail:
>Unformatted: