Configure & build environment flags

Paul Guyot pguyot at
Sat Jun 23 16:48:39 PDT 2007

On Jun 24, 2007, at 7:00 AM, Ryan Schmidt wrote:

> On Jun 23, 2007, at 16:27, Juan Manuel Palacios wrote:
>> 	I'm curious about why we provide facilities to alter the  
>> configure environment in many ways but practically none to alter  
>> the build environment. I know that in the ideal case (a properly  
>> written build system for any given software package) the configure  
>> environment should either cascade down to the build one (Makefiles  
>> inheriting and passing the same env flags that were given during  
>> the configure stage, for instance) or its results should be  
>> reflected there (the setting of some variable in generated  
>> Makefiles), but we all know there are quite a handful of broken  
>> build systems in which neither of these two is true. Therefore  
>> some Portfiles have the need of passing some (if not the same)  
>> flags to the environment during build (build.env) as they do in  
>> the configure stage.
>> 	So, onto my specific questions, is there any reason why we don't  
>> provide the build.xxflags-{append,delete} equivalents that we do  
>> for configure.xxflags-{append,delete}? How these would work  
>> (inheriting values, replicating them, overriding them,...) I'm not  
>> entirely sure, but you can easily spot Portfiles out there using  
>> build.env construct that may tread on what's set through the  
>> configure.xxflags if not used carefully. Also, if we're  
>> deprecating configure.env, shouldn't we be doing the same for  
>> build.env? And lastly, again on the deprecation of configure.env,  
>> what's our stand with respect to {configure,build}.env- 
>> {append,delete}?
>> 	I would completely understand if you told me none of these things  
>> have been implemented yet 'cause simply you've had "no time" ;-)  
>> But I was wondering if there were intead any type of technical  
>> decisions behind the lack of a build environment tweaking facility.
> I also recently noticed the lack of build.cppflags-append and asked  
> the list about it and got no response.
> 001774.html
> I wasn't aware configure.env was deprecated. It's still used and  
> required by many ports. I thought we just deprecated using  
> configure.env for setting LDFLAGS and CPPFLAGS. Is that all you meant?

I don't think we deprecated configure.env and that there is any plan  
to do so. There is some code in base/ that parses flags in  
configure.env, and this is the bit that might go away, maybe with a  
warning, once a grep would have revealed that no port still uses  
configure.env for *FLAGS.

The rationale behind configure.*flags was that it was the easiest  
solution to solve several problems at once and to provide features we  
wanted. Setting those flags is quite a frequent operation and parsing  
them from configure.env is error-prone and problematic, for example  
it is difficult to figure out the declarative value of each flag, if  
the flag was inherited, was there because of a variant or was there  
in the base portfile. Now that we process flags separately, we  
provide options that are more declarative and we can handle a  
reasonable default for universal builds while providing a way to  
implement a specific variant for that, we provide a reasonable  
default for the flags including the over-spread -I${prefix}/include  
and -L${prefix}/lib, thus simplifying and having portfiles using  
those flags properly (most of the flags were set in an effectless  
manner), and we also now compile stuff with a default, reasonable  
optimization flag (-O2, I know many people here would prefer -Os, or  
believe Apple says so), while the past behavior was such that many  
software built with MacPorts were not optimized while they would have  
been optimized if built manually -- because if you don't provide any  
CFLAG to autoconf' generated configure, it uses the default value  
including -O2 when using gcc.

I don't see any similar rationale for build flags. I believe build  
flags being really required is quite rare, and that we would break  
ports if we provided a default for build flags. We do not *need* all  
the logic that exists for configure flags. Providing that as part of  
a complete framework that would unify the syntax might make the work  
of port maintainers easier, but this will certainly add some  
confusion (should this flag be in configure or in build flags?) and  
drive them to use build flags where they are in fact not required, or  
where they would conflict with configure flags.


More information about the macports-dev mailing list