From fe946f253ad8ef8ec2400aaf1d71799ca2a99567 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 11 Nov 2013 11:23:38 +0100 Subject: [PATCH] makefiles: Add a makedep pragma to mark source files that are parts of the import library. --- Make.rules.in | 11 +---------- dlls/dinput/data_formats.c | 4 ++++ tools/make_makefiles | 25 +++++++++++++++++++------ tools/makedep.c | 9 +++++++++ 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/Make.rules.in b/Make.rules.in index ffa6cc39ab8..d9c9827f3d4 100644 --- a/Make.rules.in +++ b/Make.rules.in @@ -32,16 +32,7 @@ ALLCROSSCFLAGS = $(INCLUDES) $(DEFS) -DWINE_CROSSTEST $(CPPFLAGS) $(CFLAGS) # Implicit rules -.SUFFIXES: .ok .man.in .man .cross.o .po .mo @MAINTAINER_MODE@ .sfd .ttf .svg .ico .bmp - -.c.o: - $(CC) -c $(ALLCFLAGS) -o $@ $< - -.m.o: - $(CC) -c $(ALLCFLAGS) -o $@ $< - -.c.cross.o: - $(CROSSCC) -c $(INCLUDES) $(DEFS) -DWINE_CROSSTEST $(CPPFLAGS) $(CFLAGS) -o $@ $< +.SUFFIXES: .ok .man.in .man .po .mo @MAINTAINER_MODE@ .sfd .ttf .svg .ico .bmp .c.ok: $(RUNTEST) $(RUNTESTFLAGS) $< && touch $@ diff --git a/dlls/dinput/data_formats.c b/dlls/dinput/data_formats.c index 1f25556665f..5fac7b7a089 100644 --- a/dlls/dinput/data_formats.c +++ b/dlls/dinput/data_formats.c @@ -16,6 +16,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#if 0 +#pragma makedep implib +#endif + #include #include "windef.h" diff --git a/tools/make_makefiles b/tools/make_makefiles index 048dfe36106..b61d403c8dd 100755 --- a/tools/make_makefiles +++ b/tools/make_makefiles @@ -335,9 +335,7 @@ sub parse_makefile($) my $var = $1; my @list = split(/\s+/, $2); $make{$var} = \@list; - ${$make{"=flags"}}{"mc"} = 1 if $var eq "MC_SRCS"; - ${$make{"=flags"}}{"staticimplib"} = 1 if $var eq "IMPLIB_SRCS"; - ${$make{"=flags"}}{"clean"} = 1 if $var =~ /IDL_[CHIPRS]_SRCS|IDL_TLB_SRCS|PROGRAMS/; + ${$make{"=flags"}}{"clean"} = 1 if $var eq "PROGRAMS"; next; } if (/(install-lib|install-dev|clean)\s*:/) @@ -427,12 +425,20 @@ sub assign_sources_to_makefiles(@) } else { - if ($name =~ /\.c$/) { push @{${$make}{"=C_SRCS"}}, $name; } - elsif ($name =~ /\.m$/) { push @{${$make}{"=OBJC_SRCS"}}, $name; } + if ($name =~ /\.m$/) { push @{${$make}{"=OBJC_SRCS"}}, $name; } elsif ($name =~ /\.l$/) { push @{${$make}{"=LEX_SRCS"}}, $name; } elsif ($name =~ /\.y$/) { push @{${$make}{"=BISON_SRCS"}}, $name; } - elsif ($name =~ /\.mc$/) { push @{${$make}{"=MC_SRCS"}}, $name; } elsif ($name =~ /\.svg$/) { push @{${$make}{"=SVG_SRCS"}}, $name; } + elsif ($name =~ /\.c$/) + { + my %flags = get_makedep_flags( $file ); + if (defined $flags{"implib"}) + { + push @{${$make}{"=IMPLIB_SRCS"}}, $name; + ${${$make}{"=flags"}}{"staticimplib"} = 1; + } + push @{${$make}{"=C_SRCS"}}, $name; + } elsif ($name =~ /\.rc$/) { my %flags = get_makedep_flags( $file ); @@ -443,6 +449,11 @@ sub assign_sources_to_makefiles(@) } push @{${$make}{"=RC_SRCS"}}, $name; } + elsif ($name =~ /\.mc$/) + { + push @{${$make}{"=MC_SRCS"}}, $name; + ${${$make}{"=flags"}}{"mc"} = 1; + } elsif ($name =~ /\.idl$/) { my %flags = get_makedep_flags( $file ); @@ -453,6 +464,7 @@ sub assign_sources_to_makefiles(@) push @{${$make}{"=IDL_R_SRCS"}}, $name if defined $flags{"register"}; push @{${$make}{"=IDL_S_SRCS"}}, $name if defined $flags{"server"}; push @{${$make}{"=IDL_TLB_SRCS"}}, $name if defined $flags{"typelib"}; + ${${$make}{"=flags"}}{"clean"} = 1; } } } @@ -567,6 +579,7 @@ sub update_makefiles(@) replace_makefile_variable( $file, "IDL_S_SRCS" ); replace_makefile_variable( $file, "IDL_TLB_SRCS" ); replace_makefile_variable( $file, "XTEMPLATE_SRCS" ); + replace_makefile_variable( $file, "IMPLIB_SRCS" ); replace_makefile_variable( $file, "SRCDIR_INCLUDES" ); } diff --git a/tools/makedep.c b/tools/makedep.c index aef0f3ecec3..945ba26e1b2 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -59,6 +59,7 @@ struct incl_file #define FLAG_IDL_TYPELIB 0x0040 /* generates a typelib (.tlb) file */ #define FLAG_IDL_HEADER 0x0080 /* generates a header (.h) file */ #define FLAG_RC_PO 0x0100 /* rc file contains translations */ +#define FLAG_C_IMPLIB 0x0200 /* file is part of an import library */ static const struct { @@ -747,6 +748,7 @@ static void parse_pragma_directive( struct incl_file *source, char *str ) { if (!strcmp( flag, "po" )) source->flags |= FLAG_RC_PO; } + else if (!strcmp( flag, "implib" )) source->flags |= FLAG_C_IMPLIB; } } @@ -1232,8 +1234,15 @@ static void output_sources(void) else output( "\t$(CC) -c $(ALLCFLAGS) -o $@ %s\n", source->filename ); } + if (source->flags & FLAG_C_IMPLIB) + { + strarray_add( &clean_files, strmake( "%s.cross.o", obj )); + output( "%s.cross.o: %s\n", obj, source->filename ); + output( "\t$(CROSSCC) -c $(ALLCROSSCFLAGS) -o $@ %s\n", source->filename ); + } LIST_FOR_EACH_ENTRY( ext, &object_extensions, struct object_extension, entry ) column += output( "%s.%s ", obj, ext->extension ); + if (source->flags & FLAG_C_IMPLIB) column += output( "%s.cross.o", obj ); column += output( ":" ); } free( obj ); -- 2.11.4.GIT