On Fri, 2010-12-03 at 15:52 -0500, Matt Turner wrote: > From: Matthieu Herrb <[email protected]> > > GNU cpp is predefining a number of symbols, depending on the host and target > architecture. This can produce some unexpected results: for example, the > expansion of CLIENTHOST if the host name is i386.my.domain. > > The attached patch creates a new -undef option to xrdb that is passed to > cpp. > --- > Should it be on by default? > > Matthieu, please give your Signed-off-by. > > xrdb.c | 12 +++++++++++- > xrdb.man | 4 ++++ > 2 files changed, 15 insertions(+), 1 deletions(-) > > diff --git a/xrdb.c b/xrdb.c > index 21005c0..68accf8 100644 > --- a/xrdb.c > +++ b/xrdb.c > @@ -479,8 +479,11 @@ DoCmdDefines(String *buff) > *val = '='; > } else > AddSimpleDef(buff, arg + 2); > - } else > + } else if (arg[1] == 'U') { > AddUndef(buff, arg + 2); > + } else if (!strcmp(arg, "-undef") && oper != OPSYMBOLS) { > + addstring(buff, " -undef"); > + } > } > } > > @@ -867,6 +870,13 @@ main(int argc, char *argv[]) > fatal("%s: Too many -U/-D arguments\n", ProgramName); > } > continue; > + } else if (!strcmp ("-undef", arg)) { > + if (num_cmd_defines < MAX_CMD_DEFINES) { > + cmd_defines[num_cmd_defines++] = "-undef"; > + } else { > + fatal("%s: Too many cpp arguments\n", ProgramName); > + } > + continue; > } > Syntax (); > } else if (arg[0] == '=') > diff --git a/xrdb.man b/xrdb.man > index d0d45ad..ddf1a73 100644 > --- a/xrdb.man > +++ b/xrdb.man > @@ -223,6 +223,10 @@ This option indicates that > should not run the input file through a preprocessor before loading it > into properties. > .TP 8 > +.B -undef > +This option is passed to the C preprocessor if used. It prevents it from > +predefining any system specific macros. > +.TP 8 > .B \-symbols > This option indicates that the symbols that are defined for the preprocessor > should be printed onto the standard output.
If I understand, strings like CLIENTHOST were not meant to be substituted. What if the pre-processor is not a GNU cpp? Solaris or something else. You might want to look at this link, it looks like -undef does not work properly on CYGWIN gcc 2.95. http://www.cygwin.com/ml/cygwin/2002-05/msg01613.html The gcc doc is pretty vague as to what will not be substituted. It would be nice to have a list of such symbols in the commit to help investigation if something is not expected. Acked-by: Gaetan Nadon <[email protected]>
signature.asc
Description: This is a digitally signed message part
_______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
