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