#!/bin/sh # # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # # # Usage: # ./po-update.sh pot # - to generate just the pot file # ./po-update.sh # - to update all locales # ./po-update.sh LL # - to update one the LL locale set -e XGETTEXT=${XGETTEXT:-xgettext} MSGMERGE=${MSGMERGE:-msgmerge} svn_base= for i in . .. ../..; do if [ -d "$i/subversion/po" ]; then svn_base="$i" break fi done if [ -z "$svn_base" ]; then echo "E: You must run po-update.sh from within a Subversion source tree." >&2 exit 1 fi pot_done= make_pot() { if [ -z "$pot_done" ]; then echo "Building subversion.pot..." (cd $svn_base/subversion/po && \ find .. \ -name .svn -prune -or \ -name tests -prune -or \ -name bindings -prune -or \ -name "*.c" -print -or \ -name "svn_error_codes.h" -print -or \ -name "svn_fs_util.h" -print | \ $XGETTEXT --sort-by-file -k_ -kN_ -kQ_:1,2 -kSVN_ERRDEF:3 \ --flag=_:1:pass-c-format \ --flag=N_:1:pass-c-format \ --flag=Q_:1:pass-c-format \ --flag=Q_:2:pass-c-format \ --flag=svn_cmdline_printf:2:c-format \ --flag=svn_cmdline_fprintf:3:c-format \ --flag=svn_error_createf:3:c-format \ --flag=svn_error_wrap_apr:2:c-format \ --flag=svn_stream_printf:3:c-format \ --flag=svn_stream_printf_from_utf8:4:c-format \ --flag=svn_string_createf:2:c-format \ --flag=svn_string_createv:2:c-format \ --flag=svn_stringbuf_createf:2:c-format \ --flag=svn_stringbuf_createv:2:c-format \ --flag=svn_fs_bdb__dberrf:3:c-format \ --flag=file_printf_from_utf8:3:c-format \ --flag=do_io_file_wrapper_cleanup:3:c-format \ --flag=do_io_file_wrapper_cleanup:4:c-format \ --msgid-bugs-address=dev@subversion.apache.org \ --add-comments --files-from=- -o subversion.pot ) pot_done=1 fi } update_po() { (cd $svn_base/subversion/po && for i in $1.po; do echo "Updating $i..." # In a display of truly bizarre behaviour, msgmerge (at least, the # GNU gettext-tools 0.14.6 implementation) inverts the order of obsolete # messages every time it is run. Therefore, run it twice, to invert and # then re-invert, to minimize spurious diffs. $MSGMERGE --sort-by-file --no-wrap --update $i subversion.pot $MSGMERGE --sort-by-file --no-wrap --update $i subversion.pot done ) } if [ $# -eq 0 ]; then make_pot update_po \* else langs= while [ $# -ge 1 ]; do case $1 in pot) ;; *) if [ -e $svn_base/subversion/po/$1.po ]; then langs="$langs $1" else echo "E: No such .po file '$1.po'" >&2 exit 1 fi esac shift done make_pot for lang in $langs; do update_po $lang done fi