156 lines
4.7 KiB
Perl
156 lines
4.7 KiB
Perl
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
my $moz_supported_file;
|
|
my $lpom_dir;
|
|
|
|
my %blacklist;
|
|
my %locale2pkgname;
|
|
my %languages;
|
|
|
|
my %pkglist;
|
|
|
|
my $file;
|
|
|
|
while (@ARGV) {
|
|
my $arg = shift(@ARGV);
|
|
if ($arg eq '-s') {
|
|
$moz_supported_file = shift(@ARGV);
|
|
} elsif ($arg eq '-l') {
|
|
$lpom_dir = shift(@ARGV);
|
|
} else {
|
|
die "Unknown argument '$arg'";
|
|
}
|
|
}
|
|
|
|
(defined($moz_supported_file)) || die "Need to specify a supported language list";
|
|
|
|
if (defined($lpom_dir)) {
|
|
my $lang_file = "$lpom_dir/maps/languages";
|
|
my $map_file = "$lpom_dir/maps/locale2pkgname";
|
|
my $variant_file = "$lpom_dir/maps/variants";
|
|
|
|
open($file, $lang_file) or die "Failed to open $lang_file";
|
|
while (<$file>) {
|
|
chomp($_);
|
|
my $langcode = my $lang = $_;
|
|
$langcode =~ s/([^:]*):*([^:]*)/$1/;
|
|
$lang =~ s/([^:]*):*([^:]*)/$2/;
|
|
if ($lang ne "") { $languages{$langcode} = $lang; }
|
|
}
|
|
close($file);
|
|
|
|
open($file, $map_file) or die "Failed to open $map_file";
|
|
while (<$file>) {
|
|
chomp($_);
|
|
my $langcode = my $pkgname = $_;
|
|
$langcode =~ s/([^:]*):*([^:]*)/$1/;
|
|
$pkgname =~ s/([^:]*):*([^:]*)/$2/;
|
|
if ($pkgname ne "") { $locale2pkgname{$langcode} = $pkgname; }
|
|
}
|
|
close($file);
|
|
|
|
open($file, $variant_file) or die "Failed to open $variant_file";
|
|
while (<$file>) {
|
|
chomp($_);
|
|
my $langcode = my $lang = $_;
|
|
$langcode =~ s/([^:]*):*([^:]*)/$1/;
|
|
$lang =~ s/([^:]*):*([^:]*)/$2/;
|
|
if ($lang ne "") { $languages{$langcode} = $lang; }
|
|
}
|
|
close($file);
|
|
}
|
|
|
|
if (-e "debian/config/locales.all") {
|
|
open($file, "debian/config/locales.all");
|
|
while (<$file>) {
|
|
$_ =~ s/#.*//; s/\s*$//;
|
|
/^$/ || do {
|
|
chomp($_);
|
|
my $pkgname = my $lang = $_;
|
|
$pkgname =~ s/([^:]*):*([^:]*)/$1/;
|
|
$lang =~ s/([^:]*):*([^:]*)/$2/;
|
|
$pkglist{$pkgname} = 1;
|
|
if ($lang ne "") { $languages{$pkgname} = $lang; }
|
|
}
|
|
}
|
|
}
|
|
|
|
if (-e "debian/config/locales.shipped") {
|
|
open($file, "debian/config/locales.shipped");
|
|
while (<$file>) {
|
|
$_ =~ s/#.*//; s/\s*$//;
|
|
/^$/ || do {
|
|
chomp($_);
|
|
my $langcode = my $pkgname = $_;
|
|
$langcode =~ s/([^:]*):*([^:]*)/$1/;
|
|
$pkgname =~ s/([^:]*):*([^:]*)/$2/;
|
|
if ($pkgname eq "") { die "Malformed locales.shipped file"; }
|
|
if (not exists $pkglist{$pkgname}) {
|
|
die "WTF? Language in locales.shipped is not present in locales.all. Did we produce broken output last time?";
|
|
}
|
|
$locale2pkgname{lc($langcode)} = $pkgname;
|
|
}
|
|
}
|
|
close($file);
|
|
}
|
|
|
|
if (-e "debian/config/locales.blacklist") {
|
|
open($file, "debian/config/locales.blacklist");
|
|
while (<$file>) {
|
|
$_ =~ s/#.*//; s/\s*$//;
|
|
/^$/ || do {
|
|
chomp($_);
|
|
$blacklist{$_} = 1;
|
|
}
|
|
}
|
|
close($file);
|
|
}
|
|
|
|
my $have_language = 0;
|
|
|
|
open($file, $moz_supported_file) or die "Failed to open $moz_supported_file";
|
|
open(my $outfile, ">debian/config/locales.shipped");
|
|
while (<$file>) {
|
|
chomp($_);
|
|
my $langcode = my $platforms = $_;
|
|
$langcode =~ s/^([[:alnum:]\-]*)[[:space:]]*(.*)/$1/;
|
|
$platforms =~ s/^([[:alnum:]\-]*)[[:space:]]*(.*)/$2/;
|
|
next if (($langcode eq "en-US") ||
|
|
(($platforms ne "") && (rindex($platforms, "linux") eq -1)) ||
|
|
(exists $blacklist{$langcode}));
|
|
my $llangcode = lc($langcode);
|
|
my $pkgname = $llangcode;
|
|
if (exists $locale2pkgname{$llangcode}) { $pkgname = $locale2pkgname{$llangcode}; }
|
|
if (not exists $languages{$pkgname}) {
|
|
if ($pkgname eq $llangcode) { $pkgname =~ s/\-.*//; }
|
|
if (not exists $languages{$pkgname}) { die "No description for $pkgname"; }
|
|
}
|
|
if ($have_language eq 0) {
|
|
print $outfile "# List of shipped locales. This list is automatically generated. Do not edit by hand\n";
|
|
}
|
|
$have_language = 1;
|
|
print $outfile "$langcode:$pkgname\n";
|
|
$pkglist{$pkgname} = 1;
|
|
}
|
|
|
|
if ($have_language eq 0) {
|
|
print $outfile "# Placeholder file for the list of shipped languages. Do not delete";
|
|
}
|
|
close($file);
|
|
close($outfile);
|
|
|
|
open($outfile, ">debian/config/locales.all");
|
|
my @completelist = keys(%pkglist);
|
|
if (scalar(@completelist) gt 0) {
|
|
@completelist = sort(@completelist);
|
|
print $outfile "# List of all language packs, past and present. Please don't delete any entries from this file\n";
|
|
foreach my $lang (@completelist) {
|
|
if (not exists $languages{$lang}) { die "How on earth did we get here?"; }
|
|
my $desc = $languages{$lang};
|
|
print $outfile "$lang:$desc\n";
|
|
}
|
|
} else { print $outfile "# Placeholder file for the list of all language packs. Do not delete"; }
|
|
close($outfile);
|