OK,
I've received the copyright assignment notification on Apr 10, 2003.
(I've forwarded a copy to the list, let me know if you did not get it).
So I guess it's prime time for this little patch of mine. Please apply.
I have one more patch in mind for windres, and I'm happy :)
2003-04-15 Dimitrie O. Paun <dpaun(a)rogers.com>
* windres.c (format_from_name): make the exit on error
behaviour optional.
(main): Rename the -I option to -J. Introduce -I as synonym
for --include-dir. For backwards compatibility also support the
old -I behaviour, but issue a deprecation warning.
* doc/binutils.texi: Rename -I to -J. Document the new behaviour
of the -I option.
* testsuite/binutils-all/windres/windres.exp: Add test for the
new -J option.
Index: windres.c
===================================================================
RCS file: /cvs/src/src/binutils/windres.c,v
retrieving revision 1.16
diff -u -r1.16 windres.c
--- windres.c 5 Apr 2003 08:21:46 -0000 1.16
+++ windres.c 16 Apr 2003 03:14:37 -0000
@@ -106,8 +106,7 @@
/* 150 isn't special; it's just an arbitrary non-ASCII char value. */
-#define OPTION_INCLUDE_DIR 150
-#define OPTION_PREPROCESSOR (OPTION_INCLUDE_DIR + 1)
+#define OPTION_PREPROCESSOR 150
#define OPTION_USE_TEMP_FILE (OPTION_PREPROCESSOR + 1)
#define OPTION_NO_USE_TEMP_FILE (OPTION_USE_TEMP_FILE + 1)
#define OPTION_YYDEBUG (OPTION_NO_USE_TEMP_FILE + 1)
@@ -116,8 +115,8 @@
{
{"define", required_argument, 0, 'D'},
{"help", no_argument, 0, 'h'},
- {"include-dir", required_argument, 0, OPTION_INCLUDE_DIR},
- {"input-format", required_argument, 0, 'I'},
+ {"include-dir", required_argument, 0, 'I'},
+ {"input-format", required_argument, 0, 'J'},
{"language", required_argument, 0, 'l'},
{"output-format", required_argument, 0, 'O'},
{"preprocessor", required_argument, 0, OPTION_PREPROCESSOR},
@@ -135,7 +134,7 @@
static void res_init PARAMS ((void));
static int extended_menuitems PARAMS ((const struct menuitem *));
-static enum res_format format_from_name PARAMS ((const char *));
+static enum res_format format_from_name PARAMS ((const char *, int));
static enum res_format format_from_filename PARAMS ((const char *, int));
static void usage PARAMS ((FILE *, int));
static int cmp_res_entry PARAMS ((const PTR, const PTR));
@@ -583,8 +582,9 @@
/* Convert a string to a format type, or exit if it can't be done. */
static enum res_format
-format_from_name (name)
+format_from_name (name, exit_on_error)
const char *name;
+ int exit_on_error;
{
const struct format_map *m;
@@ -592,7 +592,7 @@
if (strcasecmp (m->name, name) == 0)
break;
- if (m->name == NULL)
+ if (m->name == NULL && exit_on_error)
{
non_fatal (_("unknown format type `%s'"), name);
fprintf (stderr, _("%s: supported formats:"), program_name);
@@ -699,15 +699,15 @@
fprintf (stream, _(" The options are:\n\
-i --input=<file> Name input file\n\
-o --output=<file> Name output file\n\
- -I --input-format=<format> Specify input format\n\
+ -J --input-format=<format> Specify input format\n\
-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\
- --include-dir=<dir> Include directory when preprocessing rc file\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\
-v --verbose Verbose - tells you what it's doing\n\
- --language=<val> Set language when reading rc file\n\
+ -l --language=<val> Set language when reading rc file\n\
--use-temp-file Use a temporary file instead of popen to read\n\
the preprocessor output\n\
--no-use-temp-file Use popen (default)\n"));
@@ -776,6 +776,7 @@
char *input_filename;
char *output_filename;
enum res_format input_format;
+ enum res_format input_format_tmp;
enum res_format output_format;
char *target;
char *preprocessor;
@@ -812,7 +813,7 @@
language = 0x409; /* LANG_ENGLISH, SUBLANG_ENGLISH_US. */
use_temp_file = 0;
- while ((c = getopt_long (argc, argv, "i:l:o:I:O:F:D:U:rhHvV", long_options,
+ while ((c = getopt_long (argc, argv, "i:l:o:I:J:O:F:D:U:rhHvV", long_options,
(int *) 0)) != EOF)
{
switch (c)
@@ -825,12 +826,12 @@
output_filename = optarg;
break;
- case 'I':
- input_format = format_from_name (optarg);
+ case 'J':
+ input_format = format_from_name (optarg, 1);
break;
case 'O':
- output_format = format_from_name (optarg);
+ output_format = format_from_name (optarg, 1);
break;
case 'F':
@@ -869,7 +870,16 @@
verbose ++;
break;
- case OPTION_INCLUDE_DIR:
+ case 'I':
+ /* for backward compatibility, should be removed in the future */
+ input_format_tmp = format_from_name (optarg, 0);
+ if (input_format_tmp != RES_FORMAT_UNKNOWN)
+ {
+ fprintf (stderr, _("Option -I is deprecated for setting the input format, please use -J instead.\n"));
+ input_format = input_format_tmp;
+ break;
+ }
+
if (preprocargs == NULL)
{
quotedarg = quot (optarg);
Index: doc/binutils.texi
===================================================================
RCS file: /cvs/src/src/binutils/doc/binutils.texi,v
retrieving revision 1.36
diff -u -r1.36 binutils.texi
--- doc/binutils.texi 9 Apr 2003 09:55:13 -0000 1.36
+++ doc/binutils.texi 16 Apr 2003 03:14:42 -0000
@@ -2577,7 +2577,7 @@
non-option argument, then @command{windres} will write to standard output.
@command{windres} can not write a COFF file to standard output.
-@item -I @var{format}
+@item -J @var{format}
@itemx --input-format @var{format}
The input format to read. @var{format} may be @samp{res}, @samp{rc}, or
@samp{coff}. If no input format is specified, @command{windres} will
@@ -2605,11 +2605,17 @@
to use, including any leading arguments. The default preprocessor
argument is @code{gcc -E -xc-header -DRC_INVOKED}.
+@item -I @var{directory}
@item --include-dir @var{directory}
Specify an include directory to use when reading an @code{rc} file.
@command{windres} will pass this to the preprocessor as an @option{-I}
option. @command{windres} will also search this directory when looking for
-files named in the @code{rc} file.
+files named in the @code{rc} file. If the argument passed to this command
+matches any of the supported @var{formats} (as descrived in the @option{-J}
+option), it will issue a deprecation warning, and behave just like the
+@option{-J} option. New programs should not use this behaviour. If a
+directory happens to match a @var{format}, simple prefix it with @samp{./}
+to disable the backward compatibility.
@item -D @var{target}
@itemx --define @var{sym}[=@var{val}]
Index: testsuite/binutils-all/windres/windres.exp
===================================================================
RCS file: /cvs/src/src/binutils/testsuite/binutils-all/windres/windres.exp,v
retrieving revision 1.3
diff -u -r1.3 windres.exp
--- testsuite/binutils-all/windres/windres.exp 27 Jul 2001 16:16:07 -0000 1.3
+++ testsuite/binutils-all/windres/windres.exp 16 Apr 2003 03:14:43 -0000
@@ -81,6 +81,40 @@
setup_xfail *-*
}
+ verbose "$wr -J rc -O res $res tmpdir/$broot.res" 1
+ catch "exec $wr -J rc -O res $res tmpdir/$broot.res" err
+
+ if ![string match "" $err] then {
+ send_log "$err\n"
+ verbose "$err" 1
+ fail "windres/$broot (parse)"
+ continue;
+ }
+ pass "windres/$broot (parse)"
+
+ set rc [open $res]
+ while { [gets $rc line] != -1 } {
+ if ![regexp "^(//|/\*|#)" $line] {
+ break
+ }
+ if [regexp "parse-only" $line] {
+ file delete "tmpdir/$broot.res"
+ set done 1
+ break;
+ }
+ if [regexp "\[xc\]fail *(\[^ \]*)" $line junk sys] {
+ setup_xfail $sys
+ continue;
+ }
+ }
+ if { $done != 0 } {
+ continue;
+ }
+
+ if { "$broot" != "bmpalign" && "$target_xfail" == "yes" } {
+ setup_xfail *-*
+ }
+
verbose "$wr -I rc -O res $res tmpdir/$broot.res" 1
catch "exec $wr -I rc -O res $res tmpdir/$broot.res" err
--
Dimi.