]> Dogcows Code - chaz/tar/blob - m4/gettext.m4
Update
[chaz/tar] / m4 / gettext.m4
1 # Macro to add for using GNU gettext.
2 # Ulrich Drepper <drepper@cygnus.com>, 1995.
3 #
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
7 # functionality.
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.
10
11 # serial 10
12
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
21 dnl will be ignored.
22 dnl LIBDIR is used to find the intl libraries. If empty,
23 dnl the value `$(top_builddir)/intl/' is used.
24 dnl
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
27 dnl and used.
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
39 dnl maintainers.
40 dnl
41 AC_DEFUN([AM_WITH_NLS],
42 [AC_MSG_CHECKING([whether NLS is requested])
43 dnl Default is enabled NLS
44 AC_ARG_ENABLE(nls,
45 [ --disable-nls do not use Native Language Support],
46 USE_NLS=$enableval, USE_NLS=yes)
47 AC_MSG_RESULT($USE_NLS)
48 AC_SUBST(USE_NLS)
49
50 BUILD_INCLUDED_LIBINTL=no
51 USE_INCLUDED_LIBINTL=no
52 INTLLIBS=
53
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
58 is requested.])
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)
65
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.
71 CATOBJEXT=NONE
72
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])
76
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)])
85
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,
89 [gt_save_LIBS="$LIBS"
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"])
98 fi
99
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.])
109
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
113 dnl libiconv.
114 INTLLIBS="-lintl $LIBICONV"
115 fi
116
117 gt_save_LIBS="$LIBS"
118 LIBS="$LIBS $INTLLIBS"
119 AC_CHECK_FUNCS(dcgettext)
120 LIBS="$gt_save_LIBS"
121
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)
126
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], :)
130
131 CATOBJEXT=.gmo
132 fi
133 ])
134
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
139 fi
140 fi
141
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], :)
150 AC_SUBST(MSGFMT)
151 BUILD_INCLUDED_LIBINTL=yes
152 USE_INCLUDED_LIBINTL=yes
153 CATOBJEXT=.gmo
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/ $//'`
156 fi
157
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
164 : ;
165 else
166 AC_MSG_RESULT(
167 [found msgfmt program is not GNU msgfmt; ignore it])
168 GMSGFMT=":"
169 fi
170 fi
171
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
178 : ;
179 else
180 AC_MSG_RESULT(
181 [found xgettext program is not GNU xgettext; ignore it])
182 XGETTEXT=":"
183 fi
184 fi
185
186 dnl We need to process the po/ directory.
187 POSUB=po
188 fi
189 AC_OUTPUT_COMMANDS(
190 [for ac_file in $CONFIG_FILES; do
191 # Support "outfile[:infile[:infile...]]"
192 case "$ac_file" in
193 *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
194 esac
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" ;;
208 esac
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"
215 fi
216 ;;
217 esac
218 done])
219
220
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
225 fi
226
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
230 dnl compile.
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
239 ac_verc_fail=yes
240 else
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].*)
248 changequote([,])dnl
249 ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
250 *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
251 esac
252 AC_MSG_RESULT([$ac_prog_version])
253 fi
254 if test $ac_verc_fail = yes; then
255 INTLBISON=:
256 fi
257
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
260 dnl in configure.in.
261 for lang in $ALL_LINGUAS; do
262 GMOFILES="$GMOFILES $lang.gmo"
263 POFILES="$POFILES $lang.po"
264 done
265
266 dnl Make all variables we use known to autoconf.
267 AC_SUBST(BUILD_INCLUDED_LIBINTL)
268 AC_SUBST(USE_INCLUDED_LIBINTL)
269 AC_SUBST(CATALOGS)
270 AC_SUBST(CATOBJEXT)
271 AC_SUBST(GMOFILES)
272 AC_SUBST(INTLLIBS)
273 AC_SUBST(INTLOBJS)
274 AC_SUBST(POFILES)
275 AC_SUBST(POSUB)
276
277 dnl For backward compatibility. Some configure.ins may be using this.
278 nls_cv_header_intl=
279 nls_cv_header_libgt=
280
281 dnl For backward compatibility. Some Makefiles may be using this.
282 DATADIRNAME=share
283 AC_SUBST(DATADIRNAME)
284
285 dnl For backward compatibility. Some Makefiles may be using this.
286 INSTOBJEXT=.mo
287 AC_SUBST(INSTOBJEXT)
288
289 dnl For backward compatibility. Some Makefiles may be using this.
290 GENCAT=gencat
291 AC_SUBST(GENCAT)
292 ])
293
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
309
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])
315
316 AM_ICONV
317 AM_LANGINFO_CODESET
318 AM_LC_MESSAGES
319 AM_WITH_NLS([$1],[$2],[$3])
320
321 if test "x$CATOBJEXT" != "x"; then
322 if test "x$ALL_LINGUAS" = "x"; then
323 LINGUAS=
324 else
325 AC_MSG_CHECKING(for catalogs to be installed)
326 NEW_LINGUAS=
327 for presentlang in $ALL_LINGUAS; do
328 useit=no
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;;
337 esac
338 done
339 if test $useit = yes; then
340 NEW_LINGUAS="$NEW_LINGUAS $presentlang"
341 fi
342 done
343 LINGUAS=$NEW_LINGUAS
344 AC_MSG_RESULT($LINGUAS)
345 fi
346
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
350 fi
351 fi
352
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.
356 MKINSTALLDIRS=
357 if test -n "$ac_aux_dir"; then
358 MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
359 fi
360 if test -z "$MKINSTALLDIRS"; then
361 MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
362 fi
363 AC_SUBST(MKINSTALLDIRS)
364
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)
368 ])
This page took 0.055387 seconds and 4 git commands to generate.