mutt stable branch with some hacks
1# Macro to add for using GNU gettext.
2# Ulrich Drepper <drepper@cygnus.com>, 1995.
3
4#
5# Slightly modified by Thomas Roessler <roessler@does-not-exist.org>
6# Updated to gettext-0.10.38 by Edmund Grimley Evans <edmundo@rano.org>
7# Updated to gettext-0.10.40 by Andrew W. Nosenko <awn@bcs.zp.ua>
8#
9
10# This file can be copied and used freely without restrictions. It can
11# be used in projects which are not available under the GNU General Public
12# License or the GNU Library General Public License but which still want
13# to provide support for the GNU gettext functionality.
14# Please note that the actual code of the GNU gettext library is covered
15# by the GNU Library General Public License, and the rest of the GNU
16# gettext package package is covered by the GNU General Public License.
17# They are *not* in the public domain.
18
19# serial 10
20
21dnl Usage: MUTT_AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
22dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
23dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
24dnl depending on --{enable,disable}-{shared,static} and on the presence of
25dnl AM-DISABLE-SHARED). Otherwise, a static library
26dnl $(top_builddir)/intl/libintl.a will be created.
27dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
28dnl implementations (in libc or libintl) without the ngettext() function
29dnl will be ignored.
30dnl LIBDIR is used to find the intl libraries. If empty,
31dnl the value `$(top_builddir)/intl/' is used.
32dnl
33dnl The result of the configuration is one of three cases:
34dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
35dnl and used.
36dnl Catalog format: GNU --> install in $(datadir)
37dnl Catalog extension: .mo after installation, .gmo in source tree
38dnl 2) GNU gettext has been found in the system's C library.
39dnl Catalog format: GNU --> install in $(datadir)
40dnl Catalog extension: .mo after installation, .gmo in source tree
41dnl 3) No internationalization, always use English msgid.
42dnl Catalog format: none
43dnl Catalog extension: none
44dnl The use of .gmo is historical (it was needed to avoid overwriting the
45dnl GNU format catalogs when building on a platform with an X/Open gettext),
46dnl but we keep it in order not to force irrelevant filename changes on the
47dnl maintainers.
48dnl
49AC_DEFUN([MUTT_AM_WITH_NLS],
50 [AC_MSG_CHECKING([whether NLS is requested])
51 dnl Default is enabled NLS
52 AC_ARG_ENABLE(nls,
53 AC_HELP_STRING([--disable-nls], [Do not use Native Language Support]),
54 USE_NLS=$enableval, USE_NLS=yes)
55 AC_MSG_RESULT($USE_NLS)
56 AC_SUBST(USE_NLS)
57
58 BUILD_INCLUDED_LIBINTL=no
59 USE_INCLUDED_LIBINTL=no
60 INTLLIBS=
61
62 dnl If we use NLS figure out what method
63 if test "$USE_NLS" = "yes"; then
64 AC_DEFINE(ENABLE_NLS, 1,
65 [Define to 1 if translation of program messages to the user's native language
66 is requested.])
67 AC_MSG_CHECKING([whether included gettext is requested])
68 AC_ARG_WITH(included-gettext,
69 AC_HELP_STRING([--with-included-gettext], [Use the GNU gettext library included here]),
70 nls_cv_force_use_gnu_gettext=$withval,
71 nls_cv_force_use_gnu_gettext=no)
72 AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
73
74 nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
75 if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
76 dnl User does not insist on using GNU NLS library. Figure out what
77 dnl to use. If GNU gettext is available we use this. Else we have
78 dnl to fall back to GNU NLS library.
79 CATOBJEXT=NONE
80
81 dnl Add a version number to the cache macros.
82 define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
83 define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
84
85 AC_CHECK_HEADER(libintl.h,
86 [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
87 [AC_TRY_LINK([#include <libintl.h>
88extern int _nl_msg_cat_cntr;],
89 [bindtextdomain ("", "");
90return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
91 gt_cv_func_gnugettext_libc=yes,
92 gt_cv_func_gnugettext_libc=no)])
93
94 if test "$gt_cv_func_gnugettext_libc" != "yes"; then
95 AC_CACHE_CHECK([for GNU gettext in libintl],
96 gt_cv_func_gnugettext_libintl,
97 [gt_save_LIBS="$LIBS"
98 LIBS="$LIBS -lintl $LIBICONV"
99 AC_TRY_LINK([#include <libintl.h>
100extern int _nl_msg_cat_cntr;],
101 [bindtextdomain ("", "");
102return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
103 gt_cv_func_gnugettext_libintl=yes,
104 gt_cv_func_gnugettext_libintl=no)
105 LIBS="$gt_save_LIBS"])
106 fi
107
108 dnl If an already present or preinstalled GNU gettext() is found,
109 dnl use it. But if this macro is used in GNU gettext, and GNU
110 dnl gettext is already preinstalled in libintl, we update this
111 dnl libintl. (Cf. the install rule in intl/Makefile.in.)
112 if test "$gt_cv_func_gnugettext_libc" = "yes" \
113 || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
114 && test "$PACKAGE" != gettext; }; then
115 AC_DEFINE(HAVE_GETTEXT, 1,
116 [Define if the GNU gettext() function is already present or preinstalled.])
117
118 if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
119 dnl If iconv() is in a separate libiconv library, then anyone
120 dnl linking with libintl{.a,.so} also needs to link with
121 dnl libiconv.
122 INTLLIBS="-lintl $LIBICONV"
123 fi
124
125 gt_save_LIBS="$LIBS"
126 LIBS="$LIBS $INTLLIBS"
127 AC_CHECK_FUNCS(dcgettext)
128 LIBS="$gt_save_LIBS"
129
130 dnl Search for GNU msgfmt in the PATH.
131 MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
132 [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
133 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
134
135 dnl Search for GNU xgettext in the PATH.
136 MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
137 [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
138
139 CATOBJEXT=.gmo
140 fi
141 ])
142
143 if test "$CATOBJEXT" = "NONE"; then
144 dnl GNU gettext is not found in the C library.
145 dnl Fall back on GNU gettext library.
146 nls_cv_use_gnu_gettext=yes
147 fi
148 fi
149
150 if test "$nls_cv_use_gnu_gettext" = "yes"; then
151 dnl Mark actions used to generate GNU NLS library.
152 INTLOBJS="\$(GETTOBJS)"
153 MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
154 [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
155 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
156 MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
157 [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
158 AC_SUBST(MSGFMT)
159 BUILD_INCLUDED_LIBINTL=yes
160 USE_INCLUDED_LIBINTL=yes
161 CATOBJEXT=.gmo
162 INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
163 LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
164 fi
165
166 dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it.
167 dnl Test whether we really found GNU msgfmt.
168 if test "$GMSGFMT" != ":"; then
169 dnl If it is no GNU msgfmt we define it as : so that the
170 dnl Makefiles still can work.
171 if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
172 : ;
173 else
174 AC_MSG_RESULT(
175 [found msgfmt program is not GNU msgfmt; ignore it])
176 GMSGFMT=":"
177 fi
178 fi
179
180 dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it.
181 dnl Test whether we really found GNU xgettext.
182 if test "$XGETTEXT" != ":"; then
183 dnl If it is no GNU xgettext we define it as : so that the
184 dnl Makefiles still can work.
185 if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
186 : ;
187 else
188 AC_MSG_RESULT(
189 [found xgettext program is not GNU xgettext; ignore it])
190 XGETTEXT=":"
191 fi
192 fi
193
194 dnl We need to process the po/ directory.
195 POSUB=po
196 fi
197 AC_OUTPUT_COMMANDS(
198 [for ac_file in $CONFIG_FILES; do
199 # Support "outfile[:infile[:infile...]]"
200 case "$ac_file" in
201 *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
202 esac
203 # PO directories have a Makefile.in generated from Makefile.in.in.
204 case "$ac_file" in */Makefile.in)
205 # Adjust a relative srcdir.
206 ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
207 ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
208 ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
209 # In autoconf-2.13 it is called $ac_given_srcdir.
210 # In autoconf-2.50 it is called $srcdir.
211 test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
212 case "$ac_given_srcdir" in
213 .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
214 /*) top_srcdir="$ac_given_srcdir" ;;
215 *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
216 esac
217 if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
218 rm -f "$ac_dir/POTFILES"
219 test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
220 sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
221 test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
222 sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
223 fi
224 ;;
225 esac
226 done])
227
228
229 dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
230 dnl to 'yes' because some of the testsuite requires it.
231 if test "$PACKAGE" = gettext; then
232 BUILD_INCLUDED_LIBINTL=yes
233 fi
234
235 dnl intl/plural.c is generated from intl/plural.y. It requires bison,
236 dnl because plural.y uses bison specific features. It requires at least
237 dnl bison-1.26 because earlier versions generate a plural.c that doesn't
238 dnl compile.
239 dnl bison is only needed for the maintainer (who touches plural.y). But in
240 dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
241 dnl the rule in general Makefile. Now, some people carelessly touch the
242 dnl files or have a broken "make" program, hence the plural.c rule will
243 dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
244 dnl present or too old.
245 AC_CHECK_PROGS([INTLBISON], [bison])
246 if test -z "$INTLBISON"; then
247 ac_verc_fail=yes
248 else
249 dnl Found it, now check the version.
250 AC_MSG_CHECKING([version of bison])
251changequote(<<,>>)dnl
252 ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
253 case $ac_prog_version in
254 '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
255 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
256changequote([,])dnl
257 ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
258 *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
259 esac
260 AC_MSG_RESULT([$ac_prog_version])
261 fi
262 if test $ac_verc_fail = yes; then
263 INTLBISON=:
264 fi
265
266 dnl These rules are solely for the distribution goal. While doing this
267 dnl we only have to keep exactly one list of the available catalogs
268 dnl in configure.in.
269 for lang in $ALL_LINGUAS; do
270 GMOFILES="$GMOFILES $lang.gmo"
271 POFILES="$POFILES $lang.po"
272 done
273
274 dnl Make all variables we use known to autoconf.
275 AC_SUBST(BUILD_INCLUDED_LIBINTL)
276 AC_SUBST(USE_INCLUDED_LIBINTL)
277 AC_SUBST(CATALOGS)
278 AC_SUBST(CATOBJEXT)
279 AC_SUBST(GMOFILES)
280 AC_SUBST(INTLLIBS)
281 AC_SUBST(INTLOBJS)
282 AC_SUBST(POFILES)
283 AC_SUBST(POSUB)
284
285 dnl For backward compatibility. Some configure.ins may be using this.
286 nls_cv_header_intl=
287 nls_cv_header_libgt=
288
289 dnl For backward compatibility. Some Makefiles may be using this.
290 DATADIRNAME=share
291 AC_SUBST(DATADIRNAME)
292
293 dnl For backward compatibility. Some Makefiles may be using this.
294 INSTOBJEXT=.mo
295 AC_SUBST(INSTOBJEXT)
296
297 dnl For backward compatibility. Some Makefiles may be using this.
298 GENCAT=gencat
299 AC_SUBST(GENCAT)
300 ])
301
302dnl Usage: Just like MUTT_AM_WITH_NLS, which see.
303AC_DEFUN([MUTT_AM_GNU_GETTEXT],
304 [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
305 AC_REQUIRE([AC_PROG_CC])dnl
306 AC_REQUIRE([AC_CANONICAL_HOST])dnl
307 AC_REQUIRE([AC_PROG_RANLIB])dnl
308 AC_REQUIRE([AC_ISC_POSIX])dnl
309 AC_REQUIRE([AC_HEADER_STDC])dnl
310 AC_REQUIRE([AC_C_CONST])dnl
311 AC_REQUIRE([AC_C_INLINE])dnl
312 AC_REQUIRE([AC_TYPE_OFF_T])dnl
313 AC_REQUIRE([AC_TYPE_SIZE_T])dnl
314 AC_REQUIRE([AC_FUNC_ALLOCA])dnl
315 AC_REQUIRE([AC_FUNC_MMAP])dnl
316 AC_REQUIRE([MUTT_jm_GLIBC21])dnl
317
318 AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
319stdlib.h string.h unistd.h sys/param.h])
320 AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
321getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
322strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
323
324 MUTT_AM_ICONV
325 MUTT_AM_LANGINFO_CODESET
326 MUTT_AM_LC_MESSAGES
327 MUTT_AM_WITH_NLS([$1],[$2],[$3])
328
329 if test "x$CATOBJEXT" != "x"; then
330 if test "x$ALL_LINGUAS" = "x"; then
331 LINGUAS=
332 else
333 AC_MSG_CHECKING(for catalogs to be installed)
334 NEW_LINGUAS=
335 for presentlang in $ALL_LINGUAS; do
336 useit=no
337 for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
338 # Use the presentlang catalog if desiredlang is
339 # a. equal to presentlang, or
340 # b. a variant of presentlang (because in this case,
341 # presentlang can be used as a fallback for messages
342 # which are not translated in the desiredlang catalog).
343 case "$desiredlang" in
344 "$presentlang"*) useit=yes;;
345 esac
346 done
347 if test $useit = yes; then
348 NEW_LINGUAS="$NEW_LINGUAS $presentlang"
349 fi
350 done
351 LINGUAS=$NEW_LINGUAS
352 AC_MSG_RESULT($LINGUAS)
353 fi
354
355 dnl Construct list of names of catalog files to be constructed.
356 if test -n "$LINGUAS"; then
357 for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
358 fi
359 fi
360
361 dnl Enable libtool support if the surrounding package wishes it.
362 INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
363 AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
364 ])