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 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.
8
9# serial 3
10
11AC_DEFUN(AM_WITH_NLS,
12  [AC_MSG_CHECKING([whether NLS is requested])
13    dnl Default is enabled NLS
14    AC_ARG_ENABLE(nls,
15      [  --disable-nls           do not use Native Language Support],
16      USE_NLS=$enableval, USE_NLS=yes)
17    AC_MSG_RESULT($USE_NLS)
18    AC_SUBST(USE_NLS)
19
20    USE_INCLUDED_LIBINTL=no
21
22    dnl If we use NLS figure out what method
23    if test "$USE_NLS" = "yes"; then
24      AC_DEFINE(ENABLE_NLS)
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)
31
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.
38	nls_cv_header_intl=
39	nls_cv_header_libgt=
40	CATOBJEXT=NONE
41
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)])
46
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_TRY_LINK([], [return (int) gettext ("")],
52		 gt_cv_func_gettext_libintl=yes,
53		 gt_cv_func_gettext_libintl=no)])])
54	   fi
55
56	   if test "$gt_cv_func_gettext_libc" = "yes" \
57	      || test "$gt_cv_func_gettext_libintl" = "yes"; then
58	      AC_DEFINE(HAVE_GETTEXT)
59	      AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
60		[test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
61	      if test "$MSGFMT" != "no"; then
62		AC_CHECK_FUNCS(dcgettext)
63		AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
64		AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
65		  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
66		AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
67			       return _nl_msg_cat_cntr],
68		  [CATOBJEXT=.gmo
69		   DATADIRNAME=share],
70		  [CATOBJEXT=.mo
71		   DATADIRNAME=lib])
72		INSTOBJEXT=.mo
73	      fi
74	    fi
75	])
76
77        if test "$CATOBJEXT" = "NONE"; then
78	  AC_MSG_CHECKING([whether catgets can be used])
79	  AC_ARG_WITH(catgets,
80	    [  --with-catgets          use catgets functions if available],
81	    nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
82	  AC_MSG_RESULT($nls_cv_use_catgets)
83
84	  if test "$nls_cv_use_catgets" = "yes"; then
85	    dnl No gettext in C library.  Try catgets next.
86	    AC_CHECK_LIB(i, main)
87	    AC_CHECK_FUNC(catgets,
88	      [AC_DEFINE(HAVE_CATGETS)
89	       INTLOBJS="\$(CATOBJS)"
90	       AC_PATH_PROG(GENCAT, gencat, no)dnl
91	       if test "$GENCAT" != "no"; then
92		 AC_PATH_PROG(GMSGFMT, gmsgfmt, no)
93		 if test "$GMSGFMT" = "no"; then
94		   AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
95		    [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)
96		 fi
97		 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
98		   [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
99		 USE_INCLUDED_LIBINTL=yes
100		 CATOBJEXT=.cat
101		 INSTOBJEXT=.cat
102		 DATADIRNAME=lib
103		 INTLDEPS='$(top_builddir)/intl/libintl.a'
104		 INTLLIBS=$INTLDEPS
105		 LIBS=`echo $LIBS | sed -e 's/-lintl//'`
106		 nls_cv_header_intl=intl/libintl.h
107		 nls_cv_header_libgt=intl/libgettext.h
108	       fi])
109	  fi
110        fi
111
112        if test "$CATOBJEXT" = "NONE"; then
113	  dnl Neither gettext nor catgets in included in the C library.
114	  dnl Fall back on GNU gettext library.
115	  nls_cv_use_gnu_gettext=yes
116        fi
117      fi
118
119      if test "$nls_cv_use_gnu_gettext" = "yes"; then
120        dnl Mark actions used to generate GNU NLS library.
121        INTLOBJS="\$(GETTOBJS)"
122        AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
123	  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
124        AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
125        AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
126	  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
127        AC_SUBST(MSGFMT)
128	USE_INCLUDED_LIBINTL=yes
129        CATOBJEXT=.gmo
130        INSTOBJEXT=.mo
131        DATADIRNAME=share
132	INTLDEPS='$(top_builddir)/intl/libintl.a'
133	INTLLIBS=$INTLDEPS
134	LIBS=`echo $LIBS | sed -e 's/-lintl//'`
135        nls_cv_header_intl=intl/libintl.h
136        nls_cv_header_libgt=intl/libgettext.h
137      fi
138
139      dnl Test whether we really found GNU xgettext.
140      if test "$XGETTEXT" != ":"; then
141	dnl If it is no GNU xgettext we define it as : so that the
142	dnl Makefiles still can work.
143	if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
144	  : ;
145	else
146	  AC_MSG_RESULT(
147	    [found xgettext programs is not GNU xgettext; ignore it])
148	  XGETTEXT=":"
149	fi
150      fi
151
152      # We need to process the po/ directory.
153      POSUB=po
154    else
155      DATADIRNAME=share
156      nls_cv_header_intl=intl/libintl.h
157      nls_cv_header_libgt=intl/libgettext.h
158    fi
159
160    # If this is used in GNU gettext we have to set USE_NLS to `yes'
161    # because some of the sources are only built for this goal.
162    if test "$PACKAGE" = gettext; then
163      USE_NLS=yes
164      USE_INCLUDED_LIBINTL=yes
165    fi
166
167    dnl These rules are solely for the distribution goal.  While doing this
168    dnl we only have to keep exactly one list of the available catalogs
169    dnl in configure.in.
170    for lang in $ALL_LINGUAS; do
171      GMOFILES="$GMOFILES $lang.gmo"
172      POFILES="$POFILES $lang.po"
173    done
174
175    dnl Make all variables we use known to autoconf.
176    AC_SUBST(USE_INCLUDED_LIBINTL)
177    AC_SUBST(CATALOGS)
178    AC_SUBST(CATOBJEXT)
179    AC_SUBST(DATADIRNAME)
180    AC_SUBST(GMOFILES)
181    AC_SUBST(INSTOBJEXT)
182    AC_SUBST(INTLDEPS)
183    AC_SUBST(INTLLIBS)
184    AC_SUBST(INTLOBJS)
185    AC_SUBST(POFILES)
186    AC_SUBST(POSUB)
187  ])
188
189AC_DEFUN(AM_GNU_GETTEXT,
190  [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
191   AC_REQUIRE([AC_PROG_CC])dnl
192   AC_REQUIRE([AC_PROG_RANLIB])dnl
193   AC_REQUIRE([AC_ISC_POSIX])dnl
194   AC_REQUIRE([AC_HEADER_STDC])dnl
195   AC_REQUIRE([AC_C_CONST])dnl
196   AC_REQUIRE([AC_C_INLINE])dnl
197   AC_REQUIRE([AC_TYPE_OFF_T])dnl
198   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
199   AC_REQUIRE([AC_FUNC_ALLOCA])dnl
200   AC_REQUIRE([AC_FUNC_MMAP])dnl
201
202   AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
203unistd.h values.h sys/param.h])
204   AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
205__argz_count __argz_stringify __argz_next])
206
207   if test "${ac_cv_func_stpcpy+set}" != "set"; then
208     AC_CHECK_FUNCS(stpcpy)
209   fi
210   if test "${ac_cv_func_stpcpy}" = "yes"; then
211     AC_DEFINE(HAVE_STPCPY)
212   fi
213
214   AM_LC_MESSAGES
215   AM_WITH_NLS
216
217   if test "x$CATOBJEXT" != "x"; then
218     if test "x$ALL_LINGUAS" = "x"; then
219       LINGUAS=
220     else
221       AC_MSG_CHECKING(for catalogs to be installed)
222       NEW_LINGUAS=
223       for lang in ${LINGUAS=$ALL_LINGUAS}; do
224         case "$ALL_LINGUAS" in
225          *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
226         esac
227       done
228       LINGUAS=$NEW_LINGUAS
229       AC_MSG_RESULT($LINGUAS)
230     fi
231
232     dnl Construct list of names of catalog files to be constructed.
233     if test -n "$LINGUAS"; then
234       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
235     fi
236   fi
237
238   dnl The reference to <locale.h> in the installed <libintl.h> file
239   dnl must be resolved because we cannot expect the users of this
240   dnl to define HAVE_LOCALE_H.
241   if test $ac_cv_header_locale_h = yes; then
242     INCLUDE_LOCALE_H="#include <locale.h>"
243   else
244     INCLUDE_LOCALE_H="\
245/* The system does not provide the header <locale.h>.  Take care yourself.  */"
246   fi
247   AC_SUBST(INCLUDE_LOCALE_H)
248
249   dnl Determine which catalog format we have (if any is needed)
250   dnl For now we know about two different formats:
251   dnl   Linux libc-5 and the normal X/Open format
252   test -d intl || mkdir intl
253   if test "$CATOBJEXT" = ".cat"; then
254     AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
255
256     dnl Transform the SED scripts while copying because some dumb SEDs
257     dnl cannot handle comments.
258     sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
259   fi
260   dnl po2tbl.sed is always needed.
261   sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
262     $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
263
264   dnl In the intl/Makefile.in we have a special dependency which makes
265   dnl only sense for gettext.  We comment this out for non-gettext
266   dnl packages.
267   if test "$PACKAGE" = "gettext"; then
268     GT_NO="#NO#"
269     GT_YES=
270   else
271     GT_NO=
272     GT_YES="#YES#"
273   fi
274   AC_SUBST(GT_NO)
275   AC_SUBST(GT_YES)
276
277   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
278   dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
279   dnl Try to locate is.
280   MKINSTALLDIRS=
281   if test -n "$ac_aux_dir"; then
282     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
283   fi
284   if test -z "$MKINSTALLDIRS"; then
285     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
286   fi
287   AC_SUBST(MKINSTALLDIRS)
288
289   dnl *** For now the libtool support in intl/Makefile is not for real.
290   l=
291   AC_SUBST(l)
292
293   dnl Generate list of files to be processed by xgettext which will
294   dnl be included in po/Makefile.
295   test -d po || mkdir po
296   if test "x$srcdir" != "x."; then
297     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
298       posrcprefix="$srcdir/"
299     else
300       posrcprefix="../$srcdir/"
301     fi
302   else
303     posrcprefix="../"
304   fi
305   rm -f po/POTFILES
306   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,	$posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
307	< $srcdir/po/POTFILES.in > po/POTFILES
308  ])
309
310# Search path for a program which passes the given test.
311# Ulrich Drepper <drepper@cygnus.com>, 1996.
312#
313# This file can be copied and used freely without restrictions.  It can
314# be used in projects which are not available under the GNU Public License
315# but which still want to provide support for the GNU gettext functionality.
316# Please note that the actual code is *not* freely available.
317
318# serial 1
319
320dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
321dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
322AC_DEFUN(AM_PATH_PROG_WITH_TEST,
323[# Extract the first word of "$2", so it can be a program name with args.
324set dummy $2; ac_word=[$]2
325AC_MSG_CHECKING([for $ac_word])
326AC_CACHE_VAL(ac_cv_path_$1,
327[case "[$]$1" in
328  /*)
329  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
330  ;;
331  *)
332  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
333  for ac_dir in ifelse([$5], , $PATH, [$5]); do
334    test -z "$ac_dir" && ac_dir=.
335    if test -f $ac_dir/$ac_word; then
336      if [$3]; then
337	ac_cv_path_$1="$ac_dir/$ac_word"
338	break
339      fi
340    fi
341  done
342  IFS="$ac_save_ifs"
343dnl If no 4th arg is given, leave the cache variable unset,
344dnl so AC_PATH_PROGS will keep looking.
345ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
346])dnl
347  ;;
348esac])dnl
349$1="$ac_cv_path_$1"
350if test -n "[$]$1"; then
351  AC_MSG_RESULT([$]$1)
352else
353  AC_MSG_RESULT(no)
354fi
355AC_SUBST($1)dnl
356])
357
358# Check whether LC_MESSAGES is available in <locale.h>.
359# Ulrich Drepper <drepper@cygnus.com>, 1995.
360#
361# This file can be copied and used freely without restrictions.  It can
362# be used in projects which are not available under the GNU Public License
363# but which still want to provide support for the GNU gettext functionality.
364# Please note that the actual code is *not* freely available.
365
366# serial 1
367
368AC_DEFUN(AM_LC_MESSAGES,
369  [if test $ac_cv_header_locale_h = yes; then
370    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
371      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
372       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
373    if test $am_cv_val_LC_MESSAGES = yes; then
374      AC_DEFINE(HAVE_LC_MESSAGES)
375    fi
376  fi])
377
378