[51027] trunk/dports/devel
Ryan Schmidt
ryandesign at macports.org
Sat May 16 01:40:35 PDT 2009
On May 16, 2009, at 02:57, Toby Peterson wrote:
> On Fri, May 15, 2009 at 14:03, Ryan Schmidt wrote:
>
>> On May 15, 2009, at 13:55, toby at macports.org wrote:
>>
>>> Revision: 51027
>>> http://trac.macports.org/changeset/51027
>>> Author: toby at macports.org
>>> Date: 2009-05-15 11:55:33 -0700 (Fri, 15 May 2009)
>>> Log Message:
>>> -----------
>>> libmowgli 0.7.0
>>
>> [snip]
>>
>>> +# Why do we set a bogus CPP value, anyway?
>>> +configure.cpp
>>
>> What is bogus about it? [snip]
>
> It should be "gcc -E". To illustrate the problem:
>
> % touch foo.c bar.c
> % gcc -E foo.c bar.c
> # 1 "foo.c"
> # 1 "<built-in>"
> # 1 "<command line>"
> # 1 "foo.c"
> # 1 "bar.c"
> # 1 "<built-in>"
> # 1 "<command line>"
> # 1 "bar.c"
> % cpp foo.c bar.c
> %
>
> Most configure scripts will just use "$CC -E" if CPP isn't specified
> explicitly, which is what I'm taking advantage of there. And, if you
> run nearly any configure script with no special setup:
>
> checking how to run the C preprocessor... gcc -E
>
> I'd vote for just never setting CPP, but setting it to "$CC -E" would
> probably work too.
Interesting. I can't offer much input as all I know about compiling
software comes from maintaining ports in MacPorts; I haven't written
compiled software myself and I'm not fluent on what a preprocessor is
supposed to do or how it's supposed to work. But now I'm curious why
there is an executable called "cpp" whose manpage says it is "The C
Preprocessor" if that's not in fact the C preprocessor one is meant
to use.
After some Googling, I think I'm understanding that "gcc -E"
internally calls "cpp"? They just appear to handle output
differently. For example, I see that "gcc -E foo.c bar.c" causes the
output to appear as you showed, and foo.c and bar.c remain empty,
whereas "cpp foo.c bar.c" causes no output to appear, and modifies
bar.c to contain the foo-related lines you showed, and the bar-
related lines don't seem to be anywhere. This appears to match the
usage explanation from the cpp manpage, "cpp infile outfile". In
contrast, gcc appears to take a bunch of input files and print output
to stdout.
MacPorts has set CPP to /usr/bin/cpp-4.0 since r27018 was committed
on 2007-07-15, and this was released as part of MacPorts 1.5.1 in
August 2007. And I haven't heard any mention of a problems with this
approach until now. So my first instinct is to wonder if this is less
a general problem and more an issue in the particular software you're
porting. I'm not opposed to changing this in MacPorts base if that
can be demonstrated to be more correct and to help more ports than it
harms. But the fact that AFAIK no prior problems were reported with
this method in 22 months speaks to the method not being totally
crazy. I certainly wouldn't call it "bogus."
More information about the macports-dev
mailing list