From peter@rulingia.com  Fri Nov  2 22:47:50 2012
Return-Path: <peter@rulingia.com>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 8F7D3E93
	for <FreeBSD-gnats-submit@freebsd.org>; Fri,  2 Nov 2012 22:47:50 +0000 (UTC)
	(envelope-from peter@rulingia.com)
Received: from vps.rulingia.com (host-122-100-2-194.octopus.com.au [122.100.2.194])
	by mx1.freebsd.org (Postfix) with ESMTP id 3687F8FC0C
	for <FreeBSD-gnats-submit@freebsd.org>; Fri,  2 Nov 2012 22:47:49 +0000 (UTC)
Received: from server.rulingia.com (c220-239-241-202.belrs5.nsw.optusnet.com.au [220.239.241.202])
	by vps.rulingia.com (8.14.5/8.14.5) with ESMTP id qA2Mlf0u065132
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 3 Nov 2012 09:47:41 +1100 (EST)
	(envelope-from peter@rulingia.com)
Received: from server.rulingia.com (localhost.rulingia.com [127.0.0.1])
	by server.rulingia.com (8.14.5/8.14.5) with ESMTP id qA2MlZoT036207
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO);
	Sat, 3 Nov 2012 09:47:35 +1100 (EST)
	(envelope-from peter@server.rulingia.com)
Received: (from peter@localhost)
	by server.rulingia.com (8.14.5/8.14.5/Submit) id qA2MlZCd036182;
	Sat, 3 Nov 2012 09:47:35 +1100 (EST)
	(envelope-from peter)
Message-Id: <201211022247.qA2MlZCd036182@server.rulingia.com>
Date: Sat, 3 Nov 2012 09:47:35 +1100 (EST)
From: Peter Jeremy <peter@rulingia.com>
Reply-To: Peter Jeremy <peter@rulingia.com>
To: FreeBSD-gnats-submit@freebsd.org
Subject: [patch] Support "make universe" with read-only src tree
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         173308
>Category:       bin
>Synopsis:       [build] [patch] Support "make universe" with read-only src tree
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Fri Nov 02 22:50:00 UTC 2012
>Closed-Date:    
>Last-Modified:  Sun May 04 04:05:43 UTC 2014
>Originator:     Peter Jeremy
>Release:        FreeBSD 8.3-STABLE amd64
>Organization:
FreeBSD
>Environment:
System: FreeBSD server.rulingia.com 8.3-STABLE FreeBSD 8.3-STABLE #18 r237444M: Sun Jul 8 10:47:08 EST 2012 root@server.rulingia.com:/var/obj/usr/src/sys/server amd64

>Description:
	"make universe" creates separate logs for each target and
	architecture but these are all hard-wired to be in the tree
	being built.  This prevents the use of "make universe" with
	a read-only root (in my case, I wanted to use a ro NFS mount),

>How-To-Repeat:
	Mount a source tree read-only and run "make universe".  It will
	report lots of failures like:
cannot create _.amd64.buildworld: Read-only file system

>Fix:
	The following patch creates a new "LOGDIR" variable and creates
	all the "make universe" logfiles in that directory.  If not
	specified, it defaults to "${.CURDIR}" for consistency with the
	existing behaviour.

Index: head/Makefile
===================================================================
--- head/Makefile	(revision 242498)
+++ head/Makefile	(working copy)
@@ -346,6 +346,9 @@
 .endif
 KERNSRCDIR?=		${.CURDIR}/sys
 
+# Directory for writing logs etc
+LOGDIR?=${.CURDIR}
+
 targets:
 	@echo "Supported TARGET/TARGET_ARCH pairs for world and kernel targets"
 .for target in ${TARGETS}
@@ -355,7 +358,7 @@
 .endfor
 
 .if defined(DOING_TINDERBOX)
-FAILFILE=${.CURDIR}/_.tinderbox.failed
+FAILFILE=${LOGDIR}/_.tinderbox.failed
 MAKEFAIL=tee -a ${FAILFILE}
 .else
 MAKEFAIL=cat
@@ -384,9 +387,9 @@
 	    ${MAKE} ${JFLAG} ${UNIVERSE_TARGET} \
 	    TARGET=${target} \
 	    TARGET_ARCH=${target_arch} \
-	    > _.${target}.${target_arch}.${UNIVERSE_TARGET} 2>&1 || \
+	    > ${LOGDIR}/_.${target}.${target_arch}.${UNIVERSE_TARGET} 2>&1 || \
 	    (echo "${target}.${target_arch} ${UNIVERSE_TARGET} failed," \
-	    "check _.${target}.${target_arch}.${UNIVERSE_TARGET} for details" | \
+	    "check ${LOGDIR}/_.${target}.${target_arch}.${UNIVERSE_TARGET} for details" | \
 	    ${MAKEFAIL}))
 	@echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} completed on `LC_ALL=C date`"
 .endfor
@@ -394,9 +397,9 @@
 .if !defined(MAKE_JUST_WORLDS)
 .if exists(${KERNSRCDIR}/${target}/conf/NOTES)
 	@(cd ${KERNSRCDIR}/${target}/conf && env __MAKE_CONF=/dev/null \
-	    ${MAKE} LINT > ${.CURDIR}/_.${target}.makeLINT 2>&1 || \
+	    ${MAKE} LINT > ${LOGDIR}/_.${target}.makeLINT 2>&1 || \
 	    (echo "${target} 'make LINT' failed," \
-	    "check _.${target}.makeLINT for details"| ${MAKEFAIL}))
+	    "check ${LOGDIR}/_.${target}.makeLINT for details"| ${MAKEFAIL}))
 .endif
 	@cd ${.CURDIR} && ${MAKE} ${.MAKEFLAGS} TARGET=${target} \
 	    universe_kernels
@@ -425,9 +428,9 @@
 	    TARGET=${TARGET} \
 	    TARGET_ARCH=${TARGET_ARCH_${kernel}} \
 	    KERNCONF=${kernel} \
-	    > _.${TARGET}.${kernel} 2>&1 || \
+	    > ${LOGDIR}/_.${TARGET}.${kernel} 2>&1 || \
 	    (echo "${TARGET} ${kernel} kernel failed," \
-	    "check _.${TARGET}.${kernel} for details"| ${MAKEFAIL}))
+	    "check ${LOGDIR}/_.${TARGET}.${kernel} for details"| ${MAKEFAIL}))
 .endfor
 universe: universe_epilogue
 universe_epilogue:


>Release-Note:
>Audit-Trail:
>Unformatted:
