aboutsummaryrefslogblamecommitdiffstats
path: root/po/update.pl
blob: 9ca5a33d8aac9ee4a59265eab7a7faedb0bbd4af (plain) (tree)
1
2
3
4
5
6

                  
                           


                                        






                                                                           

 
                   
                    
                        

       









                                                           
                 
     
                                                 
              
     





                                                 

             
                                                     




                       
 









                            
 







                                                                                          
 













                                                                                     
 

                                                            
 




                                                                                
 

                   
 





                                     
         


                                                           
 






                                                     
             
         

     

                            
 


                       
     











                                                                                 
     



                                                            
 






                                                           
 
                                             






                                                                  















                                                                 
 
               
 


                
 
            
 










                                                                                         
 







                                                   


                          

 
                



                                                               






                                      
#!/usr/bin/perl -w

#  GNOME PO Update Utility.
#  (C) 2000 The Free Software Foundation
#
#  Author(s): Kenneth Christiansen
#
#  GNOME PO Update Utility requires the XML to POT Generator, ui-extract.pl
#  Please distribute it along with this scrips, aswell as desk.po and
#  README.tools.
#
#  Also remember to change $PACKAGE to reflect the package the script is
#  used within.


$VERSION = "1.3.2";
$LANG    = $ARGV[0];
$PACKAGE  = "evolution";
$| = 1;


if (! $LANG){
    print "update.pl:  missing file arguments\n";
    print "Try `update.pl --help' for more information.\n";
    exit;
}

if ($LANG=~/^-(.)*/){

    if ("$LANG" eq "--version" || "$LANG" eq "-V"){
        &Version;
    }
    elsif ($LANG eq "--help" || "$LANG" eq "-H"){
    &Help;
    }
    elsif ($LANG eq "--dist" || "$LANG" eq "-D"){
        &Merging;
#       &Status;
    }
    elsif ($LANG eq "--pot" || "$LANG" eq "-P"){
    &GeneratePot;
        exit;
    }
    elsif ($LANG eq "--maintain" || "$LANG" eq "-M"){
        &Maintain;
    }
    else {
        &InvalidOption;
    }

} else {
   if(-s "$LANG.po"){
    &GeneratePot;
    &Merging;
    &Status;
   }  
   else {
    &NotExisting;       
   }
}

sub Version{
    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";
    print "This is free software; see the source for copying conditions.  There is NO\n";
    print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n";
    exit;
}

sub Help{
    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 "  -M, --maintain               search for missing files in POTFILES.in\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";
    print "Report bugs to <kenneth\@gnome.org>.\n";
    exit;
}

sub Maintain{
    $a="find ../ -print | egrep '.*\\.(c|y|cc|c++|h|gob)' ";

    open(BUF2, "POTFILES.in") || die "update.pl:  there's not POTFILES.in!!!\n";
    
    print "Searching for missing _(\" \") entries...\n";
    
    open(BUF1, "$a|");

    @buf2 = <BUF2>;
    @buf1 = <BUF1>;

    if (-s "POTFILES.ignore"){
        open FILE, "POTFILES.ignore";
        while (<FILE>) {
            if ($_=~/^[^#]/o){
                push @bup, $_;
            }
        }
        print "POTFILES.ignore found! Ignoring files...\n";
        @buf2 = (@bup, @buf2);
    }

    foreach my $file (@buf1){
        open FILE, "<$file";
        while (<FILE>) {
            if ($_=~/_\(\"/o){
                $file = unpack("x3 A*",$file) . "\n";
                push @buff1, $file;
                last;
            }
        }
    }

    @bufff1 = sort (@buff1);
    @bufff2 = sort (@buf2);

    my %in2;
    foreach (@bufff2) {
       $in2{$_} = 1;
    }

    foreach (@bufff1){
       if (!exists($in2{$_})){
           push @result, $_ }
       }

    if(@result){
        open OUT, ">POTFILES.in.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";
    }
    else{
        print "\nWell, it's all perfect! Congratulation!\n";
    }         
}

sub InvalidOption{
    print "update.pl: invalid option -- $LANG\n";
    print "Try `update.pl --help' for more information.\n";
}
 

sub GeneratePot{

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

    close FILE;

    system($c);
    system($c1);
}

sub Merging{

    if ($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";
    }

    $d="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);
    
    if ($ARGV[0] ne "--dist" && $ARGV[0] ne "-D") {
        print "\n\n";
    }

    unlink "messages";
    unlink "$LANG.po.old";
}

sub NotExisting{
    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";
    
    system($f);
    print "\n";   
}