summaryrefslogtreecommitdiff
path: root/devel
diff options
context:
space:
mode:
authorjmmv <jmmv>2005-08-20 12:04:09 +0000
committerjmmv <jmmv>2005-08-20 12:04:09 +0000
commit0892165563adaa683da0848ab23ddc19e1e07dac (patch)
treedec41866383a4800320dac566a9c18f44f228965 /devel
parente5b84ba0d88f88a105b54a9dcaee61c320af29eb (diff)
downloadpkgsrc-0892165563adaa683da0848ab23ddc19e1e07dac.tar.gz
Fix the msgfmt.pl script to deal with messages with plurals whose strings
are identical (e.g., msgid == msgid_plural) by ignoring the duplicates. In fact, this is a rewrite of the script, since I couldn't understand the old one (ew). Also change the way we use it to only pull it in the build if the real msgfmt does not support plurals (i.e., it's older than 0.10.36). Fixes PR pkg/30596 and PR pkg/30938 (both related to epiphany). It also fixes the build of evolution-data-server and probably others.
Diffstat (limited to 'devel')
-rw-r--r--devel/gettext-lib/builtin.mk27
-rw-r--r--devel/gettext/files/msgfmt.pl118
2 files changed, 108 insertions, 37 deletions
diff --git a/devel/gettext-lib/builtin.mk b/devel/gettext-lib/builtin.mk
index 75042ba7c37..defc6ccfeef 100644
--- a/devel/gettext-lib/builtin.mk
+++ b/devel/gettext-lib/builtin.mk
@@ -1,4 +1,4 @@
-# $NetBSD: builtin.mk,v 1.26 2005/07/16 01:19:08 jlam Exp $
+# $NetBSD: builtin.mk,v 1.27 2005/08/20 12:04:09 jmmv Exp $
BUILTIN_PKG:= gettext
@@ -222,12 +222,25 @@ BUILDLINK_TARGETS+= buildlink-msgfmt
buildlink-msgfmt: ${BUILDLINK_DIR}/bin/msgfmt
${BUILDLINK_DIR}/bin/msgfmt: ${.CURDIR}/../../devel/gettext/files/msgfmt.pl
- @${MKDIR} ${.TARGET:H}
- @${CAT} ${.ALLSRC} | \
- ${SED} -e "s|@PERL@|"${PERL5:Q}"|g" \
- -e "s|@MSGFMT@|"${BUILDLINK_PREFIX.gettext:Q}/bin/msgfmt"|g" \
- > ${.TARGET}
- @${CHMOD} +x ${.TARGET}
+ @ver=`${BUILDLINK_PREFIX.gettext:Q}/bin/msgfmt --version | \
+ ${HEAD} -n 1 | ${CUT} -d ' ' -f 4`; \
+ ${MKDIR} ${.TARGET:H}; \
+ case $${ver} in \
+ 0.10.[1-3][0-5]|0.[0-9].*) \
+ ${ECHO} "=> Creating msgfmt wrapper to work-around" \
+ "plurals"; \
+ ${CAT} ${.ALLSRC} | \
+ ${SED} -e "s|@PERL@|"${PERL5:Q}"|g" \
+ -e "s|@MSGFMT@|"${BUILDLINK_PREFIX.gettext:Q}/bin/msgfmt"|g" \
+ > ${.TARGET}; \
+ ;; \
+ *) \
+ ${ECHO} "#! ${SH}" >${.TARGET}; \
+ ${ECHO} "${BUILDLINK_PREFIX.gettext:Q}/bin/msgfmt" \
+ '"$$@"' >>${.TARGET}; \
+ ;; \
+ esac; \
+ ${CHMOD} +x ${.TARGET}
. endif
.endif # CHECK_BUILTIN.gettext
diff --git a/devel/gettext/files/msgfmt.pl b/devel/gettext/files/msgfmt.pl
index 9b020fc337b..0d5149408cf 100644
--- a/devel/gettext/files/msgfmt.pl
+++ b/devel/gettext/files/msgfmt.pl
@@ -1,11 +1,11 @@
#!@PERL@
#
-# $NetBSD: msgfmt.pl,v 1.1 2004/04/01 18:33:20 jmmv Exp $
+# $NetBSD: msgfmt.pl,v 1.2 2005/08/20 12:04:09 jmmv Exp $
#
# msgfmt.pl - Workaround uses of msgid_plural to work with implementations
# that don't support it.
#
-# Copyright (c) 2004 Julio M. Merino Vidal <jmmv@NetBSD.org>
+# Copyright (c) 2004, 2005 Julio M. Merino Vidal <jmmv@NetBSD.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -60,38 +60,96 @@ foreach (@ARGV) {
open INFILE, $file;
open OUTFILE, ">$file.tmp";
-$read_plural = 0;
-$skip = 0;
-@msgid_plural = ();
-
-printf "Fixing plural forms in $file\n";
+printf "Working-around plural forms in $file\n";
while (<INFILE>) {
- if (/^msgid_plural/) {
- $read_plural = 1;
- s/^msgid_plural[ \t]+"/"/;
- push @msgid_plural, $_;
- } elsif ($read_plural && /^msgstr\[0\]/) {
- $read_plural = 0;
- s/^msgstr\[0\]/msgstr/;
- print OUTFILE;
- } elsif ($read_plural) {
- push @msgid_plural, $_;
- } elsif (/^msgstr\[1\]/) {
- print OUTFILE "\n";
+ @msgid_singular = ();
+ @msgid_plural = ();
+
+ s/^#~//;
+
+ if (/^msgid[ \t]+(.*)$/) {
+ push @msgid_singular, "$1\n";
+ while (<INFILE>) {
+ if (/^[ \t]*"/) {
+ push @msgid_singular, $_;
+ } else {
+ last;
+ }
+ }
+ }
+
+ if (/^msgid_plural[ \t]+(.*)$/) {
+ push @msgid_plural, "$1\n";
+ while (<INFILE>) {
+ if (/^[ \t]*"/) {
+ push @msgid_plural, $_;
+ } else {
+ last;
+ }
+ }
+ }
+
+ if (/^msgstr[ \t]+(.*)$/) {
print OUTFILE "msgid ";
- foreach $line (@msgid_plural) {
- print OUTFILE "$line";
+ foreach $line (@msgid_singular) { print OUTFILE $line; }
+ print OUTFILE "msgstr $1\n";
+ while (<INFILE>) {
+ if (/^[ \t]*"/) {
+ print OUTFILE;
+ } else {
+ last;
+ }
}
- s/^msgstr\[1\]/msgstr/;
- print OUTFILE;
- @msgid_plural = ();
- } elsif (/^msgstr\[2\]/) {
- $skip = 1;
- } elsif (/^[ \t]*$/) {
- $skip = 0;
- print OUTFILE;
- } elsif (! $skip) {
+ }
+
+ if (/^msgstr\[0\][ \t]+(.*)$/) {
+ print OUTFILE "msgid ";
+ foreach $line (@msgid_singular) { print OUTFILE $line; }
+ print OUTFILE "msgstr $1\n";
+ while (<INFILE>) {
+ if (/^[ \t]*"/) {
+ print OUTFILE;
+ } else {
+ last;
+ }
+ }
+ }
+
+ if (/^msgstr\[1\][ \t]+(.*)$/) {
+ $equal = (@msgid_singular == @msgid_plural);
+ if ($equal) {
+ for ($i = 0; $i < @msgid_singular; $i++) {
+ if (@msgid_singular[$i] ne @msgid_plural[$i]) {
+ $equal = 0;
+ last;
+ }
+ }
+ }
+
+ if (! $equal) {
+ print OUTFILE "msgid ";
+ foreach $line (@msgid_plural) { print OUTFILE $line; }
+ print OUTFILE "msgstr $1\n";
+ while (<INFILE>) {
+ if (/^[ \t]*"/) {
+ print OUTFILE;
+ } else {
+ last;
+ }
+ }
+ } else {
+ while (<INFILE>) {
+ last if (! /^[ \t]*"/);
+ }
+ }
+ }
+
+ if (/^msgstr\[2\][ \t]+(.*)$/) {
+ }
+
+ if (/^#/ || /^[ \t]*$/) {
print OUTFILE;
+ next;
}
}