aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--find-lang.pl65
-rw-r--r--tests/findlang.pl15
2 files changed, 58 insertions, 22 deletions
diff --git a/find-lang.pl b/find-lang.pl
index 8b4f007..d87bef9 100644
--- a/find-lang.pl
+++ b/find-lang.pl
@@ -36,46 +36,52 @@ File::Find::find(
my $file = substr($File::Find::name, length($buildroot));
-f $File::Find::name or return;
debug("next file is %s", $file);
- my ($pkg, $lang, $parent);
my $langfile = $file;
if ($file =~ m:^((.*/share/locale)/([^/@]+)[^/]*).*/([^/]+)\.mo:) {
if ($withoutmo) {
return;
}
- ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
- } elsif ($file =~ m:^((.*/gnome/help)/([^/]+)/([^/]+)).*$:) {
+ my ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
+ if (pkg_match($pkg)) {
+ parent_to_own($langfile, $file, $lang);
+ }
+ } elsif ($file =~ m:^((.*/gnome/help)/([^/]+)/([^/]+)).*:) {
if (!$withgnome) {
return;
}
- ($pkg, $lang, $parent, $langfile) = ($3, $4, $2, $1);
- } elsif ($file =~ m:^((.*/doc/kde)/HTML/([^/@]+)[^/]*)/([^/]+)/.*$:) {
+ my ($pkg, $lang, $parent, $langfile) = ($3, $4, $2, $1);
+ if (pkg_match($pkg)) {
+ parent_to_own($langfile, $file, $lang);
+ }
+ } elsif ($file =~ m:^((.*/doc/kde)/HTML/([^/@]+)[^/]*)/([^/]+)/.*:) {
if (!$withkde) {
return;
}
- ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
- } elsif ($file =~ m:^((.*/doc)/HTML/([^/@]+)[^/]*)/([^/_]+).*$:) {
+ my ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
+ if (pkg_match($pkg)) {
+ parent_to_own($langfile, $file, $lang);
+ }
+ } elsif ($file =~ m:^((.*/doc)/HTML/([^/@]+)[^/]*)/([^/_]+).*:) {
if (!$withhtml) {
return;
}
- ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
- } elsif ($file =~ m:^((/+usr/share/man)/([^/@\.]+)[^/]*)/man[^/]+/([^/.]+)\.\d[^/]*$:) {
+ my ($pkg, $lang, $parent, $langfile) = ($4, $3, $2, $1);
+ if (pkg_match($pkg)) {
+ parent_to_own($langfile, $file, $lang);
+ }
+ } elsif ($file =~ m:^((/+usr/share/man)/([^/@\.]+)[^/]*)/man[^/]+/([^/.]+)\.\d[^/]*:) {
if (!$withman) {
return;
}
- ($pkg, $lang, $parent, $langfile) = ($4, $3, undef, $1);
+ my ($pkg, $lang, $parent, $langfile) = ($4, $3, undef, $1);
$file =~ s/\.[^\.]+$//;
$file .= '.*';
+ if (pkg_match($pkg)) {
+ parent_to_own($langfile, $file, $lang);
+ }
} else {
return;
}
- if (! ((grep { $_ eq $pkg } @searchname) || $allname)) {
- return;
- }
-
- parent_to_own($parent, $langfile, $lang) if ($parent);
- $finallist{$langfile}{'lang'}{$lang} = 1;
- debug("File %s will be %s", $langfile, $lang);
-
},
$buildroot || '/'
);
@@ -100,14 +106,37 @@ close($hlang);
exit(0);
+sub pkg_match {
+ my ($pkg) = @_;
+ if ($allname) { return 1 };
+ if (grep { $_ eq $pkg } @searchname) {
+ return 1;
+ }
+ return;
+}
+
sub parent_to_own {
my ($parent, $file, $lang) = @_;
+ debug("parent_to_own: $parent, $file, $lang");
+ if ($allname) {
+ #my @subdir = grep { $_ } split('/', substr($file, length($parent)));
+ #$parent .= '/' . shift(@subdir);
+ $finallist{$parent}{'lang'}{$lang} = 1;
+ debug("Parent %s will be %s", $parent, $lang);
+ } else {
my @subdir = grep { $_ } split('/', substr($file, length($parent)));
pop(@subdir);
+ $finallist{$parent}{dir} = 1;
+ $finallist{$parent}{'lang'}{$lang} = 1;
+ debug("Parent %s will be %s", $parent, $lang);
while (my $part = shift(@subdir)) {
$parent .= "/$part";
$finallist{$parent}{dir} = 1;
$finallist{$parent}{'lang'}{$lang} = 1;
debug("Parent %s will be %s", $parent, $lang);
}
+ $finallist{$file}{'lang'}{$lang} = 1;
+ debug("Parent %s will be %s", $file, $lang);
+
+ }
}
diff --git a/tests/findlang.pl b/tests/findlang.pl
index fa6dbae..d601728 100644
--- a/tests/findlang.pl
+++ b/tests/findlang.pl
@@ -12,11 +12,17 @@ my $testarbo = "$pwd/find-lang-root";
my %files = (
# file => [ lang, is_%dir ]
- '/usr/share/man/fr' => [ 'fr', 0 ],
- '/usr/share/locale/pt_BR' => [ 'pt_BR', 0 ],
- '/usr/share/gnome/help/lang/pt_BR' => [ 'pt_BR', 0 ],
- '/usr/share/gnome/help/lang/en_GB' => [ 'en_GB', 0 ],
+ '/usr/share/man/fr' => [ 'fr', 1 ],
+ '/usr/share/man/fr/man1' => [ 'fr', 1 ],
+ '/usr/share/man/fr/man1/lang.1.*' => [ 'fr', 0 ],
+ '/usr/share/locale/pt_BR' => [ 'pt_BR', 1 ],
+ '/usr/share/gnome/help/lang/pt_BR' => [ 'pt_BR', 1 ],
+ '/usr/share/gnome/help/lang/pt_BR/any.html' => [ 'pt_BR', 0 ],
+ '/usr/share/gnome/help/lang/en_GB' => [ 'en_GB', 1 ],
+ '/usr/share/gnome/help/lang/en_GB/any.html' => [ 'en_GB', 0 ],
'/usr/share/gnome/help/lang' => [ '', 1 ],
+ '/usr/share/locale/pt_BR/LC_MESSAGES' => [ 'pt_BR', 1 ],
+ '/usr/share/locale/pt_BR/LC_MESSAGES/lang.mo' => [ 'pt_BR', 0 ],
);
system("/usr/bin/perl find-lang.pl $testarbo lang --with-man --with-gnome") and die "can't run find-lang $@";
@@ -31,6 +37,7 @@ while (my $line = <$h>) {
$lang ||= '';
my $dir = $line =~ /%dir/;
$dir ||= 0;
+ print STDERR "$file\n";
is($lang, $files{$file}[0], "lang is find");
is($dir, $files{$file}[1], "%dir is properly set if need");
}