[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