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