On 08/30/11 19:58, Dimitry Andric wrote:
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.

This is as I understood the manpage of src.conf. There is only a YES/set and NO/unset.

Well, I might be wrong, but FreeBSD separates strictly the core operating system and the ports stuff. When it came to CLANG compiled core system and I read about src.conf, my intuitive thinking was that this is the long awaited separation from having everything mixed in /etc/make.conf (by the way, somehow I feel I would all the ports stuff, even it make.conf, looking for at /usr/local/etc/make.conf ...).


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.

Great! Many thanks, this is a nice explanation. With such detailed info it's a bit
easier to hunt down the mistakes I made for my own.

Thanks again.

Oliver
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to