examples: Add hello-modula2 example.

* gettext-tools/examples/hello-modula2/INSTALL: New file.
* gettext-tools/examples/hello-modula2/autogen.sh: New file.
* gettext-tools/examples/hello-modula2/autoclean.sh: New file.
* gettext-tools/examples/hello-modula2/hello.mod.in: New file.
* gettext-tools/examples/hello-modula2/Makefile.am: New file.
* gettext-tools/examples/hello-modula2/configure.ac: New file.
* gettext-tools/examples/hello-modula2/m4/Makefile.am: New file.
* gettext-tools/examples/hello-modula2/po/LINGUAS: New file.
* gettext-tools/examples/hello-modula2/po/Makefile.am: New file.
* gettext-tools/examples/installpaths.in: Define also libdir.
* gettext-tools/m4/Makefile.am (examplesbuildaux_DATA): Add modula2comp.m4.
* gettext-tools/examples/Makefile.am (EXAMPLESFILES, EXAMPLESDIRS): Add
hello-modula2.
* gettext-tools/examples/po/Makefile.am (POTFILES, SMALLPOTS): Update for
hello-modula2.
(hello-modula2.pot): New target.
(SMALLPOFILES_FOR_lang): Update for hello-modula2.
($(srcdir)/../hello-modula2/po/$(LL).po): New rule.
* gettext-tools/examples/check-examples (func_check_autoclean_all,
func_check_distclean_all, func_check_maintainerclean_all,
func_check_maintainerclean_vpath_all, func_check_dist_all,
func_check_dist_vpath_all, func_check_install_all, func_check_uninstall_all,
func_check_distcheck_all, func_check_all): Handle hello-modula2 as well.
* gettext-tools/examples/README: Mention hello-modula2.
* gettext-tools/doc/lang-modula2.texi: Likewise.
* NEWS: Likewise.
This commit is contained in:
Bruno Haible 2025-04-25 10:15:08 +02:00
parent 281658406b
commit e7650ab0fa
17 changed files with 724 additions and 1 deletions

1
NEWS
View File

@ -22,6 +22,7 @@ Version 0.25 - April 2025
- xgettext now supports Modula-2.
- 'msgfmt -c' now verifies the syntax of translations of Modula-2 format
strings.
- A new example 'hello-modula2' has been added.
Version 0.24.1 - April 2025

View File

@ -53,3 +53,5 @@ fully portable to all platforms supported by GNU Modula-2
@item po-mode marking
---
@end table
An example is available in the @file{examples} directory: @code{hello-modula2}.

View File

@ -400,6 +400,15 @@ EXAMPLESFILES = \
hello-pascal/m4/Makefile.am \
hello-pascal/po/Makefile.am \
\
hello-modula2/INSTALL \
hello-modula2/autogen.sh \
hello-modula2/autoclean.sh \
hello-modula2/hello.mod.in \
hello-modula2/Makefile.am \
hello-modula2/configure.ac \
hello-modula2/m4/Makefile.am \
hello-modula2/po/Makefile.am \
\
hello-d/INSTALL \
hello-d/autogen.sh \
hello-d/autoclean.sh \
@ -500,6 +509,7 @@ EXAMPLESDIRS = \
hello-sh \
hello-gawk \
hello-pascal \
hello-modula2 \
hello-d \
hello-smalltalk \
hello-tcl \

View File

@ -36,6 +36,7 @@ environment.
hello-sh Shell
hello-gawk awk
hello-pascal Pascal
hello-modula2 Modula-2
hello-d D
hello-smalltalk Smalltalk
hello-tcl Tcl
@ -84,6 +85,7 @@ Makefile types:
hello-sh .gmo Makefile.am
hello-gawk .gmo Makefile.am
hello-pascal .gmo Makefile.am
hello-modula2 .gmo Makefile.am
hello-d .gmo Makefile.am
hello-smalltalk .gmo Makefile.am
hello-perl .gmo Makefile.am

View File

@ -159,6 +159,7 @@ func_check_autoclean_all ()
func_check_autoclean hello-sh
func_check_autoclean hello-gawk
func_check_autoclean hello-pascal
func_check_autoclean hello-modula2
func_check_autoclean hello-d
func_check_autoclean hello-smalltalk
func_check_autoclean hello-tcl
@ -238,6 +239,7 @@ func_check_distclean_all ()
func_check_distclean hello-sh
func_check_distclean hello-gawk
func_check_distclean hello-pascal
func_check_distclean hello-modula2
func_check_distclean hello-d
func_check_distclean hello-smalltalk
func_check_distclean hello-tcl
@ -319,6 +321,7 @@ func_check_maintainerclean_all ()
func_check_maintainerclean hello-sh
func_check_maintainerclean hello-gawk
func_check_maintainerclean hello-pascal
func_check_maintainerclean hello-modula2
func_check_maintainerclean hello-d
func_check_maintainerclean hello-smalltalk
func_check_maintainerclean hello-tcl
@ -403,6 +406,7 @@ func_check_maintainerclean_vpath_all ()
func_check_maintainerclean_vpath hello-sh
func_check_maintainerclean_vpath hello-gawk
func_check_maintainerclean_vpath hello-pascal
func_check_maintainerclean_vpath hello-modula2
func_check_maintainerclean_vpath hello-d
func_check_maintainerclean_vpath hello-smalltalk
func_check_maintainerclean_vpath hello-tcl
@ -494,6 +498,7 @@ func_check_dist_all ()
func_check_dist hello-sh
func_check_dist hello-gawk
func_check_dist hello-pascal
func_check_dist hello-modula2
func_check_dist hello-d
func_check_dist hello-smalltalk
func_check_dist hello-tcl
@ -585,6 +590,7 @@ func_check_dist_vpath_all ()
func_check_dist_vpath hello-sh
func_check_dist_vpath hello-gawk
func_check_dist_vpath hello-pascal
func_check_dist_vpath hello-modula2
func_check_dist_vpath hello-d
func_check_dist_vpath hello-smalltalk
func_check_dist_vpath hello-tcl
@ -668,6 +674,7 @@ func_check_install_all ()
func_check_install hello-sh
func_check_install hello-gawk
func_check_install hello-pascal
func_check_install hello-modula2
func_check_install hello-d
func_check_install hello-smalltalk
func_check_install hello-tcl
@ -748,6 +755,7 @@ func_check_uninstall_all ()
func_check_uninstall hello-sh
func_check_uninstall hello-gawk
func_check_uninstall hello-pascal
func_check_uninstall hello-modula2
func_check_uninstall hello-d
func_check_uninstall hello-smalltalk
func_check_uninstall hello-tcl
@ -830,6 +838,7 @@ func_check_distcheck_all ()
func_check_distcheck hello-sh
func_check_distcheck hello-gawk
func_check_distcheck hello-pascal
func_check_distcheck hello-modula2
func_check_distcheck hello-d
func_check_distcheck hello-smalltalk
func_check_distcheck hello-tcl
@ -895,6 +904,7 @@ func_check_all ()
func_check hello-sh
func_check hello-gawk
func_check hello-pascal
func_check hello-modula2
func_check hello-d
func_check hello-smalltalk
func_check hello-tcl

View File

@ -0,0 +1,10 @@
This example relies on the GNU Modula-2 compiler (gm2).
Installation:
./autogen.sh
./configure --prefix=/some/prefix [--with-m2-libraries-prefix=/some/prefix]
make
make install
Cleanup:
make distclean
./autoclean.sh

View File

@ -0,0 +1,37 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Makefile configuration - processed by automake.
# General automake options.
AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4
# The list of subdirectories containing Makefiles.
SUBDIRS = m4 po
# The list of programs that are built.
bin_PROGRAMS = hello
# The source files of the 'hello' program.
nodist_hello_SOURCES = hello.mod
# Compile time dependencies.
if HAVE_M2_LIBRARIES_PREFIX
# Use the prefix specified as configure option.
m2includedir = $(M2_LIBRARIES_PREFIX)/include/m2
m2libdir = $(M2_LIBRARIES_EXECPREFIX)/lib
else
# Use the prefix determined by autogen.sh.
include $(srcdir)/m2dirs.mk
endif
# Link time dependencies.
LDADD = -lintl_m2 @LIBINTL@
hello$(EXEEXT): hello.mod
$(M2C) -I$(m2includedir) -L$(m2libdir) -Wl,-rpath,$(m2libdir) $(M2FLAGS) \
-o hello$(EXEEXT) hello.mod $(LDADD)
# Additional files to be distributed.
EXTRA_DIST = autogen.sh autoclean.sh

View File

@ -0,0 +1,50 @@
#!/bin/sh
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Script for cleaning all autogenerated files.
test ! -f Makefile || make distclean
rm -rf autom4te.cache
# Generated by autogen.sh.
rm -f m2dirs.mk
# Brought in by autopoint.
rm -f ABOUT-NLS
rm -f config.rpath
rm -f m4/gettext.m4
rm -f m4/build-to-host.m4
rm -f m4/host-cpu-c-abi.m4
rm -f m4/iconv.m4
rm -f m4/intlmacosx.m4
rm -f m4/lib-ld.m4
rm -f m4/lib-link.m4
rm -f m4/lib-prefix.m4
rm -f m4/nls.m4
rm -f m4/po.m4
rm -f m4/progtest.m4
rm -f po/Makefile.in.in
rm -f po/remove-potcdate.sed
# Brought in by explicit copy.
rm -f m4/modula2comp.m4
# Generated by aclocal.
rm -f aclocal.m4
# Generated by autoconf.
rm -f configure
# Generated or brought in by automake.
rm -f Makefile.in
rm -f m4/Makefile.in
rm -f po/Makefile.in
rm -f compile
rm -f install-sh
rm -f missing
rm -f config.guess
rm -f config.sub
rm -f po/*.pot
rm -f po/stamp-po
rm -f po/*.gmo

View File

@ -0,0 +1,59 @@
#!/bin/sh
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Script for regenerating all autogenerated files.
if test -r ../Makefile.am || test -r ../Makefile; then
if test -r ../Makefile.am; then
# Inside the gettext source directory.
GETTEXT_TOPSRCDIR=../../..
else
# Inside a gettext build directory.
GETTEXT_TOOLS_SRCDIR=`sed -n -e 's,^top_srcdir *= *\(.*\)$,\1,p' ../Makefile`
# Adjust a relative top_srcdir.
case $GETTEXT_TOOLS_SRCDIR in
/*) ;;
*) GETTEXT_TOOLS_SRCDIR=../$GETTEXT_TOOLS_SRCDIR ;;
esac
GETTEXT_TOPSRCDIR=$GETTEXT_TOOLS_SRCDIR/../..
fi
{ echo "m2includedir = "`cd $GETTEXT_TOPSRCDIR/gettext-runtime/intl-modula2 && pwd`;
echo "m2libdir = "`cd $GETTEXT_TOPSRCDIR/gettext-runtime/intl-modula2/.libs && pwd`;
} > m2dirs.mk
else
# Installed under ${prefix}/share/doc/gettext/examples.
. ../installpaths
{ echo "m2includedir = ${includedir}/m2";
echo "m2libdir = ${libdir}";
} > m2dirs.mk
fi
autopoint -f # was: gettextize -f -c
rm po/Makefile.in.in
rm po/Makevars.template
rm po/Rules-quot
rm po/boldquot.sed
rm po/en@boldquot.header
rm po/en@quot.header
rm po/insert-header.sed
rm po/quot.sed
cp -p ${EXAMPLESCONFIGDIR-$GETTEXT_TOPSRCDIR/gettext-tools/gnulib-m4}/modula2comp.m4 m4/modula2comp.m4
aclocal -I m4
autoconf
automake -a -c
rm -rf autom4te.cache
cd po
for f in *.po; do
if test -r "$f"; then
lang=`echo $f | sed -e 's,\.po$,,'`
msgfmt -c -o $lang.gmo $lang.po
fi
done
cd ..

View File

@ -0,0 +1,49 @@
dnl Example for use of GNU gettext.
dnl This file is in the public domain.
dnl
dnl Configuration file - processed by autoconf.
AC_INIT([hello-modula2], [0])
AC_CONFIG_SRCDIR([hello.mod.in])
AM_INIT_AUTOMAKE([1.11])
gt_MODULA2COMP
if test -z "$M2C"; then
echo "*** Modula-2 compiler not found" 1>&2
exit 1
fi
M2_LIBRARIES_PREFIX=
M2_LIBRARIES_EXECPREFIX=
AC_ARG_WITH([m2-libraries-prefix],
[[ --with-m2-libraries-prefix=DIR search for Modula-2 libraries in DIR/include/m2, DIR/lib]],
[if test "X$withval" != "X" && test "X$withval" != "Xno"; then
M2_LIBRARIES_PREFIX="$withval"
M2_LIBRARIES_EXECPREFIX="$M2_LIBRARIES_PREFIX"
fi
])
AC_SUBST([M2_LIBRARIES_PREFIX])
AC_SUBST([M2_LIBRARIES_EXECPREFIX])
AM_CONDITIONAL([HAVE_M2_LIBRARIES_PREFIX], [test -n "$M2_LIBRARIES_PREFIX"])
dnl The installed program must know where to find its message catalogs.
dnl Unfortunately, prefix gets only finally determined at the end of configure.
if test "X$prefix" = "XNONE"; then
final_prefix="$ac_default_prefix"
else
final_prefix="$prefix"
fi
save_prefix="$prefix"
prefix="$final_prefix"
eval "datarootdir=\"${datarootdir}\""
eval "localedir=\"${datarootdir}/locale\""
prefix="$save_prefix"
AC_SUBST([localedir])
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.24])
AC_CONFIG_FILES([Makefile hello.mod])
AC_CONFIG_FILES([m4/Makefile])
AC_CONFIG_FILES([po/Makefile], [AM_POSTPROCESS_PO_MAKEFILE])
AC_OUTPUT

View File

@ -0,0 +1,40 @@
(* Example for use of GNU gettext.
This file is in the public domain.
Source code of the Modula-2 program. *)
MODULE Hello;
FROM DynamicStrings IMPORT String, Length, char;
FROM Terminal IMPORT Write, WriteLn;
FROM Libintl IMPORT SetLocale, LC_ALL, TextDomain, BindTextDomain, Gettext;
FROM FormatStrings IMPORT Sprintf1;
FROM libc IMPORT getpid;
(* Like Terminal.WriteString, except that it takes a String, not an ARRAY OF CHAR. *)
PROCEDURE WriteString (s: String);
VAR
l, i: CARDINAL;
BEGIN
l := Length(s);
i := 0;
WHILE i < l DO
Write(char(s, i));
INC (i);
END;
END WriteString;
BEGIN
SetLocale(LC_ALL, "");
TextDomain("hello-modula2");
BindTextDomain("hello-modula2", "@localedir@");
WriteString(Gettext("Hello, world!"));
WriteLn;
WriteString(Sprintf1(Gettext("This program is running as process number %d."), getpid()));
WriteLn;
END Hello.

View File

@ -0,0 +1,3 @@
EXTRA_DIST = \
nls.m4 po.m4 \
modula2comp.m4

View File

@ -0,0 +1,5 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Set of available languages.
af ast bg ca cs da de el eo es fi fr ga gl hr hu id it ja ka ky lv ms mt nb nl nn pl pt pt_BR ro ru sk sl sq sr sv ta tr uk vi zh_CN zh_HK zh_TW

View File

@ -0,0 +1,434 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Makefile configuration - processed by automake.
# List of files which contain translatable strings.
POTFILES = \
hello.mod.in
# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)
# These options get passed to xgettext.
XGETTEXT_OPTIONS =
# 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 msgid 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 tells whether or not to prepend "GNU " prefix to the package
# name that gets inserted into the header of the $(DOMAIN).pot file.
# Possible values are "yes", "no", or empty. If it is empty, try to
# detect it automatically by scanning the files in $(top_srcdir) for
# "GNU packagename" string.
PACKAGE_GNU = no
# 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 = bug-gettext@gnu.org
# 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 =
# These options get passed to msgmerge.
# Useful options are in particular:
# --previous to keep previous msgids of translated messages
MSGMERGE_OPTIONS =
# These options get passed to msginit.
# If you want to disable line wrapping when writing PO files, add
# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
# MSGINIT_OPTIONS.
MSGINIT_OPTIONS =
MSGMERGE = @MSGMERGE@
MSGMERGE_UPDATE = @MSGMERGE@ --update
MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
MSGINIT = msginit
MSGCONV = msgconv
MSGFILTER = msgfilter
# This is computed as $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
POTFILES_DEPS != for file in $(POTFILES); do echo $(top_srcdir)/$$file; done
# The set of available translations.
ALL_LINGUAS != if test -f $(srcdir)/LINGUAS; then \
sed -e '/^\#/d' < $(srcdir)/LINGUAS; \
else \
echo $(LINGUAS); \
fi
# This is computed as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
POFILES != for lang in $(ALL_LINGUAS); do echo $(srcdir)/$$lang.po; done
# This is computed as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
GMOFILES != for lang in $(ALL_LINGUAS); do echo $(srcdir)/$$lang.gmo; done
# This is computed as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
UPDATEPOFILES != for lang in $(ALL_LINGUAS); do echo $$lang.po-update; done
# This is computed as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
DUMMYPOFILES != for lang in $(ALL_LINGUAS); do echo $$lang.nop; done
# The set of desired translations, as specified by the installer or distributor.
DESIRED_LINGUAS = @DESIRED_LINGUAS@
# The set of translations to install. This is computed based on $(ALL_LINGUAS)
# and $(DESIRED_LINGUAS). It is a subset of $(ALL_LINGUAS).
# We 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).
INST_LINGUAS != for presentlang in $(ALL_LINGUAS); do \
useit=false; \
for desiredlang in $(DESIRED_LINGUAS); do \
case "$$desiredlang" in \
"$$presentlang" | "$$presentlang"_* | "$$presentlang".* | "$$presentlang"@*) \
useit=true ;; \
esac; \
done; \
if $$useit; then echo $$presentlang; fi; \
done
# This is computed as $(foreach lang, $(INST_LINGUAS), $(lang).gmo)
CATALOGS != for lang in $(INST_LINGUAS); do echo $$lang.gmo; done
SUFFIXES = .po .gmo .nop .po-create .po-update
# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
# The GNU Coding Standards say in
# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
# "GNU distributions usually contain some files which are not source files
# ... . Since these files normally appear in the source directory, they
# should always appear in the source directory, not in the build directory.
# So Makefile rules to update them should put the updated files in the
# source directory."
# Therefore we put these files in the source directory, not the build directory.
# During .po -> .gmo conversion, take into account the most recent changes to
# the .pot file. This eliminates the need to update the .po files when the
# .pot file has changed, which would be troublesome if the .po files are put
# under version control.
$(GMOFILES): $(srcdir)/$(DOMAIN).pot
.po.gmo:
@lang=`echo $* | sed -e 's,.*/,,'`; \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
cd $(srcdir) && \
rm -f $${lang}.gmo && \
$(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
$(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
mv t-$${lang}.gmo $${lang}.gmo && \
rm -f $${lang}.1po
all-local: all-local-@USE_NLS@
all-local-yes: $(srcdir)/stamp-po
all-local-no:
# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
# we don't want to bother translators with empty POT files). We assume that
# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
# $(srcdir)/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 from a version control system, and the $(DOMAIN).pot
# file is not under version control, "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.
$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
test ! -f $(srcdir)/$(DOMAIN).pot || \
test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
@test ! -f $(srcdir)/$(DOMAIN).pot || { \
echo "touch $(srcdir)/stamp-po" && \
echo timestamp > $(srcdir)/stamp-poT && \
mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
}
# 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.
# The determination of whether the package xyz is a GNU one is based on the
# heuristic whether some file in the top level directory mentions "GNU xyz".
# If GNU 'find' is available, we avoid grepping through monster files.
$(DOMAIN).pot-update: $(POTFILES_DEPS)
package_gnu="$(PACKAGE_GNU)"; \
test -n "$$package_gnu" || { \
if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU $(PACKAGE)' /dev/null '{}' ';' 2>/dev/null; \
else \
LC_ALL=C grep -i 'GNU $(PACKAGE)' $(top_srcdir)/* 2>/dev/null; \
fi; \
} | grep -v 'libtool:' >/dev/null; then \
package_gnu=yes; \
else \
package_gnu=no; \
fi; \
}; \
if test "$$package_gnu" = "yes"; then \
package_prefix='GNU '; \
else \
package_prefix=''; \
fi; \
if test -n '$(MSGID_BUGS_ADDRESS)'; then \
msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
else \
msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
fi; \
case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
--add-comments=TRANSLATORS: \
--copyright-holder='$(COPYRIGHT_HOLDER)' \
--msgid-bugs-address="$$msgid_bugs_address" \
$(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
$(POTFILES) \
;; \
*) \
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
--add-comments=TRANSLATORS: \
--copyright-holder='$(COPYRIGHT_HOLDER)' \
--package-name="$${package_prefix}$(PACKAGE)" \
--package-version='$(VERSION)' \
--msgid-bugs-address="$$msgid_bugs_address" \
$(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
$(POTFILES) \
;; \
esac
test ! -f $(DOMAIN).po || { \
if test -f $(srcdir)/$(DOMAIN).pot-header; then \
sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
rm -f $(DOMAIN).1po \
|| exit 1; \
fi; \
if test -f $(srcdir)/$(DOMAIN).pot; then \
sed -f $(srcdir)/remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
sed -f $(srcdir)/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$$//'`; \
if test -f "$(srcdir)/$${lang}.po"; then \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
echo "$${cdcmd}$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
cd $(srcdir) \
&& { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
'' | 0.[0-9] | 0.[0-9].* | 0.10 | 0.10.*) \
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
0.1[1-5] | 0.1[1-5].*) \
$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
0.1[6-7] | 0.1[6-7].*) \
$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
*) \
$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
esac; \
}; \
else \
$(MAKE) $${lang}.po-create; \
fi
install-data-local: install-data-local-@USE_NLS@
install-data-local-no: all-local
install-data-local-yes: all-local
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
$(MKDIR_P) $(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: installdirs-local-@USE_NLS@
installdirs-local-no:
installdirs-local-yes:
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
$(MKDIR_P) $(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: uninstall-local-@USE_NLS@
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 += stamp-poT
MOSTLYCLEANFILES += core core.* *.stackdump $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
MOSTLYCLEANFILES += *.o
MAINTAINERCLEANFILES = $(DOMAIN).pot stamp-po $(GMOFILES)
EXTRA_DIST = remove-potcdate.sed LINGUAS $(POFILES) $(GMOFILES)
# Hidden from automake, but really activated. Works around an automake-1.5 bug.
#distdir: distdir1
distdir1:
$(MAKE) update-po
$(MAKE) $(srcdir)/stamp-po
@if test -f $(srcdir)/$(DOMAIN).pot; then \
for file in $(DOMAIN).pot stamp-po; do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
cp -p $$d/$$file $(distdir)/$$file || exit 1; \
done; \
else \
case $(XGETTEXT) in \
:) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \
*) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the POTFILES and the XGETTEXT_OPTIONS in the Makefile.am file." 1>&2;; \
esac; \
fi
update-po: Makefile
$(MAKE) $(DOMAIN).pot-update
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
$(MAKE) update-gmo
# General rule for creating PO files.
.nop.po-create:
@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
exit 1
# 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) --quiet $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
cd $(srcdir); \
if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
'' | 0.[0-9] | 0.[0-9].* | 0.10 | 0.10.*) \
$(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
0.1[1-5] | 0.1[1-5].*) \
$(MSGMERGE) --quiet $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
0.1[6-7] | 0.1[6-7].*) \
$(MSGMERGE) --quiet $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
*) \
$(MSGMERGE) --quiet $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
esac; \
}; 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)
@:

View File

@ -17,6 +17,7 @@
prefix='@prefix@'
exec_prefix="@exec_prefix@"
libdir="@libdir@"
datarootdir="@datarootdir@"
datadir="@datadir@"
docdir="@docdir@"

View File

@ -68,6 +68,7 @@ POTFILES = \
hello-sh/hello.sh \
hello-gawk/hello.awk \
hello-pascal/hello.pas \
hello-modula2/hello.mod.in \
hello-d/hello.d.in \
hello-smalltalk/hello.st.in \
hello-tcl/hello.tcl \
@ -110,6 +111,7 @@ SMALLPOTS = \
hello-sh.pot \
hello-gawk.pot \
hello-pascal.pot \
hello-modula2.pot \
hello-d.pot \
hello-smalltalk.pot \
hello-tcl.pot \
@ -354,6 +356,9 @@ hello-gawk.pot : $(POTFILES_DEPS)
hello-pascal.pot : $(POTFILES_DEPS)
$(USE_BUILT_PROGS) $(SHELL) '$(srcdir)/xsmallpot.sh' '$(srcdir)' hello-pascal
hello-modula2.pot : $(POTFILES_DEPS)
$(USE_BUILT_PROGS) $(SHELL) '$(srcdir)/xsmallpot.sh' '$(srcdir)' hello-modula2
hello-d.pot : $(POTFILES_DEPS)
$(USE_BUILT_PROGS) $(SHELL) '$(srcdir)/xsmallpot.sh' '$(srcdir)' hello-d
@ -482,6 +487,7 @@ SMALLPOFILES_FOR_lang = \
$(srcdir)/../hello-sh/po/$$lang.po \
$(srcdir)/../hello-gawk/po/$$lang.po \
$(srcdir)/../hello-pascal/po/$$lang.po \
$(srcdir)/../hello-modula2/po/$$lang.po \
$(srcdir)/../hello-d/po/$$lang.po \
$(srcdir)/../hello-smalltalk/po/$$lang.po \
$(srcdir)/../hello-tcl/po/$$lang.po \
@ -583,6 +589,9 @@ $(srcdir)/../hello-gawk/po/$(LL).po: $(srcdir)/hello-gawk.pot $(srcdir)/$(LL).po
$(srcdir)/../hello-pascal/po/$(LL).po: $(srcdir)/hello-pascal.pot $(srcdir)/$(LL).po
$(USE_BUILT_PROGS) cd $(srcdir) && $(SHELL) mmsmallpo.sh hello-pascal $(LL)
$(srcdir)/../hello-modula2/po/$(LL).po: $(srcdir)/hello-modula2.pot $(srcdir)/$(LL).po
$(USE_BUILT_PROGS) cd $(srcdir) && $(SHELL) mmsmallpo.sh hello-modula2 $(LL)
$(srcdir)/../hello-d/po/$(LL).po: $(srcdir)/hello-d.pot $(srcdir)/$(LL).po
$(USE_BUILT_PROGS) cd $(srcdir) && $(SHELL) mmsmallpo.sh hello-d $(LL)

View File

@ -44,7 +44,8 @@ examplesbuildaux_DATA = \
../gnulib-m4/javacomp.m4 ../gnulib-m4/javaexec.m4 \
../gnulib-m4/csharp.m4 ../gnulib-m4/csharpcomp.m4 ../gnulib-m4/csharpexec.m4 csharpexec-test.exe \
../gnulib-m4/gocomp.m4 \
../gnulib-m4/dcomp.m4
../gnulib-m4/dcomp.m4 \
../gnulib-m4/modula2comp.m4
# Generate this list with
# find . -type f -name '*.m4' -printf ' %f\n' | sort | tr '\012' @ | sed 's/@$/%/;s/@/ \\@/g' | tr @% '\012\012'