Alexandre Julliard : makefiles: Install PE import libraries in the architecture-specific directory.

Alexandre Julliard julliard at winehq.org
Mon Apr 26 15:51:32 CDT 2021


Module: wine
Branch: master
Commit: ee81814f2baa78975ff4ecb1522b0fb74620442b
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=ee81814f2baa78975ff4ecb1522b0fb74620442b

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Apr 26 16:40:00 2021 +0200

makefiles: Install PE import libraries in the architecture-specific directory.

Based on a patch by Jacek Caban.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tools/makedep.c | 56 +++++++++++++-------------------------------------------
 1 file changed, 13 insertions(+), 43 deletions(-)

diff --git a/tools/makedep.c b/tools/makedep.c
index c54eda772db..a6d525a92e8 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -148,7 +148,6 @@ static struct strarray enable_tests;
 static struct strarray cmdline_vars;
 static struct strarray subdirs;
 static struct strarray disabled_dirs;
-static struct strarray cross_import_libs;
 static struct strarray delay_import_libs;
 static struct strarray top_install_lib;
 static struct strarray top_install_dev;
@@ -2128,26 +2127,6 @@ static struct makefile *get_parent_makefile( struct makefile *make )
 }
 
 
-/*******************************************************************
- *         needs_cross_lib
- */
-static int needs_cross_lib( const struct makefile *make )
-{
-    const char *name;
-    if (!crosstarget) return 0;
-    if (make->importlib) name = make->importlib;
-    else if (make->staticlib)
-    {
-        name = replace_extension( make->staticlib, ".a", "" );
-        if (!strncmp( name, "lib", 3 )) name += 3;
-    }
-    else return 0;
-    if (strarray_exists( &cross_import_libs, name )) return 1;
-    if (delay_load_flag && strarray_exists( &delay_import_libs, name )) return 1;
-    return 0;
-}
-
-
 /*******************************************************************
  *         needs_delay_lib
  */
@@ -2683,8 +2662,8 @@ static struct strarray output_importlib_symlinks( const struct makefile *make )
     int i, count = 0;
 
     ext[count++] = (*dll_ext && !make->implib_objs.count) ? "def" : "a";
+    if (crosstarget) ext[count++] = "cross.a";
     if (needs_delay_lib( make )) ext[count++] = "delay.a";
-    if (needs_cross_lib( make )) ext[count++] = "cross.a";
 
     for (i = 0; i < count; i++)
     {
@@ -3125,10 +3104,8 @@ static void output_source_default( struct makefile *make, struct incl_file *sour
                       find_src_file( make, replace_extension( source->name, ".c", ".spec" )));
     int need_cross = (crosstarget &&
                       !(source->file->flags & FLAG_C_UNIX) &&
-                      (make->is_cross ||
-                       ((source->file->flags & FLAG_C_IMPLIB) &&
-                        (needs_cross_lib( make ) || needs_delay_lib( make ))) ||
-                       (make->staticlib && needs_cross_lib( make ))));
+                      (make->is_cross || (make->module && make->staticlib) ||
+                       (source->file->flags & FLAG_C_IMPLIB)));
     int need_obj = ((*dll_ext || !(source->file->flags & FLAG_C_UNIX)) &&
                     (!need_cross ||
                      (source->file->flags & FLAG_C_IMPLIB) ||
@@ -3449,14 +3426,12 @@ static void output_module( struct makefile *make )
                               strmake( "lib%s.a", make->importlib ),
                               strmake( "d$(dlldir)/lib%s.a", make->importlib ));
         }
-        if (crosstarget && (needs_cross_lib( make ) || needs_delay_lib( make )))
+        if (crosstarget)
         {
             struct strarray cross_files = strarray_replace_extension( &make->implib_objs, ".o", ".cross.o" );
-            if (needs_cross_lib( make ))
-            {
-                strarray_add( &make->clean_files, strmake( "lib%s.cross.a", make->importlib ));
-                output_filename( strmake( "%s.cross.a", importlib_path ));
-            }
+
+            strarray_add( &make->clean_files, strmake( "lib%s.cross.a", make->importlib ));
+            output_filename( strmake( "%s.cross.a", importlib_path ));
             if (needs_delay_lib( make ))
             {
                 strarray_add( &make->clean_files, strmake( "lib%s.delay.a", make->importlib ));
@@ -3472,6 +3447,9 @@ static void output_module( struct makefile *make )
             output_filename( spec_file );
             output_filenames_obj_dir( make, cross_files );
             output( "\n" );
+            add_install_rule( make, make->importlib,
+                              strmake( "lib%s.cross.a", make->importlib ),
+                              strmake( "d%s/lib%s.a", pe_dir, make->importlib ));
         }
         if (needs_implib_symlink( make ))
             strarray_addall( &top_makefile->clean_files, output_importlib_symlinks( make ));
@@ -3502,7 +3480,7 @@ static void output_static_lib( struct makefile *make )
     output( " && %s $@\n", ranlib );
     add_install_rule( make, make->staticlib, make->staticlib,
                       strmake( "d$(dlldir)/%s", make->staticlib ));
-    if (needs_cross_lib( make ))
+    if (crosstarget && make->module)
     {
         char *name = replace_extension( make->staticlib, ".a", ".cross.a" );
 
@@ -3514,6 +3492,8 @@ static void output_static_lib( struct makefile *make )
                 tools_path( make, "winebuild" ), crosstarget );
         output_filenames_obj_dir( make, make->crossobj_files );
         output( "\n" );
+        add_install_rule( make, make->staticlib, name,
+                          strmake( "d%s/%s", pe_dir, make->staticlib ));
     }
 }
 
@@ -4301,16 +4281,6 @@ static void load_sources( struct makefile *make )
 
     make->is_cross = crosstarget && make->use_msvcrt;
 
-    if (make->is_cross)
-    {
-        strarray_addall_uniq( &cross_import_libs, make->imports );
-        strarray_addall_uniq( &cross_import_libs, make->extra_imports );
-        if (make->is_win16) strarray_add_uniq( &cross_import_libs, "kernel" );
-        strarray_add_uniq( &cross_import_libs, "winecrt0" );
-        strarray_add_uniq( &cross_import_libs, "kernel32" );
-        strarray_add_uniq( &cross_import_libs, "ntdll" );
-    }
-
     if (!*dll_ext || make->is_cross)
         for (i = 0; i < make->delayimports.count; i++)
             strarray_add_uniq( &delay_import_libs, get_base_name( make->delayimports.str[i] ));




More information about the wine-cvs mailing list