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