Alexandre Julliard : winegcc: Fix handling of the --sysroot flag when not building inside the Wine tree.
Alexandre Julliard
julliard at winehq.org
Tue Sep 10 16:49:29 CDT 2019
Module: wine
Branch: master
Commit: 0c2cc9bb05815b88286422e714825929d40ec2ff
URL: https://source.winehq.org/git/wine.git/?a=commit;h=0c2cc9bb05815b88286422e714825929d40ec2ff
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Sep 10 12:07:01 2019 +0200
winegcc: Fix handling of the --sysroot flag when not building inside the Wine tree.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
tools/winegcc/winegcc.c | 42 ++++++++++++++++++++++++++++--------------
1 file changed, 28 insertions(+), 14 deletions(-)
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c
index a7476dd19d..db46cf6d5d 100644
--- a/tools/winegcc/winegcc.c
+++ b/tools/winegcc/winegcc.c
@@ -213,6 +213,8 @@ struct options
const char* output_name;
const char* image_base;
const char* section_align;
+ const char* sysroot;
+ const char* isysroot;
const char* lib_suffix;
const char* subsystem;
const char* prelink;
@@ -567,6 +569,7 @@ static char *get_lib_dir( struct options *opts )
static const char *stdlibpath[] = { LIBDIR, "/usr/lib", "/usr/local/lib", "/lib" };
static const char libwine[] = "/libwine.so";
const char *bit_suffix, *other_bit_suffix, *build_multiarch, *target_multiarch;
+ const char *root = opts->sysroot ? opts->sysroot : "";
unsigned int i;
size_t build_len, target_len;
@@ -579,8 +582,10 @@ static char *get_lib_dir( struct options *opts )
for (i = 0; i < sizeof(stdlibpath)/sizeof(stdlibpath[0]); i++)
{
- char *p, *buffer = xmalloc( strlen(stdlibpath[i]) + strlen("/arm-linux-gnueabi") + strlen(libwine) + 1 );
- strcpy( buffer, stdlibpath[i] );
+ char *p, *buffer = xmalloc( strlen(root) + strlen(stdlibpath[i]) +
+ strlen("/arm-linux-gnueabi") + strlen(libwine) + 1 );
+ strcpy( buffer, root );
+ strcat( buffer, stdlibpath[i] );
p = buffer + strlen(buffer);
while (p > buffer && p[-1] == '/') p--;
strcpy( p, libwine );
@@ -598,7 +603,8 @@ static char *get_lib_dir( struct options *opts )
strcat( p, libwine );
if (check_platform( opts, buffer )) goto found;
- strcpy( buffer, stdlibpath[i] );
+ strcpy( buffer, root );
+ strcat( buffer, stdlibpath[i] );
p = buffer + strlen(buffer);
while (p > buffer && p[-1] == '/') p--;
strcpy( p, libwine );
@@ -646,7 +652,7 @@ static char *get_lib_dir( struct options *opts )
buffer[strlen(buffer) - strlen(libwine)] = 0;
return buffer;
}
- return xstrdup( LIBDIR );
+ return strmake( "%s%s", root, LIBDIR );
}
static void compile(struct options* opts, const char* lang)
@@ -798,13 +804,16 @@ no_compat_defines:
/* standard includes come last in the include search path */
if (!opts->wine_objdir && !opts->nostdinc)
{
+ const char *root = opts->isysroot ? opts->isysroot : opts->sysroot ? opts->sysroot : "";
if (opts->use_msvcrt)
{
- strarray_add(comp_args, gcc_defs ? "-isystem" INCLUDEDIR "/wine/msvcrt" : "-I" INCLUDEDIR "/wine/msvcrt" );
+ strarray_add(comp_args, strmake( "%s%s%s/wine/msvcrt",
+ gcc_defs ? "-isystem" : "-I", root, INCLUDEDIR ));
strarray_add(comp_args, "-D__MSVCRT__");
}
- strarray_add(comp_args, "-I" INCLUDEDIR );
- strarray_add(comp_args, gcc_defs ? "-isystem" INCLUDEDIR "/wine/windows" : "-I" INCLUDEDIR "/wine/windows" );
+ strarray_add(comp_args, strmake( "-I%s%s", root, INCLUDEDIR ));
+ strarray_add(comp_args, strmake( "%s%s%s/wine/windows",
+ gcc_defs ? "-isystem" : "-I", root, INCLUDEDIR ));
}
else if (opts->wine_objdir)
strarray_add(comp_args, strmake("-I%s/include", opts->wine_objdir) );
@@ -1418,8 +1427,9 @@ int main(int argc, char **argv)
next_is_arg = 1;
break;
case '-':
- if (strcmp("--param", argv[i]) == 0)
- next_is_arg = 1;
+ next_is_arg = (strcmp("--param", argv[i]) == 0 ||
+ strcmp("--sysroot", argv[i]) == 0 ||
+ strcmp("--lib-suffix", argv[i]) == 0);
break;
}
if (next_is_arg)
@@ -1496,6 +1506,9 @@ int main(int argc, char **argv)
else if (!strcmp("-fno-PIC", argv[i]) || !strcmp("-fno-pic", argv[i]))
opts.pic = 0;
break;
+ case 'i':
+ if (!strcmp( "-isysroot", argv[i] )) opts.isysroot = argv[i + 1];
+ break;
case 'l':
strarray_add(opts.files, strmake("-l%s", option_arg));
break;
@@ -1637,16 +1650,16 @@ int main(int argc, char **argv)
case '-':
if (strcmp("-static", argv[i]+1) == 0)
linking = -1;
- else if (!strncmp("--sysroot", argv[i], 9) && opts.wine_objdir)
+ else if (!strncmp("--sysroot", argv[i], 9))
{
- if (argv[i][9] == '=') opts.wine_objdir = argv[i] + 10;
- else opts.wine_objdir = argv[++i];
- raw_compiler_arg = raw_linker_arg = 0;
+ if (argv[i][9] == '=') opts.sysroot = argv[i] + 10;
+ else opts.sysroot = argv[i + 1];
+ if (opts.wine_objdir) raw_compiler_arg = raw_linker_arg = 0;
}
else if (!strncmp("--lib-suffix", argv[i], 12) && opts.wine_objdir)
{
if (argv[i][12] == '=') opts.lib_suffix = argv[i] + 13;
- else opts.lib_suffix = argv[++i];
+ else opts.lib_suffix = argv[i + 1];
raw_compiler_arg = raw_linker_arg = 0;
}
break;
@@ -1675,6 +1688,7 @@ int main(int argc, char **argv)
}
}
+ if (opts.wine_objdir && opts.sysroot) opts.wine_objdir = opts.sysroot;
if (opts.processor == proc_cpp) linking = 0;
if (linking == -1) error("Static linking is not supported\n");
More information about the wine-cvs
mailing list