Date: Tue, 30 Aug 2011 19:58:54 +0200 From: Dimitry Andric <dim@FreeBSD.org> To: Alex Kuster <vertex.symphony@gmail.com> Cc: freebsd-current <freebsd-current@freebsd.org>, "Hartmann, O." <ohartman@zedat.fu-berlin.de> Subject: Re: CLANG; still cc in use when building the WORLD with CLANG? Message-ID: <4E5D24DE.8050909@FreeBSD.org> In-Reply-To: <CABZ2EQM8oUoWd6c=2Arp8AZS1KfNCvZEJm40so%2BxTeyGg8a4Cg@mail.gmail.com> References: <4E5CB1E9.9080801@zedat.fu-berlin.de> <4E5D0DD3.20606@FreeBSD.org> <CABZ2EQM8oUoWd6c=2Arp8AZS1KfNCvZEJm40so%2BxTeyGg8a4Cg@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2011-08-30 18:44, Alex Kuster wrote: > Thanks for pointing out those details ! > This whole thing about make.conf& src.conf is very confusing and gives the > impression of something half ported ... The only thing that is "half ported" at the moment, is an easy "use clang to build world" switch. This will be properly addressed after 9.0 is released. As to the make.conf/src.conf confusion, it is very simple really: - make.conf is used for system-wide settings, applied to every build using make. - src.conf is used for setting FreeBSD source tree settings, which are always of the form WITH_XXX or WITHOUT_XXX. See src.conf(5) for a full list. Any other "make" settings, such as CC, CFLAGS, etc, are better specified in make.conf, though the manpage does not tell you so explicitly. Now, why do some settings, such as CFLAGS, in src.conf not always work correctly? Because src.conf is only read when bsd.own.mk is included (implicitly or explicitly) in a Makefile, and this is *not* always done at the start of the file. On the other hand, make.conf is read from /usr/share/sys.mk, which is automatically included before anything else is done. Take, for example, the Makefile for cp(1), in /usr/src/bin/cp (I prefixed line numbers for reference): 1: # @(#)Makefile 8.1 (Berkeley) 5/31/93 2: # $FreeBSD: head/bin/cp/Makefile 192586 2009-05-22 15:56:43Z trasz $ 3: 4: PROG= cp 5: SRCS= cp.c utils.c 6: CFLAGS+= -DVM_AND_BUFFER_CACHE_SYNCHRONIZED -D_ACL_PRIVATE 7: 8: .include <bsd.prog.mk> At line 1, make will already have read make.conf, picking up settings from it. Suppose it picks up "CFLAGS=-foo". At line 6, CFLAGS has several flags appended. Its value will then become "-foo -DVM_AND_BUFFER_CACHE_SYNCHRONIZED -D_ACL_PRIVATE". At line 8, bsd.prog.mk is read, which (through bsd.own.mk) belatedly reads src.conf. If you have a setting such as "CFLAGS=-bar" in it, this value will *override* the previous one, possibly having disastrous consequences.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E5D24DE.8050909>