Module: wine Branch: master Commit: 80d12c358e02760bc20d15a302aba2299cc9d6df URL: http://source.winehq.org/git/wine.git/?a=commit;h=80d12c358e02760bc20d15a302...
Author: Alexandre Julliard julliard@winehq.org Date: Sat Jan 1 17:49:38 2011 +0100
makefiles: Automatically update the EXTRASUBDIRS variable in make_makefiles.
---
Makefile.in | 5 ++- include/Makefile.in | 6 ++- tools/make_makefiles | 113 +++++++++++++++++++++++++------------------------- 3 files changed, 65 insertions(+), 59 deletions(-)
diff --git a/Makefile.in b/Makefile.in index b1e790e..b1c0804 100644 --- a/Makefile.in +++ b/Makefile.in @@ -19,7 +19,10 @@ # xmlpages: compile xml source for the Wine API Guide
# Sub-directories that don't have a makefile -EXTRASUBDIRS = dlls libs programs +EXTRASUBDIRS = \ + dlls \ + libs \ + programs
# Destination directories for make install INSTALLDIRS = $(DESTDIR)$(bindir) diff --git a/include/Makefile.in b/include/Makefile.in index d31bd74..0257b9b 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -554,7 +554,11 @@ SRCDIR_INCLUDES = \ xmldsodid.h \ zmouse.h
-EXTRASUBDIRS = ddk msvcrt msvcrt/sys wine +EXTRASUBDIRS = \ + ddk \ + msvcrt \ + msvcrt/sys \ + wine
INSTALLDIRS = \ $(DESTDIR)$(includedir)/windows/ddk \ diff --git a/tools/make_makefiles b/tools/make_makefiles index 673c4cf..bee12f8 100755 --- a/tools/make_makefiles +++ b/tools/make_makefiles @@ -119,6 +119,8 @@ my @ignore_srcs = ( [ 'IDL_I_SRCS', '.idl', '_i.c' ], [ 'IDL_P_SRCS', '.idl', '_p.c' ], [ 'IDL_S_SRCS', '.idl', '_s.c' ], + [ 'PUBLIC_IDL_H_SRCS', '.idl', '.h' ], + [ 'PRIVATE_IDL_H_SRCS', '.idl', '.h' ], );
my %exported_wine_headers = ( @@ -168,7 +170,7 @@ my %ignored_source_files = ( "programs/winetest/dist.rc" => 1, );
-my (@all_files, @makefiles, %makefiles); +my (@makefiles, %makefiles);
sub dirname($) { @@ -285,7 +287,7 @@ sub replace_makefile_variable($$) return update_file("$file.in"); }
-# parse the specified makefile to identify the rules file +# parse the specified makefile and load the variables sub parse_makefile($) { my $file = shift; @@ -328,28 +330,63 @@ sub parse_makefile($) }
# assign source files to their respective makefile -sub assign_sources_to_makefiles() +sub assign_sources_to_makefiles(@) { - foreach my $file (@all_files) + my %subdirs; + + foreach my $file (@_) { next if defined $ignored_source_files{$file}; my $dir = dirname( $file ); + my $subdir = $dir;
while ($dir && !defined $makefiles{"$dir/Makefile"}) { $dir = dirname( $dir ); } + $subdir =~ s/^$dir/?//; + $subdirs{"$dir/ $subdir"} = 1 if $subdir; next unless $dir;
die "no makefile found for $file\n" unless defined $makefiles{"$dir/Makefile"};
my $make = $makefiles{"$dir/Makefile"}; - my $basename = substr( $file, length($dir) + 1 ); - - if ($basename =~ /.c$/) { push @{${$make}{"=C_SRCS"}}, $basename; } - elsif ($basename =~ /.l$/) { push @{${$make}{"=LEX_SRCS"}}, $basename; } - elsif ($basename =~ /.y$/) { push @{${$make}{"=BISON_SRCS"}}, $basename; } - elsif ($basename =~ /.rc$/) { push @{${$make}{"=RC_SRCS"}}, $basename; } - elsif ($basename =~ /.mc$/) { push @{${$make}{"=MC_SRCS"}}, $basename; } - elsif ($basename =~ /.svg$/) { push @{${$make}{"=SVG_SRCS"}}, $basename; } + my $name = substr( $file, length($dir) + 1 ); + + if ($dir eq "include") + { + next if ($name =~ /.in$/); + if ($name =~ /^wine// && !$exported_wine_headers{$name}) + { + if ($private_idl_headers{$name}) { push @{${$make}{"=PRIVATE_IDL_H_SRCS"}}, $name; } + next; + } + if ($name =~ /stdole2.idl$/) { push @{${$make}{"=IDL_TLB_SRCS"}}, $name; } + elsif ($private_idl_headers{$name}) { push @{${$make}{"=SRCDIR_INCLUDES"}}, $name; } + elsif ($name =~ /.h$/) { push @{${$make}{"=SRCDIR_INCLUDES"}}, $name; } + elsif ($name =~ /.rh$/) { push @{${$make}{"=SRCDIR_INCLUDES"}}, $name; } + elsif ($name =~ /.inl$/) { push @{${$make}{"=SRCDIR_INCLUDES"}}, $name; } + elsif ($name =~ /.idl$/) { push @{${$make}{"=PUBLIC_IDL_H_SRCS"}}, $name; } + else { die "unknown file $name in include dir"; } + } + else + { + if ($name =~ /.c$/) { push @{${$make}{"=C_SRCS"}}, $name; } + elsif ($name =~ /.l$/) { push @{${$make}{"=LEX_SRCS"}}, $name; } + elsif ($name =~ /.y$/) { push @{${$make}{"=BISON_SRCS"}}, $name; } + elsif ($name =~ /.rc$/) { push @{${$make}{"=RC_SRCS"}}, $name; } + elsif ($name =~ /.mc$/) { push @{${$make}{"=MC_SRCS"}}, $name; } + elsif ($name =~ /.svg$/) { push @{${$make}{"=SVG_SRCS"}}, $name; } + } + } + foreach my $key (keys %subdirs) + { + my ($dir, $subdir) = split " ", $key; + if ($dir eq "/") { $dir = ""; } + push @{${$makefiles{"${dir}Makefile"}}{"=EXTRASUBDIRS"}}, $subdir; } + + # add extra variables to include source list + my $make = $makefiles{"include/Makefile"}; + unshift @{${$make}{"=SRCDIR_INCLUDES"}}, "$(PUBLIC_IDL_H_SRCS)"; + unshift @{${$make}{"=SRCDIR_INCLUDES"}}, "$(IDL_TLB_SRCS)"; }
################################################################ @@ -439,14 +476,17 @@ sub update_makefiles(@)
foreach my $file (sort @_) { - my %make = %{$makefiles{$file}}; - replace_makefile_variable( $file, "LEX_SRCS" ); replace_makefile_variable( $file, "BISON_SRCS" ); replace_makefile_variable( $file, "MC_SRCS" ); replace_makefile_variable( $file, "SVG_SRCS" ); replace_makefile_variable( $file, "C_SRCS" ); replace_makefile_variable( $file, "RC_SRCS" ); + replace_makefile_variable( $file, "PRIVATE_IDL_H_SRCS" ); + replace_makefile_variable( $file, "PUBLIC_IDL_H_SRCS" ); + replace_makefile_variable( $file, "IDL_TLB_SRCS" ); + replace_makefile_variable( $file, "SRCDIR_INCLUDES" ); + replace_makefile_variable( $file, "EXTRASUBDIRS" ); }
push @lines, "dnl End of auto-generated output commands\n"; @@ -494,46 +534,6 @@ sub update_ignores(@)
################################################################ -# update include/Makefile.in - -sub update_includes() -{ - my (@h_srcs, @private_idl_srcs, @public_idl_srcs, @tlb_srcs, %subdirs); - my @includes = map { (my $ret = $_) =~ s/^include///; $ret; } grep /^include//, @all_files; - foreach my $incl (@includes) - { - if ($incl =~ /(.*)//) { $subdirs{$1} = 1; } - next if ($incl =~ /.in$/); - if ($incl =~ /^wine// && !$exported_wine_headers{$incl}) - { - if ($private_idl_headers{$incl}) { push @private_idl_srcs, $incl; } - next; - } - if ($incl =~ /stdole2.idl$/) { push @tlb_srcs, $incl; } - elsif ($private_idl_headers{$incl}) { push @h_srcs, $incl; } - elsif ($incl =~ /.h$/) { push @h_srcs, $incl; } - elsif ($incl =~ /.rh$/) { push @h_srcs, $incl; } - elsif ($incl =~ /.inl$/) { push @h_srcs, $incl; } - elsif ($incl =~ /.idl$/) { push @public_idl_srcs, $incl; } - else { die "unknown file $incl in include dir"; } - } - replace_in_file( "include/Makefile.in", '^PRIVATE_IDL_H_SRCS\s*=', '^INSTALLDIRS', - "PRIVATE_IDL_H_SRCS = \\n\t", - join( " \\n\t", sort @private_idl_srcs ), - "\n\nPUBLIC_IDL_H_SRCS = \\n\t", - join( " \\n\t", sort @public_idl_srcs ), - "\n\nIDL_TLB_SRCS = \\n\t", - join( " \\n\t", sort @tlb_srcs ), - "\n\nSRCDIR_INCLUDES = \\n\t$(IDL_TLB_SRCS) \\n\t$(PUBLIC_IDL_H_SRCS) \\n\t", - join( " \\n\t", sort @h_srcs ), - "\n\nEXTRASUBDIRS = ", - join( " ", sort keys %subdirs ), - "\n\nINSTALLDIRS = \\n" ); - return map { s/(.*).idl$/include/$1.h/; $_; } @public_idl_srcs, @private_idl_srcs; -} - - -################################################################ # update the main .gitignore
sub update_gitignore(@) @@ -565,7 +565,7 @@ sub update_gitignore(@)
die "needs to be run from a git checkout" unless -d ".git";
-@all_files = split /\0/, `git ls-files -c -z`; +my @all_files = split /\0/, `git ls-files -c -z`; @makefiles = map { my $ret = $_; $ret =~ s/.in$//; $ret; } grep /Makefile.in$/, @all_files;
foreach my $file (sort values %makerules, @makefiles) @@ -574,8 +574,7 @@ foreach my $file (sort values %makerules, @makefiles) $makefiles{$file} = %make; }
-assign_sources_to_makefiles(); +assign_sources_to_makefiles( @all_files ); update_makefiles( @makefiles ); -push @ignores, update_includes(); push @ignores, update_ignores( @makefiles ); update_gitignore( @ignores );