~ubuntu-branches/ubuntu/lucid/tomboy/lucid-proposed

« back to all changes in this revision

Viewing changes to intltool-update.in

Tags: upstream-0.3.9+dfsg
ImportĀ upstreamĀ versionĀ 0.3.9+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
 
31
31
## Release information
32
32
my $PROGRAM = "intltool-update";
33
 
my $VERSION = "0.31.2";
 
33
my $VERSION = "0.35.0";
34
34
my $PACKAGE = "intltool";
35
35
 
36
36
## Loaded modules
74
74
"kbd(?:\\.in)+";        # GOK specific. 
75
75
 
76
76
my $ini_support =
 
77
"icon(?:\\.in)+|".      # http://www.freedesktop.org/Standards/icon-theme-spec
77
78
"desktop(?:\\.in)+|".   # http://www.freedesktop.org/Standards/menu-spec
78
79
"caves(?:\\.in)+|".     # GNOME Games specific
79
80
"directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec
80
81
"soundlist(?:\\.in)+|". # GNOME specific
81
82
"keys(?:\\.in)+|".      # GNOME Mime database specific
82
 
"theme(?:\\.in)+";      # http://www.freedesktop.org/Standards/icon-theme-spec
 
83
"theme(?:\\.in)+|".     # http://www.freedesktop.org/Standards/icon-theme-spec
 
84
"service(?:\\.in)+";    # DBus specific
83
85
 
84
86
my $buildin_gettext_support = 
85
87
"c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py";
94
96
$SRCDIR = $ENV{"srcdir"} if $ENV{"srcdir"};
95
97
$POTFILES_in = "<$SRCDIR/POTFILES.in";
96
98
 
 
99
my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null');
 
100
 
97
101
## Handle options
98
102
GetOptions 
99
103
(
121
125
&Console_Write_IntltoolHelp if $arg_count > 1;
122
126
 
123
127
# --version and --help don't require a module name
124
 
my $MODULE = $GETTEXT_PACKAGE || &FindPackageName;
 
128
my $MODULE = $GETTEXT_PACKAGE || &FindPackageName || "unknown";
125
129
 
126
130
if ($POT_ARG)
127
131
{
148
152
 
149
153
    ## Report error if the language file supplied
150
154
    ## to the command line is non-existent
151
 
    &Console_WriteError_NotExisting("$lang.po") if ! -s "$lang.po";
 
155
    &Console_WriteError_NotExisting("$SRCDIR/$lang.po")
 
156
        if ! -s "$SRCDIR/$lang.po";
152
157
 
153
158
    if (!$DIST_ARG)
154
159
    {
211
216
    exit;
212
217
}
213
218
 
 
219
sub echo_n
 
220
{
 
221
    my $str = shift;
 
222
    my $ret = `echo "$str"`;
 
223
 
 
224
    $ret =~ s/\n$//; # do we need the "s" flag?
 
225
 
 
226
    return $ret;
 
227
}
 
228
 
214
229
sub POFile_DetermineType ($) 
215
230
{
216
231
   my $type = $_;
283
298
    return $gettext_code;
284
299
}
285
300
 
 
301
sub isNotValidMissing
 
302
{
 
303
    my ($file) = @_;
 
304
 
 
305
    return if $file =~ /^\{arch\}\/.*$/;
 
306
    return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/;
 
307
}
286
308
 
287
309
sub FindLeftoutFiles
288
310
{
397
419
 
398
420
            if (/\.GetString ?\(QUOTEDTEXT/)
399
421
            {
400
 
                ## Remove the first 3 chars and add newline
401
 
                push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
422
                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
 
423
                    ## Remove the first 3 chars and add newline
 
424
                    push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
425
                }
402
426
                last;
403
427
            }
404
428
 
405
429
            if (/_\(QUOTEDTEXT/)
406
430
            {
407
 
                ## Remove the first 3 chars and add newline
408
 
                push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
431
                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
 
432
                    ## Remove the first 3 chars and add newline
 
433
                    push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
434
                }
409
435
                last;
410
436
            }
411
437
        }
419
445
        while (<FILE>) 
420
446
        {
421
447
            # FIXME: share the pattern matching code with intltool-extract
422
 
            if (/\s_(.*)=\"/ || /<_[^>]+>/ || /translatable=\"yes\"/)
 
448
            if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/)
423
449
            {
424
 
                push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
450
                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
 
451
                    push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
452
                }
425
453
                last;
426
454
            }
427
455
        }
435
463
        {
436
464
            if (/_(.*)=/)
437
465
            {
438
 
                push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
466
                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
 
467
                    push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
468
                }
439
469
                last;
440
470
            }
441
471
        }
444
474
 
445
475
    foreach my $file (@buf_i18n_xml_unmarked)
446
476
    {
447
 
        push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
477
        if (defined isNotValidMissing (unpack("x3 A*", $file))) {
 
478
            push @buf_allfiles, unpack("x3 A*", $file) . "\n";
 
479
        }
448
480
    }
449
481
 
450
482
 
525
557
 
526
558
sub GenerateHeaders
527
559
{
528
 
    my $EXTRACT = `which intltool-extract 2>/dev/null`;
 
560
    my $EXTRACT = "@INTLTOOL_EXTRACT@";
529
561
    chomp $EXTRACT;
530
562
 
531
563
    $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"};
579
611
#
580
612
sub GeneratePOTemplate
581
613
{
582
 
    my $XGETTEXT = `which xgettext 2>/dev/null`;
583
 
    my $XGETTEXT_ARGS = '';
 
614
    my $XGETTEXT = $ENV{"XGETTEXT"} || "@INTLTOOL_XGETTEXT@";
 
615
    my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || '';
584
616
    chomp $XGETTEXT;
585
617
 
586
 
    $XGETTEXT = $ENV{"XGETTEXT"} if $ENV{"XGETTEXT"};
587
 
    $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} if $ENV{"XGETTEXT_ARGS"};
588
 
 
589
618
    if (! -x $XGETTEXT)
590
619
    {
591
620
        print STDERR " *** xgettext is not found on this system!\n".
597
626
 
598
627
    open INFILE, $POTFILES_in;
599
628
    unlink "POTFILES.in.temp";
600
 
    open OUTFILE, ">POTFILES.in.temp";
 
629
    open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing");
601
630
 
602
631
    my $gettext_support_nonascii = 0;
603
632
 
604
633
    # checks for GNU gettext >= 0.12
605
 
    my $dummy = `$XGETTEXT --version --from-code=UTF-8 >/dev/null 2>/dev/null`;
 
634
    my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`;
606
635
    if ($? == 0)
607
636
    {
608
637
        $gettext_support_nonascii = 1;
636
665
        elsif (/\.($xml_support|$ini_support)$/ || /^\[/)
637
666
        {
638
667
            s/^\[.*]\s*//;
639
 
            print OUTFILE "$_.h\n";
 
668
            print OUTFILE "../$_.h\n";
640
669
            push @temp_headers, "../$_.h";
641
670
            $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code);
642
671
        } 
643
672
        else 
644
673
        {
645
674
            if ($SRCDIR eq ".") {
646
 
                print OUTFILE "$_\n";
 
675
                print OUTFILE "../$_\n";
647
676
            } else {
648
677
                print OUTFILE "$SRCDIR/../$_\n";
649
678
            }
688
717
    unlink "$MODULE.pot";
689
718
    my @xgettext_argument=("$XGETTEXT",
690
719
                           "--add-comments",
691
 
                           "--directory\=\.\.",
 
720
                           "--directory\=\.",
692
721
                           "--output\=$MODULE\.pot",
693
722
                           "--files-from\=\.\/POTFILES\.in\.temp");
694
723
    my $XGETTEXT_KEYWORDS = &FindPOTKeywords;
695
724
    push @xgettext_argument, $XGETTEXT_KEYWORDS;
 
725
    my $MSGID_BUGS_ADDRESS = &FindMakevarsBugAddress;
 
726
    push @xgettext_argument, "--msgid-bugs-address\=$MSGID_BUGS_ADDRESS" if $MSGID_BUGS_ADDRESS;
696
727
    push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii);
697
728
    push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS;
698
729
    my $xgettext_command = join ' ', @xgettext_argument;
753
784
{
754
785
    -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n";
755
786
 
 
787
    my $MSGMERGE = $ENV{"MSGMERGE"} || "@INTLTOOL_MSGMERGE@";
756
788
    my ($lang, $outfile) = @_;
757
789
 
758
 
    print "Merging $lang.po with $MODULE.pot..." if $VERBOSE;
 
790
    print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE;
759
791
 
760
 
    my $infile = "$lang.po";
761
 
    $outfile = "$lang.po" if ($outfile eq "");
 
792
    my $infile = "$SRCDIR/$lang.po";
 
793
    $outfile = "$SRCDIR/$lang.po" if ($outfile eq "");
762
794
 
763
795
    # I think msgmerge won't overwrite old file if merge is not successful
764
 
    system ("msgmerge", "-o", $outfile, $infile, "$MODULE.pot");
 
796
    system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot");
765
797
}
766
798
 
767
799
sub Console_WriteError_NotExisting
795
827
sub Console_Write_TranslationStatus
796
828
{
797
829
    my ($lang, $output_file) = @_;
798
 
 
799
 
    $output_file = "$lang.po" if ($output_file eq "");
800
 
 
801
 
    system ("msgfmt", "-o", "/dev/null", "--statistics", $output_file);
 
830
    my $MSGFMT = $ENV{"MSGFMT"} || "@INTLTOOL_MSGFMT@";
 
831
 
 
832
    $output_file = "$SRCDIR/$lang.po" if ($output_file eq "");
 
833
 
 
834
    system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file);
802
835
}
803
836
 
804
837
sub Console_Write_CoverageReport
805
838
{
 
839
    my $MSGFMT = $ENV{"MSGFMT"} || "@INTLTOOL_MSGFMT@";
 
840
 
806
841
    &GatherPOFiles;
807
842
 
808
843
    foreach my $lang (@languages) 
816
851
    foreach my $lang (@languages)
817
852
    {
818
853
        print "$lang: ";
819
 
        system ("msgfmt", "-o", "/dev/null", "--statistics", "$lang.po");
 
854
        system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po");
820
855
    }
821
856
}
822
857
 
833
868
    {
834
869
        if (/^(\w+)=(.*)$/)
835
870
        {
836
 
            ($varhash{$1} = $2) =~  s/^["'](.*)["']$/$1)/;
 
871
            ($varhash{$1} = $2) =~  s/^["'](.*)["']$/$1/;
837
872
        }
838
873
    }
839
874
    
841
876
    {
842
877
        my $rest = $3;
843
878
        my $untouched = $1;
844
 
        my $sub = $varhash{$2};
845
 
        
 
879
        my $sub = "";
 
880
        # Ignore recursive definitions of variables
 
881
        $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/;
 
882
 
846
883
        return SubstituteVariable ("$untouched$sub$rest");
847
884
    }
848
 
    return $str;
 
885
    
 
886
    # We're using Perl backticks ` and "echo -n" here in order to 
 
887
    # expand any shell escapes (such as backticks themselves) in every variable
 
888
    return echo_n ($str);
849
889
}
850
890
 
851
891
sub CONF_Handle_Open
956
996
        ($name, $version) = ($1, $2);
957
997
        $name    =~ s/[\[\]\s]//g;
958
998
        $version =~ s/[\[\]\s]//g;
959
 
        $varhash{"AC_PACKAGE_NAME"} = $name;
960
 
        $varhash{"PACKAGE"} = $name;
961
 
        $varhash{"AC_PACKAGE_VERSION"} = $version;
962
 
        $varhash{"VERSION"} = $version;
 
999
        $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
 
1000
        $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
 
1001
        $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
 
1002
        $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
963
1003
    }
964
1004
    
965
1005
    if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) 
967
1007
        ($name, $version) = ($1, $2);
968
1008
        $name    =~ s/[\[\]\s]//g;
969
1009
        $version =~ s/[\[\]\s]//g;
970
 
        $varhash{"AC_PACKAGE_NAME"} = $name;
971
 
        $varhash{"PACKAGE"} = $name;
972
 
        $varhash{"AC_PACKAGE_VERSION"} = $version;
973
 
        $varhash{"VERSION"} = $version;
 
1010
        $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
 
1011
        $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
 
1012
        $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
 
1013
        $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
974
1014
    }
975
1015
 
976
1016
    # \s makes this not work, why?
977
1017
    $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m;
978
1018
    
979
 
    # prepend '$' to auto* internal variables, usually they are
980
 
    # used in configure.in/ac without the '$'
981
 
    $name =~ s/AC_/\$AC_/g;
982
 
    $name =~ s/\$\$/\$/g;
 
1019
    # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value
 
1020
    # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables.
 
1021
    $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g;
983
1022
 
984
1023
    $name = $domain if $domain;
985
1024
 
993
1032
sub FindPOTKeywords
994
1033
{
995
1034
 
996
 
    my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_";
 
1035
    my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_";
997
1036
    my $varname = "XGETTEXT_OPTIONS";
998
1037
    my $make_source; {
999
1038
        local (*IN);
1028
1067
    
1029
1068
    return $domain;
1030
1069
}
 
1070
 
 
1071
sub FindMakevarsBugAddress
 
1072
{
 
1073
 
 
1074
    my $address = "";
 
1075
    my $makevars_source; { 
 
1076
        local (*IN);
 
1077
        open (IN, "<Makevars") || return undef;
 
1078
        seek (IN, 0, 0);
 
1079
        local $/; # slurp mode
 
1080
        $makevars_source = <IN>;
 
1081
        close IN;
 
1082
    }
 
1083
 
 
1084
    $address = $1 if $makevars_source =~ /^MSGID_BUGS_ADDRESS[ ]*=\[?([^\n\]\$]+)/m;
 
1085
    $address =~ s/^\s+//;
 
1086
    $address =~ s/\s+$//;
 
1087
    
 
1088
    return $address;
 
1089
}