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