aboutsummaryrefslogtreecommitdiffstats
path: root/po/update.pl
diff options
context:
space:
mode:
Diffstat (limited to 'po/update.pl')
-rwxr-xr-xpo/update.pl271
1 files changed, 199 insertions, 72 deletions
diff --git a/po/update.pl b/po/update.pl
index 9ca5a33d8a..e7fc4a4253 100755
--- a/po/update.pl
+++ b/po/update.pl
@@ -5,7 +5,7 @@
#
# Author(s): Kenneth Christiansen
#
-# GNOME PO Update Utility requires the XML to POT Generator, ui-extract.pl
+# GNOME PO Update Utility can use the XML to POT Generator, ui-extract.pl
# Please distribute it along with this scrips, aswell as desk.po and
# README.tools.
#
@@ -13,32 +13,51 @@
# used within.
-$VERSION = "1.3.2";
-$LANG = $ARGV[0];
-$PACKAGE = "evolution";
-$| = 1;
+# Declare global variables
+#-------------------------
+my $VERSION = "1.5beta4";
+my $LANG = $ARGV[0];
+my $PACKAGE = "evolution";
+# Always print as the first thing
+#--------------------------------
+$| = 1;
+# Give error if script is run without an argument
+#------------------------------------------------
if (! $LANG){
print "update.pl: missing file arguments\n";
print "Try `update.pl --help' for more information.\n";
exit;
}
+# Use the supplied arguments
+#---------------------------
if ($LANG=~/^-(.)*/){
- if ("$LANG" eq "--version" || "$LANG" eq "-V"){
+ if ("$LANG" eq "--version" || "$LANG" eq "-V"){
&Version;
}
- elsif ($LANG eq "--help" || "$LANG" eq "-H"){
+ elsif ($LANG eq "--help" || "$LANG" eq "-H"){
&Help;
}
- elsif ($LANG eq "--dist" || "$LANG" eq "-D"){
+ elsif ($LANG eq "--dist" || "$LANG" eq "-D"){
&Merging;
-# &Status;
}
- elsif ($LANG eq "--pot" || "$LANG" eq "-P"){
+ elsif ($LANG eq "--pot" || "$LANG" eq "-P"){
+
+ # Check for .headerlock file, so the Makefile
+ # will not generate the header files twise
+ #--------------------------------------------
+ if (-e ".headerlock"){
&GeneratePot;
+ }else{
+ &GenHeaders;
+ &GeneratePot;}
+ exit;
+ }
+ elsif ($LANG eq "--headers" || "$LANG" eq "-S"){
+ &GenHeaders;
exit;
}
elsif ($LANG eq "--maintain" || "$LANG" eq "-M"){
@@ -49,17 +68,28 @@ if ($LANG=~/^-(.)*/){
}
} else {
+
+ # Run standard procedure
+ #-----------------------
if(-s "$LANG.po"){
+ &GenHeaders;
&GeneratePot;
&Merging;
&Status;
}
+
+ # Report error if the language file supplied
+ # to the command line is non-existent
+ #-------------------------------------------
else {
&NotExisting;
}
}
sub Version{
+
+ # Print version information
+ #--------------------------
print "GNOME PO Updater $VERSION\n";
print "Written by Kenneth Christiansen <kenneth\@gnome.org>, 2000.\n\n";
print "Copyright (C) 2000 Free Software Foundation, Inc.\n";
@@ -69,13 +99,16 @@ sub Version{
}
sub Help{
+
+ # Print usage information
+ #------------------------
print "Usage: ./update.pl [OPTIONS] ...LANGCODE\n";
print "Updates pot files and merge them with the translations.\n\n";
- print " -V, --version shows the version\n";
print " -H, --help shows this help page\n";
- print " -P, --pot only generates the potfile\n";
-# print " -S, --status shows the status of the po file\n";
+ print " -P, --pot generate the pot file only\n";
+ print " -S, --headers generate the XML headerfiles in POTFILES.in\n";
print " -M, --maintain search for missing files in POTFILES.in\n";
+ print " -V, --version shows the version\n";
print "\nExamples of use:\n";
print "update.sh --pot just creates a new pot file from the source\n";
print "update.sh da created new pot file and updated the da.po file\n\n";
@@ -84,139 +117,233 @@ sub Help{
}
sub Maintain{
- $a="find ../ -print | egrep '.*\\.(c|y|cc|c++|h|gob)' ";
+
+ # Search and fine, all translatable files
+ # ---------------------------------------
+ $i18nfiles="find ../ -print | egrep '.*\\.(c|y|cc|c++|h|gob)' ";
- open(BUF2, "POTFILES.in") || die "update.pl: there's not POTFILES.in!!!\n";
+ open(BUF2, "POTFILES.in") || die "update.pl: there's no POTFILES.in!!!\n";
print "Searching for missing _(\" \") entries...\n";
- open(BUF1, "$a|");
+ open(BUF1, "$i18nfiles|");
- @buf2 = <BUF2>;
- @buf1 = <BUF1>;
+ @buf1_1 = <BUF1>;
+ @buf1_2 = <BUF2>;
- if (-s "POTFILES.ignore"){
- open FILE, "POTFILES.ignore";
+ # Check if we should ignore some found files, when
+ # comparing with POTFILES.in
+ #-------------------------------------------------
+ if (-s ".potignore"){
+ open FILE, ".potignore";
while (<FILE>) {
if ($_=~/^[^#]/o){
push @bup, $_;
}
}
- print "POTFILES.ignore found! Ignoring files...\n";
- @buf2 = (@bup, @buf2);
+ print "Found .potignore: Ignoring files...\n";
+ @buf1_2 = (@bup, @buf1_2);
}
- foreach my $file (@buf1){
+ foreach my $file (@buf1_1){
open FILE, "<$file";
while (<FILE>) {
if ($_=~/_\(\"/o){
$file = unpack("x3 A*",$file) . "\n";
- push @buff1, $file;
+ push @buf2_1, $file;
last;
}
}
}
- @bufff1 = sort (@buff1);
- @bufff2 = sort (@buf2);
+ @buf3_1 = sort (@buf2_1);
+ @buf3_2 = sort (@buf1_2);
my %in2;
- foreach (@bufff2) {
- $in2{$_} = 1;
+ foreach (@buf3_2) {
+ $in2{$_} = 1;
}
- foreach (@bufff1){
- if (!exists($in2{$_})){
- push @result, $_ }
- }
+ foreach (@buf3_1){
+ if (!exists($in2{$_})){
+ push @result, $_
+ }
+ }
+ # Save file with information about the files missing
+ # if any, and give information about this proceedier
+ #---------------------------------------------------
if(@result){
- open OUT, ">POTFILES.in.missing";
+ open OUT, ">missing";
print OUT @result;
- print "\nHere are the results:\n\n", @result, "\n";
- print "File POTFILES.in.missing is being placed in directory...\n";
- print "Please add the files that should be ignored in POTFILES.ignore\n";
+ print "\nHere is the result:\n\n", @result, "\n";
+ print "The file \"missing\" has been placed in the current directory.\n";
+ print "Files supposed to be ignored should be placed in \".potignore\"\n";
}
+
+ # If there is nothing to complain about, notice the user
+ #-------------------------------------------------------
else{
print "\nWell, it's all perfect! Congratulation!\n";
}
}
sub InvalidOption{
+
+ # Handle invalid arguments
+ #-------------------------
print "update.pl: invalid option -- $LANG\n";
print "Try `update.pl --help' for more information.\n";
}
+sub GenHeaders{
-sub GeneratePot{
+ # Generate the .h header files, so we can allow glade and
+ # xml translation support
+ #--------------------------------------------------------
+ if(-s "ui-extract.pl"){
+
+ print "Found ui-extract.pl script\nRunning ui-extract...\n";
- print "Building the $PACKAGE.pot...\n\n";
-
- $c="xgettext --default-domain\=$PACKAGE --directory\=\.\."
- ." --add-comments --keyword\=\_ --keyword\=N\_"
- ." --files-from\=\.\/POTFILES\.in ";
- $c1="test \! -f $PACKAGE\.po \|\| \( rm -f \.\/$PACKAGE\.pot "
- ."&& mv $PACKAGE\.po \.\/$PACKAGE\.pot \)";
-
- if (-s "ui-extract.pl"){
- open FILE, "<POTFILES.in";
- while (<FILE>) {
- if ($_=~ /(.*)(\.xml\.h)/o){
- $filename = "$1\.xml";
- $xmlfiles="\.\/ui-extract.pl --update ../$filename";
- system($xmlfiles);
- }
-
- elsif ($_=~ /(.*)(\.glade\.h)/o){
- $filename = "$1\.glade";
- $xmlfiles="\.\/ui-extract.pl --update ../$filename";
- system($xmlfiles);
- }
+ open FILE, "<POTFILES.in";
+ while (<FILE>) {
+
+ # Find .xml.h files in POTFILES.in and generate the
+ # files with help from the ui-extract.pl script
+ #--------------------------------------------------
+ if ($_=~ /(.*)(\.xml)/o){
+ $filename = "../$1.xml";
+ $xmlfiles="perl \.\/ui-extract.pl --update $filename";
+ system($xmlfiles);
+ }
+
+ # Find .glade.h files in POTFILES.in and generate
+ # the files with help from the ui-extract.pl script
+ #--------------------------------------------------
+ elsif ($_=~ /(.*)(\.glade)/o){
+ $filename = "../$1.glade";
+ $xmlfiles="perl \.\/ui-extract.pl --update $filename";
+ system($xmlfiles);
+ }
}
+ close FILE;
+
+ # Create .headerlock file, so the script will know
+ # that we already passed this section. This is required
+ # since the individual sections can be reaced at different
+ # times by the Makefile
+ #---------------------------------------------------------
+ system("touch .headerlock");
+ }
+}
+
+sub GeneratePot{
+
+ # Generate the potfiles from the POTFILES.in file
+ #------------------------------------------------
+
+ print "Building the $PACKAGE.pot...\n";
+
+ system ("mv POTFILES.in POTFILES.in.old");
+
+ open INFILE, "<POTFILES.in.old";
+ open OUTFILE, ">POTFILES.in";
+ while (<INFILE>) {
+ s/\.glade$/\.glade\.h/;
+ s/\.xml$/\.xml\.h/;
+ print OUTFILE $_;
}
+ close OUTFILE;
+ close INFILE;
+
+ $GETTEXT ="xgettext --default-domain\=$PACKAGE --directory\=\.\."
+ ." --add-comments --keyword\=\_ --keyword\=N\_"
+ ." --files-from\=\.\/POTFILES\.in ";
+ $GTEST ="test \! -f $PACKAGE\.po \|\| \( rm -f \.\/$PACKAGE\.pot "
+ ."&& mv $PACKAGE\.po \.\/$PACKAGE\.pot \)";
+
+ system($GETTEXT);
+ system($GTEST);
+ print "Wrote $PACKAGE.pot\n";
+ system("mv POTFILES.in.old POTFILES.in");
+
+ # If .headerlock file is found, it means that the potfiles
+ # already has been generated. If so delete the generated
+ # .h header files. The reason for this approach with a
+ # file as a marker is due to that the Makefile runs the
+ # scripts in turns
+ #---------------------------------------------------------
- close FILE;
+ if(-e ".headerlock"){
+ unlink(".headerlock");
- system($c);
- system($c1);
+ print "Removing generated header (.h) files...";
+
+ open FILE, "<POTFILES.in";
+ while (<FILE>) {
+
+ # Delete header files coming from xml files
+ #------------------------------------------
+ if ($_=~ /(.*)(\.xml)/o){
+ $filename = "../$1.xml.h";
+ unlink($filename);
+ }
+
+ # Delete header files coming from glade files
+ #--------------------------------------------
+ elsif ($_=~ /(.*)(\.glade)/o){
+ $filename = "../$1.glade.h";
+ unlink($filename);
+ }
+ }
+ close FILE;
+ }
+ print "done\n";
}
sub Merging{
if ($ARGV[1]){
- $LANG = $ARGV[1];
+ $LANG = $ARGV[1];
} else {
$LANG = $ARGV[0];
}
if ($ARGV[0] ne "--dist" && $ARGV[0] ne "-D") {
- print "\n\nMerging $LANG.po with $PACKAGE.pot, creating updated $LANG.po...\n\n";
+ print "Merging $LANG.po with $PACKAGE.pot...";
}
- $d="cp $LANG.po $LANG.po.old && msgmerge $LANG.po.old $PACKAGE.pot -o $LANG.po";
+ $MERGE="cp $LANG.po $LANG.po.old && msgmerge $LANG.po.old $PACKAGE.pot -o $LANG.po";
- if ($ARGV[0] ne "--dist" && $ARGV[0] ne "-D") {
- print "Working, please wait";
- }
- system($d);
+ system($MERGE);
if ($ARGV[0] ne "--dist" && $ARGV[0] ne "-D") {
print "\n\n";
}
+ # Remove the "messages" trash file generated
+ # by gettext, aswell as the backup file
+ #-------------------------------------------
unlink "messages";
unlink "$LANG.po.old";
}
sub NotExisting{
- print "update.pl: sorry $LANG.po does not exist!\n";
+
+ # Report error if supplied language
+ # file is non-existant
+ #----------------------------------
+ print "update.pl: sorry, $LANG.po does not exist!\n";
print "Try `update.pl --help' for more information.\n";
exit;
}
sub Status{
- $f="msgfmt --statistics $LANG.po";
+
+ # Print status information about the po file
+ #-------------------------------------------
+ $STATUS="msgfmt --statistics $LANG.po";
- system($f);
+ system($STATUS);
print "\n";
}