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 or the GNU Library General Public License but which still want
7 # to provide support for the GNU gettext functionality.
8 # Please note that the actual code of the GNU gettext library is covered
9 # by the GNU Library General Public License, and the rest of the GNU
10 # gettext package package is covered by the GNU General Public License.
11 # They are *not* in the public domain.
15 dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
16 dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
17 dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
18 dnl depending on --{enable,disable}-{shared,static} and on the presence of
19 dnl AM-DISABLE-SHARED). Otherwise, a static library
20 dnl $(top_builddir)/intl/libintl.a will be created.
21 dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
22 dnl implementations (in libc or libintl) without the ngettext() function
24 dnl LIBDIR is used to find the intl libraries. If empty,
25 dnl the value `$(top_builddir)/intl/' is used.
27 dnl The result of the configuration is one of three cases:
28 dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
30 dnl Catalog format: GNU --> install in $(datadir)
31 dnl Catalog extension: .mo after installation, .gmo in source tree
32 dnl 2) GNU gettext has been found in the system's C library.
33 dnl Catalog format: GNU --> install in $(datadir)
34 dnl Catalog extension: .mo after installation, .gmo in source tree
35 dnl 3) No internationalization, always use English msgid.
36 dnl Catalog format: none
37 dnl Catalog extension: none
38 dnl The use of .gmo is historical (it was needed to avoid overwriting the
39 dnl GNU format catalogs when building on a platform with an X/Open gettext),
40 dnl but we keep it in order not to force irrelevant filename changes on the
43 AC_DEFUN([AM_WITH_NLS],
44 [AC_MSG_CHECKING([whether NLS is requested])
45 dnl Default is enabled NLS
47 [ --disable-nls do not use Native Language Support],
48 USE_NLS=$enableval, USE_NLS=yes)
49 AC_MSG_RESULT($USE_NLS)
52 BUILD_INCLUDED_LIBINTL=no
53 USE_INCLUDED_LIBINTL=no
56 dnl If we use NLS figure out what method
57 if test "$USE_NLS" = "yes"; then
58 AC_DEFINE(ENABLE_NLS, 1,
59 [Define to 1 if translation of program messages to the user's native language
61 AC_MSG_CHECKING([whether included gettext is requested])
62 AC_ARG_WITH(included-gettext,
63 [ --with-included-gettext use the GNU gettext library included here],
64 nls_cv_force_use_gnu_gettext=$withval,
65 nls_cv_force_use_gnu_gettext=no)
66 AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
68 nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
69 if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
70 dnl User does not insist on using GNU NLS library. Figure out what
71 dnl to use. If GNU gettext is available we use this. Else we have
72 dnl to fall back to GNU NLS library.
75 dnl Add a version number to the cache macros.
76 define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
77 define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
79 AC_CHECK_HEADER(libintl.h,
80 [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
81 [AC_TRY_LINK([#include <libintl.h>
82 extern int _nl_msg_cat_cntr;],
83 [bindtextdomain ("", "");
84 return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
85 gt_cv_func_gnugettext_libc=yes,
86 gt_cv_func_gnugettext_libc=no)])
88 if test "$gt_cv_func_gnugettext_libc" != "yes"; then
89 AC_CACHE_CHECK([for GNU gettext in libintl],
90 gt_cv_func_gnugettext_libintl,
92 LIBS="$LIBS -lintl $LIBICONV"
93 AC_TRY_LINK([#include <libintl.h>
94 extern int _nl_msg_cat_cntr;],
95 [bindtextdomain ("", "");
96 return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
97 gt_cv_func_gnugettext_libintl=yes,
98 gt_cv_func_gnugettext_libintl=no)
99 LIBS="$gt_save_LIBS"])
102 dnl If an already present or preinstalled GNU gettext() is found,
103 dnl use it. But if this macro is used in GNU gettext, and GNU
104 dnl gettext is already preinstalled in libintl, we update this
105 dnl libintl. (Cf. the install rule in intl/Makefile.in.)
106 if test "$gt_cv_func_gnugettext_libc" = "yes" \
107 || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
108 && test "$PACKAGE" != gettext; }; then
109 AC_DEFINE(HAVE_GETTEXT, 1,
110 [Define if the GNU gettext() function is already present or preinstalled.])
112 if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
113 dnl If iconv() is in a separate libiconv library, then anyone
114 dnl linking with libintl{.a,.so} also needs to link with
116 INTLLIBS="-lintl $LIBICONV"
120 LIBS="$LIBS $INTLLIBS"
121 AC_CHECK_FUNCS(dcgettext)
124 dnl Search for GNU msgfmt in the PATH.
125 AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
126 [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
127 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
129 dnl Search for GNU xgettext in the PATH.
130 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
131 [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
137 if test "$CATOBJEXT" = "NONE"; then
138 dnl GNU gettext is not found in the C library.
139 dnl Fall back on GNU gettext library.
140 nls_cv_use_gnu_gettext=yes
144 if test "$nls_cv_use_gnu_gettext" = "yes"; then
145 dnl Mark actions used to generate GNU NLS library.
146 INTLOBJS="\$(GETTOBJS)"
147 AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
148 [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
149 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
150 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
151 [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
153 BUILD_INCLUDED_LIBINTL=yes
154 USE_INCLUDED_LIBINTL=yes
156 INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
157 LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
160 dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
161 dnl Test whether we really found GNU msgfmt.
162 if test "$GMSGFMT" != ":"; then
163 dnl If it is no GNU msgfmt we define it as : so that the
164 dnl Makefiles still can work.
165 if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
169 [found msgfmt program is not GNU msgfmt; ignore it])
174 dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
175 dnl Test whether we really found GNU xgettext.
176 if test "$XGETTEXT" != ":"; then
177 dnl If it is no GNU xgettext we define it as : so that the
178 dnl Makefiles still can work.
179 if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
183 [found xgettext program is not GNU xgettext; ignore it])
188 dnl We need to process the po/ directory.
192 [for ac_file in $CONFIG_FILES; do
193 # Support "outfile[:infile[:infile...]]"
195 *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
197 # PO directories have a Makefile.in generated from Makefile.in.in.
198 case "$ac_file" in */Makefile.in)
199 # Adjust a relative srcdir.
200 ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
201 ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
202 ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
203 # In autoconf-2.13 it is called $ac_given_srcdir.
204 # In autoconf-2.50 it is called $srcdir.
205 test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
206 case "$ac_given_srcdir" in
207 .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
208 /*) top_srcdir="$ac_given_srcdir" ;;
209 *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
211 if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
212 rm -f "$ac_dir/POTFILES"
213 test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
214 sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
215 test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
216 sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
223 dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
224 dnl to 'yes' because some of the testsuite requires it.
225 if test "$PACKAGE" = gettext; then
226 BUILD_INCLUDED_LIBINTL=yes
229 dnl intl/plural.c is generated from intl/plural.y. It requires bison,
230 dnl because plural.y uses bison specific features. It requires at least
231 dnl bison-1.26 because earlier versions generate a plural.c that doesn't
233 dnl bison is only needed for the maintainer (who touches plural.y). But in
234 dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
235 dnl the rule in general Makefile. Now, some people carelessly touch the
236 dnl files or have a broken "make" program, hence the plural.c rule will
237 dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
238 dnl present or too old.
239 AC_CHECK_PROGS([INTLBISON], [bison])
240 if test -z "$INTLBISON"; then
243 dnl Found it, now check the version.
244 AC_MSG_CHECKING([version of bison])
245 changequote(<<,>>)dnl
246 ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
247 case $ac_prog_version in
248 '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
249 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
251 ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
252 *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
254 AC_MSG_RESULT([$ac_prog_version])
256 if test $ac_verc_fail = yes; then
260 dnl These rules are solely for the distribution goal. While doing this
261 dnl we only have to keep exactly one list of the available catalogs
263 for lang in $ALL_LINGUAS; do
264 GMOFILES="$GMOFILES $lang.gmo"
265 POFILES="$POFILES $lang.po"
268 dnl Make all variables we use known to autoconf.
269 AC_SUBST(BUILD_INCLUDED_LIBINTL)
270 AC_SUBST(USE_INCLUDED_LIBINTL)
279 dnl For backward compatibility. Some configure.ins may be using this.
283 dnl For backward compatibility. Some Makefiles may be using this.
285 AC_SUBST(DATADIRNAME)
287 dnl For backward compatibility. Some Makefiles may be using this.
291 dnl For backward compatibility. Some Makefiles may be using this.
296 dnl Usage: Just like AM_WITH_NLS, which see.
297 AC_DEFUN([AM_GNU_GETTEXT],
298 [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
299 AC_REQUIRE([AC_PROG_CC])dnl
300 AC_REQUIRE([AC_CANONICAL_HOST])dnl
301 AC_REQUIRE([AC_PROG_RANLIB])dnl
302 AC_REQUIRE([AC_ISC_POSIX])dnl
303 AC_REQUIRE([AC_HEADER_STDC])dnl
304 AC_REQUIRE([AC_C_CONST])dnl
305 AC_REQUIRE([AC_C_INLINE])dnl
306 AC_REQUIRE([AC_TYPE_OFF_T])dnl
307 AC_REQUIRE([AC_TYPE_SIZE_T])dnl
308 AC_REQUIRE([AC_FUNC_ALLOCA])dnl
309 AC_REQUIRE([AC_FUNC_MMAP])dnl
310 AC_REQUIRE([jm_GLIBC21])dnl
312 AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
313 stdlib.h string.h unistd.h sys/param.h])
314 AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
315 getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
316 strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
321 AM_WITH_NLS([$1],[$2],[$3])
323 if test "x$CATOBJEXT" != "x"; then
324 if test "x$ALL_LINGUAS" = "x"; then
327 AC_MSG_CHECKING(for catalogs to be installed)
329 for presentlang in $ALL_LINGUAS; do
331 for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
332 # Use the presentlang catalog if desiredlang is
333 # a. equal to presentlang, or
334 # b. a variant of presentlang (because in this case,
335 # presentlang can be used as a fallback for messages
336 # which are not translated in the desiredlang catalog).
337 case "$desiredlang" in
338 "$presentlang"*) useit=yes;;
341 if test $useit = yes; then
342 NEW_LINGUAS="$NEW_LINGUAS $presentlang"
346 AC_MSG_RESULT($LINGUAS)
349 dnl Construct list of names of catalog files to be constructed.
350 if test -n "$LINGUAS"; then
351 for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
355 dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
356 dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
357 dnl Try to locate is.
359 if test -n "$ac_aux_dir"; then
360 MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
362 if test -z "$MKINSTALLDIRS"; then
363 MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
365 AC_SUBST(MKINSTALLDIRS)
367 dnl Enable libtool support if the surrounding package wishes it.
368 INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
369 AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)