Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Jan 2012 21:21:35 -0500
From:      Wesley Shields <wxs@FreeBSD.org>
To:        bf1783@gmail.com
Cc:        gerald@FreeBSD.org, freebsd-ports@FreeBSD.org
Subject:   Re: USE_GCC and CC=clang
Message-ID:  <20120110022135.GA6493@atarininja.org>
In-Reply-To: <CAGFTUwNtxN6yLtML9LXhoedjA=Xc0uM9dDOeoF0PhATE11Tskw@mail.gmail.com>
References:  <CAGFTUwNtxN6yLtML9LXhoedjA=Xc0uM9dDOeoF0PhATE11Tskw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jan 09, 2012 at 06:22:58PM +0000, b. f. wrote:
> > I'm trying to fix a port which absolutely will not build with clang,
> > since clang does not support the gcc extension used by this port. I set
> > USE_GCC=4.2+, which is the lowest version of GCC which will work, but it
> > doesn't properly override CC=clang.
> >
> > wxs at ack spamdyke % env CC=clang make test-gcc | grep -E "^(CC|USE_GCC)"
> > USE_GCC=4.2+
> > CC=clang - CXX=c++ - CPP=cpp - CFLAGS="-O2 -pipe -fno-strict-aliasing"
> > wxs at ack spamdyke %
> >
> 
> This problem only arises if the base compiler is gcc 4.2.x and
> USE_GCC=4.2+. Otherwise CC will be set to the appropriate gcc
> compiler.  Since Gerald (who maintains ports/Mk/bsd.gcc.mk) is trying
> to retire lang/gcc42 anyway, it is not a good idea to set USE_GCC=4.2+
> in a port.

Thanks for the pointer.

> > I understand this is probably an acceptable behavior, since if the user
> > sets CC=clang they are explicitly asking to build with clang. However,
> > in the case of a port known to not work with clang, and more importantly
> > not able to be fixed, I was hoping there was a knob I could set that
> > would forcible override any compiler related environment variables which
> > may be set. I didn't find one, so I came up with this quick (and poorly
> > tested) patch to do so.
> 
> The problem is due to a slight flaw in the implementation of the
> USE_GCC=4.2+ case, which will be obviated soon by the removal of this
> case. If in the meantime a change is made to bsd.gcc.mk, it should
> address this flaw directly -- by setting CC=gcc explicitly where
> needed, instead of relying upon the default setting of CC.  Another
> knob is unnecessary.
> 
> Note that changes to bsd.gcc.mk, good or bad, won't address the cases
> where a user sets CC on the command-line via "make .... CC= ...", or
> adds it to MAKE_ARGS, or sets CC in the environment, and then calls
> make with "-e" or "-E CC".  So the right thing to do is to add
> something like:
> 
> .if !empty(CC:M*clang*)
> IGNORE= : clang cannot be used to build this port
> .endif
> 
> to the port Makefile, after the inclusion of bsd.port.options.mk or
> bsd.port.pre.mk (since a user may have set CC in Makefile.local,
> Makefile.inc, etc).  Or, better yet, to patch the port so that it can
> be built with clang (which may have to be done anyway...).

I was hoping to not have to set IGNORE if using clang. I'm also not
really interested in patching the port, since it's more about structural
changes than a simple fixes.

I guess I'll set the IGNORE line if using clang for now. No point in
wasting cycles on a port which won't compile for a long time, if ever.

-- WXS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120110022135.GA6493>