From 1662af11a431bee91ece23c331389530379bea4d Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 16 Feb 2022 16:08:05 +0100 Subject: [PATCH] winegcc: Add support for winebuild --data-only option. Signed-off-by: Alexandre Julliard --- tools/winegcc/winegcc.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 9bee77e3b66..bcec3916843 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -171,6 +171,7 @@ struct options int nostartfiles; int nodefaultlibs; int noshortwchar; + int data_only; int unix_lib; int gui_app; int unicode_app; @@ -1091,6 +1092,28 @@ static const char *build_spec_obj( struct options *opts, const char *spec_file, return spec_o_name; } +/* run winebuild to generate a data-only library */ +static void build_data_lib( struct options *opts, const char *spec_file, const char *output_file, struct strarray files ) +{ + unsigned int i; + struct strarray spec_args = get_winebuild_args( opts ); + + strarray_add(&spec_args, opts->shared ? "--dll" : "--exe"); + strarray_add(&spec_args, "-o"); + strarray_add(&spec_args, output_file); + if (spec_file) + { + strarray_add(&spec_args, "-E"); + strarray_add(&spec_args, spec_file); + } + + /* add resource files */ + for (i = 0; i < files.count; i++) + if (files.str[i][1] == 'r') strarray_add(&spec_args, files.str[i]); + + spawn(opts->prefix, spec_args, 0); +} + static void build(struct options* opts) { struct strarray lib_dirs = empty_strarray; @@ -1246,6 +1269,11 @@ static void build(struct options* opts) else entry_point = opts->entry_point; /* run winebuild to generate the .spec.o file */ + if (opts->data_only) + { + build_data_lib( opts, spec_file, output_file, files ); + return; + } if (spec_file || !opts->unix_lib) spec_o_name = build_spec_obj( opts, spec_file, output_file, files, lib_dirs, entry_point ); @@ -1891,6 +1919,7 @@ int main(int argc, char **argv) struct strarray Wb = strarray_fromstring(opts.args.str[i] + 4, ","); for (j = 0; j < Wb.count; j++) { + if (!strcmp(Wb.str[j], "--data-only")) opts.data_only = 1; if (!strcmp(Wb.str[j], "--fake-module")) opts.fake_module = 1; else strarray_add( &opts.winebuild_args, Wb.str[j] ); }