Alexandre Julliard : makedep: Use a separate variable for cross-compiled importlib objects.

Alexandre Julliard julliard at winehq.org
Fri Nov 19 15:45:31 CST 2021


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Nov 19 17:07:55 2021 +0100

makedep: Use a separate variable for cross-compiled importlib objects.

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

---

 tools/makedep.c | 104 +++++++++++++++++++++++++-------------------------------
 1 file changed, 47 insertions(+), 57 deletions(-)

diff --git a/tools/makedep.c b/tools/makedep.c
index e757efdb121..2de02aab411 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -217,7 +217,8 @@ struct makefile
     struct strarray c2man_files;
     struct strarray debug_files;
     struct strarray dlldata_files;
-    struct strarray implib_objs;
+    struct strarray implib_files;
+    struct strarray crossimplib_files;
     struct strarray all_targets;
     struct strarray phony_targets;
     struct strarray dependencies;
@@ -495,22 +496,6 @@ static char *replace_filename( const char *path, const char *name )
 }
 
 
-/*******************************************************************
- *         strarray_replace_extension
- */
-static struct strarray strarray_replace_extension( const struct strarray *array,
-                                                   const char *old_ext, const char *new_ext )
-{
-    unsigned int i;
-    struct strarray ret;
-
-    ret.count = ret.size = array->count;
-    ret.str = xmalloc( sizeof(ret.str[0]) * ret.size );
-    for (i = 0; i < array->count; i++) ret.str[i] = replace_extension( array->str[i], old_ext, new_ext );
-    return ret;
-}
-
-
 /*******************************************************************
  *         replace_substr
  */
@@ -3021,13 +3006,14 @@ static void output_source_default( struct makefile *make, struct incl_file *sour
     if ((source->file->flags & FLAG_GENERATED) &&
         (!make->testdll || !strendswith( source->filename, "testlist.c" )))
         strarray_add( &make->clean_files, source->basename );
-    if (source->file->flags & FLAG_C_IMPLIB) strarray_add( &make->implib_objs, strmake( "%s.o", obj ));
 
     if (need_obj)
     {
         if ((source->file->flags & FLAG_C_UNIX) && *dll_ext)
             strarray_add( &make->unixobj_files, strmake( "%s.o", obj ));
-        else if (!is_dll_src && !(source->file->flags & FLAG_C_IMPLIB))
+        else if (source->file->flags & FLAG_C_IMPLIB)
+            strarray_add( &make->implib_files, strmake( "%s.o", obj ));
+        else if (!is_dll_src)
             strarray_add( &make->object_files, strmake( "%s.o", obj ));
         else
             strarray_add( &make->clean_files, strmake( "%s.o", obj ));
@@ -3052,7 +3038,9 @@ static void output_source_default( struct makefile *make, struct incl_file *sour
     }
     if (need_cross)
     {
-        if (!is_dll_src && !(source->file->flags & FLAG_C_IMPLIB))
+        if (source->file->flags & FLAG_C_IMPLIB)
+            strarray_add( &make->crossimplib_files, strmake( "%s.cross.o", obj ));
+        else if (!is_dll_src)
             strarray_add( &make->crossobj_files, strmake( "%s.cross.o", obj ));
         else
             strarray_add( &make->clean_files, strmake( "%s.cross.o", obj ));
@@ -3305,54 +3293,54 @@ static void output_import_lib( struct makefile *make )
     char *spec_file = src_dir_path( make, replace_extension( make->module, ".dll", ".spec" ));
     char *importlib_path = obj_dir_path( make, strmake( "lib%s", make->importlib ));
 
-        strarray_add( &make->clean_files, strmake( "lib%s.a", make->importlib ));
-        if (!*dll_ext && needs_delay_lib( make ))
+    strarray_add( &make->clean_files, strmake( "lib%s.a", make->importlib ));
+    if (!*dll_ext && needs_delay_lib( make ))
+    {
+        strarray_add( &make->clean_files, strmake( "lib%s.delay.a", make->importlib ));
+        output( "%s.delay.a ", importlib_path );
+    }
+    output( "%s.a: %s %s", importlib_path, tools_path( make, "winebuild" ), spec_file );
+    output_filenames_obj_dir( make, make->implib_files );
+    output( "\n" );
+    output( "\t%s%s -w --implib -o $@", cmd_prefix( "BUILD" ), tools_path( make, "winebuild" ) );
+    output_filenames( target_flags );
+    if (make->is_win16) output_filename( "-m16" );
+    output_filename( "--export" );
+    output_filename( spec_file );
+    output_filenames_obj_dir( make, make->implib_files );
+    output( "\n" );
+    add_install_rule( make, make->importlib,
+                      strmake( "lib%s.a", make->importlib ),
+                      strmake( "d%s/lib%s.a", so_dir, make->importlib ));
+
+    if (crosstarget)
+    {
+        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 ));
-            output( "%s.delay.a ", importlib_path );
+            output_filename( strmake( "%s.delay.a", importlib_path ));
         }
-        output( "%s.a: %s %s", importlib_path, tools_path( make, "winebuild" ), spec_file );
-        output_filenames_obj_dir( make, make->implib_objs );
+        output( ": %s %s", tools_path( make, "winebuild" ), spec_file );
+        output_filenames_obj_dir( make, make->crossimplib_files );
         output( "\n" );
-        output( "\t%s%s -w --implib -o $@", cmd_prefix( "BUILD" ), tools_path( make, "winebuild" ) );
-        output_filenames( target_flags );
+        output( "\t%s%s -b %s -w --implib -o $@", cmd_prefix( "BUILD" ),
+                tools_path( make, "winebuild" ), crosstarget );
         if (make->is_win16) output_filename( "-m16" );
         output_filename( "--export" );
         output_filename( spec_file );
-        output_filenames_obj_dir( make, make->implib_objs );
+        output_filenames_obj_dir( make, make->crossimplib_files );
         output( "\n" );
         add_install_rule( make, make->importlib,
-                          strmake( "lib%s.a", make->importlib ),
-                          strmake( "d%s/lib%s.a", so_dir, 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 ));
+}
 
-        if (crosstarget)
-        {
-            struct strarray cross_files = strarray_replace_extension( &make->implib_objs, ".o", ".cross.o" );
 
-            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 ));
-                output_filename( strmake( "%s.delay.a", importlib_path ));
-            }
-            output( ": %s %s", tools_path( make, "winebuild" ), spec_file );
-            output_filenames_obj_dir( make, cross_files );
-            output( "\n" );
-            output( "\t%s%s -b %s -w --implib -o $@", cmd_prefix( "BUILD" ),
-                    tools_path( make, "winebuild" ), crosstarget );
-            if (make->is_win16) output_filename( "-m16" );
-            output_filename( "--export" );
-            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 ));
-    }
 /*******************************************************************
  *         output_unix_lib
  */
@@ -3793,6 +3781,8 @@ static void output_sources( struct makefile *make )
 
     strarray_addall( &make->clean_files, make->object_files );
     strarray_addall( &make->clean_files, make->crossobj_files );
+    strarray_addall( &make->clean_files, make->implib_files );
+    strarray_addall( &make->clean_files, make->crossimplib_files );
     strarray_addall( &make->clean_files, make->unixobj_files );
     strarray_addall( &make->clean_files, make->res_files );
     strarray_addall( &make->clean_files, make->pot_files );




More information about the wine-cvs mailing list