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