1# gettext.m4 serial 60 (gettext-0.17)
2dnl Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3dnl 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
4dnl This file is free software; the Free Software Foundation
5dnl gives unlimited permission to copy and/or distribute it,
6dnl with or without modifications, as long as this notice is preserved.
7dnl
8dnl This file can can be used in projects which are not available under
9dnl the GNU General Public License or the GNU Library General Public
10dnl License but which still want to provide support for the GNU gettext
11dnl functionality.
12dnl Please note that the actual code of the GNU gettext library is covered
13dnl by the GNU Library General Public License, and the rest of the GNU
14dnl gettext package package is covered by the GNU General Public License.
15dnl They are *not* in the public domain.
16
17dnl Authors:
18dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
19dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006.
20
21dnl Macro to add for using GNU gettext.
22
23dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
24dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
25dnl    default (if it is not specified or empty) is 'no-libtool'.
26dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
27dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
28dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
29dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
30dnl    depending on --{enable,disable}-{shared,static} and on the presence of
31dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
32dnl    $(top_builddir)/intl/libintl.a will be created.
33dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
34dnl    implementations (in libc or libintl) without the ngettext() function
35dnl    will be ignored.  If NEEDSYMBOL is specified and is
36dnl    'need-formatstring-macros', then GNU gettext implementations that don't
37dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
38dnl INTLDIR is used to find the intl libraries.  If empty,
39dnl    the value `$(top_builddir)/intl/' is used.
40dnl
41dnl The result of the configuration is one of three cases:
42dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
43dnl    and used.
44dnl    Catalog format: GNU --> install in $(datadir)
45dnl    Catalog extension: .mo after installation, .gmo in source tree
46dnl 2) GNU gettext has been found in the system's C library.
47dnl    Catalog format: GNU --> install in $(datadir)
48dnl    Catalog extension: .mo after installation, .gmo in source tree
49dnl 3) No internationalization, always use English msgid.
50dnl    Catalog format: none
51dnl    Catalog extension: none
52dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
53dnl The use of .gmo is historical (it was needed to avoid overwriting the
54dnl GNU format catalogs when building on a platform with an X/Open gettext),
55dnl but we keep it in order not to force irrelevant filename changes on the
56dnl maintainers.
57dnl
58AC_DEFUN([AM_GNU_GETTEXT],
59[
60  dnl Argument checking.
61  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
62    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
63])])])])])
64  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
65    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
66])])])])
67  define([gt_included_intl],
68    ifelse([$1], [external],
69      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
70      [yes]))
71  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
72  gt_NEEDS_INIT
73  AM_GNU_GETTEXT_NEED([$2])
74
75  AC_REQUIRE([AM_PO_SUBDIRS])dnl
76  ifelse(gt_included_intl, yes, [
77    AC_REQUIRE([AM_INTL_SUBDIR])dnl
78  ])
79
80  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
81  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
82  AC_REQUIRE([AC_LIB_RPATH])
83
84  dnl Sometimes libintl requires libiconv, so first search for libiconv.
85  dnl Ideally we would do this search only after the
86  dnl      if test "$USE_NLS" = "yes"; then
87  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
88  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
89  dnl the configure script would need to contain the same shell code
90  dnl again, outside any 'if'. There are two solutions:
91  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
92  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
93  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
94  dnl documented, we avoid it.
95  ifelse(gt_included_intl, yes, , [
96    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
97  ])
98
99  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
100  gt_INTL_MACOSX
101
102  dnl Set USE_NLS.
103  AC_REQUIRE([AM_NLS])
104
105  ifelse(gt_included_intl, yes, [
106    BUILD_INCLUDED_LIBINTL=no
107    USE_INCLUDED_LIBINTL=no
108  ])
109  LIBINTL=
110  LTLIBINTL=
111  POSUB=
112
113  dnl Add a version number to the cache macros.
114  case " $gt_needs " in
115    *" need-formatstring-macros "*) gt_api_version=3 ;;
116    *" need-ngettext "*) gt_api_version=2 ;;
117    *) gt_api_version=1 ;;
118  esac
119  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
120  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
121
122  dnl If we use NLS figure out what method
123  if test "$USE_NLS" = "yes"; then
124    gt_use_preinstalled_gnugettext=no
125    ifelse(gt_included_intl, yes, [
126      AC_MSG_CHECKING([whether included gettext is requested])
127      AC_ARG_WITH(included-gettext,
128        [  --with-included-gettext use the GNU gettext library included here],
129        nls_cv_force_use_gnu_gettext=$withval,
130        nls_cv_force_use_gnu_gettext=no)
131      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
132
133      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
134      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
135    ])
136        dnl User does not insist on using GNU NLS library.  Figure out what
137        dnl to use.  If GNU gettext is available we use this.  Else we have
138        dnl to fall back to GNU NLS library.
139
140        if test $gt_api_version -ge 3; then
141          gt_revision_test_code='
142#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
143#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
144#endif
145changequote(,)dnl
146typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
147changequote([,])dnl
148'
149        else
150          gt_revision_test_code=
151        fi
152        if test $gt_api_version -ge 2; then
153          gt_expression_test_code=' + * ngettext ("", "", 0)'
154        else
155          gt_expression_test_code=
156        fi
157
158        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
159         [AC_TRY_LINK([#include <libintl.h>
160$gt_revision_test_code
161extern int _nl_msg_cat_cntr;
162extern int *_nl_domain_bindings;],
163            [bindtextdomain ("", "");
164return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
165            [eval "$gt_func_gnugettext_libc=yes"],
166            [eval "$gt_func_gnugettext_libc=no"])])
167
168        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
169          dnl Sometimes libintl requires libiconv, so first search for libiconv.
170          ifelse(gt_included_intl, yes, , [
171            AM_ICONV_LINK
172          ])
173          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
174          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
175          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
176          dnl even if libiconv doesn't exist.
177          AC_LIB_LINKFLAGS_BODY([intl])
178          AC_CACHE_CHECK([for GNU gettext in libintl],
179            [$gt_func_gnugettext_libintl],
180           [gt_save_CPPFLAGS="$CPPFLAGS"
181            CPPFLAGS="$CPPFLAGS $INCINTL"
182            gt_save_LIBS="$LIBS"
183            LIBS="$LIBS $LIBINTL"
184            dnl Now see whether libintl exists and does not depend on libiconv.
185            AC_TRY_LINK([#include <libintl.h>
186$gt_revision_test_code
187extern int _nl_msg_cat_cntr;
188extern
189#ifdef __cplusplus
190"C"
191#endif
192const char *_nl_expand_alias (const char *);],
193              [bindtextdomain ("", "");
194return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
195              [eval "$gt_func_gnugettext_libintl=yes"],
196              [eval "$gt_func_gnugettext_libintl=no"])
197            dnl Now see whether libintl exists and depends on libiconv.
198            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
199              LIBS="$LIBS $LIBICONV"
200              AC_TRY_LINK([#include <libintl.h>
201$gt_revision_test_code
202extern int _nl_msg_cat_cntr;
203extern
204#ifdef __cplusplus
205"C"
206#endif
207const char *_nl_expand_alias (const char *);],
208                [bindtextdomain ("", "");
209return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
210               [LIBINTL="$LIBINTL $LIBICONV"
211                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
212                eval "$gt_func_gnugettext_libintl=yes"
213               ])
214            fi
215            CPPFLAGS="$gt_save_CPPFLAGS"
216            LIBS="$gt_save_LIBS"])
217        fi
218
219        dnl If an already present or preinstalled GNU gettext() is found,
220        dnl use it.  But if this macro is used in GNU gettext, and GNU
221        dnl gettext is already preinstalled in libintl, we update this
222        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
223        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
224           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
225                && test "$PACKAGE" != gettext-runtime \
226                && test "$PACKAGE" != gettext-tools; }; then
227          gt_use_preinstalled_gnugettext=yes
228        else
229          dnl Reset the values set by searching for libintl.
230          LIBINTL=
231          LTLIBINTL=
232          INCINTL=
233        fi
234
235    ifelse(gt_included_intl, yes, [
236        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
237          dnl GNU gettext is not found in the C library.
238          dnl Fall back on included GNU gettext library.
239          nls_cv_use_gnu_gettext=yes
240        fi
241      fi
242
243      if test "$nls_cv_use_gnu_gettext" = "yes"; then
244        dnl Mark actions used to generate GNU NLS library.
245        BUILD_INCLUDED_LIBINTL=yes
246        USE_INCLUDED_LIBINTL=yes
247        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
248        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
249        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
250      fi
251
252      CATOBJEXT=
253      if test "$gt_use_preinstalled_gnugettext" = "yes" \
254         || test "$nls_cv_use_gnu_gettext" = "yes"; then
255        dnl Mark actions to use GNU gettext tools.
256        CATOBJEXT=.gmo
257      fi
258    ])
259
260    if test -n "$INTL_MACOSX_LIBS"; then
261      if test "$gt_use_preinstalled_gnugettext" = "yes" \
262         || test "$nls_cv_use_gnu_gettext" = "yes"; then
263        dnl Some extra flags are needed during linking.
264        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
265        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
266      fi
267    fi
268
269    if test "$gt_use_preinstalled_gnugettext" = "yes" \
270       || test "$nls_cv_use_gnu_gettext" = "yes"; then
271      AC_DEFINE(ENABLE_NLS, 1,
272        [Define to 1 if translation of program messages to the user's native language
273   is requested.])
274    else
275      USE_NLS=no
276    fi
277  fi
278
279  AC_MSG_CHECKING([whether to use NLS])
280  AC_MSG_RESULT([$USE_NLS])
281  if test "$USE_NLS" = "yes"; then
282    AC_MSG_CHECKING([where the gettext function comes from])
283    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
284      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
285        gt_source="external libintl"
286      else
287        gt_source="libc"
288      fi
289    else
290      gt_source="included intl directory"
291    fi
292    AC_MSG_RESULT([$gt_source])
293  fi
294
295  if test "$USE_NLS" = "yes"; then
296
297    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
298      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
299        AC_MSG_CHECKING([how to link with libintl])
300        AC_MSG_RESULT([$LIBINTL])
301        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
302      fi
303
304      dnl For backward compatibility. Some packages may be using this.
305      AC_DEFINE(HAVE_GETTEXT, 1,
306       [Define if the GNU gettext() function is already present or preinstalled.])
307      AC_DEFINE(HAVE_DCGETTEXT, 1,
308       [Define if the GNU dcgettext() function is already present or preinstalled.])
309    fi
310
311    dnl We need to process the po/ directory.
312    POSUB=po
313  fi
314
315  ifelse(gt_included_intl, yes, [
316    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
317    dnl to 'yes' because some of the testsuite requires it.
318    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
319      BUILD_INCLUDED_LIBINTL=yes
320    fi
321
322    dnl Make all variables we use known to autoconf.
323    AC_SUBST(BUILD_INCLUDED_LIBINTL)
324    AC_SUBST(USE_INCLUDED_LIBINTL)
325    AC_SUBST(CATOBJEXT)
326
327    dnl For backward compatibility. Some configure.ins may be using this.
328    nls_cv_header_intl=
329    nls_cv_header_libgt=
330
331    dnl For backward compatibility. Some Makefiles may be using this.
332    DATADIRNAME=share
333    AC_SUBST(DATADIRNAME)
334
335    dnl For backward compatibility. Some Makefiles may be using this.
336    INSTOBJEXT=.mo
337    AC_SUBST(INSTOBJEXT)
338
339    dnl For backward compatibility. Some Makefiles may be using this.
340    GENCAT=gencat
341    AC_SUBST(GENCAT)
342
343    dnl For backward compatibility. Some Makefiles may be using this.
344    INTLOBJS=
345    if test "$USE_INCLUDED_LIBINTL" = yes; then
346      INTLOBJS="\$(GETTOBJS)"
347    fi
348    AC_SUBST(INTLOBJS)
349
350    dnl Enable libtool support if the surrounding package wishes it.
351    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
352    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
353  ])
354
355  dnl For backward compatibility. Some Makefiles may be using this.
356  INTLLIBS="$LIBINTL"
357  AC_SUBST(INTLLIBS)
358
359  dnl Make all documented variables known to autoconf.
360  AC_SUBST(LIBINTL)
361  AC_SUBST(LTLIBINTL)
362  AC_SUBST(POSUB)
363])
364
365
366dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
367m4_define([gt_NEEDS_INIT],
368[
369  m4_divert_text([DEFAULTS], [gt_needs=])
370  m4_define([gt_NEEDS_INIT], [])
371])
372
373
374dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
375AC_DEFUN([AM_GNU_GETTEXT_NEED],
376[
377  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
378])
379
380
381dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
382AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
383