trisquel-icecat/icecat/debian/build/refresh-supported-locales.pl

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);