diff options
Diffstat (limited to 'po/update.pl')
-rwxr-xr-x | po/update.pl | 271 |
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"; } |