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@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
Hi Dimitrie,
2003-04-15 Dimitrie O. Paun dpaun@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.
Approved and applied. (Finally!)
I am sorry - I had a problem with the FSF - their email to me about your assignment had become lost in the system. Now that we have sorted that out, I have applied your patch. There were two small problems with it:
Firstly you included the change to windres.exp in the ChangeLog for the rest of the changes. The binutils/testsuite directory has its own ChangeLog and any entries for alterations to tests ought to go in there. Secondly the change to windres.exp added the use of -J but it did not remove the use of -I. Since using -I now generates a warning message, ans since the test harness will fail any test producing unexpected warning messages, lots of tests started failing.
I have fixed both of these problems. (I removed the use of -I in windres.exp, since it is now deprecated).
Cheers Nick