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 Public License
6 # but which still want to provide support for the GNU gettext functionality.
7 # Please note that the actual code is *not* freely available.
12 [AC_MSG_CHECKING([whether NLS is requested])
13 dnl Default is enabled NLS
15 [ --disable-nls do not use Native Language Support],
16 USE_NLS=$enableval, USE_NLS=yes)
17 AC_MSG_RESULT($USE_NLS)
20 USE_INCLUDED_LIBINTL=no
22 dnl If we use NLS figure out what method
23 if test "$USE_NLS" = "yes"; then
25 AC_MSG_CHECKING([whether included gettext is requested])
26 AC_ARG_WITH(included-gettext,
27 [ --with-included-gettext use the GNU gettext library included here],
28 nls_cv_force_use_gnu_gettext=$withval,
29 nls_cv_force_use_gnu_gettext=no)
30 AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
32 nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
33 if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
34 dnl User does not insist on using GNU NLS library. Figure out what
35 dnl to use. If gettext or catgets are available (in this order) we
36 dnl use this. Else we have to fall back to GNU NLS library.
37 dnl catgets is only used if permitted by option --with-catgets.
42 AC_CHECK_HEADER(libintl.h,
43 [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
44 [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
45 gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
47 if test "$gt_cv_func_gettext_libc" != "yes"; then
48 AC_CHECK_LIB(intl, bindtextdomain,
49 [AC_CACHE_CHECK([for gettext in libintl],
50 gt_cv_func_gettext_libintl,
51 [AC_CHECK_LIB(intl, gettext,
52 gt_cv_func_gettext_libintl=yes,
53 gt_cv_func_gettext_libintl=no)],
54 gt_cv_func_gettext_libintl=no)])
57 if test "$gt_cv_func_gettext_libc" = "yes" \
58 || test "$gt_cv_func_gettext_libintl" = "yes"; then
59 AC_DEFINE(HAVE_GETTEXT)
60 AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
61 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
62 if test "$MSGFMT" != "no"; then
63 AC_CHECK_FUNCS(dcgettext)
64 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
65 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
66 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
67 AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
68 return _nl_msg_cat_cntr],
78 if test "$CATOBJEXT" = "NONE"; then
79 AC_MSG_CHECKING([whether catgets can be used])
81 [ --with-catgets use catgets functions if available],
82 nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
83 AC_MSG_RESULT($nls_cv_use_catgets)
85 if test "$nls_cv_use_catgets" = "yes"; then
86 dnl No gettext in C library. Try catgets next.
88 AC_CHECK_FUNC(catgets,
89 [AC_DEFINE(HAVE_CATGETS)
90 INTLOBJS="\$(CATOBJS)"
91 AC_PATH_PROG(GENCAT, gencat, no)dnl
92 if test "$GENCAT" != "no"; then
93 AC_PATH_PROG(GMSGFMT, gmsgfmt, no)
94 if test "$GMSGFMT" = "no"; then
95 AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
96 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)
98 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
99 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
100 USE_INCLUDED_LIBINTL=yes
104 INTLDEPS='$(top_builddir)/intl/libintl.a'
106 LIBS=`echo $LIBS | sed -e 's/-lintl//'`
107 nls_cv_header_intl=intl/libintl.h
108 nls_cv_header_libgt=intl/libgettext.h
113 if test "$CATOBJEXT" = "NONE"; then
114 dnl Neither gettext nor catgets in included in the C library.
115 dnl Fall back on GNU gettext library.
116 nls_cv_use_gnu_gettext=yes
120 if test "$nls_cv_use_gnu_gettext" = "yes"; then
121 dnl Mark actions used to generate GNU NLS library.
122 INTLOBJS="\$(GETTOBJS)"
123 AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
124 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
125 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
126 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
127 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
129 USE_INCLUDED_LIBINTL=yes
133 INTLDEPS='$(top_builddir)/intl/libintl.a'
135 LIBS=`echo $LIBS | sed -e 's/-lintl//'`
136 nls_cv_header_intl=intl/libintl.h
137 nls_cv_header_libgt=intl/libgettext.h
140 dnl Test whether we really found GNU xgettext.
141 if test "$XGETTEXT" != ":"; then
142 dnl If it is no GNU xgettext we define it as : so that the
143 dnl Makefiles still can work.
144 if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
148 [found xgettext program is not GNU xgettext; ignore it])
153 # We need to process the po/ directory.
157 nls_cv_header_intl=intl/libintl.h
158 nls_cv_header_libgt=intl/libgettext.h
160 AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
162 [case "$CONFIG_FILES" in *po/Makefile.in*)
163 sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
167 # If this is used in GNU gettext we have to set USE_NLS to `yes'
168 # because some of the sources are only built for this goal.
169 if test "$PACKAGE" = gettext; then
171 USE_INCLUDED_LIBINTL=yes
174 dnl These rules are solely for the distribution goal. While doing this
175 dnl we only have to keep exactly one list of the available catalogs
177 for lang in $ALL_LINGUAS; do
178 GMOFILES="$GMOFILES $lang.gmo"
179 POFILES="$POFILES $lang.po"
182 dnl Make all variables we use known to autoconf.
183 AC_SUBST(USE_INCLUDED_LIBINTL)
186 AC_SUBST(DATADIRNAME)
196 AC_DEFUN(AM_GNU_GETTEXT,
197 [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
198 AC_REQUIRE([AC_PROG_CC])dnl
199 AC_REQUIRE([AC_PROG_RANLIB])dnl
200 AC_REQUIRE([AC_ISC_POSIX])dnl
201 AC_REQUIRE([AC_HEADER_STDC])dnl
202 AC_REQUIRE([AC_C_CONST])dnl
203 AC_REQUIRE([AC_C_INLINE])dnl
204 AC_REQUIRE([AC_TYPE_OFF_T])dnl
205 AC_REQUIRE([AC_TYPE_SIZE_T])dnl
206 AC_REQUIRE([AC_FUNC_ALLOCA])dnl
207 AC_REQUIRE([AC_FUNC_MMAP])dnl
209 AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
210 unistd.h sys/param.h])
211 AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
212 strdup __argz_count __argz_stringify __argz_next])
214 if test "${ac_cv_func_stpcpy+set}" != "set"; then
215 AC_CHECK_FUNCS(stpcpy)
217 if test "${ac_cv_func_stpcpy}" = "yes"; then
218 AC_DEFINE(HAVE_STPCPY)
224 if test "x$CATOBJEXT" != "x"; then
225 if test "x$ALL_LINGUAS" = "x"; then
228 AC_MSG_CHECKING(for catalogs to be installed)
230 dnl ============== Fix is here! ======================
231 dnl Some sh do not like substitution in bounds of for loops
232 dnl for lang in ${LINGUAS=$ALL_LINGUAS}; do
233 tmplinguas=${LINGUAS=$ALL_LINGUAS}
234 for lang in ${tmplinguas}; do
236 case "$ALL_LINGUAS" in
237 *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
241 AC_MSG_RESULT($LINGUAS)
244 dnl Construct list of names of catalog files to be constructed.
245 if test -n "$LINGUAS"; then
246 for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
250 dnl The reference to <locale.h> in the installed <libintl.h> file
251 dnl must be resolved because we cannot expect the users of this
252 dnl to define HAVE_LOCALE_H.
253 if test $ac_cv_header_locale_h = yes; then
254 INCLUDE_LOCALE_H="#include <locale.h>"
257 /* The system does not provide the header <locale.h>. Take care yourself. */"
259 AC_SUBST(INCLUDE_LOCALE_H)
261 dnl Determine which catalog format we have (if any is needed)
262 dnl For now we know about two different formats:
263 dnl Linux libc-5 and the normal X/Open format
264 test -d intl || mkdir intl
265 if test "$CATOBJEXT" = ".cat"; then
266 AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
268 dnl Transform the SED scripts while copying because some dumb SEDs
269 dnl cannot handle comments.
270 sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
272 dnl po2tbl.sed is always needed.
273 sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
274 $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
276 dnl In the intl/Makefile.in we have a special dependency which makes
277 dnl only sense for gettext. We comment this out for non-gettext
279 if test "$PACKAGE" = "gettext"; then
289 dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
290 dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
291 dnl Try to locate is.
293 if test -n "$ac_aux_dir"; then
294 MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
296 if test -z "$MKINSTALLDIRS"; then
297 MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
299 AC_SUBST(MKINSTALLDIRS)
301 dnl *** For now the libtool support in intl/Makefile is not for real.
305 dnl Generate list of files to be processed by xgettext which will
306 dnl be included in po/Makefile.
307 test -d po || mkdir po
308 if test "x$srcdir" != "x."; then
309 if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
310 posrcprefix="$srcdir/"
312 posrcprefix="../$srcdir/"
318 sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
319 < $srcdir/po/POTFILES.in > po/POTFILES