How to handle WITH_CLANG_IS_CC in ports
Yamaya Takashi
yamayan at kbh.biglobe.ne.jp
Thu Nov 29 17:51:28 UTC 2012
On 2012/11/30 01:46, Nikolai Lifanov wrote:
> On 11/29/2012 10:12 AM, Alberto Villa wrote:> On Tue, Nov 27, 2012 at
> 5:27 PM, Tobias Rehbein <tobias.rehbein at web.de> wrote:
> >> Is there any chance you turn this into a generic Mk macro?
> >
> > I don't think so, it would mean running `cc --version` on every
> > bsd.port.mk inclusion.
> > --
> > Alberto Villa, FreeBSD committer <avilla at FreeBSD.org>
> > http://people.FreeBSD.org/~avilla
> >
>
> What I meant is to add something like a "setcc" target that port
> Makefiles (that need this) can call.
>
> This logic:
>
> setcc:
>
> @if [ ! -z "`cc -v 2>&1|grep clang`" ] ; then \
> CC?= clang; \
> else \
> CC?= gcc; \
> fi
>
> Or this logic:
>
> setcc:
>
> @if [ -z "$CC" ] ; then \
> CC=`cc -v 2>&1|\
> sed '/version/!d;s/.*\(clang\).*/\1/;s/.*\(gcc\).*/\1/'`
> fi
>
Your logic is broken.
When CC=cc, no effect.
I wrote Mk/bsd.compiler.mk based on share/mk/bsd.compiler.mk
.if !defined(COMPILER_TYPE)
. if ${CC:T:Mgcc*}
COMPILER_TYPE:= gcc
. elif ${CC:T:Mclang}
COMPILER_TYPE:= clang
. elif ${CC:T} == "cc"
_COMPILER_VERSION!= ${CC} --version
. if ${_COMPILER_VERSION:Mgcc}
COMPILER_TYPE:= gcc
. elif ${_COMPILER_VERSION:M\(GCC\)}
COMPILER_TYPE:= gcc
. elif ${_COMPILER_VERSION:Mclang}
COMPILER_TYPE:= clang
. endif
. undef _COMPILER_VERSION
. else
COMPILER_TYPE:= ${CC:T}
. endif
.endif
Include Mk/bsd.compiler.mk, and
.if ${COMPILER_TYPE} == "clang"
clang specific code
.endif
More information about the freebsd-ports
mailing list