From simon.urbanek at r-project.org  Thu May 11 09:21:59 2006
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Thu, 11 May 2006 03:21:59 -0400
Subject: [Rd] suppressing "global" cppflags in an individual package
In-Reply-To: <7B99B6C0-B4AC-47D4-9912-9238585C5311@stat.Berkeley.EDU>
References: <9294B498-A4DB-47B1-AE99-71C1559EABB3@stat.berkeley.edu>
	<4460C819.6090407@cimr.cam.ac.uk>
	<8315342E-192B-4BF4-86BC-8F947769530E@stat.Berkeley.EDU>
	<B99D44A2-42C4-4BAA-828D-F7A6DEE648CE@r-project.org>
	<7B99B6C0-B4AC-47D4-9912-9238585C5311@stat.Berkeley.EDU>
Message-ID: <38E1F480-172E-462C-AA72-B8AC37592946@r-project.org>

Kasper,

On May 11, 2006, at 12:37 AM, Kasper Daniel Hansen wrote:

> Thank you Simon, a little comment below
>
> On May 9, 2006, at 2:49 PM, Simon Urbanek wrote:
>
>> On May 9, 2006, at 1:11 PM, Kasper Daniel Hansen wrote:
>>
>>> It is indeed the case that after updating to GCC 4 the package  
>>> gets  broken using -O2. I agree this needs to be fixed, but the  
>>> error
>>> [...]
>>> unfortunately), but reading your comment about CPPFLAGS and  
>>> CXXFLAGS makes me think I can indeed override it using the  
>>> package Makevars file. The flags I was passing to the compiler  
>>> were library locations anyway which was for the preprocessor.
>>>
>>
>> AFAIR you cannot override CPPFLAGS/CXXFLAGS in Makevars, because  
>> it gets included first. You can, however, use something like this:
>>
>> all: $(SHLIB)
>>
>> MYCFLAGS=-O0
>>
>> %.o: %.c
>>         $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(MYCFLAGS) -c $< -o $@
>>
>> for C, or for C++ accordingly:
>>
>> %.o: %.cc
>>         $(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) $(MYCXXFLAGS) -c $<  
>> -o $@
>
> Actually you do not need the all: line, and since I use .cpp as C++  
> extension, all I needed was
>
> %.o: %.cpp
> <TAB>$(CXX) $(ALL_CPPFLAGS) -O0 -c $< -o $@
>

If it worked for you, fine ... but it doesn't for me (using plain  
SHLIB), because you're replacing the first target, the .so doesn't  
get built.

> Note that I needed to delete the $(ALL_CXXFLAGS) which basically  
> reads R's flags.
>

Well actually the point was that you *don't* need to do that and you  
should not. Most compilers (including gcc) ignore preceding  
conflicting flags, so -O3 -O0 will give you simply -O0 and that's  
what you wanted.

> Now, is there any way to (in the Makevars file) operate on $ 
> (ALL_CXXFLAGS), since all I want is to delete any -O* flag? Or is  
> defining rules and variables all I can do?
>

Yes. Again, I'm talking GNU make now, so I suspect this is not  
portable (so kids, don't do this at home), but you should be able to use

MYCXXFLAGS=$(filter-out -O3,$(ALL_CXXFLAGS))

However as stated above I don't think you want to do that - just  
append -O0 and you're safe.

Cheers,
Simon



[Rd] suppressing "global" cppflags in an individual package
Simon Urbanek