widl: Add --sysroot and --nostdinc options.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Alexandre Julliard 2019-11-02 13:34:27 +01:00
parent 264d8884d5
commit 5f39d36a6c
3 changed files with 34 additions and 7 deletions

View File

@ -19,7 +19,7 @@ C_SRCS = \
LEX_SRCS = parser.l
BISON_SRCS = parser.y
widl_EXTRADEFS = -DDEFAULT_INCLUDE_DIR=\"${includedir}/wine/windows/\"
widl_EXTRADEFS = -DINCLUDEDIR=\"${includedir}\"
EXTRALIBS = -lwpp

View File

@ -60,6 +60,8 @@ static const char usage[] =
" --local-stubs=file Write empty stubs for call_as/local methods to file\n"
" -m32, -m64 Set the target architecture (Win32 or Win64)\n"
" -N Do not preprocess input\n"
" --nostdinc Do not search the standard include path\n"
" --ns_prefix Prefix namespaces with ABI namespace\n"
" --oldnames Use old naming conventions\n"
" -o, --output=NAME Set the output file name\n"
" -Otype Type of stubs to generate (-Os, -Oi, -Oif)\n"
@ -69,8 +71,7 @@ static const char usage[] =
" --prefix-server=p Prefix names of server functions with 'p'\n"
" -r Generate registration script\n"
" -robust Ignored, present for midl compatibility\n"
" --winrt Enable Windows Runtime mode\n"
" --ns_prefix Prefix namespaces with ABI namespace\n"
" --sysroot=DIR Prefix include paths with DIR\n"
" -s Generate server stub\n"
" -t Generate typelib\n"
" -u Generate interface identifiers file\n"
@ -79,6 +80,7 @@ static const char usage[] =
" --win32, --win64 Set the target architecture (Win32 or Win64)\n"
" --win32-align n Set win32 structure alignment to 'n'\n"
" --win64-align n Set win64 structure alignment to 'n'\n"
" --winrt Enable Windows Runtime mode\n"
"Debug level 'n' is a bitmask with following meaning:\n"
" * 0x01 Tell which resource is parsed (verbose mode)\n"
" * 0x02 Dump internal structures\n"
@ -125,6 +127,7 @@ int win32_packing = 8;
int win64_packing = 8;
int winrt_mode = 0;
int use_abi_namespace = 0;
static int stdinc = 1;
static enum stub_mode stub_mode = MODE_Os;
char *input_name;
@ -163,6 +166,7 @@ enum {
DLLDATA_OPTION,
DLLDATA_ONLY_OPTION,
LOCAL_STUBS_OPTION,
NOSTDINC_OPTION,
PREFIX_ALL_OPTION,
PREFIX_CLIENT_OPTION,
PREFIX_SERVER_OPTION,
@ -170,6 +174,7 @@ enum {
RT_NS_PREFIX,
RT_OPTION,
ROBUST_OPTION,
SYSROOT_OPTION,
WIN32_OPTION,
WIN64_OPTION,
WIN32_ALIGN_OPTION,
@ -185,6 +190,7 @@ static const struct option long_options[] = {
{ "dlldata-only", 0, NULL, DLLDATA_ONLY_OPTION },
{ "help", 0, NULL, PRINT_HELP },
{ "local-stubs", 1, NULL, LOCAL_STUBS_OPTION },
{ "nostdinc", 0, NULL, NOSTDINC_OPTION },
{ "ns_prefix", 0, NULL, RT_NS_PREFIX },
{ "oldnames", 0, NULL, OLDNAMES_OPTION },
{ "output", 0, NULL, 'o' },
@ -192,6 +198,7 @@ static const struct option long_options[] = {
{ "prefix-client", 1, NULL, PREFIX_CLIENT_OPTION },
{ "prefix-server", 1, NULL, PREFIX_SERVER_OPTION },
{ "robust", 0, NULL, ROBUST_OPTION },
{ "sysroot", 1, NULL, SYSROOT_OPTION },
{ "target", 0, NULL, 'b' },
{ "winrt", 0, NULL, RT_OPTION },
{ "win32", 0, NULL, WIN32_OPTION },
@ -567,10 +574,11 @@ void write_id_data(const statement_list_t *stmts)
int main(int argc,char *argv[])
{
int optc;
int i, optc;
int ret = 0;
int opti = 0;
char *output_name = NULL;
const char *sysroot = "";
signal( SIGTERM, exit_on_signal );
signal( SIGINT, exit_on_signal );
@ -593,6 +601,9 @@ int main(int argc,char *argv[])
do_everything = 0;
local_stubs_name = xstrdup(optarg);
break;
case NOSTDINC_OPTION:
stdinc = 0;
break;
case OLDNAMES_OPTION:
old_names = 1;
break;
@ -615,6 +626,9 @@ int main(int argc,char *argv[])
case RT_NS_PREFIX:
use_abi_namespace = 1;
break;
case SYSROOT_OPTION:
sysroot = xstrdup(optarg);
break;
case WIN32_OPTION:
pointer_size = 4;
break;
@ -733,9 +747,17 @@ int main(int argc,char *argv[])
}
}
#ifdef DEFAULT_INCLUDE_DIR
wpp_add_include_path(DEFAULT_INCLUDE_DIR);
#endif
if (stdinc)
{
static const char *incl_dirs[] = { INCLUDEDIR, "/usr/include", "/usr/local/include" };
for (i = 0; i < ARRAY_SIZE(incl_dirs); i++)
{
if (i && !strcmp( incl_dirs[i], incl_dirs[0] )) continue;
wpp_add_include_path( strmake( "%s%s/wine/msvcrt", sysroot, incl_dirs[i] ));
wpp_add_include_path( strmake( "%s%s/wine/windows", sysroot, incl_dirs[i] ));
}
}
switch (target_cpu)
{

View File

@ -41,6 +41,11 @@ specification is in the standard autoconf format as returned by
\fBconfig.sub\fR.
.IP "\fB-m32, -m64, --win32, --win64\fR"
Force the target architecture to 32-bit or 64-bit.
.IP \fB\-\-sysroot=\fIdir\fR
Prefix the standard include paths with \fIdir\fR.
.IP \fB\-\-nostdinc\fR
Do not search standard include paths like /usr/include and
/usr/local/include.
.PP
.B Header options:
.IP "\fB-h\fR"