Make wrc command line compatible with windres.
This commit is contained in:
parent
6f0e60dd1f
commit
9d8b149773
|
@ -59,6 +59,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
#include "wrc.h"
|
#include "wrc.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
@ -71,7 +72,7 @@
|
||||||
#include "../wpp/wpp.h"
|
#include "../wpp/wpp.h"
|
||||||
|
|
||||||
static char usage[] =
|
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 n Alignment of resource (win16 only, default is 4)\n"
|
||||||
" -A Auto register resources (only with gcc 2.7 and better)\n"
|
" -A Auto register resources (only with gcc 2.7 and better)\n"
|
||||||
" -b Create an assembly array from a binary .res file\n"
|
" -b Create an assembly array from a binary .res file\n"
|
||||||
|
@ -89,9 +90,11 @@ static char usage[] =
|
||||||
" -D id[=val] Define preprocessor identifier id=val\n"
|
" -D id[=val] Define preprocessor identifier id=val\n"
|
||||||
" -e Disable recognition of win32 keywords in 16bit compile\n"
|
" -e Disable recognition of win32 keywords in 16bit compile\n"
|
||||||
" -E Preprocess only\n"
|
" -E Preprocess only\n"
|
||||||
|
" -F target Ignored for compatibility with windres\n"
|
||||||
" -g Add symbols to the global c namespace\n"
|
" -g Add symbols to the global c namespace\n"
|
||||||
" -h Also generate a .h file\n"
|
" -h Also generate a .h file\n"
|
||||||
" -H file Same as -h but written to 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"
|
" -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 lan Set default language to lan (default is neutral {0, 0})\n"
|
||||||
" -L Leave case of embedded filenames as is\n"
|
" -L Leave case of embedded filenames as is\n"
|
||||||
|
@ -99,6 +102,7 @@ static char usage[] =
|
||||||
" -n Do not generate .s file\n"
|
" -n Do not generate .s file\n"
|
||||||
" -N Do not preprocess input\n"
|
" -N Do not preprocess input\n"
|
||||||
" -o file Output to file (default is infile.[res|s|h]\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"
|
" -p prefix Give a prefix for the generated names\n"
|
||||||
" -r Create binary .res file (compile only)\n"
|
" -r Create binary .res file (compile only)\n"
|
||||||
" -s Add structure with win32/16 (PE/NE) resource directory\n"
|
" -s Add structure with win32/16 (PE/NE) resource directory\n"
|
||||||
|
@ -107,6 +111,17 @@ static char usage[] =
|
||||||
" -V Print version end exit\n"
|
" -V Print version end exit\n"
|
||||||
" -w 16|32 Select win16 or win32 output (default is win32)\n"
|
" -w 16|32 Select win16 or win32 output (default is win32)\n"
|
||||||
" -W Enable pedantic warnings\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"
|
"Input is taken from stdin if no sourcefile specified.\n"
|
||||||
"Debug level 'n' is a bitmask with following meaning:\n"
|
"Debug level 'n' is a bitmask with following meaning:\n"
|
||||||
" * 0x01 Tell which resource is parsed (verbose mode)\n"
|
" * 0x01 Tell which resource is parsed (verbose mode)\n"
|
||||||
|
@ -269,11 +284,25 @@ int getopt (int argc, char *const *argv, const char *optstring);
|
||||||
static void rm_tempfile(void);
|
static void rm_tempfile(void);
|
||||||
static void segvhandler(int sig);
|
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[])
|
int main(int argc,char *argv[])
|
||||||
{
|
{
|
||||||
extern char* optarg;
|
extern char* optarg;
|
||||||
extern int optind;
|
extern int optind;
|
||||||
int optc;
|
int optc, opti = 0;
|
||||||
int lose = 0;
|
int lose = 0;
|
||||||
int ret;
|
int ret;
|
||||||
int a;
|
int a;
|
||||||
|
@ -298,10 +327,19 @@ int main(int argc,char *argv[])
|
||||||
strcat(cmdline, " ");
|
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)
|
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':
|
case 'a':
|
||||||
alignment = atoi(optarg);
|
alignment = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
@ -349,6 +387,9 @@ int main(int argc,char *argv[])
|
||||||
case 'E':
|
case 'E':
|
||||||
preprocess_only = 1;
|
preprocess_only = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'F':
|
||||||
|
/* ignored for compatibility with windres */
|
||||||
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
global = 1;
|
global = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -358,6 +399,10 @@ int main(int argc,char *argv[])
|
||||||
case 'h':
|
case 'h':
|
||||||
create_header = 1;
|
create_header = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
if (!input_name) input_name = strdup(optarg);
|
||||||
|
else error("Too many input files.\n");
|
||||||
|
break;
|
||||||
case 'I':
|
case 'I':
|
||||||
wpp_add_include_path(optarg);
|
wpp_add_include_path(optarg);
|
||||||
break;
|
break;
|
||||||
|
@ -383,7 +428,12 @@ int main(int argc,char *argv[])
|
||||||
no_preprocess = 1;
|
no_preprocess = 1;
|
||||||
break;
|
break;
|
||||||
case 'o':
|
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;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
prefix = xstrdup(optarg);
|
prefix = xstrdup(optarg);
|
||||||
|
@ -428,6 +478,30 @@ int main(int argc,char *argv[])
|
||||||
return 1;
|
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 */
|
/* Check the command line options for invalid combinations */
|
||||||
if(win32)
|
if(win32)
|
||||||
{
|
{
|
||||||
|
@ -590,12 +664,6 @@ int main(int argc,char *argv[])
|
||||||
if(!currentlanguage)
|
if(!currentlanguage)
|
||||||
currentlanguage = new_language(0, 0);
|
currentlanguage = new_language(0, 0);
|
||||||
|
|
||||||
/* Check for input file on command-line */
|
|
||||||
if(optind < argc)
|
|
||||||
{
|
|
||||||
input_name = argv[optind];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(binary && !input_name)
|
if(binary && !input_name)
|
||||||
{
|
{
|
||||||
error("Binary mode requires .res file as input\n");
|
error("Binary mode requires .res file as input\n");
|
||||||
|
|
Loading…
Reference in New Issue