Alexandre Julliard : transl: Add support for parsing multiple resource files in a single module.
Alexandre Julliard
julliard at winehq.org
Mon Jun 22 10:11:01 CDT 2009
Module: tools
Branch: master
Commit: d717ae2bcc5abb4a84e8285ac9418c27937c4285
URL: http://source.winehq.org/git/tools.git/?a=commit;h=d717ae2bcc5abb4a84e8285ac9418c27937c4285
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Jun 22 16:41:29 2009 +0200
transl: Add support for parsing multiple resource files in a single module.
---
transl/scripts/checkmakefile.pl | 107 +++++++++++++++++++++------------------
1 files changed, 57 insertions(+), 50 deletions(-)
diff --git a/transl/scripts/checkmakefile.pl b/transl/scripts/checkmakefile.pl
index 5c5d71c..2eb8c1a 100755
--- a/transl/scripts/checkmakefile.pl
+++ b/transl/scripts/checkmakefile.pl
@@ -14,62 +14,69 @@ sub log_string
close(LOG);
}
+sub shell($)
+{
+ my $cmd = shift;
+ my $ret = system $cmd;
+ if ($ret)
+ {
+ log_string $cmd;
+ print "!!!!!!! return value: $ret\n";
+ exit 1;
+ }
+}
+
sub mycheck
{
my($dir) = shift(@_);
- my($name) = shift(@_);
+ my($defs) = shift(@_);
+ my @files = @_;
- if ($name =~ m/version.rc$/) {
- print "--- Ignoring ".$name."\n" unless (exists $ENV{"NOVERBOSE"});
- return;
+ if (not exists $ENV{"NOVERBOSE"}) {
+ print "*** $dir\n";
}
- if (not exists $ENV{"NOVERBOSE"}) {
- print "*** $dir$name\n";
+ my @rcfiles;
+ foreach my $f (@files)
+ {
+ next if $f =~ m/^\s*$/;
+ if ($f =~ m/version.rc$/) {
+ print "--- Ignoring ".$files[$i]."\n" unless (exists $ENV{"NOVERBOSE"});
+ next;
+ }
+ push @rcfiles, $f;
}
+ return unless @rcfiles;
# files in dlls/ are compiled with __WINESRC__
- my($defs) = "";
- $defs = "-D__WINESRC__" if ($dir =~ m,^dlls,);
+ $defs .= " -D__WINESRC__" if ($dir =~ m,^dlls,);
- log_string("*** $dir$name [$defs]");
+ log_string("*** $dir [$defs]");
- my $srcincl = "-I$srcdir/$dir -I$srcdir/include";
- (my $objincl = $srcincl) =~ s!I$srcdir!I$objdir!g;
- my $norm_fn = $dir.$name;
- $norm_fn =~ s/\.rc$//;
+ my $incl = "-I$srcdir/$dir -I$objdir/$dir -I$srcdir/include -I$objdir/include";
+ my $norm_fn = $dir;
$norm_fn =~ s/[^a-zA-Z0-9]/-/g;
- (my $target = $name) =~ s/.rc$/.res/;
- $ret = system("make -C $objdir/$dir -s $target 2>>$workdir/run.log && cp $objdir/$dir/$target $workdir/dumps/res/$norm_fn.res");
- if ($ret)
- {
- log_string "make -C $objdir/$dir -s $target 2>>$workdir/run.log && cp $objdir/$dir/$target $workdir/dumps/res/$norm_fn.res";
- print "!!!!!!! return value: $ret\n";
- exit 1;
- }
- $ret = system("$wrc $srcincl $objincl --verify-translation $defs $srcdir/$dir$name $workdir/tmp.res 2>>$workdir/run.log >$workdir/ver.txt");
- if ($ret == 0)
- {
- if ("$dir$name" eq "dlls/kernel32/kernel.rc") {
- system("$scriptsdir/ver.pl \"$dir$name\" \"$workdir\" nonlocale $scriptsdir <$workdir/ver.txt");
- log_string("*** $name [$defs] (locale run)");
- system("$scriptsdir/ver.pl \"$dir$name\" \"$workdir\" locale $scriptsdir <$workdir/ver.txt");
- } else {
- system("$scriptsdir/ver.pl \"$dir$name\" \"$workdir\" normal $scriptsdir <$workdir/ver.txt");
- }
- }
- else
- {
- log_string "$wrc $srcincl $objincl --verify-translation $defs $srcdir/$dir$name $workdir/tmp.res 2>>$workdir/run.log >$workdir/ver.txt";
- print "!!!!!!! return value: $ret\n";
- exit 1;
+ my $targets = join( " ", map { (my $ret = $_) =~ s/.rc$/.res/; $ret; } @rcfiles );
+ my $srcs = join( " ", map { "$srcdir/$dir/$_"; } @rcfiles );
+ my $objs = join( " ", map { (my $ret = "$objdir/$dir/$_") =~ s/.rc$/.res/; $ret; } @rcfiles );
+
+ shell "make -C $objdir/$dir -s $targets 2>>$workdir/run.log";
+ shell "$toolsdir/tools/winebuild/winebuild --resources -o $workdir/dumps/res/$norm_fn.res $objs 2>>$workdir/run.log";
+ shell "$wrc $incl --verify-translation $defs $srcs >$workdir/ver.txt 2>>$workdir/run.log";
+
+ if ("$dir" eq "dlls/kernel32") {
+ shell "$scriptsdir/ver.pl \"$dir\" \"$workdir\" nonlocale $scriptsdir <$workdir/ver.txt";
+ log_string("*** $name [$defs] (locale run)");
+ shell "$scriptsdir/ver.pl \"$dir\" \"$workdir\" locale $scriptsdir <$workdir/ver.txt";
+ } else {
+ shell "$scriptsdir/ver.pl \"$dir\" \"$workdir\" normal $scriptsdir <$workdir/ver.txt";
}
}
srand();
# Parse config file
-if (-f config)
+if (-f "config")
{
open(CONFIG, "<config");
while (<CONFIG>)
@@ -127,21 +134,26 @@ if (!@makefiles)
# parse the makefiles
foreach my $makefile (@makefiles)
{
- next unless $makefile =~ m,^$srcdir/(.*/)Makefile.in$,;
+ next unless $makefile =~ m,^$srcdir/(.*)/Makefile.in$,;
my $path = $1;
- if ($path eq "programs/winetest/" || $path =~ m,/tests/$,)
+ if ($path eq "programs/winetest" || $path =~ m,/tests$,)
{
if (not exists $ENV{"NOVERBOSE"})
{
- print "--- Ignoring: ".$path."Makefile.in\n";
+ print "--- Ignoring: $path/Makefile.in\n";
}
next;
}
+ my $defs = "";
open(MAKEFILE, "<$makefile") or die "cannot open $makefile";
while (<MAKEFILE>)
{
- last if m/EXTRARCFLAGS\s*=.*res16/; # 16-bit resources not supported
+ if (m/EXTRARCFLAGS\s*=\s*(.*)/)
+ {
+ $defs = $1;
+ last if ($defs =~ /res16/); # 16-bit resources not supported
+ }
if (m/^RC_SRCS *=/)
{
while (m/\\$/)
@@ -150,14 +162,9 @@ foreach my $makefile (@makefiles)
chop;
$_ .= <MAKEFILE>;
}
- m/^RC_SRCS *=(.*)$/;
- @file = split(/ /, $1);
- foreach (@file)
- {
- next if ($_ eq "");
- s/\s//;
- &mycheck($path,$_);
- }
+ m/^RC_SRCS\s*=\s*(.*)$/;
+ my @files = split(/\s+/, $1);
+ &mycheck($path,$defs, at files);
last;
}
}
More information about the wine-cvs
mailing list