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