automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

moving po/Makefile.in.in to automake


From: Bruno Haible
Subject: moving po/Makefile.in.in to automake
Date: Tue, 11 Nov 2003 13:07:37 +0100
User-agent: KMail/1.5

Hi Alexandre et al.,

The 8-year old way of distributing a PO file directory has several drawbacks:
  - requires separate files (POTFILES.in, Makevars) for customization,
  - the rules are not extensible, which hampers the development of new rules
    for dialect or fancy PO files (like de_AT or address@hidden) and also causes
    problems to the KDE people.

Now automake seems mature enough and widely enough used. I'd like to ask for
your cooperation in moving the functionality of po/Makefile.in.in to
automake. This mail is a first step in doing this, but I need your cooperation
because I'm not inclined to learn Perl.

The current state of affairs is that po/Makefile.in.in (and po/Makevars and
po/POTFILES.in) can be replaced with a po/Makefile.am as appended below, if
at the same time configure.ac is changed as follows:

   < AC_CONFIG_FILES([po/Makefile.in])
   ---
   > AC_CONFIG_FILES([po/Makefile], [AM_POSTPROCESS_PO_MAKEFILE])

The macro AM_POSTPROCESS_PO_MAKEFILE is appended below as well.

As far as I've understood, the philosophy of automake (versus make) is
<<declarative specification of frequently used tasks>> (versus <<rule-based
specification of any tasks>>).

Right? So we need to define a set of Makefile.am variables that will allow
the developer to specify the parametrization of the PO directory. More about
this below.

Then a question about practical procedures: Since the .m4 files that provide
the prerequisites for automake generated rules should evolve in sync with
automake, and since we want to avoid coupling automake releases and gettext
releases (like "automake 2.0 needs gettext 0.14.1 to 0.14.3 but no older and
no newer version"), it does probably mean that some of these 25 .m4 files
get moved from gettext to automake. Or is there another mechanism that would
allow me to continue maintaining these .m4 files while not being an automake
developer in the general sense? Would it be feasible for gettext to install
some .m4 files into $prefix/share/aclocal/ and some .am files into
$prefix/share/automake/am/ ? [Similarly, would it be feasible for the libtool
people to maintain the libtool specific files in $prefix/share/automake/am/
etc.? Such conventions could greatly extend the flexibility of automake.]

Going into some details about po/Makefile.am:
  - It has some variable definitions, which should remain in this place.
  - It has some definitions of deduced variables, which are easy to define
    using GNU make syntax, but require some postprocessing of the Makefile.in
    generated by automake. This is quite ugly. Could automake be extended
    to allow a subset of the GNU make $(...) primitives and implement them
    by code inside config.status?
  - It has some rule definitions, which are typical business for
    automake's .am files.

The po/Makefile.am presented here works for C and C++. For other programming
languages and environments some adjustments must be made:

  - For different environments, the default XGETTEXT_OPTIONS are different.

  - For Qt programs, GMOFILES is replaced with QMFILES, the .po.gmo rule
    is replaced with a .po.qm rule, the installation rules and DISTCLEANFILES
    and EXTRA_DIST are different.

  - For Java programs, GMOFILES is replaced with PROPERTIESFILES or CLASSFILES
    (depending on the preferences of the package), the .po.gmo rule is
    removed, all installation rules are removed, and the target update-gmo
    is replaced with a target 'update-properties' or 'update-classes'.

  - For Tcl programs, GMOFILES is replaced with MSGFILES, the .po.gmo rule is
    removed, the installation rules and DISTCLEANFILES, MAINTAINERCLEANFILES,
    EXTRA_DIST are different, and the target update-gmo is replaced with
    update-msg.

Now here is my first proposal for a set of Makefile.am variables needed
to customize a PO directory. Please comment on it!

- POTFILES: List of files which contain translatable strings,
  relative to $(top_srcdir); mandatory. (Actually 'POTFILES' is a misnomer;
  it should better be called 'I18N_SOURCES' or something like that.)
- DOMAIN: The gettext domain; mandatory.
- XGETTEXT_OPTIONS: flags passed to xgettext (FIXME: How to accomodate
  directories which need several xgettext invocations?); mandatory.
- COPYRIGHT_HOLDER: gets inserted in the header of the POT file; mandatory.
- MSGID_BUGS_ADDRESS: maintainer email address; should default to
  AC_PACKAGE_BUGREPORT.
- EXTRA_LOCALE_CATEGORIES: a weirdness designed for coreutils; should
  default to empty.
- AUTOMAKE_OPTIONS: one of po-qt, po-java-properties, po-java-class, po-tcl -
  influences the kind of rules generated in the po/Makefile.in.

It is on purpose that LINGUAS, the set of languages for which a PO file is
present, is not in this list. This value is stored in a separate file in
the po/ directory. The purpose of this is that distributors can add
translations to a package that have arrived after the package has been
released, without the need to touch any Makefile.am or to rebuild any
Makefile.in.

Ideally, a po/Makefile.am should then consist of assignments to these
variables, and the rest be done by automake.

Comments? Can you help me in realizing this project?

                       Bruno


==================== po/Makefile.am for C based projects ==================
# Example for use of GNU gettext.
# Copyright (C) 2003 Free Software Foundation, Inc.
# This file is in the public domain.
#
# Makefile configuration - processed by automake.

# List of files which contain translatable strings.
POTFILES = \
  hello.c

# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)

# These options get passed to xgettext.
XGETTEXT_OPTIONS = \
  --keyword=_ --flag=_:1:pass-c-format \
  --keyword=N_ --flag=N_:1:pass-c-format

# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
# package.  (Note that the msgstr strings, extracted from the package's
# sources, belong to the copyright holder of the package.)  Translators are
# expected to transfer the copyright for their translations to this person
# or entity, or to disclaim their copyright.  The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
COPYRIGHT_HOLDER = Yoyodyne, Inc.

# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
# - Strings which are not entire sentences, see the maintainer guidelines
#   in the GNU gettext documentation, section 'Preparing Strings'.
# - Strings which use unclear terms or require additional context to be
#   understood.
# - Strings which make invalid assumptions about notation of date, time or
#   money.
# - Pluralisation problems.
# - Incorrect English spelling.
# - Incorrect formatting.
# It can be your email address, or a mailing list address where translators
# can write to without being subscribed, or the URL of a web page through
# which the translators can contact you.
MSGID_BUGS_ADDRESS = address@hidden

# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used.  It is usually empty.
EXTRA_LOCALE_CATEGORIES =

localedir = $(datadir)/locale

MSGMERGE = msgmerge
MSGMERGE_UPDATE = @MSGMERGE@ --update
MSGINIT = msginit
MSGCONV = msgconv
MSGFILTER = msgfilter

# This is computed as $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
POTFILES_DEPS = @POTFILES_DEPS@

# This is computed as $(foreach lang, $(LINGUAS), $(srcdir)/$(lang).po)
POFILES = @POFILES@
# This is computed as $(foreach lang, $(LINGUAS), $(srcdir)/$(lang).gmo)
GMOFILES = @GMOFILES@
# This is computed as $(foreach lang, $(LINGUAS), $(lang).po-update)
UPDATEPOFILES = @UPDATEPOFILES@
# This is computed as $(foreach lang, $(LINGUAS), $(lang).nop)
DUMMYPOFILES = @DUMMYPOFILES@

# This is computed as
# $(foreach lang, user-specified subset of $(LINGUAS), $(lang).gmo)
CATALOGS = @CATALOGS@

SUFFIXES = .po .gmo .mo .sed .sin .nop .po-update

.po.mo:
        @echo "$(MSGFMT) -c -o $@ $<"; \
        $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@

.po.gmo:
        @lang=`echo $* | sed -e 's,.*/,,'`; \
        test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
        echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o 
$${lang}.gmo $${lang}.po"; \
        cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o 
t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo

.sin.sed:
        sed -e '/^#/d' $< > t-$@
        mv t-$@ $@


all-local: address@hidden@

all-local-yes: stamp-po
all-local-no:

# stamp-po is a timestamp denoting the last time at which the CATALOGS have
# been loosely updated. Its purpose is that when a developer or translator
# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
# invocations of "make" will do nothing. This timestamp would not be necessary
# if updating the $(CATALOGS) would always touch them; however, the rule for
# $(POFILES) has been designed to not touch files that don't need to be
# changed.
stamp-po: $(srcdir)/$(DOMAIN).pot
        test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
        @echo "touch stamp-po"
        @echo timestamp > stamp-poT
        @mv stamp-poT stamp-po

# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
# otherwise packages like GCC can not be built if only parts of the source
# have been downloaded.

# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
$(DOMAIN).pot-update: $(POTFILES_DEPS) remove-potcdate.sed
        $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
          --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
          --copyright-holder='$(COPYRIGHT_HOLDER)' \
          --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' \
          $(POTFILES)
        test ! -f $(DOMAIN).po || { \
          if test -f $(srcdir)/$(DOMAIN).pot; then \
            sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > 
$(DOMAIN).1po && \
            sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
            if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
              rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
            else \
              rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
              mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
            fi; \
          else \
            mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
          fi; \
        }

# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
# every "make" invocation, only create it when it is missing.
# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
$(srcdir)/$(DOMAIN).pot:
        $(MAKE) $(DOMAIN).pot-update

# This target rebuilds a PO file if $(DOMAIN).pot has changed.
# Note that a PO file is not touched if it doesn't need to be changed.
$(POFILES): $(srcdir)/$(DOMAIN).pot
        @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
        test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
        echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
        cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot


install-data-local: address@hidden@
install-data-local-no: all-local
install-data-local-yes: all-local
        $(mkinstalldirs) $(DESTDIR)$(datadir)
        @catalogs='$(CATALOGS)'; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
          lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
          dir=$(localedir)/$$lang/LC_MESSAGES; \
          $(mkinstalldirs) $(DESTDIR)$$dir; \
          if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; 
fi; \
          $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
          echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
          for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
            if test -n "$$lc"; then \
              if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 
2>/dev/null) | grep ' -> ' >/dev/null; then \
                link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d 
$$lc | sed -e 's/^.* -> //'`; \
                mv $(DESTDIR)$(localedir)/$$lang/$$lc 
$(DESTDIR)$(localedir)/$$lang/$$lc.old; \
                mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
                (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
                 for file in *; do \
                   if test -f $$file; then \
                     ln -s ../$$link/$$file 
$(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
                   fi; \
                 done); \
                rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
              else \
                if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
                  :; \
                else \
                  rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
                  mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
                fi; \
              fi; \
              rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
              ln -s ../LC_MESSAGES/$(DOMAIN).mo 
$(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
              ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo 
$(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
              cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo 
$(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
              echo "installing $$realcat link as 
$(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
            fi; \
          done; \
        done

installdirs-local: address@hidden@
installdirs-local-no:
installdirs-local-yes:
        $(mkinstalldirs) $(DESTDIR)$(datadir)
        @catalogs='$(CATALOGS)'; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
          lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
          dir=$(localedir)/$$lang/LC_MESSAGES; \
          $(mkinstalldirs) $(DESTDIR)$$dir; \
          for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
            if test -n "$$lc"; then \
              if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 
2>/dev/null) | grep ' -> ' >/dev/null; then \
                link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d 
$$lc | sed -e 's/^.* -> //'`; \
                mv $(DESTDIR)$(localedir)/$$lang/$$lc 
$(DESTDIR)$(localedir)/$$lang/$$lc.old; \
                mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
                (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
                 for file in *; do \
                   if test -f $$file; then \
                     ln -s ../$$link/$$file 
$(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
                   fi; \
                 done); \
                rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
              else \
                if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
                  :; \
                else \
                  rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
                  mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
                fi; \
              fi; \
            fi; \
          done; \
        done

uninstall-local: address@hidden@
uninstall-local-no:
uninstall-local-yes:
        catalogs='$(CATALOGS)'; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
          lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
          for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
            rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
          done; \
        done

html ID:

MOSTLYCLEANFILES =
MOSTLYCLEANFILES += remove-potcdate.sed
MOSTLYCLEANFILES += stamp-poT
MOSTLYCLEANFILES += core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po 
*.new.po
MOSTLYCLEANFILES += *.o

DISTCLEANFILES = *.mo

MAINTAINERCLEANFILES = stamp-po $(GMOFILES)

EXTRA_DIST = remove-potcdate.sin LINGUAS $(DOMAIN).pot stamp-po $(POFILES) 
$(GMOFILES)

# Hidden from automake, but really activated. Works around an automake-1.5 bug.
#distdir: distdir1
distdir1:
        $(MAKE) update-po

update-po: Makefile
        $(MAKE) $(DOMAIN).pot-update
        test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
        $(MAKE) update-gmo

# General rule for updating PO files.

.nop.po-update:
        @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
        tmpdir=`pwd`; \
        echo "$$lang:"; \
        test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
        echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
        cd $(srcdir); \
        if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
          if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
            rm -f $$tmpdir/$$lang.new.po; \
          else \
            if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
              :; \
            else \
              echo "msgmerge for $$lang.po failed: cannot move 
$$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
              exit 1; \
            fi; \
          fi; \
        else \
          echo "msgmerge for $$lang.po failed!" 1>&2; \
          rm -f $$tmpdir/$$lang.new.po; \
        fi

$(DUMMYPOFILES):

update-gmo: Makefile $(GMOFILES)
        @:


========================== AM_POSTPROCESS_PO_MAKEFILE macro ==================

dnl Postprocesses a Makefile in a directory containing PO files.
AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
[
  # When this code is run, in config.status, two variables have already been
  # set:
  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
  # - LINGUAS is the value of the environment variable LINGUAS at configure
  #   time.

changequote(,)dnl
  # Adjust a relative srcdir.
  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
  # In autoconf-2.13 it is called $ac_given_srcdir.
  # In autoconf-2.50 it is called $srcdir.
  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
  case "$ac_given_srcdir" in
    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
    /*) top_srcdir="$ac_given_srcdir" ;;
    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
  esac

  # A sed script that extracts the value of VARIABLE from a Makefile.
  sed_x_variable='
# Test if the hold space is empty.
x
s/P/P/
x
ta
# Yes it was empty. Look if we have the expected variable definition.
/^[      ]*VARIABLE[     ]*=/{
  # Seen the first line of the variable definition.
  s/^[   ]*VARIABLE[     ]*=//
  ba
}
bd
:a
# Here we are processing a line from the variable definition.
# Remove comment, more precisely replace it with a space.
s/#.*$/ /
# See if the line ends in a backslash.
tb
:b
s/\\$//
# Print the line, without the trailing backslash.
p
tc
# There was no trailing backslash. The end of the variable definition is
# reached. Clear the hold space.
s/^.*$//
x
bd
:c
# A trailing backslash means that the variable definition continues in the
# next line. Put a nonempty string into the hold space to indicate this.
s/^.*$/P/
x
:d
'
changequote([,])dnl

  # Set POTFILES to the value of the Makefile variable POTFILES.
  sed_x_POTFILES="`echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 
's/VARIABLE/POTFILES/g'`"
  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
  # Compute POTFILES_DEPS as
  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
  POTFILES_DEPS=
  for file in $POTFILES; do
    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
  done
  POMAKEFILEDEPS=""

  if test -n "$OBSOLETE_ALL_LINGUAS"; then
    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is 
obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
  fi
  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
    # The LINGUAS file contains the set of available languages.
    ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
  else
    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
    sed_x_LINGUAS="`echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 
's/VARIABLE/LINGUAS/g'`"
    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
  fi
  # Hide the ALL_LINGUAS assigment from automake.
  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
  # Compute POFILES
  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
  # Compute UPDATEPOFILES
  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
  # Compute DUMMYPOFILES
  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
  # Compute GMOFILES
  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
  # Compute PROPERTIESFILES
  # as      $(foreach lang, $(ALL_LINGUAS), 
$(top_srcdir)/$(DOMAIN)_$(lang).properties)
  # Compute CLASSFILES
  # as      $(foreach lang, $(ALL_LINGUAS), 
$(top_srcdir)/$(DOMAIN)_$(lang).class)
  # Compute QMFILES
  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
  # Compute MSGFILES
  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
  case "$ac_given_srcdir" in
    .) srcdirpre= ;;
    *) srcdirpre='$(srcdir)/' ;;
  esac
  POFILES=
  UPDATEPOFILES=
  DUMMYPOFILES=
  GMOFILES=
  PROPERTIESFILES=
  CLASSFILES=
  QMFILES=
  MSGFILES=
  for lang in $ALL_LINGUAS; do
    POFILES="$POFILES $srcdirpre$lang.po"
    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
    PROPERTIESFILES="$PROPERTIESFILES 
\$(top_srcdir)/\$(DOMAIN)_$lang.properties"
    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
    QMFILES="$QMFILES $srcdirpre$lang.qm"
    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 
'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
  done
  # CATALOGS depends on both $ac_dir and the user's LINGUAS
  # environment variable.
  INST_LINGUAS=
  if test -n "$ALL_LINGUAS"; then
    for presentlang in $ALL_LINGUAS; do
      useit=no
      if test "%UNSET%" != "$LINGUAS"; then
        desiredlanguages="$LINGUAS"
      else
        desiredlanguages="$ALL_LINGUAS"
      fi
      for desiredlang in $desiredlanguages; do
        # Use the presentlang catalog if desiredlang is
        #   a. equal to presentlang, or
        #   b. a variant of presentlang (because in this case,
        #      presentlang can be used as a fallback for messages
        #      which are not translated in the desiredlang catalog).
        case "$desiredlang" in
          "$presentlang"*) useit=yes;;
        esac
      done
      if test $useit = yes; then
        INST_LINGUAS="$INST_LINGUAS $presentlang"
      fi
    done
  fi
  CATALOGS=
  JAVACATALOGS=
  QTCATALOGS=
  TCLCATALOGS=
  if test -n "$INST_LINGUAS"; then
    for lang in $INST_LINGUAS; do
      CATALOGS="$CATALOGS $lang.gmo"
      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
      QTCATALOGS="$QTCATALOGS $lang.qm"
      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 
'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
    done
  fi

  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e 
"s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e 
"s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e 
"s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e 
"s|@MSGFILES@|$MSGFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e 
"s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e 
"s|@TCLCATALOGS@|$TCLCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > 
"$ac_file.tmp"
  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
    # Add dependencies that cannot be formulated as a simple suffix rule.
    for lang in $ALL_LINGUAS; do
      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 
'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
      cat >> "$ac_file.tmp" <<EOF
$frobbedlang.msg: $lang.po
        @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
        \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm 
-f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
EOF
    done
  fi
  if test -n "$POMAKEFILEDEPS"; then
    cat >> "$ac_file.tmp" <<EOF
Makefile: $POMAKEFILEDEPS
EOF
  fi
  mv "$ac_file.tmp" "$ac_file"
])






reply via email to

[Prev in Thread] Current Thread [Next in Thread]