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