[PATCH] Port checkmakefile perl script to wrc_parse php script

Paul Vriens Paul.Vriens.Wine at gmail.com
Wed Aug 5 10:16:26 CDT 2009


---
 transl/scripts/Master.sh        |    2 +-
 transl/scripts/checkmakefile.pl |  448 ---------------------------------------
 transl/scripts/wrc_parse.php    |  414 ++++++++++++++++++++++++++++++++++++
 3 files changed, 415 insertions(+), 449 deletions(-)
 delete mode 100755 transl/scripts/checkmakefile.pl
 create mode 100644 transl/scripts/wrc_parse.php

diff --git a/transl/scripts/Master.sh b/transl/scripts/Master.sh
index 0baa873..9036868 100755
--- a/transl/scripts/Master.sh
+++ b/transl/scripts/Master.sh
@@ -44,7 +44,7 @@ mkdir $WORKDIR/data
 mkdir $WORKDIR/data/res
 
 # Analyze all the Makefiles
-./checkmakefile.pl -S "$SOURCEROOT" -T "$BUILDROOT" -t "$WRCROOT" -w "$WORKDIR/data" 2>>"$WORKDIR/run.log" || exit
+php ./wrc_parse.php -S "$SOURCEROOT" -T "$BUILDROOT" -t "$WRCROOT" -w "$WORKDIR/data" 2>>"$WORKDIR/run.log" || exit
 
 # Show any changes in the log
 diff -u $WORKDIR/run.log.old $WORKDIR/run.log
diff --git a/transl/scripts/checkmakefile.pl b/transl/scripts/checkmakefile.pl
deleted file mode 100755
index 2c31607..0000000
--- a/transl/scripts/checkmakefile.pl
+++ /dev/null
@@ -1,448 +0,0 @@
-#!/usr/bin/perl -w
-
-# Helper script - analyze all Makefiles, run wrc --verify-translation
-# on resource files and parse the results
-
-use strict;
-use Cwd;
-use File::Basename;
-
-# configuration parameters
-my (%CONFIG, $srcdir, $objdir, $toolsdir, $workdir, $wrc);
-
-sub shell(@)
-{
-    my $ret = system @_;
-    if ($ret)
-    {
-        print STDERR join(" ", @_) . "\n";
-        print "!!!!!!! return value: $ret\n";
-        exit 1;
-    }
-}
-
-sub resource_name
-{
-    my ($type, $name) = @_;
-
-    return "\@RES($type:$name)";
-}
-
-sub resource_name2
-{
-    my ($args) = shift @_;
-    return resource_name(split(/ /, $args));
-}
-
-my %languages = ();
-sub mycheck
-{
-    my($mode, $dir, $defs, @files) = @_;
-
-    if (not exists $ENV{"NOVERBOSE"}) {
-        print "*** $dir ($mode run)\n";
-    }
-
-    my @rcfiles;
-    my @srcs;
-    foreach my $f (@files)
-    {
-        next if $f =~ m/^\s*$/;
-        if ($f =~ m/version.rc$/) {
-            print "--- Ignoring $f\n" unless (exists $ENV{"NOVERBOSE"});
-            next;
-        }
-        if ($f =~ m/.mc$/)
-        {
-            $f .= ".rc";
-            push @srcs, "$objdir/$dir/$f";
-        }
-        else
-        {
-            push @srcs, "$srcdir/$dir/$f";
-        }
-        push @rcfiles, $f;
-    }
-    return unless @rcfiles;
-
-    # files in dlls/ are compiled with __WINESRC__
-    my @defs = split /s+/, $defs;
-    push @defs, "-D__WINESRC__" if ($dir =~ m,^dlls,);
-
-    printf STDERR "*** $dir [%s]\n", join( " ", @defs );
-
-    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 @targets = map { (my $ret = $_) =~ s/.rc$/.res/; $ret; } @rcfiles;
-    my @objs = map { (my $ret = "$objdir/$dir/$_") =~ s/.rc$/.res/; $ret; } @rcfiles;
-
-    shell "make", "-C", "$objdir/$dir", "-s", @targets;
-    shell "$toolsdir/tools/winebuild/winebuild", "--resources", "-o", "$workdir/res/$norm_fn.res", @objs;
-
-    my $type = -1;
-    my $resource;
-
-    my %file_langs = ();
-    $file_langs{"009:01"} = 1;
-
-    my %reslangs = ();
-    my @resources = ();
-
-    my %transl_count = ();
-    my %notransl = ();
-    my %err_count = ();
-    my %errs_rl = ();
-    my %warns = ();
-
-    if ($mode eq "locale")
-    {
-        open VERIFY, "-|" or exec $wrc, "--verify-translation", @incl, @defs, @srcs;
-        while (<VERIFY>)
-        {
-            if (m/^EXIST ([0-9a-f]{3}:[0-9a-f]{2})/)
-            {
-                my $lang = $1;
-
-                if ($lang !~ /^[0-9a-f]{3}:00/)
-                {
-                    $languages{$lang} = 1;
-                }
-            }
-        }
-        close(VERIFY);
-        return;
-    }
-
-    open VERIFY, "-|" or exec $wrc, "--verify-translation", @incl, @defs, @srcs;
-    while (<VERIFY>)
-    {
-        if (m/^TYPE NEXT/)
-        {
-            $type++;
-            next;
-        }
-
-        if (m/^RESOURCE \[([a-zA-Z_0-9.]+)\]/)
-        {
-            $resource = $1;
-            push @resources, $type." ".$resource;
-            next;
-        }
-
-        if (m/^NOTRANSL/)
-        {
-            $notransl{$type." ".$resource} = 1;
-            next;
-        }
-
-        if (m/^EXIST ([0-9a-f]{3}:[0-9a-f]{2})/)
-        {
-            my $lang = $1;
-
-            # Don't add neutral langs (nn:00) to the file_langs hash
-            # if we have existing sublangs (nn:xx), add it's sublangs
-            # instead.
-            #
-            if ($lang =~ /^[0-9a-f]{3}:00/)
-            {
-                # Find the sublangs
-                my $primary_lang = $lang;
-                $primary_lang =~ s/:00//;
-                my $found = 0;
-                my @sublanguages = grep(/$primary_lang/, keys %languages);
-                foreach my $language (@sublanguages)
-                {
-                    $file_langs{$language} = 1;
-                    $found = 1;
-                }
-                if (!$found)
-                {
-                    $file_langs{$lang} = 1;
-                }
-            }
-            else
-            {
-                $file_langs{$lang} = 1;
-            }
-            $reslangs{$type." ".$resource}{$lang} = 1;
-            $transl_count{$lang}++;
-            next;
-        }
-
-        if (m/^DIFF ([0-9a-f]{3}:[0-9a-f]{2})/)
-        {
-            my $lang = $1;
-            push @{$errs_rl{$type." ".$resource}{$lang}}, "Translation out of sync";
-            $transl_count{$lang}--;
-            $err_count{$lang}++;
-            next;
-        }
-
-        if (m/^EXTRA ([0-9a-f]{3}:[0-9a-f]{2})/)
-        {
-            my $lang = $1;
-            push @{$warns{$lang}}, "Extra resource found not available in master language: ".resource_name($type, $resource);
-            if ($resources[$#resources] eq $type." ".$resource)
-            {
-                pop @resources;
-            }
-            next;
-        }
-
-        if (m/^DUMP ([0-9a-f]+)$/)
-        {
-            next;
-        }
-
-        print "Unparsed line $_\n";
-    }
-    close(VERIFY);
-
-    my %missing_rl;
-    my %notes_rl;
-    my %missing_count;
-
-    foreach $resource (@resources)
-    {
-        next if ($notransl{$resource});
-
-        foreach my $lang (keys %file_langs)
-        {
-            my $basic_lang = $lang;
-            $basic_lang=~s/:[0-9a-f][0-9a-f]/:00/;
-            if (not exists $reslangs{$resource}{$lang})
-            {
-                if (not exists $reslangs{$resource}{$basic_lang})
-                {
-                    if (not exists $reslangs{$resource}{"000:00"}) {
-                        push @{$missing_rl{$resource}{$lang}}, "No translation";
-                        $missing_count{$lang}++;
-                    }
-                    else
-                    {
-                        push @{$notes_rl{$resource}{$lang}}, "Translation inherited from neutral resource";
-                        $transl_count{$lang}++;
-                    }
-                }
-                else
-                {
-                    if (exists $errs_rl{$resource}{$basic_lang})
-                    {
-                        push @{$errs_rl{$resource}{$lang}}, "Translation inherited from \@LANG($basic_lang): translation out of sync";
-                        $err_count{$lang}++;
-                    }
-                    else
-                    {
-                        push @{$notes_rl{$resource}{$lang}}, "Translation inherited from \@LANG($basic_lang)";
-                        $transl_count{$lang}++;
-                    }
-                }
-            }
-            else
-            {
-                if (not exists $errs_rl{$resource}{$lang})
-                {
-                    push @{$notes_rl{$resource}{$lang}}, "Resource translated";
-                }
-            }
-        }
-    }
-    foreach my $lang (keys %file_langs)
-    {
-        if (!exists $transl_count{$lang}) { $transl_count{$lang} = 0; }
-        if (!exists $missing_count{$lang}) { $missing_count{$lang} = 0; }
-        if (!exists $err_count{$lang}) { $err_count{$lang} = 0; }
-
-        my $basic_lang = $lang;
-        $basic_lang =~ s/:[0-9a-f]{2}/:00/;
-
-        next if ($lang eq $basic_lang);
-
-        next if (($lang eq "009:01") && ($transl_count{$lang} == 0));
-
-        open(LANGOUT, ">>$workdir/$lang");
-        print LANGOUT "FILE STAT $dir ".($transl_count{$lang}+0)." ".($missing_count{$lang}+0)." ".($err_count{$lang}+0)."\n";
-
-        foreach my $warn (@{$warns{$lang}})
-        {
-            print LANGOUT "$dir: Warning: $warn\n";
-        }
-
-        foreach $resource (@resources)
-        {
-            foreach my $msg (@{$errs_rl{$resource}{$lang}})
-            {
-                print LANGOUT "$dir: Error: resource ".resource_name2($resource).": $msg\n";
-            }
-
-            foreach my $msg (@{$missing_rl{$resource}{$lang}})
-            {
-                print LANGOUT "$dir: Missing: resource ".resource_name2($resource).": $msg\n";
-            }
-
-            foreach my $msg (@{$notes_rl{$resource}{$lang}})
-            {
-                print LANGOUT "$dir: note: resource ".resource_name2($resource).": $msg\n";
-            }
-        }
-        close(LANGOUT);
-    }
-
-    foreach my $lang (keys %languages)
-    {
-        next if ($transl_count{"009:01"} == 0);
-        my @transl = grep {$_ eq $lang} keys %file_langs;
-        if ($#transl == -1)
-        {
-            open(LANGOUT, ">>$workdir/$lang");
-            print LANGOUT "FILE NONE $dir 0 ".$transl_count{"009:01"}." 0\n";
-            close(LANGOUT);
-        }
-    }
-}
-
-srand();
-# Parse config file
-if (-f "config")
-{
-    open(CONFIG, "<config");
-    while (<CONFIG>)
-    {
-        if (m/^([A-Z_]+)=([^\s]+)\s*$/)
-        {
-            $CONFIG{$1} = $2;
-        }
-        elsif (!(m/^#/ || m/^$/))
-        {
-            print("checkmakefile.pl: Can't parse config line: $_\n");
-        }
-    }
-    close(CONFIG);
-}
-
-while (@ARGV && $ARGV[0] =~ /^-/)
-{
-    my $opt = shift @ARGV;
-    if ($opt eq "-S") { $srcdir = shift @ARGV; }
-    elsif ($opt eq "-T") { $objdir = shift @ARGV; }
-    elsif ($opt eq "-t") { $toolsdir = shift @ARGV; }
-    elsif ($opt eq "-w") { $workdir = shift @ARGV; }
-    else
-    {
-        print STDERR "Usage: $0 [options] [makefiles]\n\n";
-        print STDERR "  -S dir   Set the top of the Wine source tree\n";
-        print STDERR "  -T dir   Set the top of the Wine build tree\n";
-        print STDERR "  -t dir   Set the Wine tools directory\n";
-        print STDERR "  -w dir   Set the work directory\n";
-        exit 1;
-    }
-}
-
-$srcdir ||= $CONFIG{"SOURCEROOT"};
-$objdir ||= $CONFIG{"BUILDROOT"} || $srcdir;
-$toolsdir ||= $CONFIG{"WRCROOT"} || $objdir;
-$workdir ||= $CONFIG{"WORKDIR"} . "/data";
-$wrc = $toolsdir . "/tools/wrc/wrc";
-
-if ($srcdir eq "" || $wrc eq "/tools/wrc/wrc" || $workdir eq "")
-{
-    die("Config entry for SOURCEROOT, WRCROOT or WORKDIR missing\n");
-}
-
-my @makefiles = @ARGV;
-if (!@makefiles)
-{
-    @makefiles = split(/\s/,`find $srcdir/ -name Makefile.in -print`);
-}
-
-my %checks = ();
-# parse the makefiles
-foreach my $makefile (@makefiles)
-{
-    next unless $makefile =~ m,^$srcdir/(.*)/Makefile.in$,;
-    my $path = $1;
-    if ($path eq "programs/winetest" || $path =~ m,/tests$,)
-    {
-        if (not exists $ENV{"NOVERBOSE"})
-        {
-            print "--- Ignoring: $path/Makefile.in\n";
-        }
-        next;
-    }
-
-    my $defs = "";
-    my @files = ();
-    open(MAKEFILE, "<$makefile") or die "cannot open $makefile";
-    while (<MAKEFILE>)
-    {
-        while (m/\\$/)
-        {
-            chop;
-            chop;
-            $_ .= <MAKEFILE>;
-        }
-        if (m/EXTRARCFLAGS\s*=\s*(.*)/)
-        {
-            $defs = $1;
-            last if ($defs =~ /res16/);  # 16-bit resources not supported
-        }
-        if (m/^(MC|RC)_SRCS\s*=\s*(.*)$/)
-        {
-            push @files, split(/\s+/, $2);
-        }
-    }
-    close MAKEFILE;
-    next unless @files;
-
-    $checks{$path}{defines} = $defs;
-    $checks{$path}{files} = [ @files ];
-}
-
-# Check the kernel32 resources for all available languages
-#
-# %languages should contain all the sublanguages found in the kernel32 resources
-#
-if (exists $checks{"dlls/kernel32"})
-{
-    my $defs = $checks{"dlls/kernel32"}{defines};
-    my @files = @{$checks{"dlls/kernel32"}{files}};
-
-    mycheck("locale", "dlls/kernel32",$defs, at files);
-    die("Could not retrieve languages from kernel32 resources\n") if ((keys %languages == 0));
-}
-else
-{
-    die("kernel32 resource can't be found\n");
-}
-
-foreach my $path (keys %checks)
-{
-    my $defs = $checks{$path}{defines};
-    my @files = @{$checks{$path}{files}};
-
-    mycheck("normal", $path,$defs, at files);
-}
-
-# create the summary file
-open(OUT, ">$workdir/summary");
-foreach my $lang (keys %languages)
-{
-    my $transl = 0;
-    my $missing = 0;
-    my $errors = 0;
-    open(FILE, "<$workdir/$lang");
-    while (<FILE>)
-    {
-        if (m/^FILE [A-Z]+ .* ([0-9]+) ([0-9]+) ([0-9]+)$/) {
-            $transl += $1;
-            $missing += $2;
-            $errors += $3;
-        }
-    }
-    close(FILE);
-    my $sum = $transl + $missing + $errors;
-    print OUT "LANG $lang $sum $transl $missing $errors\n";
-}
-close(OUT);
diff --git a/transl/scripts/wrc_parse.php b/transl/scripts/wrc_parse.php
new file mode 100644
index 0000000..0dee74a
--- /dev/null
+++ b/transl/scripts/wrc_parse.php
@@ -0,0 +1,414 @@
+<?php
+
+function resource_name2($resource)
+{
+    $result = preg_split("/\s+/", $resource);
+    return "@RES($result[0]:$result[1])";
+}
+
+function wrc_parse($mode, $dir, $check)
+{
+    global $objdir, $srcdir, $toolsdir, $workdir, $wrc;
+    global $languages;
+
+    echo "*** $dir ($mode run)\n";
+
+    $srcs = "";
+    $targets = "";
+    $objs = "";
+    foreach (preg_split("/\s+/", $check['files']) as $file)
+    {
+        if (preg_match("/^\s*$/", $file))
+            continue;
+
+        if (preg_match("/version.rc$/", $file))
+        {
+            echo "--- Ignoring $file\n";
+            continue;
+        }
+
+        if (preg_match("/.mc$/", $file))
+        {
+            $file .= ".rc";
+            $srcs .= " $objdir/$dir/$file";
+        }
+        else
+        {
+            $srcs .= " $srcdir/$dir/$file";
+        }
+        $targets .= preg_replace("/\.rc$/", ".res", $file). " ";
+        $objs .= "$objdir/$dir/" . preg_replace("/\.rc$/", ".res", $file) . " ";
+    }
+    if ($targets == "")
+        return;
+
+    $defs = $check['defines'];
+    if (preg_match("/^dlls/", $dir))
+        $defs .= "-D__WINESRC__";
+
+    fwrite(STDERR, "*** $dir [$defs]\n");
+
+    $incl = "-I$srcdir/$dir -I$objdir/$dir -I$srcdir/include -I$objdir/include";
+    $norm_fn = preg_replace("/[^a-zA-Z0-9]/", "-", $dir);
+
+    system("make -C $objdir/$dir -s $targets");
+    system("$toolsdir/tools/winebuild/winebuild --resources -o $workdir/res/$norm_fn.res $objs");
+
+    if ($mode == "locale")
+    {
+        $locale = popen("$wrc --verify-translation $incl $defs $srcs", "r");
+        while ($line = fgets($locale, 4096))
+            if (preg_match("/EXIST ([0-9a-f]{3}:[0-9a-f]{2})/", $line, $m))
+                if (!preg_match("/^[0-9a-f]{3}:00/", $m[1]))
+                    $languages[$m[1]] = 1;
+        pclose($locale);
+        return;
+    }
+
+    $type = -1;
+
+    $file_langs = array();
+    $file_langs["009:01"] = 1;
+    $reslangs = array();
+
+    $resource = "";
+    $resources = array();
+
+    $transl_count = array();
+    $notransl = array();
+    $err_count = array();
+    $errs_rl = array();
+    $warns = array();
+
+    $file = popen("$wrc --verify-translation $incl $defs $srcs", "r");
+    while ($line = fgets($file, 4096))
+    {
+        if (preg_match("/^TYPE NEXT/", $line))
+        {
+            $type++;
+            continue;
+        }
+
+        if (preg_match("/^RESOURCE \[([a-zA-Z_0-9.]+)\]/", $line, $m))
+        {
+            $resource = $m[1];
+            $resources[] = "$type $resource";
+            continue;
+        }
+
+        if (preg_match("/^NOTRANSL/", $line))
+        {
+            $notransl["$type $resource"] = 1;
+            continue;
+        }
+
+        if (preg_match("/^EXIST ([0-9a-f]{3}:[0-9a-f]{2})/", $line, $m))
+        {
+            $lang = $m[1];
+            if (!isset($transl_count[$lang])) $transl_count[$lang] = 0;
+
+            // Don't add neutral langs (nn:00) to the file_langs hash
+            // if we have existing sublangs (nn:xx), add it's sublangs
+            // instead.
+            //
+            if (preg_match("/^[0-9a-f]{3}:00/", $lang))
+            {
+                // Find the sublangs
+                $primary_lang = str_replace(":00", "", $lang);
+                $found = 0;
+                $sublanguages = preg_grep("/^$primary_lang/", array_keys($languages));
+                foreach ($sublanguages as $language)
+                {
+                    $file_langs[$language] = 1;
+                    $found = 1;
+                }
+                if (!$found)
+                {
+                    $file_langs[$lang] = 1;
+                }
+            }
+            else
+            {
+                $file_langs[$lang] = 1;
+            }
+            $reslangs[$type." ".$resource][$lang] = 1;
+            $transl_count[$lang]++;
+            continue;
+        }
+
+        if (preg_match("/^DIFF ([0-9a-f]{3}:[0-9a-f]{2})/", $line, $m))
+        {
+            $lang = $m[1];
+
+            if (!isset($transl_count[$lang])) $transl_count[$lang] = 0;
+            if (!isset($err_count[$lang])) $err_count[$lang] = 0;
+
+            $errs_rl["$type $resource"][$lang][] = "Translation out of sync";
+            $transl_count{$lang}--;
+            $err_count{$lang}++;
+            continue;
+        }
+
+        if (preg_match("/^EXTRA ([0-9a-f]{3}:[0-9a-f]{2})/", $line, $m))
+        {
+            $lang = $m[1];
+
+            $warns[$lang][] = "Extra resource found not available in master language: @RES($type:$resource)";
+
+            if ($resources[count($resources)] == "$type $resource")
+            {
+                array_pop($resources);
+            }
+            next;
+        }
+    }
+    pclose($file);
+
+    $missing_rl = array();
+    $notes_rl = array();
+    $missing_count = array();
+
+    foreach ($resources as $resource)
+    {
+        if (isset($notransl[$resource])) continue;
+
+        foreach (array_keys($file_langs) as $lang)
+        {
+            $basic_lang = preg_replace("/:[0-9a-f][0-9a-f]/", ":00", $lang);
+
+            if (!isset($transl_count[$lang]))  $transl_count[$lang] = 0;
+            if (!isset($err_count[$lang]))     $err_count[$lang] = 0;
+            if (!isset($missing_count[$lang])) $missing_count[$lang] = 0;
+
+            if (!isset($reslangs[$resource][$lang]))
+            {
+                if (!isset($reslangs[$resource][$basic_lang]))
+                {
+                    if (!isset($reslangs[$resource]["000:00"]))
+                    {
+                        $missing_rl[$resource][$lang][] = "No translation";
+                        $missing_count[$lang]++;
+                    }
+                    else
+                    {
+                        $notes_rl[$resource][$lang][] = "Translation inherited from neutral resource";
+                        $transl_count[$lang]++;
+                    }
+                }
+                else
+                {
+                    if (!empty($errs_rl[$resource][$basic_lang]))
+                    {
+                        $errs_rl[$resource][$lang][] = "Translation inherited from @LANG($basic_lang): translation out of sync";
+                        $err_count[$lang]++;
+                    }
+                    else
+                    {
+                        $notes_rl[$resource][$lang][] = "Translation inherited from @LANG($basic_lang)";
+                        $transl_count[$lang]++;
+                    }
+                }
+            }
+            else
+            {
+                if (empty($errs_rl[$resource][$lang]))
+                {
+                    $notes_rl[$resource][$lang][] = "Resource translated";
+                }
+            }
+        }
+    }
+
+    foreach (array_keys($file_langs) as $lang)
+    {
+        if (!isset($transl_count[$lang]))  $transl_count[$lang] = 0;
+        if (!isset($err_count[$lang]))     $err_count[$lang] = 0;
+        if (!isset($missing_count[$lang])) $missing_count[$lang] = 0;
+
+        $basic_lang = preg_replace("/:[0-9a-f][0-9a-f]/", ":00", $lang);
+
+        if ($lang == $basic_lang) continue;
+        if (($lang == "009:01") && ($transl_count[$lang] == 0)) continue;
+
+        $langout = fopen("$workdir/$lang", "a+");
+        fwrite($langout, "FILE STAT $dir $transl_count[$lang] $missing_count[$lang] $err_count[$lang]\n");
+
+        if (!empty($warns[$lang]))
+            foreach ($warns[$lang] as $msg)
+                fwrite($langout, "$dir: Warning: $msg\n");
+
+        foreach ($resources as $resource)
+        {
+            if (!empty($errs_rl[$resource][$lang]))
+                foreach ($errs_rl[$resource][$lang] as $msg)
+                    fwrite($langout, "$dir: Error: resource ".resource_name2($resource).": $msg\n");
+
+            if (!empty($missing_rl[$resource][$lang]))
+                foreach ($missing_rl[$resource][$lang] as $msg)
+                    fwrite($langout, "$dir: Missing: resource ".resource_name2($resource).": $msg\n");
+
+            if (!empty($notes_rl[$resource][$lang]))
+                foreach ($notes_rl[$resource][$lang] as $msg)
+                    fwrite($langout, "$dir: note: resource ".resource_name2($resource).": $msg\n");
+        }
+        fclose($langout);
+    }
+
+    foreach (array_keys($languages) as $lang)
+    {
+        if ($transl_count["009:01"] == 0)
+            continue;
+
+        $transl = preg_grep("/$lang/", array_keys($file_langs));
+        if (count($transl) == 0)
+        {
+            $langout = fopen("$workdir/$lang", "a+");
+            fwrite($langout, "FILE NONE $dir 0 ".$transl_count["009:01"]." 0\n");
+            fclose($langout);
+        }
+    }
+}
+
+// Parse config file
+$CONFIG = array();
+if (file_exists("config"))
+{
+    $config = fopen("config", "r");
+    while ($line = fgets($config, 4096))
+    {
+        if (preg_match("/^([A-Z_]+)=([^\s]+)\s*$/", $line, $m))
+        {
+            $CONFIG[$m[1]] = $m[2];
+        }
+        else if (!preg_match("/(^#|^$)/", $line))
+        {
+            print("checkmakefile.pl: Can't parse config line: $line\n");
+        }
+    }
+    fclose($config); 
+}
+
+$srcdir = isset($CONFIG['SOURCEROOT']) ? $CONFIG['SOURCEROOT'] : "";
+$objdir = isset($CONFIG['BUILDROOT']) ? $CONFIG['BUILDROOT'] : "";
+$toolsdir = isset($CONFIG['WRCROOT']) ? $CONFIG['WRCROOT'] : "";
+$workdir = isset($CONFIG['WORKDIR']) ? $CONFIG['WORKDIR'] : "";
+
+$script = $argv[0];
+array_shift($argv);
+while (count($argv) != 0 && preg_match("/^-/", $argv[0]))
+{
+    $opt = array_shift($argv);
+    if ($opt == "-S")
+        $srcdir = array_shift($argv);
+    else if ($opt == "-T")
+        $objdir = array_shift($argv);
+    else if ($opt == "-t")
+        $toolsdir = array_shift($argv);
+    else if ($opt == "-w")
+        $workdir = array_shift($argv);
+    else
+    {
+        fwrite(STDERR, "Usage: $script [options] [makefiles]\n\n");
+        fwrite(STDERR, "  -S dir   Set the top of the Wine source tree\n");
+        fwrite(STDERR, "  -T dir   Set the top of the Wine build tree\n");
+        fwrite(STDERR, "  -t dir   Set the Wine tools directory\n");
+        fwrite(STDERR, "  -w dir   Set the work directory\n");
+        exit(1);
+    }
+}
+
+if ($objdir == "")
+    $objdir = $srcdir;
+if ($toolsdir == "")
+    $toolsdir = $objdir;
+
+$wrc = "$toolsdir/tools/wrc/wrc";
+
+if ($srcdir == "" || $wrc == "/tools/wrc/wrc" || $workdir == "")
+{
+    die("Config entry for SOURCEROOT, WRCROOT or WORKDIR missing\n");
+}
+
+$makefiles = array();
+exec("find $srcdir/ -name Makefile.in -print", $makefiles);
+
+// Parse the makefiles
+$checks = array();
+foreach ($makefiles as $makefile)
+{
+    $path = str_replace("$srcdir/", "", dirname($makefile));
+    if ($path == "programs/winetest" || $path == $srcdir || preg_match("/\/tests$/", $path))
+    {
+        //echo "--- Ignoring: $path/Makefile.in\n";
+        continue;
+    }
+
+    $defs = "";
+    $files = "";
+    $file = fopen("$makefile", "r") or die("Cannot open $makefile");
+    while ($line = fgets($file, 4096))
+    {
+        while (preg_match("/\\\\$/", $line))
+        {
+            $line = trim($line, "\\\\\n");
+            $line .= fgets($file, 4096);
+        }
+
+        if (preg_match("/EXTRARCFLAGS\s*=\s*(.*)/", $line, $m))
+        {
+            $defs = $m[1];
+            if (preg_match("/res16/", $defs))
+                break;
+        }
+
+        if (preg_match("/^(MC|RC)_SRCS\s*=\s*(.*)$/", $line, $m))
+            $files .= " $m[2]";
+    }
+    fclose($file);
+
+    if ($files == "")
+        continue;
+
+    $checks[$path]['defines'] = $defs;
+    $checks[$path]['files'] = $files;
+}
+
+// Check the kernel32 resources for all available languages
+//
+// $languages should contain all the sublanguages found in the kernel32 resources
+//
+$languages = array();
+if (!isset($checks["dlls/kernel32"]))
+    die("kernel32 resource can't be found\n");
+else
+    wrc_parse("locale", "dlls/kernel32", $checks["dlls/kernel32"]);
+
+if (count($languages) == 0)
+    die("Could not retrieve languages from kernel32 resources\n");
+
+foreach ($checks as $key => $value)
+    wrc_parse("normal", $key, $value);
+
+// Create the summary file
+$summary = fopen("$workdir/summary", "w");
+foreach (array_keys($languages) as $lang)
+{
+    $transl = 0;
+    $missing = 0;
+    $errors = 0;
+    $file = fopen("$workdir/$lang", "r");
+    while ($line = fgets($file, 4096))
+    {
+        if (preg_match("/^FILE [A-Z]+ .* ([0-9]+) ([0-9]+) ([0-9]+)$/", $line, $m))
+        {
+            $transl += $m[1];
+            $missing += $m[2];
+            $errors += $m[3];
+        }
+    }
+    fclose($file);
+    $sum = $transl + $missing + $errors;
+    fwrite($summary, "LANG $lang $sum $transl $missing $errors\n");
+}
+fclose($summary);
+?>
-- 
1.6.0.6


--------------050900010008050500050405--



More information about the wine-patches mailing list