From owner-freebsd-current@FreeBSD.ORG Sat Jun 13 17:35:07 2009 Return-Path: Delivered-To: current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D49CA106566B for ; Sat, 13 Jun 2009 17:35:07 +0000 (UTC) (envelope-from uucp@gromit.grondar.org) Received: from gromit.grondar.org (unknown [IPv6:2001:ba8:0:1d5:216:d4ff:fe0d:d845]) by mx1.freebsd.org (Postfix) with ESMTP id 7A18E8FC12 for ; Sat, 13 Jun 2009 17:35:07 +0000 (UTC) (envelope-from uucp@gromit.grondar.org) Received: from uucp by gromit.grondar.org with local (Exim 4.69) (envelope-from ) id 1MFXMg-000674-DA for current@freebsd.org; Sat, 13 Jun 2009 18:50:02 +0100 Received: from localhost ([127.0.0.1] helo=greatest.grondar.org) by greatest.grondar.org with esmtp (Exim 4.69 (FreeBSD)) (envelope-from ) id 1MFX3z-000HWl-TK for current@freebsd.org; Sat, 13 Jun 2009 18:30:43 +0100 To: current@freebsd.org From: Mark Murray Date: Sat, 13 Jun 2009 18:30:43 +0100 Message-Id: Sender: UNIX-to-UNIX Copy Cc: Subject: Build is polluted by host build environment. X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2009 17:35:08 -0000 Hi folks The "buildworld" build is polluted by the build environment. Specifically, headers in /user/include/... are used when I believe they should not be. This could easily break cross-builds, and may compromise upgrades where /usr/include/... contains some damaging ancient history. To see this in action, you need to move /usr/include out of the way after the build-tools are built, but before the target buid starts for real. I AM NOT WORRIED ABOUT BUILD-TOOLS OR BOOTSTRAPPING TOOLS! :-) This patch achieves the desired result with a dirty hack. NOTE!! You will need to move your /usr/include.NOTNOW back to /usr/include in the likely event of a failure. After applying this, do a "make cleandir" then "make buildworld". DON'T use the "-j N" option to make. ------------------------------8<-------------------------------- Index: Makefile.inc1 =================================================================== --- Makefile.inc1 (revision 194122) +++ Makefile.inc1 (working copy) @@ -498,6 +501,14 @@ cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32IMAKE} ${.TARGET:S/32$//} .endif +_break_base_dependancies: + mv /usr/include /usr/include.NOTNOW + # Something for libraries also? + +_fix_base_dependancies: + mv /usr/include.NOTNOW /usr/include + # Something for libraries also? + WMAKE_TGTS= .if !defined(SUBDIR_OVERRIDE) WMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools @@ -506,9 +517,11 @@ .if !defined(SUBDIR_OVERRIDE) WMAKE_TGTS+= _cross-tools .endif +WMAKE_TGTS+= _break_base_dependancies WMAKE_TGTS+= _includes _libraries _depend everything .if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" WMAKE_TGTS+= build32 +WMAKE_TGTS+= _fix_base_dependancies .endif buildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue ------------------------------8<-------------------------------- The first failure that I see is ===> gnu/usr.bin/cc/cc_tools (depend) make: don't know how to make /usr/include/stdarg.h. Stop *** Error code 2 There are many more if I hack my way past that one. I believe that the "_includes _libraries _depend everything build32" targets should all be in an effective "-nostdinc" environment once the "real" build gets underway, with only the ${SRC}/include/... and friends being visible to the build by explicit -I$FOO options to the build. I haven't checked, but libraries may have a similar issue. Comments? M -- Mark R V Murray Cert APS(Open) Dip Phys(Open) BSc Open(Open) BSc(Hons)(Open)