diff options
Diffstat (limited to 'gcc-4.2.1-5666.3/gcc/po/exgettext')
-rw-r--r-- | gcc-4.2.1-5666.3/gcc/po/exgettext | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/gcc-4.2.1-5666.3/gcc/po/exgettext b/gcc-4.2.1-5666.3/gcc/po/exgettext new file mode 100644 index 000000000..7665463af --- /dev/null +++ b/gcc-4.2.1-5666.3/gcc/po/exgettext @@ -0,0 +1,229 @@ +#! /bin/sh +# Wrapper around gettext for programs using the msgid convention. +# Copyright 1998, 2001, 2002, 2003 Free Software Foundation, Inc. + +# Written by Paul Eggert <eggert@twinsun.com>. +# Revised by Zack Weinberg <zackw@stanford.edu> for no-POTFILES operation. + +# This file is part of GCC. + +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +# Always operate in the C locale. +LANG=C +LANGUAGE=C +LC_ALL=C +export LANG LANGUAGE LC_ALL + +# Set AWK if environment has not already set it. +AWK=${AWK-awk} + +# The arguments to this wrapper are: the program to execute, the +# name of the "package", and the path to the source directory. + +if [ $# -ne 3 ] +then echo "usage: $0 <xgettext> <package> <srcdir>" + exit 1 +fi + +xgettext=$1 +package=$2 +srcdir=$3 + +case `$xgettext --version | sed -e 1q | sed -e 's/^\([^0-9]*\)//'` in + 0.14.[5-9]* | 0.14.[1-9][0-9]* | 0.1[5-9]* | 0.[2-9][0-9]* | [1-9].*) : ;; + *) echo "$xgettext is too old. GNU xgettext 0.14.5 is required" + exit 1 ;; +esac + +nl=' +' + +set -e + +# Create temporary directory for scratch files. +T=exg$$.d +mkdir $T +trap "rm -r $T" 0 + +pwd=`${PWDCMD-pwd}` +kopt=$pwd/$T/keyword-options +kopt2=$pwd/$T/keyword2-options +emsg=$pwd/$T/emsgids.c +posr=$pwd/$T/po-sources +pottmp1=$pwd/$T/tmp1.pot +pottmp2=$pwd/$T/tmp2.pot +pottmp=$pwd/$T/tmp.pot + +# Locate files to scan, and generate the list. All .c, .h, and .def files +# in $srcdir are examined, likewise $srcdir/config and $srcdir/config/* +# (directories). Also, all subdirectories of $srcdir that contain a +# config-lang.in. Exclusions come from $srcdir/po/EXCLUDE. +# +# Then generate keyword options for xgettext, by scanning for declarations +# of functions whose parameter names end in "msgid". +# +# Finally, generate a source file containing all %e strings from +# driver specs, so those can be translated too. +# +# All in one huge awk script. + +echo "scanning for keywords and %e strings..." >&2 + +( cd $srcdir + lang_subdirs=`echo */config-lang.in | sed -e 's|config-lang\.in||g'` + { for dir in "" config/ config/*/ $lang_subdirs + do for glob in '*.c' '*.h' '*.def' + do eval echo $dir$glob + done + done; + } | tr ' ' "$nl" | grep -v '\*' | + $AWK -v excl=po/EXCLUDES -v posr=$posr -v kopt=$kopt -v kopt2=$kopt2 -v emsg=$emsg ' +function keyword_option(line) { + paren_index = index(line, "(") + name = substr(line, 1, paren_index - 1) + sub(/[^0-9A-Z_a-z]*$/, "", name) + sub(/[ ]+PARAMS/, "", name) + sub(/[ ]+VPARAMS/, "", name) + sub(/.*[^0-9A-Z_a-z]/, "", name) + + args = substr(line, paren_index) + sub(/msgid[,\)].*/, "", args) + for (n = 1; sub(/^[^,]*,/, "", args); n++) { + continue + } + format="" + if (args ~ /g$/) + format="gcc-internal-format" + else if (args ~ /noc$/) + format="no-c-format" + else if (args ~ /c$/) + format="c-format" + + if (n == 1) { keyword = "--keyword=" name } + else { keyword = "--keyword=" name ":" n } + if (format) { + keyword=keyword "\n--flag=" name ":" n ":" format + } + + if (! keyword_seen[name]) { + if (format == "gcc-internal-format") + print keyword > kopt2 + else + print keyword > kopt + keyword_seen[name] = keyword + } else if (keyword_seen[name] != keyword) { + printf("%s used incompatibly as both %s and %s\n", + name, keyword_seen[name], keyword) + exit (1) + } +} + +function spec_error_string (line) { + while ((percent_index = index(line, "%e")) != 0) { + escape = substr(line, percent_index - 1, 1) + line = substr(line, percent_index + 2) + if (escape == "%") continue + + bracket_index = index(line, "}") + quote_index = index(line, "\"") + if (bracket_index == 0) return + if (quote_index != 0 && bracket_index > quote_index) return + + msgid = substr(line, 1, bracket_index - 1) + line = substr(line, bracket_index + 1) + + if (index(msgid, "%") != 0) continue + + printf("#line %d \"%s\"\n", lineno, file) > emsg + printf("_(\"%s\")\n", msgid) > emsg + + } +} + +BEGIN { + while ((getline < excl) > 0) { + if ($0 ~ /^#/ || $0 ~ /^[ ]*$/) + continue + excludes[$1] = 1 + } +} + +{ if (!($0 in excludes)) { + print > posr + files[NR] = $0 + } +} + +END { + for (f in files) { + file = files[f] + lineno = 1 + while (getline < file) { + if (/^(#[ ]*define[ ]*)?[A-Za-z_].*\(.*msgid[,\)]/) { + keyword_option($0) + } else if (/%e/) { + spec_error_string($0) + } + lineno++ + } + } + print emsg > posr +}' +) || exit + +echo "scanning option files..." >&2 + +( cd $srcdir; find . -name '*.opt' -print | + $AWK '{ + file = $1 + lineno = 1 + field = 0 + while (getline < file) { + if (/^[ \t]*(;|$)/ || !/^[^ \t]/) { + field = 0 + } else { + if (field == 2) { + line = $0 + gsub(".*\t", "", line) + printf("#line %d \"%s\"\n", lineno, file) + printf("_(\"%s\")\n", line) + } + field++; + } + lineno++; + } + }') >> $emsg + +# Run the xgettext command, with temporary added as a file to scan. +echo "running xgettext..." >&2 +$xgettext --default-domain=$package --directory=$srcdir \ + --add-comments `cat $kopt` --files-from=$posr \ + --copyright-holder="Free Software Foundation, Inc." \ + --msgid-bugs-address="http://gcc.gnu.org/bugs.html" \ + --language=c -o $pottmp1 +$xgettext --default-domain=$package --directory=$srcdir \ + --add-comments --keyword= `cat $kopt2` --files-from=$posr \ + --copyright-holder="Free Software Foundation, Inc." \ + --msgid-bugs-address="http://gcc.gnu.org/bugs.html" \ + --language=GCC-source -o $pottmp2 +$xgettext --default-domain=$package \ + --add-comments $pottmp1 $pottmp2 \ + --copyright-holder="Free Software Foundation, Inc." \ + --msgid-bugs-address="http://gcc.gnu.org/bugs.html" \ + --language=PO -o $pottmp +# Remove local paths from .pot file. +sed "s:$srcdir/::g;s:$pwd/::g;" <$pottmp >po/$package.pot |