1 # Macro to add for using GNU gettext.
2 # Ulrich Drepper <drepper@cygnus.com>, 1995.
4 # This file can be copied and used freely without restrictions. It can
5 # be used in projects which are not available under the GNU General Public
6 # License but which still want to provide support for the GNU gettext
8 # Please note that the actual code of GNU gettext is covered by the GNU
9 # General Public License and is *not* in the public domain.
13 dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
14 dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
15 dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
16 dnl depending on --{enable,disable}-{shared,static} and on the presence of
17 dnl AM-DISABLE-SHARED). Otherwise, a static library
18 dnl $(top_builddir)/intl/libintl.a will be created.
19 dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
20 dnl implementations (in libc or libintl) without the ngettext() function
22 dnl LIBDIR is used to find the intl libraries. If empty,
23 dnl the value `$(top_builddir)/intl/' is used.
25 dnl The result of the configuration is one of three cases:
26 dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
28 dnl Catalog format: GNU --> install in $(datadir)
29 dnl Catalog extension: .mo after installation, .gmo in source tree
30 dnl 2) GNU gettext has been found in the system's C library.
31 dnl Catalog format: GNU --> install in $(datadir)
32 dnl Catalog extension: .mo after installation, .gmo in source tree
33 dnl 3) No internationalization, always use English msgid.
34 dnl Catalog format: none
35 dnl Catalog extension: none
36 dnl The use of .gmo is historical (it was needed to avoid overwriting the
37 dnl GNU format catalogs when building on a platform with an X/Open gettext),
38 dnl but we keep it in order not to force irrelevant filename changes on the
41 AC_DEFUN([AM_WITH_NLS],
42 [AC_MSG_CHECKING([whether NLS is requested])
43 dnl Default is enabled NLS
45 [ --disable-nls do not use Native Language Support],
46 USE_NLS=$enableval, USE_NLS=yes)
47 AC_MSG_RESULT($USE_NLS)
50 BUILD_INCLUDED_LIBINTL=no
51 USE_INCLUDED_LIBINTL=no
54 dnl If we use NLS figure out what method
55 if test "$USE_NLS" = "yes"; then
56 AC_DEFINE(ENABLE_NLS, 1,
57 [Define to 1 if translation of program messages to the user's native language
59 AC_MSG_CHECKING([whether included gettext is requested])
60 AC_ARG_WITH(included-gettext,
61 [ --with-included-gettext use the GNU gettext library included here],
62 nls_cv_force_use_gnu_gettext=$withval,
63 nls_cv_force_use_gnu_gettext=no)
64 AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
66 nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
67 if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
68 dnl User does not insist on using GNU NLS library. Figure out what
69 dnl to use. If GNU gettext is available we use this. Else we have
70 dnl to fall back to GNU NLS library.
73 dnl Add a version number to the cache macros.
74 define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
75 define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
77 AC_CHECK_HEADER(libintl.h,
78 [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
79 [AC_TRY_LINK([#include <libintl.h>
80 extern int _nl_msg_cat_cntr;],
81 [bindtextdomain ("", "");
82 return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
83 gt_cv_func_gnugettext_libc=yes,
84 gt_cv_func_gnugettext_libc=no)])
86 if test "$gt_cv_func_gnugettext_libc" != "yes"; then
87 AC_CACHE_CHECK([for GNU gettext in libintl],
88 gt_cv_func_gnugettext_libintl,
90 LIBS="$LIBS -lintl $LIBICONV"
91 AC_TRY_LINK([#include <libintl.h>
92 extern int _nl_msg_cat_cntr;],
93 [bindtextdomain ("", "");
94 return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
95 gt_cv_func_gnugettext_libintl=yes,
96 gt_cv_func_gnugettext_libintl=no)
97 LIBS="$gt_save_LIBS"])
100 dnl If an already present or preinstalled GNU gettext() is found,
101 dnl use it. But if this macro is used in GNU gettext, and GNU
102 dnl gettext is already preinstalled in libintl, we update this
103 dnl libintl. (Cf. the install rule in intl/Makefile.in.)
104 if test "$gt_cv_func_gnugettext_libc" = "yes" \
105 || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
106 && test "$PACKAGE" != gettext; }; then
107 AC_DEFINE(HAVE_GETTEXT, 1,
108 [Define if the GNU gettext() function is already present or preinstalled.])
110 if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
111 dnl If iconv() is in a separate libiconv library, then anyone
112 dnl linking with libintl{.a,.so} also needs to link with
114 INTLLIBS="-lintl $LIBICONV"
118 LIBS="$LIBS $INTLLIBS"
119 AC_CHECK_FUNCS(dcgettext)
122 dnl Search for GNU msgfmt in the PATH.
123 AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
124 [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
125 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
127 dnl Search for GNU xgettext in the PATH.
128 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
129 [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
135 if test "$CATOBJEXT" = "NONE"; then
136 dnl GNU gettext is not found in the C library.
137 dnl Fall back on GNU gettext library.
138 nls_cv_use_gnu_gettext=yes
142 if test "$nls_cv_use_gnu_gettext" = "yes"; then
143 dnl Mark actions used to generate GNU NLS library.
144 INTLOBJS="\$(GETTOBJS)"
145 AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
146 [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
147 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
148 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
149 [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
151 BUILD_INCLUDED_LIBINTL=yes
152 USE_INCLUDED_LIBINTL=yes
154 INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
155 LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
158 dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
159 dnl Test whether we really found GNU msgfmt.
160 if test "$GMSGFMT" != ":"; then
161 dnl If it is no GNU msgfmt we define it as : so that the
162 dnl Makefiles still can work.
163 if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
167 [found msgfmt program is not GNU msgfmt; ignore it])
172 dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
173 dnl Test whether we really found GNU xgettext.
174 if test "$XGETTEXT" != ":"; then
175 dnl If it is no GNU xgettext we define it as : so that the
176 dnl Makefiles still can work.
177 if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
181 [found xgettext program is not GNU xgettext; ignore it])
186 dnl We need to process the po/ directory.
190 [for ac_file in $CONFIG_FILES; do
191 # Support "outfile[:infile[:infile...]]"
193 *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
195 # PO directories have a Makefile.in generated from Makefile.in.in.
196 case "$ac_file" in */Makefile.in)
197 # Adjust a relative srcdir.
198 ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
199 ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
200 ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
201 # In autoconf-2.13 it is called $ac_given_srcdir.
202 # In autoconf-2.50 it is called $srcdir.
203 test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
204 case "$ac_given_srcdir" in
205 .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
206 /*) top_srcdir="$ac_given_srcdir" ;;
207 *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
209 if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
210 rm -f "$ac_dir/POTFILES"
211 test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
212 sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
213 test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
214 sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
221 dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
222 dnl to 'yes' because some of the testsuite requires it.
223 if test "$PACKAGE" = gettext; then
224 BUILD_INCLUDED_LIBINTL=yes
227 dnl intl/plural.c is generated from intl/plural.y. It requires bison,
228 dnl because plural.y uses bison specific features. It requires at least
229 dnl bison-1.26 because earlier versions generate a plural.c that doesn't
231 dnl bison is only needed for the maintainer (who touches plural.y). But in
232 dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
233 dnl the rule in general Makefile. Now, some people carelessly touch the
234 dnl files or have a broken "make" program, hence the plural.c rule will
235 dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
236 dnl present or too old.
237 AC_CHECK_PROGS([INTLBISON], [bison])
238 if test -z "$INTLBISON"; then
241 dnl Found it, now check the version.
242 AC_MSG_CHECKING([version of bison])
243 changequote(<<,>>)dnl
244 ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison .* \([0-9]*\.[0-9.]*\).*$/\1/p'`
245 case $ac_prog_version in
246 '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
247 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
249 ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
250 *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
252 AC_MSG_RESULT([$ac_prog_version])
254 if test $ac_verc_fail = yes; then
258 dnl These rules are solely for the distribution goal. While doing this
259 dnl we only have to keep exactly one list of the available catalogs
261 for lang in $ALL_LINGUAS; do
262 GMOFILES="$GMOFILES $lang.gmo"
263 POFILES="$POFILES $lang.po"
266 dnl Make all variables we use known to autoconf.
267 AC_SUBST(BUILD_INCLUDED_LIBINTL)
268 AC_SUBST(USE_INCLUDED_LIBINTL)
277 dnl For backward compatibility. Some configure.ins may be using this.
281 dnl For backward compatibility. Some Makefiles may be using this.
283 AC_SUBST(DATADIRNAME)
285 dnl For backward compatibility. Some Makefiles may be using this.
289 dnl For backward compatibility. Some Makefiles may be using this.
294 dnl Usage: Just like AM_WITH_NLS, which see.
295 AC_DEFUN([AM_GNU_GETTEXT],
296 [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
297 AC_REQUIRE([AC_PROG_CC])dnl
298 AC_REQUIRE([AC_CANONICAL_HOST])dnl
299 AC_REQUIRE([AC_PROG_RANLIB])dnl
300 AC_REQUIRE([AC_ISC_POSIX])dnl
301 AC_REQUIRE([AC_HEADER_STDC])dnl
302 AC_REQUIRE([AC_C_CONST])dnl
303 AC_REQUIRE([AC_C_INLINE])dnl
304 AC_REQUIRE([AC_TYPE_OFF_T])dnl
305 AC_REQUIRE([AC_TYPE_SIZE_T])dnl
306 AC_REQUIRE([AC_FUNC_ALLOCA])dnl
307 AC_REQUIRE([AC_FUNC_MMAP])dnl
308 AC_REQUIRE([jm_GLIBC21])dnl
310 AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
311 stdlib.h string.h unistd.h sys/param.h])
312 AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
313 getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
314 strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
319 AM_WITH_NLS([$1],[$2],[$3])
321 if test "x$CATOBJEXT" != "x"; then
322 if test "x$ALL_LINGUAS" = "x"; then
325 AC_MSG_CHECKING(for catalogs to be installed)
327 for presentlang in $ALL_LINGUAS; do
329 for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
330 # Use the presentlang catalog if desiredlang is
331 # a. equal to presentlang, or
332 # b. a variant of presentlang (because in this case,
333 # presentlang can be used as a fallback for messages
334 # which are not translated in the desiredlang catalog).
335 case "$desiredlang" in
336 "$presentlang"*) useit=yes;;
339 if test $useit = yes; then
340 NEW_LINGUAS="$NEW_LINGUAS $presentlang"
344 AC_MSG_RESULT($LINGUAS)
347 dnl Construct list of names of catalog files to be constructed.
348 if test -n "$LINGUAS"; then
349 for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
353 dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
354 dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
355 dnl Try to locate is.
357 if test -n "$ac_aux_dir"; then
358 MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
360 if test -z "$MKINSTALLDIRS"; then
361 MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
363 AC_SUBST(MKINSTALLDIRS)
365 dnl Enable libtool support if the surrounding package wishes it.
366 INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
367 AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)