windres compatibility for wrc
Dimitrie O. Paun
dpaun at rogers.com
Thu Dec 5 17:38:38 CST 2002
As discussed here:
http://www.winehq.com/hypermail/wine-devel/2002/12/0168.html
I think we need to cleanup a bit the options to wrc, but I will
do that in a different patch, once this gets in.
BTW, with these changes, and mingwrap, putty gets to linking.
ChangeLog
Make wrc command line compatible with windres.
Index: tools/wrc/wrc.c
===================================================================
RCS file: /var/cvs/wine/tools/wrc/wrc.c,v
retrieving revision 1.17
diff -u -r1.17 wrc.c
--- tools/wrc/wrc.c 27 Aug 2002 22:29:26 -0000 1.17
+++ tools/wrc/wrc.c 5 Dec 2002 23:32:05 -0000
@@ -59,6 +59,7 @@
#include <assert.h>
#include <ctype.h>
#include <signal.h>
+#include <getopt.h>
#include "wrc.h"
#include "utils.h"
@@ -71,7 +72,7 @@
#include "../wpp/wpp.h"
static char usage[] =
- "Usage: wrc [options...] [infile[.rc|.res]]\n"
+ "Usage: wrc [options...] [infile[.rc|.res]] [outfile]\n"
" -a n Alignment of resource (win16 only, default is 4)\n"
" -A Auto register resources (only with gcc 2.7 and better)\n"
" -b Create an assembly array from a binary .res file\n"
@@ -89,9 +90,11 @@
" -D id[=val] Define preprocessor identifier id=val\n"
" -e Disable recognition of win32 keywords in 16bit compile\n"
" -E Preprocess only\n"
+ " -F target Ignored for compatibility with windres\n"
" -g Add symbols to the global c namespace\n"
" -h Also generate a .h file\n"
" -H file Same as -h but written to file\n"
+ " -i file The name of the input file.\n"
" -I path Set include search dir to path (multiple -I allowed)\n"
" -l lan Set default language to lan (default is neutral {0, 0})\n"
" -L Leave case of embedded filenames as is\n"
@@ -99,6 +102,7 @@
" -n Do not generate .s file\n"
" -N Do not preprocess input\n"
" -o file Output to file (default is infile.[res|s|h]\n"
+ " -O format The output format to generate. format may be `res' only.\n"
" -p prefix Give a prefix for the generated names\n"
" -r Create binary .res file (compile only)\n"
" -s Add structure with win32/16 (PE/NE) resource directory\n"
@@ -107,6 +111,17 @@
" -V Print version end exit\n"
" -w 16|32 Select win16 or win32 output (default is win32)\n"
" -W Enable pedantic warnings\n"
+ "The following long options are supported:\n"
+ " --input Synonym for -i.\n"
+ " --output Synonym for -o.\n"
+ " --target Synonym for -F.\n"
+ " --format Synonym for -O.\n"
+ " --include-dir Synonym for -I.\n"
+ " --define Synonym for -D.\n"
+ " --language Synonym for -l.\n"
+ " --preprocessor Specify the preprocessor to use, including arguments.\n"
+ " --help Prints a usage summary.\n"
+ " --version Prints the version number for wrc.\n"
"Input is taken from stdin if no sourcefile specified.\n"
"Debug level 'n' is a bitmask with following meaning:\n"
" * 0x01 Tell which resource is parsed (verbose mode)\n"
@@ -269,11 +284,25 @@
static void rm_tempfile(void);
static void segvhandler(int sig);
+static struct option long_options[] = {
+ { "input", 1, 0, 'i' },
+ { "output", 1, 0, 'o' },
+ { "target", 1, 0, 'F' },
+ { "format", 1, 0, 'O' },
+ { "include-dir", 1, 0, 'I' },
+ { "define", 1, 0, 'D' },
+ { "language", 1, 0, 'l' },
+ { "preprocessor", 1, 0, 1 },
+ { "help", 0, 0, 2 },
+ { "version", 0, 0, 3 },
+ { 0, 0, 0, 0 }
+};
+
int main(int argc,char *argv[])
{
extern char* optarg;
extern int optind;
- int optc;
+ int optc, opti = 0;
int lose = 0;
int ret;
int a;
@@ -298,10 +327,19 @@
strcat(cmdline, " ");
}
- while((optc = getopt(argc, argv, "a:AbB:cC:d:D:eEghH:I:l:LmnNo:p:rstTVw:W")) != EOF)
+ while((optc = getopt_long(argc, argv, "a:AbB:cC:d:D:eEF:ghH:i:I:l:LmnNo:O:p:rstTVw:W", long_options, &opti)) != EOF)
{
switch(optc)
{
+ case 1:
+ fprintf(stderr, "--preprocessor option not yet supported, ignored.\n");
+ break;
+ case 2:
+ fprintf(stderr, usage);
+ return 0;
+ case 3:
+ fprintf(stderr, version_string);
+ return 0;
case 'a':
alignment = atoi(optarg);
break;
@@ -349,6 +387,9 @@
case 'E':
preprocess_only = 1;
break;
+ case 'F':
+ /* ignored for compatibility with windres */
+ break;
case 'g':
global = 1;
break;
@@ -358,6 +399,10 @@
case 'h':
create_header = 1;
break;
+ case 'i':
+ if (!input_name) input_name = strdup(optarg);
+ else error("Too many input files.\n");
+ break;
case 'I':
wpp_add_include_path(optarg);
break;
@@ -383,7 +428,12 @@
no_preprocess = 1;
break;
case 'o':
- output_name = strdup(optarg);
+ if (!output_name) output_name = strdup(optarg);
+ else error("Too many output files.\n");
+ break;
+ case 'O':
+ if (strcmp(optarg, "res"))
+ error("Output format %s not supported.", optarg);
break;
case 'p':
prefix = xstrdup(optarg);
@@ -428,6 +478,30 @@
return 1;
}
+ /* Check for input file on command-line */
+ if(optind < argc)
+ {
+ if (!input_name) input_name = argv[optind++];
+ else error("Too many input files.\n");
+ }
+
+ /* Check for output file on command-line */
+ if(optind < argc)
+ {
+ if (!output_name) output_name = argv[optind++];
+ else error("Too many output files.\n");
+ }
+
+ /* Try to guess the output format based on output name */
+ if (output_name)
+ {
+ char *dotstr = strrchr(output_name, '.');
+ if (dotstr && (strcmp(dotstr+1, "res") == 0 ||
+ strcmp(dotstr+1, "o") == 0))
+ create_res = 1;
+ }
+
+
/* Check the command line options for invalid combinations */
if(win32)
{
@@ -589,12 +663,6 @@
/* Check if the user set a language, else set default */
if(!currentlanguage)
currentlanguage = new_language(0, 0);
-
- /* Check for input file on command-line */
- if(optind < argc)
- {
- input_name = argv[optind];
- }
if(binary && !input_name)
{
--
Dimi.
More information about the wine-patches
mailing list