On March 20, 2003 06:44 pm, Dimitrie O. Paun wrote:
So I think this is ready for the prime-time. I would appreciate any feedback on the matter. To be honest, I could not compile the resulting code, as it is complaining I do not have ../bfd/bfd.h:
make: *** No rule to make target `../bfd/bfd.h', needed by `windres.o'. Stop.
Famous last words. I figured out how to compile it, and sure enough I've found a small compilation bug (I got unused to the old K&R style of function definitions). Anyway it's fixed now, so here it is again, with the ChangeLog:
2003-03-21 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: binutils/windres.c =================================================================== RCS file: /cvs/src/src/binutils/windres.c,v retrieving revision 1.13 diff -u -r1.13 windres.c --- binutils/windres.c 5 May 2002 23:25:27 -0000 1.13 +++ binutils/windres.c 21 Mar 2003 07:09:12 -0000 @@ -110,8 +110,7 @@
#define OPTION_DEFINE 150 #define OPTION_HELP (OPTION_DEFINE + 1) -#define OPTION_INCLUDE_DIR (OPTION_HELP + 1) -#define OPTION_LANGUAGE (OPTION_INCLUDE_DIR + 1) +#define OPTION_LANGUAGE (OPTION_HELP + 1) #define OPTION_PREPROCESSOR (OPTION_LANGUAGE + 1) #define OPTION_USE_TEMP_FILE (OPTION_PREPROCESSOR + 1) #define OPTION_NO_USE_TEMP_FILE (OPTION_USE_TEMP_FILE + 1) @@ -122,8 +121,8 @@ { {"define", required_argument, 0, OPTION_DEFINE}, {"help", no_argument, 0, OPTION_HELP}, - {"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, OPTION_LANGUAGE}, {"output-format", required_argument, 0, 'O'}, {"preprocessor", required_argument, 0, OPTION_PREPROCESSOR}, @@ -140,7 +139,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)); @@ -588,8 +587,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;
@@ -597,7 +597,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); @@ -779,6 +779,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; @@ -828,12 +829,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': @@ -868,7 +869,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: binutils/doc/binutils.texi =================================================================== RCS file: /cvs/src/src/binutils/doc/binutils.texi,v retrieving revision 1.30 diff -u -r1.30 binutils.texi --- binutils/doc/binutils.texi 24 Feb 2003 16:20:28 -0000 1.30 +++ binutils/doc/binutils.texi 20 Mar 2003 15:10:43 -0000 @@ -2569,7 +2569,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 @@ -2597,11 +2597,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: binutils/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 --- binutils/testsuite/binutils-all/windres/windres.exp 27 Jul 2001 16:16:07 -0000 1.3 +++ binutils/testsuite/binutils-all/windres/windres.exp 20 Mar 2003 23:24:05 -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