[PATCH v3 1/3] winebuild: select all __wine_spec_exe* entry inside winebuild

Kevin Puetz PuetzKevinA at JohnDeere.com
Wed Nov 25 13:00:26 CST 2020


winegcc now overrides --entry only when it applies to any compiler
(e.g. kernel drivers or msvcrt) but leaves spec details to winebuild.

It therefore now forwards -municode so winebuild will know which to use.

Signed-off-by: Kevin Puetz <PuetzKevinA at JohnDeere.com>
---
 tools/winebuild/build.h | 1 +
 tools/winebuild/main.c  | 9 +++++++--
 tools/winegcc/winegcc.c | 4 ++--
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/tools/winebuild/build.h b/tools/winebuild/build.h
index 03715af9563..26a0539c500 100644
--- a/tools/winebuild/build.h
+++ b/tools/winebuild/build.h
@@ -136,6 +136,7 @@ typedef struct
     int              subsystem;          /* subsystem id */
     int              subsystem_major;    /* subsystem version major number */
     int              subsystem_minor;    /* subsystem version minor number */
+    int              unicode_app;        /* default to unicode entry point */
     ORDDEF          *entry_points;       /* dll entry points */
     ORDDEF         **names;              /* array of entry point names (points into entry_points) */
     ORDDEF         **ordinals;           /* array of dll ordinals (points into entry_points) */
diff --git a/tools/winebuild/main.c b/tools/winebuild/main.c
index 0e5e1627dda..b1e6d115717 100644
--- a/tools/winebuild/main.c
+++ b/tools/winebuild/main.c
@@ -396,8 +396,12 @@ static const char *get_default_entry_point( const DLLSPEC *spec )
 {
     if (spec->characteristics & IMAGE_FILE_DLL) return "DllMain";
     if (spec->subsystem == IMAGE_SUBSYSTEM_NATIVE) return "DriverEntry";
-    if (spec->type == SPEC_WIN16) return "__wine_spec_exe16_entry";
-    return "__wine_spec_exe_entry";
+    if (spec->type == SPEC_WIN16)
+        return "__wine_spec_exe16_entry";
+    else if (spec->unicode_app)
+        return "__wine_spec_exe_wentry";
+    else
+        return "__wine_spec_exe_entry";
 }
 
 /* parse options from the argv array and remove all the recognized ones */
@@ -448,6 +452,7 @@ static char **parse_options( int argc, char **argv, DLLSPEC *spec )
             else if (!strcmp( optarg, "thumb" )) thumb_mode = 1;
             else if (!strcmp( optarg, "no-cygwin" )) use_msvcrt = 1;
             else if (!strcmp( optarg, "unix" )) unix_lib = 1;
+            else if (!strcmp( optarg, "unicode" )) spec->unicode_app = 1;
             else if (!strncmp( optarg, "cpu=", 4 )) cpu_option = xstrdup( optarg + 4 );
             else if (!strncmp( optarg, "fpu=", 4 )) fpu_option = xstrdup( optarg + 4 );
             else if (!strncmp( optarg, "arch=", 5 )) arch_option = xstrdup( optarg + 5 );
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c
index 9268a5dfd1d..cef0832455c 100644
--- a/tools/winegcc/winegcc.c
+++ b/tools/winegcc/winegcc.c
@@ -1245,8 +1245,6 @@ static void build(struct options* opts)
             entry_point = (is_pe && opts->target_cpu == CPU_x86) ? "DriverEntry at 8" : "DriverEntry";
         else if (opts->use_msvcrt && !opts->shared && !opts->win16_app)
             entry_point = opts->unicode_app ? "wmainCRTStartup" : "mainCRTStartup";
-        else if (!is_pe && !opts->shared && opts->unicode_app)
-            entry_point = "__wine_spec_exe_wentry";
     }
     else entry_point = opts->entry_point;
 
@@ -1258,6 +1256,8 @@ static void build(struct options* opts)
     spec_o_name = get_temp_file(output_name, ".spec.o");
     if (opts->force_pointer_size)
         strarray_add(spec_args, strmake("-m%u", 8 * opts->force_pointer_size ));
+    if(opts->unicode_app)
+        strarray_add(spec_args, "-municode");
     strarray_add(spec_args, "-D_REENTRANT");
     if (opts->pic && !is_pe) strarray_add(spec_args, "-fPIC");
     strarray_add(spec_args, opts->shared ? "--dll" : "--exe");
-- 
2.29.2




More information about the wine-devel mailing list