Module: wine Branch: master Commit: 44db04c01e68c7b321a6ff4850e5d9cfb419cef7 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=44db04c01e68c7b321a6ff48...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Sep 22 09:27:29 2006 +0200
make_makefiles: Parse the makefiles to find the correct rules file dependency.
---
tools/make_makefiles | 71 ++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 51 insertions(+), 20 deletions(-)
diff --git a/tools/make_makefiles b/tools/make_makefiles index ff0aaa2..cc77d40 100755 --- a/tools/make_makefiles +++ b/tools/make_makefiles @@ -19,6 +19,17 @@ # License along with this library; if no # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA #
+my %makerules = +( + "MAKE_RULES" => "Make.rules", + "MAKE_DLL_RULES" => "dlls/Makedll.rules", + "MAKE_IMPLIB_RULES" => "dlls/Makeimplib.rules", + "MAKE_TEST_RULES" => "dlls/Maketest.rules", + "MAKE_PROG_RULES" => "programs/Makeprog.rules", +); + +my (@makefiles, %makefiles); + # update a file if changed sub update_file($) { @@ -27,7 +38,7 @@ sub update_file($) if (!$ret) { unlink "$file.new"; - print "$file is unchanged\n"; + #print "$file is unchanged\n"; } else { @@ -70,26 +81,56 @@ sub replace_in_file($$$@) return update_file($file); }
-my (@makefiles, @makerules); +# parse the specified makefile to identify the rules file +sub parse_makefile($) +{ + my $file = shift; + + open MAKE, "$file.in" or die "cannot open $file.in\n"; + + while (<MAKE>) + { + chomp; + while (/\$/) { chop; $_ .= <MAKE>; chomp; } # merge continued lines + + if (/^@(MAKE.*RULES)@/) + { + my $var = $1; + $makefiles{$file} = $makerules{$var}; + return; + } + } +}
if (-d ".git") { @makefiles = map { s/.in$//; $_; } split /\s/, `git ls-files -c Makefile.in \*/Makefile.in`; - @makerules = map { s/.in$//; $_; } split /\s/, `git ls-files -c Make\*rules.in \*/Make\*rules.in`; } else { @makefiles = map { s/^./(.*).in/$1/; $_; } split(/\s/,`find . -name Makefile.in -print`); - @makerules = map { s/^./(.*).in/$1/; $_; } split(/\s/,`find . -name Make\*.rules.in -print`); }
+foreach my $file (sort values %makerules, @makefiles) +{ + parse_makefile( $file ); +}
################################################################ # update the makefile list in configure.ac
-replace_in_file( "configure.ac", '^AC_CONFIG_FILES(', '])$', +my @lines = (); + +foreach my $var (sort { $makerules{$a} cmp $makerules{$b}; } keys %makerules) +{ + push @lines, "$var=$makerules{$var}\n"; + push @lines, "AC_SUBST_FILE($var)\n\n"; +} + +replace_in_file( "configure.ac", '^MAKE_RULES', '])$', + @lines, "AC_CONFIG_FILES([\n", - join ("\n", (sort @makerules), (sort @makefiles) ), "])\n" ); + join ("\n", (sort values %makerules), (sort @makefiles) ), "])\n" );
################################################################ @@ -97,7 +138,7 @@ # update the tests list in programs/wine
my %modules = ( "gdi" => "gdi32", "user" => "user32" ); my %tests; -my @lines = ( "TESTBINS =" ); +@lines = ( "TESTBINS =" );
foreach my $file (sort grep /^dlls/.*/tests/Makefile/, @makefiles) { @@ -135,27 +176,17 @@ # update the makefile list in Makefile.i my @targets; my @depends;
-foreach my $file (sort @makerules) +foreach my $file (sort values %makerules) { push @targets, $file; - if ($file eq "Make.rules") { push @depends, "$file: $file.in"; } + if (!defined($makefiles{$file})) { push @depends, "$file: $file.in"; } else { push @depends, "$file: $file.in Make.rules"; } }
foreach my $file (sort @makefiles) { push @targets, $file unless $file eq "Makefile"; - - # find the right rules file (FIXME: should parse the Makefile.in instead) - my $dep = "Make.rules"; - if ($file =~ /^programs/.*/Makefile/) { $dep = "programs/Makeprog.rules"; } - elsif ($file =~ /^dlls/.*/tests/Makefile/) { $dep = "dlls/Maketest.rules"; } - elsif ($file =~ /^dlls/(.*)/Makefile/) - { - $dep = ($1 eq "dxerr8" || $1 eq "dxerr9" || $1 eq "dxguid" || - $1 eq "strmiids" || $1 eq "uuid" || $1 eq "winecrt0") ? - "dlls/Makeimplib.rules" : "dlls/Makedll.rules"; - } + my $dep = $makefiles{$file}; push @depends, "$file: $file.in $dep"; }