~ubuntu-branches/ubuntu/vivid/xfce4-fsguard-plugin/vivid

« back to all changes in this revision

Viewing changes to intltool-update.in

  • Committer: Bazaar Package Importer
  • Author(s): Yves-Alexis Perez
  • Date: 2008-04-14 22:44:05 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20080414224405-lyneae9d6sioo3tp
Tags: 0.4.1-2
* debian/patches:
  - 01_ja.po.diff added, update ja translation.               closes: #475912

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.34";
 
33
my $VERSION = "0.37.0";
34
34
my $PACKAGE = "intltool";
35
35
 
36
36
## Loaded modules
71
71
"sheet(?:\\.in)+|".     # ?
72
72
"schemas(?:\\.in)+|".   # GConf specific
73
73
"pong(?:\\.in)+|".      # DEPRECATED: PONG is not used [by GNOME] any longer.
74
 
"kbd(?:\\.in)+";        # GOK specific. 
 
74
"kbd(?:\\.in)+|".       # GOK specific. 
 
75
"policy(?:\\.in)+";     # PolicyKit files
75
76
 
76
77
my $ini_support =
77
78
"icon(?:\\.in)+|".      # http://www.freedesktop.org/Standards/icon-theme-spec
80
81
"directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec
81
82
"soundlist(?:\\.in)+|". # GNOME specific
82
83
"keys(?:\\.in)+|".      # GNOME Mime database specific
83
 
"theme(?:\\.in)+";      # http://www.freedesktop.org/Standards/icon-theme-spec
 
84
"theme(?:\\.in)+|".     # http://www.freedesktop.org/Standards/icon-theme-spec
 
85
"service(?:\\.in)+";    # DBus specific
84
86
 
85
87
my $buildin_gettext_support = 
86
88
"c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py";
89
91
$| = 1;
90
92
 
91
93
## Sometimes the source tree will be rooted somewhere else.
92
 
my $SRCDIR = ".";
 
94
my $SRCDIR = $ENV{"srcdir"} || ".";
93
95
my $POTFILES_in;
94
96
 
95
 
$SRCDIR = $ENV{"srcdir"} if $ENV{"srcdir"};
96
97
$POTFILES_in = "<$SRCDIR/POTFILES.in";
97
98
 
98
99
my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null');
123
124
 
124
125
&Console_Write_IntltoolHelp if $arg_count > 1;
125
126
 
 
127
my $PKGNAME = FindPackageName ();
 
128
 
126
129
# --version and --help don't require a module name
127
 
my $MODULE = $GETTEXT_PACKAGE || &FindPackageName;
 
130
my $MODULE = $GETTEXT_PACKAGE || $PKGNAME || "unknown";
128
131
 
129
132
if ($POT_ARG)
130
133
{
315
318
        @buf_potfiles_ignore,
316
319
        @buf_allfiles,
317
320
        @buf_allfiles_sorted,
318
 
        @buf_potfiles_sorted
 
321
        @buf_potfiles_sorted,
 
322
        @buf_potfiles_ignore_sorted
319
323
    );
320
324
 
321
325
    ## Search and find all translatable files
325
329
        push @buf_i18n_ini,          "$File::Find::name" if /\.($ini_support)$/;
326
330
        push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/;
327
331
        }, "..";
328
 
 
 
332
    find sub { 
 
333
        push @buf_i18n_plain,        "$File::Find::name" if /\.($buildin_gettext_support)$/;
 
334
        push @buf_i18n_xml,          "$File::Find::name" if /\.($xml_support)$/;
 
335
        push @buf_i18n_ini,          "$File::Find::name" if /\.($ini_support)$/;
 
336
        push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/;
 
337
        }, "$SRCDIR/.." if "$SRCDIR" ne ".";
329
338
 
330
339
    open POTFILES, $POTFILES_in or die "$PROGRAM:  there's no POTFILES.in!\n";
331
340
    @buf_potfiles = grep !/^(#|\s*$)/, <POTFILES>;
341
350
    ## comparing with POTFILES.in
342
351
    foreach my $ignore ("POTFILES.skip", "POTFILES.ignore")
343
352
    {
344
 
        (-s $ignore) or next;
 
353
        (-s "$SRCDIR/$ignore") or next;
345
354
 
346
355
        if ("$ignore" eq "POTFILES.ignore")
347
356
        {
350
359
        }
351
360
 
352
361
        print "Found $ignore: Ignoring files...\n" if $VERBOSE;
353
 
        open FILE, "<$ignore" or die "ERROR: Failed to open $ignore!\n";
 
362
        open FILE, "<$SRCDIR/$ignore" or die "ERROR: Failed to open $SRCDIR/$ignore!\n";
354
363
            
355
364
        while (<FILE>)
356
365
        {
358
367
        }
359
368
        close FILE;
360
369
 
361
 
        @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles);
 
370
        @buf_potfiles_ignore_sorted = sort (@buf_potfiles_ignore);
362
371
    }
363
372
 
364
373
    foreach my $file (@buf_i18n_plain)
416
425
                }
417
426
            }       
418
427
 
419
 
            if (/\.GetString ?\(QUOTEDTEXT/)
 
428
            if (/\w\.GetString *\(QUOTEDTEXT/)
420
429
            {
421
430
                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
422
431
                    ## Remove the first 3 chars and add newline
425
434
                last;
426
435
            }
427
436
 
428
 
            if (/_\(QUOTEDTEXT/)
 
437
            ## C_ N_ Q_ and _ are the macros defined in gi8n.h
 
438
            if (/[CNQ]?_ *\(QUOTEDTEXT/)
429
439
            {
430
440
                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
431
441
                    ## Remove the first 3 chars and add newline
485
495
    my %in2;
486
496
    foreach (@buf_potfiles_sorted) 
487
497
    {
 
498
        s#^$SRCDIR/../##;
 
499
        s#^$SRCDIR/##;
 
500
        $in2{$_} = 1;
 
501
    }
 
502
 
 
503
    foreach (@buf_potfiles_ignore_sorted) 
 
504
    {
 
505
        s#^$SRCDIR/../##;
 
506
        s#^$SRCDIR/##;
488
507
        $in2{$_} = 1;
489
508
    }
490
509
 
492
511
 
493
512
    foreach (@buf_allfiles_sorted)
494
513
    {
495
 
        if (!exists($in2{$_}))
 
514
        my $dummy = $_;
 
515
        my $srcdir = $SRCDIR;
 
516
 
 
517
        $srcdir =~ s#^../##;
 
518
        $dummy =~ s#^$srcdir/../##;
 
519
        $dummy =~ s#^$srcdir/##;
 
520
        $dummy =~ s#_build/##;
 
521
        if (!exists($in2{$dummy}))
496
522
        {
497
 
            push @result, $_
 
523
            push @result, $dummy
498
524
        }
499
525
    }
500
526
 
503
529
    foreach (@buf_potfiles_sorted)
504
530
    {
505
531
        chomp (my $dummy = $_);
506
 
        if ("$dummy" ne "" and ! -f "../$dummy")
 
532
        if ("$dummy" ne "" and !(-f "$SRCDIR/../$dummy" or -f "../$dummy"))
507
533
        {
508
534
            push @buf_potfiles_notexist, $_;
509
535
        }
536
562
            warn "\n" if ($VERBOSE or @result);
537
563
            warn "\e[1mThe following files do not exist anymore:\e[0m\n\n";
538
564
            warn @buf_potfiles_notexist, "\n";
539
 
            warn "Please remove them from POTFILES.in or POTFILES.skip. A file \e[1m'notexist'\e[0m\n".
 
565
            warn "Please remove them from POTFILES.in. A file \e[1m'notexist'\e[0m\n".
540
566
                 "containing this list of absent files has been written in the current directory.\n";
541
567
        }
542
568
    }
554
580
    exit 1;
555
581
}
556
582
 
 
583
sub isProgramInPath
 
584
{
 
585
    my ($file) = @_;
 
586
    # If either a file exists, or when run it returns 0 exit status
 
587
    return 1 if ((-x $file) or (system("$file --version >$devnull") == 0));
 
588
    return 0;
 
589
}
 
590
 
 
591
sub isGNUGettextTool
 
592
{
 
593
    my ($file) = @_;
 
594
    # Check that we are using GNU gettext tools
 
595
    if (isProgramInPath ($file))
 
596
    {
 
597
        my $version = `$file --version`;
 
598
        return 1 if ($version =~ m/.*\(GNU .*\).*/);
 
599
    }
 
600
    return 0;
 
601
}
 
602
 
557
603
sub GenerateHeaders
558
604
{
559
 
    my $EXTRACT = "@INTLTOOL_EXTRACT@";
560
 
    chomp $EXTRACT;
561
 
 
562
 
    $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"};
 
605
    my $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} || "intltool-extract";
563
606
 
564
607
    ## Generate the .h header files, so we can allow glade and
565
608
    ## xml translation support
566
 
    if (! -x "$EXTRACT")
 
609
    if (! isProgramInPath ("$EXTRACT"))
567
610
    {
568
611
        print STDERR "\n *** The intltool-extract script wasn't found!"
569
612
             ."\n *** Without it, intltool-update can not generate files.\n";
610
653
#
611
654
sub GeneratePOTemplate
612
655
{
613
 
    my $XGETTEXT = $ENV{"XGETTEXT"} || "/usr/bin/xgettext";
 
656
    my $XGETTEXT = $ENV{"XGETTEXT"} || "xgettext";
614
657
    my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || '';
615
658
    chomp $XGETTEXT;
616
659
 
617
 
    if (! -x $XGETTEXT)
 
660
    if (! isGNUGettextTool ("$XGETTEXT"))
618
661
    {
619
 
        print STDERR " *** xgettext is not found on this system!\n".
 
662
        print STDERR " *** GNU xgettext is not found on this system!\n".
620
663
                     " *** Without it, intltool-update can not extract strings.\n";
621
664
        exit;
622
665
    }
670
713
        } 
671
714
        else 
672
715
        {
673
 
            if ($SRCDIR eq ".") {
674
 
                print OUTFILE "../$_\n";
675
 
            } else {
676
 
                print OUTFILE "$SRCDIR/../$_\n";
677
 
            }
678
 
            $gettext_code = &TextFile_DetermineEncoding ("../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code);
 
716
            print OUTFILE "$SRCDIR/../$_\n";
 
717
            $gettext_code = &TextFile_DetermineEncoding ("$SRCDIR/../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code);
679
718
        }
680
719
 
681
720
        next if (! $gettext_support_nonascii);
716
755
    unlink "$MODULE.pot";
717
756
    my @xgettext_argument=("$XGETTEXT",
718
757
                           "--add-comments",
719
 
                           "--directory\=\.",
 
758
                           "--directory\=.",
 
759
                           "--default-domain\=$MODULE",
 
760
                           "--flag\=g_strdup_printf:1:c-format",
 
761
                           "--flag\=g_string_printf:2:c-format",
 
762
                           "--flag\=g_string_append_printf:2:c-format",
 
763
                           "--flag\=g_error_new:3:c-format",
 
764
                           "--flag\=g_set_error:4:c-format",
 
765
                           "--flag\=g_markup_printf_escaped:1:c-format",
 
766
                           "--flag\=g_log:3:c-format",
 
767
                           "--flag\=g_print:1:c-format",
 
768
                           "--flag\=g_printerr:1:c-format",
 
769
                           "--flag\=g_printf:1:c-format",
 
770
                           "--flag\=g_fprintf:2:c-format",
 
771
                           "--flag\=g_sprintf:2:c-format",
 
772
                           "--flag\=g_snprintf:3:c-format",
 
773
                           "--flag\=g_scanner_error:2:c-format",
 
774
                           "--flag\=g_scanner_warn:2:c-format",
720
775
                           "--output\=$MODULE\.pot",
721
776
                           "--files-from\=\.\/POTFILES\.in\.temp");
722
777
    my $XGETTEXT_KEYWORDS = &FindPOTKeywords;
723
778
    push @xgettext_argument, $XGETTEXT_KEYWORDS;
 
779
    my $MSGID_BUGS_ADDRESS = &FindMakevarsBugAddress;
 
780
    push @xgettext_argument, "--msgid-bugs-address\=\"$MSGID_BUGS_ADDRESS\"" if $MSGID_BUGS_ADDRESS;
724
781
    push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii);
725
782
    push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS;
726
783
    my $xgettext_command = join ' ', @xgettext_argument;
781
838
{
782
839
    -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n";
783
840
 
784
 
    my $MSGMERGE = $ENV{"MSGMERGE"} || "/usr/bin/msgmerge";
 
841
    my $MSGMERGE = $ENV{"MSGMERGE"} || "msgmerge";
785
842
    my ($lang, $outfile) = @_;
786
843
 
 
844
    if (! isGNUGettextTool ("$MSGMERGE"))
 
845
    {
 
846
        print STDERR " *** GNU msgmerge is not found on this system!\n".
 
847
                     " *** Without it, intltool-update can not extract strings.\n";
 
848
        exit;
 
849
    }
 
850
 
787
851
    print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE;
788
852
 
789
853
    my $infile = "$SRCDIR/$lang.po";
824
888
sub Console_Write_TranslationStatus
825
889
{
826
890
    my ($lang, $output_file) = @_;
827
 
    my $MSGFMT = $ENV{"MSGFMT"} || "/usr/bin/msgfmt";
 
891
    my $MSGFMT = $ENV{"MSGFMT"} || "msgfmt";
 
892
 
 
893
    if (! isGNUGettextTool ("$MSGFMT"))
 
894
    {
 
895
        print STDERR " *** GNU msgfmt is not found on this system!\n".
 
896
                     " *** Without it, intltool-update can not extract strings.\n";
 
897
        exit;
 
898
    }
828
899
 
829
900
    $output_file = "$SRCDIR/$lang.po" if ($output_file eq "");
830
901
 
833
904
 
834
905
sub Console_Write_CoverageReport
835
906
{
836
 
    my $MSGFMT = $ENV{"MSGFMT"} || "/usr/bin/msgfmt";
 
907
    my $MSGFMT = $ENV{"MSGFMT"} || "msgfmt";
 
908
 
 
909
    if (! isGNUGettextTool ("$MSGFMT"))
 
910
    {
 
911
        print STDERR " *** GNU msgfmt is not found on this system!\n".
 
912
                     " *** Without it, intltool-update can not extract strings.\n";
 
913
        exit;
 
914
    }
837
915
 
838
916
    &GatherPOFiles;
839
917
 
840
918
    foreach my $lang (@languages) 
841
919
    {
842
 
        print "$lang: ";
 
920
        print STDERR "$lang: ";
843
921
        &POFile_Update ($lang, "");
844
922
    }
845
923
 
846
 
    print "\n\n * Current translation support in $MODULE \n\n";
 
924
    print STDERR "\n\n * Current translation support in $MODULE \n\n";
847
925
 
848
926
    foreach my $lang (@languages)
849
927
    {
850
 
        print "$lang: ";
 
928
        print STDERR "$lang: ";
851
929
        system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po");
852
930
    }
853
931
}
873
951
    {
874
952
        my $rest = $3;
875
953
        my $untouched = $1;
876
 
        my $sub = $varhash{$2};
877
 
        
 
954
        my $sub = "";
 
955
        # Ignore recursive definitions of variables
 
956
        $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/;
 
957
 
878
958
        return SubstituteVariable ("$untouched$sub$rest");
879
959
    }
880
960
    
919
999
 
920
1000
            $conf_in || die "Cannot find top_builddir in Makevars.";
921
1001
        }
922
 
        elsif (-f "../configure.ac") 
 
1002
        elsif (-f "$SRCDIR/../configure.ac") 
923
1003
        {
924
 
            $conf_in = "../configure.ac";
 
1004
            $conf_in = "$SRCDIR/../configure.ac";
925
1005
        } 
926
 
        elsif (-f "../configure.in") 
 
1006
        elsif (-f "$SRCDIR/../configure.in") 
927
1007
        {
928
 
            $conf_in = "../configure.in";
 
1008
            $conf_in = "$SRCDIR/../configure.in";
929
1009
        } 
930
1010
        else 
931
1011
        {
991
1071
        ($name, $version) = ($1, $2);
992
1072
        $name    =~ s/[\[\]\s]//g;
993
1073
        $version =~ s/[\[\]\s]//g;
994
 
        $varhash{"AC_PACKAGE_NAME"} = $name;
995
 
        $varhash{"PACKAGE"} = $name;
996
 
        $varhash{"AC_PACKAGE_VERSION"} = $version;
997
 
        $varhash{"VERSION"} = $version;
 
1074
        $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
 
1075
        $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
 
1076
        $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
 
1077
        $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
998
1078
    }
999
1079
    
1000
1080
    if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) 
1002
1082
        ($name, $version) = ($1, $2);
1003
1083
        $name    =~ s/[\[\]\s]//g;
1004
1084
        $version =~ s/[\[\]\s]//g;
1005
 
        $varhash{"AC_PACKAGE_NAME"} = $name;
1006
 
        $varhash{"PACKAGE"} = $name;
1007
 
        $varhash{"AC_PACKAGE_VERSION"} = $version;
1008
 
        $varhash{"VERSION"} = $version;
 
1085
        $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
 
1086
        $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
 
1087
        $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
 
1088
        $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
1009
1089
    }
1010
1090
 
1011
1091
    # \s makes this not work, why?
1012
1092
    $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m;
1013
1093
    
1014
 
    # prepend '$' to auto* internal variables, usually they are
1015
 
    # used in configure.in/ac without the '$'
1016
 
    $name =~ s/AC_/\$AC_/g;
1017
 
    $name =~ s/\$\$/\$/g;
 
1094
    # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value
 
1095
    # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables.
 
1096
    $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g;
1018
1097
 
1019
1098
    $name = $domain if $domain;
1020
1099
 
1063
1142
    
1064
1143
    return $domain;
1065
1144
}
 
1145
 
 
1146
sub FindMakevarsBugAddress
 
1147
{
 
1148
 
 
1149
    my $address = "";
 
1150
    my $makevars_source; { 
 
1151
        local (*IN);
 
1152
        open (IN, "<Makevars") || return undef;
 
1153
        seek (IN, 0, 0);
 
1154
        local $/; # slurp mode
 
1155
        $makevars_source = <IN>;
 
1156
        close IN;
 
1157
    }
 
1158
 
 
1159
    $address = $1 if $makevars_source =~ /^MSGID_BUGS_ADDRESS[ ]*=\[?([^\n\]\$]+)/m;
 
1160
    $address =~ s/^\s+//;
 
1161
    $address =~ s/\s+$//;
 
1162
    
 
1163
    return $address;
 
1164
}