* windres.c (usage): Add new --preprocessor-arg option.

(option_values): Add new OPTION_PREPROCESSOR_ARG enumerator.
	(option long_options): Add preprocessor-arg option.
	(main): Handle it.
	* doc/binutils.texi: Add documentation for --preprocessor-arg
	option.
	* NEWS: Add line about new --preprocessor-arg option for windres.

	* binutils-all/windres/windres.exp: Add '// cpparg <option>' command
	to rc file interpretation to specify addition pre-processor commands
	as script option.
	* binutils-all/windres/strtab3.rc: New.
	* binutils-all/windres/strtab3.rsd: New.
	* binutils-all/windres/README: Add note about cpparg script option.
	argument
This commit is contained in:
Nick Clifton 2011-04-13 07:50:15 +00:00
parent dd948edaf7
commit ec25acb399
9 changed files with 83 additions and 5 deletions

View File

@ -1,3 +1,13 @@
2011-04-11 Kai Tietz
* windres.c (usage): Add new --preprocessor-arg option.
(option_values): Add new OPTION_PREPROCESSOR_ARG enumerator.
(option long_options): Add preprocessor-arg option.
(main): Handle it.
* doc/binutils.texi: Add documentation for --preprocessor-arg
option.
* NEWS: Add line about new --preprocessor-arg option for windres.
2011-04-08 John Marino <binutils@marino.st>
* arlex.l: Prevent redefinition of YY_NO_UNPUT.

View File

@ -1,7 +1,9 @@
-*- text -*-
Changes in 2.21:
* Add --preprocessor-arg option to windres to specify additional options
passed to preprocessor.
Changes in 2.21:
* Add --interleave-width option to objcopy to allowing copying a range of
bytes from the input to the output with the --interleave option.

View File

@ -11,7 +11,7 @@
@copying
@c man begin COPYRIGHT
Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
@ -3450,6 +3450,13 @@ preprocessor first. This option may be used to specify the preprocessor
to use, including any leading arguments. The default preprocessor
argument is @code{gcc -E -xc-header -DRC_INVOKED}.
@item --preprocessor-arg @var{option}
When @command{windres} reads an @code{rc} file, it runs it through
the C preprocessor first. This option may be used to specify additional
text to be passed to preprocessor on its command line.
This option can be used multiple times to add multiple options to the
preprocessor command line.
@item -I @var{directory}
@itemx --include-dir @var{directory}
Specify an include directory to use when reading an @code{rc} file.

View File

@ -1,3 +1,13 @@
011-04-11 Kai Tietz
* binutils-all/windres/windres.exp: Add '// cpparg <option>' command
to rc file interpretation to specify addition pre-processor commands
as script option.
* binutils-all/windres/strtab3.rc: New.
* binutils-all/windres/strtab3.rsd: New.
* binutils-all/windres/README: Add note about cpparg script option.
argument
2011-04-11 Nick Clifton <nickc@redhat.com>
* binutils-all/arm/simple.s: Fix assembly problems for COFF based

View File

@ -12,6 +12,7 @@ contains one command:
// parse-only
// xfail *-*-*
// cpparg <preprocessor options passed via --preprocessor-arg>
parse-only must preceed any xfail commands, and indicates that a
comparison with the *.rsd file will not happen. xfail indicates when

View File

@ -0,0 +1,14 @@
// cpparg -DTEST=1
#include "windows.h"
LANGUAGE 0, 0
STRINGTABLE MOVEABLE PURE DISCARDABLE
BEGIN
#ifdef TEST
1 "hello, world"
#else
1 "fail"
#endif
END

View File

@ -0,0 +1,8 @@
0000 00000000 20000000 ffff0000 ffff0000 .... ...........
0010 00000000 00000000 00000000 00000000 ................
0020 38000000 20000000 ffff0600 ffff0100 8... ...........
0030 00000000 30100000 00000000 00000000 ....0...........
0040 00000c00 68006500 6c006c00 6f002c00 ....h.e.l.l.o.,.
0050 20007700 6f007200 6c006400 00000000 .w.o.r.l.d.....
0060 00000000 00000000 00000000 00000000 ................
0070 00000000 00000000 ........

View File

@ -56,6 +56,7 @@ foreach res $res_list {
set sroot [file rootname $res]
set broot [file tail $sroot]
set done 0
set cpp_opts ""
set rc [open $res]
while { [gets $rc line] != -1 } {
@ -66,10 +67,14 @@ foreach res $res_list {
setup_xfail $sys
continue
}
if [regexp "cpparg *(\[^ \]*)" $line junk cppopt] {
set cpp_opts "--preprocessor-arg \"$cppopt\""
continue
}
}
verbose "$wr -J rc -O res $res tmpdir/$broot.res" 1
catch "exec $wr -J rc -O res $res tmpdir/$broot.res" err
catch "exec $wr $cpp_opts -J rc -O res $res tmpdir/$broot.res" err
if ![string match "" $err] then {
send_log "$err\n"

View File

@ -1,6 +1,6 @@
/* windres.c -- a program to manipulate Windows resources
Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
2009 Free Software Foundation, Inc.
2009, 2011 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
Rewritten by Kai Tietz, Onevision.
@ -665,6 +665,7 @@ usage (FILE *stream, int status)
-O --output-format=<format> Specify output format\n\
-F --target=<target> Specify COFF target\n\
--preprocessor=<program> Program to use to preprocess rc file\n\
--preprocessor-arg=<arg> Additional preprocessor argument\n\
-I --include-dir=<dir> Include directory when preprocessing rc file\n\
-D --define <sym>[=<val>] Define SYM when preprocessing rc file\n\
-U --undefine <sym> Undefine SYM when preprocessing rc file\n\
@ -734,7 +735,8 @@ enum option_values
OPTION_USE_TEMP_FILE,
OPTION_NO_USE_TEMP_FILE,
OPTION_YYDEBUG,
OPTION_INCLUDE_DIR
OPTION_INCLUDE_DIR,
OPTION_PREPROCESSOR_ARG
};
static const struct option long_options[] =
@ -745,6 +747,7 @@ static const struct option long_options[] =
{"output-format", required_argument, 0, 'O'},
{"target", required_argument, 0, 'F'},
{"preprocessor", required_argument, 0, OPTION_PREPROCESSOR},
{"preprocessor-arg", required_argument, 0, OPTION_PREPROCESSOR_ARG},
{"include-dir", required_argument, 0, OPTION_INCLUDE_DIR},
{"define", required_argument, 0, 'D'},
{"undefine", required_argument, 0, 'U'},
@ -889,6 +892,24 @@ main (int argc, char **argv)
preprocessor = optarg;
break;
case OPTION_PREPROCESSOR_ARG:
if (preprocargs == NULL)
{
quotedarg = quot (optarg);
preprocargs = xstrdup (quotedarg);
}
else
{
char *n;
quotedarg = quot (optarg);
n = xmalloc (strlen (preprocargs) + strlen (quotedarg) + 2);
sprintf (n, "%s %s", preprocargs, quotedarg);
free (preprocargs);
preprocargs = n;
}
break;
case 'D':
case 'U':
if (preprocargs == NULL)