diff options
author | Jeff Law <law@gcc.gnu.org> | 1998-08-02 00:46:43 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-08-02 00:46:43 -0600 |
commit | d70283ce50dc333f6b2e8650e2f85981d8c34a2f (patch) | |
tree | 2c9482e989f07f5c43b7f84ae447bf43769f5641 /gcc/exgettext | |
parent | 19b7a780f4aa53761e35aea1c963a06b454e0f7e (diff) | |
download | gcc-d70283ce50dc333f6b2e8650e2f85981d8c34a2f.zip gcc-d70283ce50dc333f6b2e8650e2f85981d8c34a2f.tar.gz gcc-d70283ce50dc333f6b2e8650e2f85981d8c34a2f.tar.bz2 |
Initial revision
From-SVN: r21536
Diffstat (limited to 'gcc/exgettext')
-rwxr-xr-x | gcc/exgettext | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/gcc/exgettext b/gcc/exgettext new file mode 100755 index 0000000..93d553c --- /dev/null +++ b/gcc/exgettext @@ -0,0 +1,118 @@ +#! /bin/sh +# Wrapper around gettext for GCC sources. +# Copyright 1998 Free Software Foundation, Inc. + +# Written by Paul Eggert <eggert@twinsun.com>. + +# This file is part of GNU CC. + +# GNU CC 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. + +# GNU CC 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 GNU CC; see the file COPYING. If not, write to +# the Free Software Foundation, 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# Set environment to default value, if not already set. +: ${AWK=awk} + +# The argument to this wrapper is the xgettext command to be executed. +# Extract the xgettext program name from the rest of the command. +xgettext=${1?} +shift + +# Save work if we're just wrapping a no-op. +case $xgettext in +:) exit;; +esac + +# Find the files to be scanned, and the directory to scan them from. +directory=. +files= +for i +do + case $i in + --directory=*) + directory=`expr " $i" : ' --directory=\(.*\)'`;; + --files-from=*) + files_from=`expr " $i" : ' --files-from=\(.*\)'` + files=`$AWK '/^[^#]/ { print }' $files_from`;; + esac +done + +# Generate keyword options for xgettext, +# by scanning for declarations of functions +# whose parameter names end in "msgid". +generate_keyword_options=' + /^[A-Z_a-z].*\(.*msgid[,)]/ { + + paren_index = index($0, "(") + + name = substr($0, 1, paren_index - 1) + sub(/[^0-9A-Z_a-z]*$/, "", name) + sub(/[ ]+PARAMS/, "", name) + sub(/[ ]+VPROTO/, "", name) + sub(/.*[^0-9A-Z_a-z]/, "", name) + + args = substr($0, paren_index) + sub(/msgid[,)].*/, "", args) + for (n = 1; sub(/^[^,]*,/, "", args); n++) { + continue; + } + + if (n == 1) { + keyword = name + } else { + keyword = name ":" n + } + + if (! keyword_seen[keyword]++) { + print "--keyword=" keyword + } + } +' +keyword_options=`( + cd $directory && + $AWK "$generate_keyword_options" $files < /dev/null +)` || exit + +# Generate temporary file reflecting the %e strings in the scanned files. +tmp=tmp-emsgids.c + +generate_emsgids=' + /%e.*}/ { + line = $0 + while ((percent_index = index(line, "%e")) != 0) { + line = substr(line, percent_index + 2) + bracket_index = index(line, "}") + if (bracket_index == 0) { + continue + } + msgid = substr(line, 1, bracket_index - 1) + if (index(msgid, "%") != 0) { + continue + } + printf "#line %d \"%s\"\n", FNR, FILENAME + printf "_(\"%s\")\n", msgid + line = substr(line, bracket_index + 1) + } + } +' +(cd $directory && + $AWK "$generate_emsgids" $files < /dev/null +) > $directory/$tmp || exit + +# Run the xgettext command, with temporary added as a file to scan. +"$xgettext" $keyword_options ${1+"$@"} $tmp || exit + +# Clean up. +# If we don't get here, `make clean' will remove this file later. +rm -f $directory/$tmp |