does 3.4 truncate include paths?

sean darcy seandarcy@hotmail.com
Mon Apr 5 02:13:00 GMT 2004




>From: Zack Weinberg <zack@codesourcery.com>
>To: "sean darcy" <seandarcy@hotmail.com>
>CC: drow@false.org,  gcc@gcc.gnu.org
>Subject: Re: does 3.4 truncate include paths?
>Date: Sun, 04 Apr 2004 18:23:46 -0700
>

>
>You misunderstand what Dan was saying.  For the sake of brevity, let's
>suppose that GXX_INCLUDE_PATH is defined as
>
>#define GXX_INCLUDE_PATH /foo/linux/bar
>
>rather than the much longer definition you were using.  Now, the odds
>are that GXX_INCLUDE_PATH is being used something like this:
>
>#define INCLUDE_IN_GXX(filename) 
_INCLUDE_IN_GXX(GXX_INCLUDE_PATH/filename)
>#define _INCLUDE_IN_GXX(pathname) __INCLUDE_IN_GXX(pathname)
>#define __INCLUDE_IN_GXX(pathname) #pathname
>
>#include INCLUDE_IN_GXX(ctime)
>
>That's going to be macroexpanded as follows.  I have inserted spaces
>between all tokens to emphasize that they are treated as separate
>tokens.
>
># include _INCLUDE_IN_GXX ( GXX_INCLUDE_PATH / ctime )
># include _INCLUDE_IN_GXX ( / foo / linux / bar / ctime )
># include _INCLUDE_IN_GXX ( / foo / 1 / bar / ctime )       /***/
># include __INCLUDE_IN_GXX ( / foo / 1 / bar / ctime )
># include "/foo/1/bar/ctime"
>
>... at which point expansion is complete, the compiler tries to read
>/foo/1/bar/ctime, discovers that it doesn't exist and throws the error
>message that has you baffled.
>
>You are probably wondering what on earth happened at the line I marked
>with /***/.  Here's a dirty little secret: By default the identifier
>"linux" is a predefined macro with expansion "1".  
Since we have a
>bare token sequence, not a string constant, until the very last stage
>of this process, "linux" gets macro-expanded.
>
>String constant concatenation is not done in #include directives,
>which is why stlport is doing the above dance with the three layers of
>nested macros.  There is no way to do just one level of macro
>expansion; it's all or nothing.  Your best bet is probably to use the
>-ansi command line switch to suppress the "linux" predefined 
macro,
>but that has other effects which may be undesirable.
>
>zw

Maybe, but...

1. OpenOffice builds just fine with gcc-3.3.

2.  I don't know if you've just used INCLUDE_IN_GXX as an example or not, 
but a grep thorough the oo source tree - after configure - shows nothing.

3. I've grepped the oo source tree for GXX_INCLUDE_PATH. There sure doesn't 
seem to be any macro expansion. Here it is.

grep -R GXX_INCLUDE_PATH  *
berkeleydb/db-3.2.9.patch:! CXXFLAGS=   -c $(SOLARINC) $(CPPFLAGS) 
-DGXX_INCLUDE_PATH=$(GXX_INCLUDE_PATH) @CXXFLAGS@
....................... export
config_office/configure:GXX_INCLUDE_PATH="$with_gxx_include_path"
config_office/configure:s,@GXX_INCLUDE_PATH@,$GXX_INCLUDE_PATH,;t t
config_office/configure.in:GXX_INCLUDE_PATH="$with_gxx_include_path"
config_office/configure.in:AC_SUBST(GXX_INCLUDE_PATH)
config_office/set_soenv.in:ToFile( "GXX_INCLUDE_PATH",  
"@GXX_INCLUDE_PATH@", "e" );
config_office/config.log:GXX_INCLUDE_PATH='/usr/lib/gcc/i386-redhat-linux/3.4.0/../../../../include/c++/3.4.0'
config_office/config.status:s,@GXX_INCLUDE_PATH@,/usr/lib/gcc/i386-redhat-linux/3.4.0/../../../../include/c++/3.4.0,;t 
t
config_office/set_soenv:ToFile( "GXX_INCLUDE_PATH",  
"/usr/lib/gcc/i386-redhat-linux/3.4.0/../../../../include/c++/3.4.0", "e " 
);
LinuxIntelEnv.Set:setenv GXX_INCLUDE_PATH 
"/usr/lib/gcc/i386-redhat-linux/3.4.0/../../../../include/c++/3.4.0"
LinuxIntelEnv.Set.sh:GXX_INCLUDE_PATH="/usr/lib/gcc/i386-redhat-linux/3.4.0/../../../../include/c++/3.4.0"
..............................   export
solenv/config/ssolar.cmn:               GXX_INCLUDE_PATH
solenv/config/ssrx644.ini:              GXX_INCLUDE_PATH
solenv/config/ssrx644.ini:                      GXX_INCLUDE_PATH 
%COMPATH%/include/g++-v3
solenv/config/ssrx644.ini:              GXX_INCLUDE_PATH
solenv/config/ssrx644.ini:                      GXX_INCLUDE_PATH 
%COMPATH%/include/g++-v3
solenv/config/ssrx644.ini:              common_0:2 IF %GXX_INCLUDE_PATH% !=
solenv/config/ssrx644.ini:                      SOLARINCLUDES 
-I%SOLARVERSION%$/%INPATH%$/inc%UPDMINOREXT% -I%SOLARENV%$/%OUTPATH%$/inc 
%PSDKINC% -I%GXX_INCLUDE_PATH% -I%COMPATH%$/include -I%SOLARENV%$/inc 
%SOLAREXTRAINC%
solenv/config/ssrx645.ini:              GXX_INCLUDE_PATH
solenv/config/ssrx645.ini:                      GXX_INCLUDE_PATH 
%COMPATH%/include/g++-v3
solenv/config/ssrx645.ini:              GXX_INCLUDE_PATH
solenv/config/ssrx645.ini:                      GXX_INCLUDE_PATH 
%COMPATH%/include/g++-v3
solenv/config/ssrx645.ini:              common_0:2 IF %GXX_INCLUDE_PATH% !=
solenv/config/ssrx645.ini:                      SOLARINCLUDES 
-I%SOLARVERSION%$/%INPATH%$/inc%UPDMINOREXT% -I%SOLARENV%$/%OUTPATH%$/inc 
%PSDKINC% -I%GXX_INCLUDE_PATH% -I%COMPATH%$/include -I%SOLARENV%$/inc 
%SOLAREXTRAINC%
solenv/inc/settings.mk:CDEFS+= -DGXX_INCLUDE_PATH=$(GXX_INCLUDE_PATH)
.............................  macOS  specific
stlport/STLport-4.5.patch:! CXXFLAGS_COMMON = -I${STLPORT_DIR} 
-DGXX_INCLUDE_PATH=${GXX_INCLUDE_PATH} ${WARNING_FLAGS}
stlport/STLport-4.5.patch:! CXXFLAGS_COMMON =  -I${STLPORT_DIR} 
-DGXX_INCLUDE_PATH=${GXX_INCLUDE_PATH} -D_REENTRANT -D_PTHREADS 
-ftemplate-depth-32 -malign-natural -no-cpp-precomp -fexceptions 
${WARNING_FLAGS}
stlport/STLport-4.5.patch:! CXXFLAGS_COMMON =  -D_REENTRANT 
-DGXX_INCLUDE_PATH=${GXX_INCLUDE_PATH} -fexceptions -I${STLPORT_DIR} 
${WARNING_FLAGS}
stlport/STLport-4.5.patch:! CXXFLAGS_COMMON = -I${STLPORT_DIR} 
-DGXX_INCLUDE_PATH=${GXX_INCLUDE_PATH} ${WARNING_FLAGS}
stlport/STLport-4.5.patch:! #  define _STLP_NATIVE_INCLUDE_PATH 
GXX_INCLUDE_PATH
stlport/STLport-4.5.patch:!           GXX_INCLUDE_PATH/backward
stlport/unxlngi4.pro/misc/build/STLport-4.5/src/gcc-freebsd.mak:CXXFLAGS_COMMON 
= -I${STLPORT_DIR} -DGXX_INCLUDE_PATH=${GXX_INCLUDE_PATH} ${WARNING_FLAGS}
stlport/unxlngi4.pro/misc/build/STLport-4.5/src/gcc-3.0.mak:CXXFLAGS_COMMON 
=  -D_REENTRANT -DGXX_INCLUDE_PATH=${GXX_INCLUDE_PATH} -fexceptions 
-I${STLPORT_DIR} ${WARNING_FLAGS}
stlport/unxlngi4.pro/misc/build/STLport-4.5/src/gcc-3.0-macosx.mak:CXXFLAGS_COMMON 
=  -I${STLPORT_DIR} -DGXX_INCLUDE_PATH=${GXX_INCLUDE_PATH} -D_REENTRANT 
-D_PTHREADS -ftemplate-depth-32 -malign-natural -no-cpp-precomp -fexceptions 
${WARNING_FLAGS}


sean

_________________________________________________________________
Limited-time offer: Fast, reliable MSN 9 Dial-up Internet access FREE for 2 
months! 
http://join.msn.com/?page=dept/dialup&pgmarket=en-us&ST=1/go/onm00200361ave/direct/01/



More information about the Gcc mailing list