Module: wine Branch: master Commit: 2435357d60d2236fea5f8ccd529a5130c65591dc URL: https://source.winehq.org/git/wine.git/?a=commit;h=2435357d60d2236fea5f8ccd5...
Author: Alexandre Julliard julliard@winehq.org Date: Sat Feb 17 11:46:25 2018 +0100
makefiles: Add support for creating helper dlls in tests.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
tools/make_makefiles | 4 +++ tools/makedep.c | 98 +++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 89 insertions(+), 13 deletions(-)
diff --git a/tools/make_makefiles b/tools/make_makefiles index a3f19d8..0cf2344 100755 --- a/tools/make_makefiles +++ b/tools/make_makefiles @@ -431,6 +431,10 @@ sub assign_sources_to_makefiles(@) { push @{${$make}{"=IN_SRCS"}}, $name; } + elsif ($name =~ /.spec$/) + { + next unless defined ${$make}{"TESTDLL"}; + } else { next; diff --git a/tools/makedep.c b/tools/makedep.c index 0db2733..0083661 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -2685,20 +2685,96 @@ static void output_source_in( struct makefile *make, struct incl_file *source, c
/******************************************************************* + * output_source_spec + */ +static void output_source_spec( struct makefile *make, struct incl_file *source, const char *obj ) +{ + struct strarray imports = get_expanded_file_local_var( make, obj, "IMPORTS" ); + struct strarray all_libs, dep_libs = empty_strarray; + + if (!imports.count) imports = make->imports; + all_libs = add_import_libs( make, &dep_libs, imports, 0 ); + add_import_libs( make, &dep_libs, get_default_imports( make ), 0 ); /* dependencies only */ + strarray_addall( &all_libs, libs ); + + strarray_add( &make->clean_files, strmake( "%s.dll%s", obj, dll_ext )); + strarray_add( &make->object_files, strmake( "%s.res", obj )); + output( "%s.res: %s.dll%s\n", obj_dir_path( make, obj ), obj_dir_path( make, obj ), dll_ext ); + output( "\techo "%s.dll TESTDLL \"%s.dll%s\"" | %s -o $@\n", obj, + obj_dir_path( make, obj ), dll_ext, tools_path( make, "wrc" )); + + output( "%s.dll%s:", obj_dir_path( make, obj ), dll_ext ); + output_filename( source->filename ); + output_filename( strmake( "%s.o", obj_dir_path( make, obj ))); + output_filenames( dep_libs ); + output_filename( tools_path( make, "winebuild" )); + output_filename( tools_path( make, "winegcc" )); + output( "\n" ); + output( "\t%s -s -o $@", tools_path( make, "winegcc" )); + output_filename( strmake( "-B%s", tools_dir_path( make, "winebuild" ))); + if (tools_dir) output_filename( strmake( "--sysroot=%s", top_obj_dir_path( make, "" ))); + output_filenames( target_flags ); + output_filenames( unwind_flags ); + output_filenames( make->extradllflags ); + output_filename( "-shared" ); + output_filename( source->filename ); + output_filename( strmake( "%s.o", obj_dir_path( make, obj ))); + output_filenames( all_libs ); + output_filename( "$(LDFLAGS)" ); + output( "\n" ); + + if (crosstarget) + { + dep_libs = empty_strarray; + all_libs = add_import_libs( make, &dep_libs, imports, 1 ); + add_import_libs( make, &dep_libs, get_default_imports( make ), 1 ); /* dependencies only */ + strarray_addall( &all_libs, libs ); + + strarray_add( &make->clean_files, strmake( "%s.dll", obj )); + strarray_add( &make->crossobj_files, strmake( "%s.cross.res", obj )); + output( "%s.cross.res: %s.dll\n", obj_dir_path( make, obj ), obj_dir_path( make, obj ) ); + output( "\techo "%s.dll TESTDLL \"%s.dll\"" | %s -o $@\n", obj, + obj_dir_path( make, obj ), tools_path( make, "wrc" )); + + output( "%s.dll:", obj_dir_path( make, obj )); + output_filename( source->filename ); + output_filename( strmake( "%s.cross.o", obj_dir_path( make, obj ))); + output_filenames( dep_libs ); + output_filename( tools_path( make, "winebuild" )); + output_filename( tools_path( make, "winegcc" )); + output( "\n" ); + output( "\t%s -s -o $@ -b %s", tools_path( make, "winegcc" ), crosstarget ); + output_filename( strmake( "-B%s", tools_dir_path( make, "winebuild" ))); + if (tools_dir) output_filename( strmake( "--sysroot=%s", top_obj_dir_path( make, "" ))); + output_filename( "--lib-suffix=.cross.a" ); + output_filename( "-shared" ); + output_filename( source->filename ); + output_filename( strmake( "%s.cross.o", obj_dir_path( make, obj ))); + output_filenames( all_libs ); + output_filename( "$(LDFLAGS)" ); + output( "\n" ); + } +} + + +/******************************************************************* * output_source_default */ static void output_source_default( struct makefile *make, struct incl_file *source, const char *obj ) { struct strarray extradefs = get_expanded_file_local_var( make, obj, "EXTRADEFS" ); - int need_cross = make->testdll || - (source->file->flags & FLAG_C_IMPLIB) || - (make->module && make->staticlib); + int is_dll_src = (make->testdll && + strendswith( source->name, ".c" ) && + find_src_file( make, replace_extension( source->name, ".c", ".spec" ))); + int need_cross = (make->testdll || + (source->file->flags & FLAG_C_IMPLIB) || + (make->module && make->staticlib));
if ((source->file->flags & FLAG_GENERATED) && (!make->testdll || !strendswith( source->filename, "testlist.c" ))) strarray_add( &make->clean_files, source->filename ); if (source->file->flags & FLAG_C_IMPLIB) strarray_add( &make->implib_objs, strmake( "%s.o", obj )); - strarray_add( &make->object_files, strmake( "%s.o", obj )); + strarray_add( is_dll_src ? &make->clean_files : &make->object_files, strmake( "%s.o", obj )); output( "%s.o: %s\n", obj_dir_path( make, obj ), source->filename ); output( "\t$(CC) -c -o $@ %s", source->filename ); output_filenames( make->include_args ); @@ -2715,7 +2791,7 @@ static void output_source_default( struct makefile *make, struct incl_file *sour output( "\n" ); if (crosstarget && need_cross) { - strarray_add( &make->crossobj_files, strmake( "%s.cross.o", obj )); + strarray_add( is_dll_src ? &make->clean_files : &make->crossobj_files, strmake( "%s.cross.o", obj )); output( "%s.cross.o: %s\n", obj_dir_path( make, obj ), source->filename ); output( "\t$(CROSSCC) -c -o $@ %s", source->filename ); output_filenames( make->include_args ); @@ -2730,7 +2806,7 @@ static void output_source_default( struct makefile *make, struct incl_file *sour if (strendswith( source->name, ".c" ) && !(source->file->flags & FLAG_GENERATED)) { strarray_add( &make->c2man_files, source->filename ); - if (make->testdll) + if (make->testdll && !is_dll_src) { strarray_add( &make->ok_files, strmake( "%s.ok", obj )); output( "%s.ok:\n", obj_dir_path( make, obj )); @@ -2770,6 +2846,7 @@ static const struct { "po", output_source_po }, { "in", output_source_in }, { "x", output_source_x }, + { "spec", output_source_spec }, { NULL, output_source_default } };
@@ -3453,15 +3530,10 @@ static void output_testlist( const struct makefile *make ) { const char *dest = base_dir_path( make, "testlist.c" ); struct strarray files = empty_strarray; - struct incl_file *source; unsigned int i;
- LIST_FOR_EACH_ENTRY( source, &make->sources, struct incl_file, entry ) - { - if (source->file->flags & FLAG_GENERATED) continue; - if (!strendswith( source->name, ".c" )) continue; - strarray_add( &files, replace_extension( source->name, ".c", "" )); - } + for (i = 0; i < make->ok_files.count; i++) + strarray_add( &files, replace_extension( make->ok_files.str[i], ".ok", "" ));
output_file = create_temp_file( dest );