cpp command overwrites input files

Zack Weinberg zack@rabi.columbia.edu
Sat Jun 26 10:08:00 GMT 1999


>I've been trying to test gcc-2.95 by trying to build the NetBSD world for 
>the ARM with it, and I've found a nasty gotcha in the new cpp front-end.  
>One of the build utils in the NetBSD tree uses the cpp to pre-process 
>certain include files with the command
>
>        cpp -nostdinc -idirafter /usr/include -dM /usr/include/sys/ioctl.h 
>/usr/include/sys/ioctl_compat.h

[... and this now will overwrite ioctl_compat.h ...]

I find it difficult to believe that this command ever worked. 
/usr/lib/gcc-lib/TARGET/VERSION/cpp has treated its second non-option
argument as the output file, not another input file, for as far back as the
ChangeLog goes.  Until gcc-2.95, /bin/cpp was identical with
/u/l/g-l/T/V/cpp.  I suppose this might have been some magic property of
-dM, but it was never documented and shouldn't have been relied on.

The NetBSD utility should do

cpp -nostdinc -idirafter /usr/include -dM -include /usr/include/sys/ioctl.h \
	-include /usr/include/sys/ioctl_compat.h </dev/null

which will work with gcc-2.95 and with previous versions.  (If your target
specs are correct, you shouldn't need the -nostdinc -idirafter ... bit.)

>BTW "cpp -o -" doesn't write to stdout, nor does cpp -E.

My copy does.  Are you sure?

zw


More information about the Gcc-bugs mailing list