Alexandre Julliard : tools: Update all makefiles in a single pass.
Alexandre Julliard
julliard at winehq.org
Mon Jul 4 09:54:40 CDT 2016
Module: wine
Branch: master
Commit: c6cded7460539e77a00938d7bf769020066d994a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c6cded7460539e77a00938d7bf769020066d994a
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Jul 4 11:04:49 2016 +0900
tools: Update all makefiles in a single pass.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
tools/make_makefiles | 106 ++++++++++++++++++++++++++++++---------------------
1 file changed, 62 insertions(+), 44 deletions(-)
diff --git a/tools/make_makefiles b/tools/make_makefiles
index 1a01666..4f1d882 100755
--- a/tools/make_makefiles
+++ b/tools/make_makefiles
@@ -51,10 +51,28 @@ my %ignored_source_files = (
"dlls/wineps.drv/afm2c.c" => 1,
"dlls/wineps.drv/mkagl.c" => 1,
"include/config.h.in" => 1,
+ "include/stamp-h.in" => 1,
"programs/winetest/dist.rc" => 1,
"tools/makedep.c" => 1,
);
+my @source_vars = (
+ "BISON_SRCS",
+ "C_SRCS",
+ "FONT_SRCS",
+ "HEADER_SRCS",
+ "IDL_SRCS",
+ "IN_SRCS",
+ "LEX_SRCS",
+ "MANPAGES",
+ "MC_SRCS",
+ "OBJC_SRCS",
+ "PO_SRCS",
+ "RC_SRCS",
+ "SVG_SRCS",
+ "XTEMPLATE_SRCS"
+);
+
my (@makefiles, %makefiles);
sub dirname($)
@@ -123,64 +141,79 @@ sub replace_in_file($$$@)
return update_file($file);
}
-# replace a variable in a makefile
-sub replace_makefile_variable($$)
+# replace all source variables in a makefile
+sub replace_makefile_variables($)
{
- my ($file, $var) = @_;
+ my $file = shift;
my $make = $makefiles{$file};
- my $replaced = 0;
- my @values;
-
- if (defined ${$make}{"=$var"})
- {
- @values = @{${$make}{"=$var"}};
- ${$make}{$var} = \@values;
- }
- else
- {
- return unless defined ${$make}{$var};
- undef ${$make}{$var};
- }
+ my $source_vars_regexp = join "|", @source_vars;
+ my $modified = 0;
+ my %replaced;
open NEW_FILE, ">$file.in.new" or die "cannot create $file.in.new";
open OLD_FILE, "$file.in" or die "cannot open $file.in";
while (<OLD_FILE>)
{
- if (/^\s*($var\s*)=/)
+ if (/^\s*($source_vars_regexp)(\s*)=/)
{
# try to preserve formatting
- my $prefix = $1;
+ my $var = $1;
+ my $spaces = $2;
+ my $replaced = 0;
+ my @values;
+
+ if (defined ${$make}{"=$var"})
+ {
+ @values = @{${$make}{"=$var"}};
+ ${$make}{$var} = \@values;
+ }
+ else
+ {
+ undef ${$make}{$var};
+ }
my $multiline = /\\$/ || (@values > 1);
+ my $old_str = $_;
while (/\\$/)
{
$_ = <OLD_FILE>;
last unless $_;
+ $old_str .= $_;
}
+ my $new_str = "";
if (!@values)
{
# nothing
}
elsif ($multiline)
{
- print NEW_FILE "$var = \\\n\t" . join(" \\\n\t", sort @values) . "\n";
+ $new_str = "$var = \\\n\t" . join(" \\\n\t", sort @values) . "\n";
+ print NEW_FILE $new_str;
}
else
{
- print NEW_FILE "$prefix= @values\n";
+ $new_str = "$var$spaces= @values\n";
+ print NEW_FILE $new_str;
}
- $replaced = 1;
+ $modified = 1 if ($old_str ne $new_str);
+ $replaced{$var} = 1;
next;
}
- if (/^\@MAKE/ && !$replaced && @values)
- {
- print NEW_FILE "$var = \\\n\t" . join(" \\\n\t", sort @values) . "\n";
- }
print NEW_FILE $_;
}
+ foreach my $var (@source_vars)
+ {
+ next if defined $replaced{$var};
+ next unless defined ${$make}{"=$var"};
+ my @values = @{${$make}{"=$var"}};
+ next unless @values;
+ print NEW_FILE "\n$var = \\\n\t" . join(" \\\n\t", sort @values) . "\n";
+ $modified = 1;
+ }
close OLD_FILE;
close NEW_FILE;
- return update_file("$file.in");
+ return update_file("$file.in") if $modified;
+ unlink "$file.in.new";
}
# parse the specified makefile and load the variables
@@ -211,7 +244,8 @@ sub parse_makefile($)
${$make{"=flags"}}{"implib"} = 1 if $var eq "IMPORTLIB";
next;
}
- if (/^\s*(BISON_SRCS|LEX_SRCS|IDL_SRCS|C_SRCS|OBJC_SRCS|MC_SRCS|RC_SRCS|SVG_SRCS|FONT_SRCS|IN_SRCS|PO_SRCS|PROGRAMS|EXTRA_TARGETS|MANPAGES|EXTRA_OBJS|INSTALL_LIB|INSTALL_DEV)\s*=\s*(.*)/)
+ my $source_vars_regexp = join "|", @source_vars;
+ if (/^\s*($source_vars_regexp|PROGRAMS|EXTRA_TARGETS|EXTRA_OBJS|INSTALL_LIB|INSTALL_DEV)\s*=\s*(.*)/)
{
my $var = $1;
my @list = split(/\s+/, $2);
@@ -510,23 +544,7 @@ sub update_makefiles(@)
# update the source variables in all the makefiles
- foreach my $file (sort @_)
- {
- 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, "FONT_SRCS" );
- replace_makefile_variable( $file, "C_SRCS" );
- replace_makefile_variable( $file, "OBJC_SRCS" );
- replace_makefile_variable( $file, "RC_SRCS" );
- replace_makefile_variable( $file, "IDL_SRCS" );
- replace_makefile_variable( $file, "HEADER_SRCS" );
- replace_makefile_variable( $file, "XTEMPLATE_SRCS" );
- replace_makefile_variable( $file, "PO_SRCS" );
- replace_makefile_variable( $file, "IN_SRCS" );
- replace_makefile_variable( $file, "MANPAGES" );
- }
+ foreach my $file (sort @_) { replace_makefile_variables( $file ); }
push @lines, "dnl End of auto-generated output commands\n";
replace_in_file( "configure.ac", '^WINE_CONFIG_DLL', '^dnl End of auto-generated output commands\n$', @lines);
More information about the wine-cvs
mailing list