examples: Add hello-d example.

* gettext-tools/examples/hello-d/INSTALL: New file.
* gettext-tools/examples/hello-d/autogen.sh: New file.
* gettext-tools/examples/hello-d/autoclean.sh: New file.
* gettext-tools/examples/hello-d/hello.d.in: New file.
* gettext-tools/examples/hello-d/Makefile.am: New file.
* gettext-tools/examples/hello-d/configure.ac: New file.
* gettext-tools/examples/hello-d/m4/Makefile.am: New file.
* gettext-tools/examples/hello-d/po/LINGUAS: New file.
* gettext-tools/examples/hello-d/po/Makefile.am: New file.
* gettext-tools/examples/installpaths.in: Define also includedir.
* gettext-tools/examples/Makefile.am (EXAMPLESFILES, EXAMPLESDIRS): Add hello-d.
* gettext-tools/examples/po/Makefile.am (POTFILES, SMALLPOTS): Update for hello-d.
(hello-d.pot): New target.
(SMALLPOFILES_FOR_lang): Update for hello-d.
($(srcdir)/../hello-d/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-d as well.
* gettext-tools/examples/README: Mention hello-d.
* gettext-tools/doc/lang-d.texi: Likewise.
* NEWS: Likewise.
This commit is contained in:
Bruno Haible 2025-04-01 23:11:13 +02:00
parent 0f1ebb7871
commit e91e04e0f3
16 changed files with 727 additions and 1 deletions

1
NEWS
View File

@ -15,6 +15,7 @@ Version 0.25 - April 2025
- xgettext now supports D.
- 'msgfmt -c' now verifies the syntax of translations of D format
strings.
- A new example 'hello-d' has been added.
Version 0.24 - February 2025

View File

@ -70,3 +70,5 @@ fully portable
@item po-mode marking
---
@end table
An example is available in the @file{examples} directory: @code{hello-d}.

View File

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

View File

@ -36,6 +36,7 @@ environment.
hello-sh Shell
hello-gawk awk
hello-pascal Pascal
hello-d D
hello-smalltalk Smalltalk
hello-tcl Tcl
hello-tcl-tk Tcl Tk
@ -83,6 +84,7 @@ Makefile types:
hello-sh .gmo Makefile.am
hello-gawk .gmo Makefile.am
hello-pascal .gmo Makefile.am
hello-d .gmo Makefile.am
hello-smalltalk .gmo Makefile.am
hello-perl .gmo Makefile.am
hello-php .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-d
func_check_autoclean hello-smalltalk
func_check_autoclean hello-tcl
func_check_autoclean hello-tcl-tk
@ -237,6 +238,7 @@ func_check_distclean_all ()
func_check_distclean hello-sh
func_check_distclean hello-gawk
func_check_distclean hello-pascal
func_check_distclean hello-d
func_check_distclean hello-smalltalk
func_check_distclean hello-tcl
func_check_distclean hello-tcl-tk
@ -317,6 +319,7 @@ func_check_maintainerclean_all ()
func_check_maintainerclean hello-sh
func_check_maintainerclean hello-gawk
func_check_maintainerclean hello-pascal
func_check_maintainerclean hello-d
func_check_maintainerclean hello-smalltalk
func_check_maintainerclean hello-tcl
func_check_maintainerclean hello-tcl-tk
@ -400,6 +403,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-d
func_check_maintainerclean_vpath hello-smalltalk
func_check_maintainerclean_vpath hello-tcl
func_check_maintainerclean_vpath hello-tcl-tk
@ -490,6 +494,7 @@ func_check_dist_all ()
func_check_dist hello-sh
func_check_dist hello-gawk
func_check_dist hello-pascal
func_check_dist hello-d
func_check_dist hello-smalltalk
func_check_dist hello-tcl
func_check_dist hello-tcl-tk
@ -580,6 +585,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-d
func_check_dist_vpath hello-smalltalk
func_check_dist_vpath hello-tcl
func_check_dist_vpath hello-tcl-tk
@ -662,6 +668,7 @@ func_check_install_all ()
func_check_install hello-sh
func_check_install hello-gawk
func_check_install hello-pascal
func_check_install hello-d
func_check_install hello-smalltalk
func_check_install hello-tcl
func_check_install hello-tcl-tk
@ -741,6 +748,7 @@ func_check_uninstall_all ()
func_check_uninstall hello-sh
func_check_uninstall hello-gawk
func_check_uninstall hello-pascal
func_check_uninstall hello-d
func_check_uninstall hello-smalltalk
func_check_uninstall hello-tcl
func_check_uninstall hello-tcl-tk
@ -822,6 +830,7 @@ func_check_distcheck_all ()
func_check_distcheck hello-sh
func_check_distcheck hello-gawk
func_check_distcheck hello-pascal
func_check_distcheck hello-d
func_check_distcheck hello-smalltalk
func_check_distcheck hello-tcl
func_check_distcheck hello-tcl-tk
@ -886,6 +895,7 @@ func_check_all ()
func_check hello-sh
func_check hello-gawk
func_check hello-pascal
func_check hello-d
func_check hello-smalltalk
func_check hello-tcl
func_check hello-tcl-tk

View File

@ -0,0 +1,10 @@
This example relies on a D compiler (one of gdc, ldc2, dmd).
Installation:
./autogen.sh
./configure --prefix=/some/prefix
make
make install
Cleanup:
make distclean
./autoclean.sh

View File

@ -0,0 +1,49 @@
# 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.d
# Compile time dependencies.
dincludedir = $(D_PACKAGES_PREFIX)/include/d
dlibdir = $(D_PACKAGES_EXECPREFIX)/lib
# Link time dependencies.
LDADD = @LIBINTL@
hello$(EXEEXT): hello.d $(dlibdir)/libintl_d.a
$(SHELL) ./dcomp.sh -I$(dincludedir) -o hello$(EXEEXT) hello.d $(dlibdir)/libintl_d.a $(LDADD)
# Compile dependency module.
# For simplicity, compile the entire module to a single object file.
$(dlibdir)/libintl_d.a:
mkdir -p $(dlibdir)
$(SHELL) ./dcomp.sh -I$(dincludedir) -c -o $(dlibdir)/libintl_d.a `find $(dincludedir)/gnu/libintl -name '*.d' -print`
DISTCLEANFILES = dcomp.sh
distclean-local: distclean-generic
@if test '$(D_PACKAGES_EXECPREFIX)' = './depends'; then \
rm -f $(dlibdir)/libintl_d.a; \
rmdir $(dlibdir); \
rmdir depends 2>/dev/null || true; \
fi
# Additional files to be distributed.
EXTRA_DIST = \
autogen.sh autoclean.sh \
depends/include/d/gnu/libintl/package.d \
depends/include/d/gnu/libintl/libintl.d \
depends/include/d/gnu/libintl/internal/low.d

View File

@ -0,0 +1,51 @@
#!/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
# Brought in by explicit copy.
rm -rf depends
# 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/dcomp.m4
rm -f dcomp.sh.in
# 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,61 @@
#!/bin/sh
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Script for regenerating all autogenerated files.
mkdir -p depends/include/d
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
(cd "$GETTEXT_TOPSRCDIR/gettext-runtime/intl-d" \
&& tar cf - `find gnu/libintl -name '*.d' -print`) \
| (cd depends/include/d && tar xf -)
else
# Installed under ${prefix}/share/doc/gettext/examples.
. ../installpaths
(cd "$includedir/d" \
&& tar cf - `find gnu/libintl -name '*.d' -print`) \
| (cd depends/include/d && tar xf -)
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}/dcomp.m4 m4/dcomp.m4
cp -p ${EXAMPLESCONFIGDIR-$GETTEXT_TOPSRCDIR/build-aux}/dcomp.sh.in dcomp.sh.in
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-d], [0])
AC_CONFIG_SRCDIR([hello.d.in])
AM_INIT_AUTOMAKE([1.11])
gt_DCOMP
if test -z "$DC"; then
echo "*** D compiler not found" 1>&2
exit 1
fi
D_PACKAGES_PREFIX='$(srcdir)/depends'
D_PACKAGES_EXECPREFIX='./depends'
AC_ARG_WITH([d-packages-prefix],
[[ --with-d-packages-prefix=DIR search for D packages in DIR/include/d, DIR/lib]],
[if test "X$withval" != "X" && test "X$withval" != "Xno"; then
D_PACKAGES_PREFIX="$withval"
D_PACKAGES_EXECPREFIX="$D_PACKAGES_PREFIX"
fi
])
AC_SUBST([D_PACKAGES_PREFIX])
AC_SUBST([D_PACKAGES_EXECPREFIX])
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.d])
AC_CONFIG_FILES([dcomp.sh])
AC_CONFIG_FILES([m4/Makefile])
AC_CONFIG_FILES([po/Makefile], [AM_POSTPROCESS_PO_MAKEFILE])
AC_OUTPUT

View File

@ -0,0 +1,29 @@
/* Example for use of GNU gettext.
This file is in the public domain.
Source code of the D program. */
// Get writeln.
import std.stdio;
// Get format.
import std.format;
// Get locale constants.
import core.stdc.locale : LC_ALL;
// Get textdomain, bindtextdomain, gettext, ngettext, setlocale.
import gnu.libintl : textdomain, bindtextdomain, gettext, ngettext, setlocale;
// Get thisProcessID.
import std.process : thisProcessID;
// Define _() as a shorthand for gettext().
alias _ = gettext;
void main (string[] args)
{
setlocale (LC_ALL, "");
textdomain ("hello-d");
bindtextdomain ("hello-d", `@localedir@`);
writeln (_("Hello, world!"));
writeln (format (_("This program is running as process number %d."), thisProcessID));
}

View File

@ -0,0 +1,3 @@
EXTRA_DIST = \
nls.m4 po.m4 \
dcomp.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.d.in
# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)
# These options get passed to xgettext.
XGETTEXT_OPTIONS = -k_ --flag=_:1:pass-c-format --flag=_:1:pass-d-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 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

@ -1,6 +1,6 @@
# Shell script snippet that records various directories found by 'configure'.
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
# Copyright (C) 2003-2025 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -20,6 +20,7 @@ exec_prefix="@exec_prefix@"
datarootdir="@datarootdir@"
datadir="@datadir@"
docdir="@docdir@"
includedir="@includedir@"
ACLOCALDIR="@aclocaldir@"
GETTEXTSRCDIR="@datadir@/gettext"
GETTEXTSRCPODIR="@datadir@/gettext/po"

View File

@ -68,6 +68,7 @@ POTFILES = \
hello-sh/hello.sh \
hello-gawk/hello.awk \
hello-pascal/hello.pas \
hello-d/hello.d.in \
hello-smalltalk/hello.st.in \
hello-tcl/hello.tcl \
hello-tcl-tk/hello.tcl \
@ -109,6 +110,7 @@ SMALLPOTS = \
hello-sh.pot \
hello-gawk.pot \
hello-pascal.pot \
hello-d.pot \
hello-smalltalk.pot \
hello-tcl.pot \
hello-tcl-tk.pot \
@ -352,6 +354,9 @@ hello-gawk.pot : $(POTFILES_DEPS)
hello-pascal.pot : $(POTFILES_DEPS)
$(USE_BUILT_PROGS) $(SHELL) '$(srcdir)/xsmallpot.sh' '$(srcdir)' hello-pascal
hello-d.pot : $(POTFILES_DEPS)
$(USE_BUILT_PROGS) $(SHELL) '$(srcdir)/xsmallpot.sh' '$(srcdir)' hello-d
hello-smalltalk.pot : $(POTFILES_DEPS)
$(USE_BUILT_PROGS) $(SHELL) '$(srcdir)/xsmallpot.sh' '$(srcdir)' hello-smalltalk
@ -477,6 +482,7 @@ SMALLPOFILES_FOR_lang = \
$(srcdir)/../hello-sh/po/$$lang.po \
$(srcdir)/../hello-gawk/po/$$lang.po \
$(srcdir)/../hello-pascal/po/$$lang.po \
$(srcdir)/../hello-d/po/$$lang.po \
$(srcdir)/../hello-smalltalk/po/$$lang.po \
$(srcdir)/../hello-tcl/po/$$lang.po \
$(srcdir)/../hello-tcl-tk/po/$$lang.po \
@ -577,6 +583,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-d/po/$(LL).po: $(srcdir)/hello-d.pot $(srcdir)/$(LL).po
$(USE_BUILT_PROGS) cd $(srcdir) && $(SHELL) mmsmallpo.sh hello-d $(LL)
$(srcdir)/../hello-smalltalk/po/$(LL).po: $(srcdir)/hello-smalltalk.pot $(srcdir)/$(LL).po
$(USE_BUILT_PROGS) cd $(srcdir) && $(SHELL) mmsmallpo.sh hello-smalltalk $(LL)