How to handle WITH_CLANG_IS_CC in ports

Nikolai Lifanov lifanov at mail.lifanov.com
Mon Nov 26 15:22:31 UTC 2012


On 11/25/2012 10:04 AM, Dimitry Andric wrote:
> On 2012-11-25 12:49, Tobias Rehbein wrote:
>> I am the maintainer of ganes/stonesoup. This port builds fine with gcc.
>> It also builds with clang, if the MAKE_ARGS are tweaked.
>>
>> Currently I can check for
>>
>>     ${CC:T:M*clang*}
>>
>> to know if I have to change the MAKE_ARGS for building with clang or
>> not.
>>
>> In CURRENT cc is clang and the environment variable CC is no longer set.
>> This lets the build of games/stonesoup fail. My question is how to
>> correctly check if cc is clang or not. My first guess was something
>> along the lines of
>>
>>     ${CC:T:M*clang*} || (defined(WITH_CLANG_IS_CC) && ${CC:T:Mcc})
>>
>> but I guess there is some kind of official way to handle this (ideally
>> warpped in some Mk macro.
>
> Just check if OSVERSION >= 1000024, maybe?  Or add some logic to
> bsd.port.mk that handles this, like was done with pkgng.  For example,
> introducing a PORTS_COMPILER_TYPE macro like in base.

This is bad.
People with OSVERSION >= 1000024 and WITHOUT_CLANG_IS_CC set will be 
left out.

How about something along the lines of this?

bsd.compiler.mk:

#
# Sets CC variable if unset
#

.PHONY: setcc

setcc:

	@if [ ! -z "`cc -v 2>&1|grep clang`" ] ; then \
		CC?= clang; \
	else \
		CC?= gcc; \
	fi


Then, if a port needs this variable to be set, it can call "setcc" in 
the Makefile.



More information about the freebsd-ports mailing list