WITHOUT_GCC flag disables installation of /usr/bin/cpp too -- is it Ok?

Benjamin Kaduk kaduk at MIT.EDU
Fri Sep 9 22:27:47 UTC 2011


On Wed, 7 Sep 2011, Lev Serebryakov wrote:

> Hello, Dimitry.
> You wrote 7 сентября 2011 г., 21:17:20:
>
> I think, that /usr/bin/cpp is valuable by itself, as it is handy
> generic preprocessor tool, useful for preparing complex ipfw scripts,
> for example. All others are bundled together, for sure.

I am not really convinced.  /usr/bin/cpp is the C preprocessor, and it is 
only required to emit output that its bundled C compiler will accept as 
input.  In particular, it can do whatever it wants with whitespace, 
wrapping and unwrapping lines, outputting other spurious text, &c..
From cpp(1):
        The C preprocessor is intended to be used only with C, C++, and Objec-
        tive-C source code.  In the past, it has been abused as a general text
        processor.  It will choke on input which does not obey C's lexical
        rules.  For example, apostrophes will be interpreted as the beginning
        of character constants, and cause errors.  Also, you cannot rely on it
        preserving characteristics of the input which are not significant to
        C-family languages.  If a Makefile is preprocessed, all the hard tabs
        will be removed, and the Makefile will not work.
The (incredibly brain-dead) build system at $work runs cpp on a Makefile, 
which I had to hack around in order to get things to work.  It's really an 
ugly hack, though, and is not at all robust.  I wish I didn't have to.

If you want a general-purpose macro processor, please consider using 
something that was designed as a general-purpose macro processor (e.g. 
m4(1) which is in base) -- abusing cpp(1) is just asking for weird/subtle 
errors to be introduce in the future.

-Ben Kaduk

>
> I think, it is good idea to exclude cpp from this list (but not from
> WITHOUT_TOOLCHAIN, of course).


More information about the freebsd-current mailing list