* ALL: the build mechanism now uses automake. See HACKING for more details.
[vlc.git] / 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 or the GNU Library General Public License but which still want
7 # to provide support for the GNU gettext functionality.
8 # Please note that the actual code of the GNU gettext library is covered
9 # by the GNU Library General Public License, and the rest of the GNU
10 # gettext package package is covered by the GNU General Public License.
11 # They are *not* in the public domain.
12
13 # serial 10
14
15 dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
16 dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
17 dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
18 dnl    depending on --{enable,disable}-{shared,static} and on the presence of
19 dnl    AM-DISABLE-SHARED). Otherwise, a static library
20 dnl    $(top_builddir)/intl/libintl.a will be created.
21 dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
22 dnl    implementations (in libc or libintl) without the ngettext() function
23 dnl    will be ignored.
24 dnl LIBDIR is used to find the intl libraries.  If empty,
25 dnl    the value `$(top_builddir)/intl/' is used.
26 dnl
27 dnl The result of the configuration is one of three cases:
28 dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
29 dnl    and used.
30 dnl    Catalog format: GNU --> install in $(datadir)
31 dnl    Catalog extension: .mo after installation, .gmo in source tree
32 dnl 2) GNU gettext has been found in the system's C library.
33 dnl    Catalog format: GNU --> install in $(datadir)
34 dnl    Catalog extension: .mo after installation, .gmo in source tree
35 dnl 3) No internationalization, always use English msgid.
36 dnl    Catalog format: none
37 dnl    Catalog extension: none
38 dnl The use of .gmo is historical (it was needed to avoid overwriting the
39 dnl GNU format catalogs when building on a platform with an X/Open gettext),
40 dnl but we keep it in order not to force irrelevant filename changes on the
41 dnl maintainers.
42 dnl
43 AC_DEFUN([AM_WITH_NLS],
44   [AC_MSG_CHECKING([whether NLS is requested])
45     dnl Default is enabled NLS
46     AC_ARG_ENABLE(nls,
47       [  --disable-nls           do not use Native Language Support],
48       USE_NLS=$enableval, USE_NLS=yes)
49     AC_MSG_RESULT($USE_NLS)
50     AC_SUBST(USE_NLS)
51
52     BUILD_INCLUDED_LIBINTL=no
53     USE_INCLUDED_LIBINTL=no
54     INTLLIBS=
55
56     dnl If we use NLS figure out what method
57     if test "$USE_NLS" = "yes"; then
58       AC_DEFINE(ENABLE_NLS, 1,
59         [Define to 1 if translation of program messages to the user's native language
60    is requested.])
61       AC_MSG_CHECKING([whether included gettext is requested])
62       AC_ARG_WITH(included-gettext,
63         [  --with-included-gettext use the GNU gettext library included here],
64         nls_cv_force_use_gnu_gettext=$withval,
65         nls_cv_force_use_gnu_gettext=no)
66       AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
67
68       nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
69       if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
70         dnl User does not insist on using GNU NLS library.  Figure out what
71         dnl to use.  If GNU gettext is available we use this.  Else we have
72         dnl to fall back to GNU NLS library.
73         CATOBJEXT=NONE
74
75         dnl Add a version number to the cache macros.
76         define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
77         define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
78
79         AC_CHECK_HEADER(libintl.h,
80           [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
81             [AC_TRY_LINK([#include <libintl.h>
82 extern int _nl_msg_cat_cntr;],
83                [bindtextdomain ("", "");
84 return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
85                gt_cv_func_gnugettext_libc=yes,
86                gt_cv_func_gnugettext_libc=no)])
87
88            if test "$gt_cv_func_gnugettext_libc" != "yes"; then
89              AC_CACHE_CHECK([for GNU gettext in libintl],
90                gt_cv_func_gnugettext_libintl,
91                [gt_save_LIBS="$LIBS"
92                 LIBS="$LIBS -lintl $LIBICONV"
93                 AC_TRY_LINK([#include <libintl.h>
94 extern int _nl_msg_cat_cntr;],
95                   [bindtextdomain ("", "");
96 return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
97                   gt_cv_func_gnugettext_libintl=yes,
98                   gt_cv_func_gnugettext_libintl=no)
99                 LIBS="$gt_save_LIBS"])
100            fi
101
102            dnl If an already present or preinstalled GNU gettext() is found,
103            dnl use it.  But if this macro is used in GNU gettext, and GNU
104            dnl gettext is already preinstalled in libintl, we update this
105            dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
106            if test "$gt_cv_func_gnugettext_libc" = "yes" \
107               || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
108                    && test "$PACKAGE" != gettext; }; then
109              AC_DEFINE(HAVE_GETTEXT, 1,
110                [Define if the GNU gettext() function is already present or preinstalled.])
111
112              if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
113                dnl If iconv() is in a separate libiconv library, then anyone
114                dnl linking with libintl{.a,.so} also needs to link with
115                dnl libiconv.
116                INTLLIBS="-lintl $LIBICONV"
117              fi
118
119              gt_save_LIBS="$LIBS"
120              LIBS="$LIBS $INTLLIBS"
121              AC_CHECK_FUNCS(dcgettext)
122              LIBS="$gt_save_LIBS"
123
124              dnl Search for GNU msgfmt in the PATH.
125              AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
126                [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
127              AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
128
129              dnl Search for GNU xgettext in the PATH.
130              AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
131                [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
132
133              CATOBJEXT=.gmo
134            fi
135         ])
136
137         if test "$CATOBJEXT" = "NONE"; then
138           dnl GNU gettext is not found in the C library.
139           dnl Fall back on GNU gettext library.
140           nls_cv_use_gnu_gettext=yes
141         fi
142       fi
143
144       if test "$nls_cv_use_gnu_gettext" = "yes"; then
145         dnl Mark actions used to generate GNU NLS library.
146         INTLOBJS="\$(GETTOBJS)"
147         AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
148           [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
149         AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
150         AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
151           [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
152         AC_SUBST(MSGFMT)
153         BUILD_INCLUDED_LIBINTL=yes
154         USE_INCLUDED_LIBINTL=yes
155         CATOBJEXT=.gmo
156         INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
157         LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
158       fi
159
160       dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
161       dnl Test whether we really found GNU msgfmt.
162       if test "$GMSGFMT" != ":"; then
163         dnl If it is no GNU msgfmt we define it as : so that the
164         dnl Makefiles still can work.
165         if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
166           : ;
167         else
168           AC_MSG_RESULT(
169             [found msgfmt program is not GNU msgfmt; ignore it])
170           GMSGFMT=":"
171         fi
172       fi
173
174       dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
175       dnl Test whether we really found GNU xgettext.
176       if test "$XGETTEXT" != ":"; then
177         dnl If it is no GNU xgettext we define it as : so that the
178         dnl Makefiles still can work.
179         if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
180           : ;
181         else
182           AC_MSG_RESULT(
183             [found xgettext program is not GNU xgettext; ignore it])
184           XGETTEXT=":"
185         fi
186       fi
187
188       dnl We need to process the po/ directory.
189       POSUB=po
190     fi
191     AC_OUTPUT_COMMANDS(
192      [for ac_file in $CONFIG_FILES; do
193         # Support "outfile[:infile[:infile...]]"
194         case "$ac_file" in
195           *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
196         esac
197         # PO directories have a Makefile.in generated from Makefile.in.in.
198         case "$ac_file" in */Makefile.in)
199           # Adjust a relative srcdir.
200           ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
201           ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
202           ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
203           # In autoconf-2.13 it is called $ac_given_srcdir.
204           # In autoconf-2.50 it is called $srcdir.
205           test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
206           case "$ac_given_srcdir" in
207             .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
208             /*) top_srcdir="$ac_given_srcdir" ;;
209             *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
210           esac
211           if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
212             rm -f "$ac_dir/POTFILES"
213             test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
214             sed -e "/^#/d" -e "/^[      ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
215             test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
216             sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
217           fi
218           ;;
219         esac
220       done])
221
222
223     dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
224     dnl to 'yes' because some of the testsuite requires it.
225     if test "$PACKAGE" = gettext; then
226       BUILD_INCLUDED_LIBINTL=yes
227     fi
228
229     dnl intl/plural.c is generated from intl/plural.y. It requires bison,
230     dnl because plural.y uses bison specific features. It requires at least
231     dnl bison-1.26 because earlier versions generate a plural.c that doesn't
232     dnl compile.
233     dnl bison is only needed for the maintainer (who touches plural.y). But in
234     dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
235     dnl the rule in general Makefile. Now, some people carelessly touch the
236     dnl files or have a broken "make" program, hence the plural.c rule will
237     dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
238     dnl present or too old.
239     AC_CHECK_PROGS([INTLBISON], [bison])
240     if test -z "$INTLBISON"; then
241       ac_verc_fail=yes
242     else
243       dnl Found it, now check the version.
244       AC_MSG_CHECKING([version of bison])
245 changequote(<<,>>)dnl
246       ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
247       case $ac_prog_version in
248         '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
249         1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
250 changequote([,])dnl
251            ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
252         *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
253       esac
254       AC_MSG_RESULT([$ac_prog_version])
255     fi
256     if test $ac_verc_fail = yes; then
257       INTLBISON=:
258     fi
259
260     dnl These rules are solely for the distribution goal.  While doing this
261     dnl we only have to keep exactly one list of the available catalogs
262     dnl in configure.in.
263     for lang in $ALL_LINGUAS; do
264       GMOFILES="$GMOFILES $lang.gmo"
265       POFILES="$POFILES $lang.po"
266     done
267
268     dnl Make all variables we use known to autoconf.
269     AC_SUBST(BUILD_INCLUDED_LIBINTL)
270     AC_SUBST(USE_INCLUDED_LIBINTL)
271     AC_SUBST(CATALOGS)
272     AC_SUBST(CATOBJEXT)
273     AC_SUBST(GMOFILES)
274     AC_SUBST(INTLLIBS)
275     AC_SUBST(INTLOBJS)
276     AC_SUBST(POFILES)
277     AC_SUBST(POSUB)
278
279     dnl For backward compatibility. Some configure.ins may be using this.
280     nls_cv_header_intl=
281     nls_cv_header_libgt=
282
283     dnl For backward compatibility. Some Makefiles may be using this.
284     DATADIRNAME=share
285     AC_SUBST(DATADIRNAME)
286
287     dnl For backward compatibility. Some Makefiles may be using this.
288     INSTOBJEXT=.mo
289     AC_SUBST(INSTOBJEXT)
290
291     dnl For backward compatibility. Some Makefiles may be using this.
292     GENCAT=gencat
293     AC_SUBST(GENCAT)
294   ])
295
296 dnl Usage: Just like AM_WITH_NLS, which see.
297 AC_DEFUN([AM_GNU_GETTEXT],
298   [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
299    AC_REQUIRE([AC_PROG_CC])dnl
300    AC_REQUIRE([AC_CANONICAL_HOST])dnl
301    AC_REQUIRE([AC_PROG_RANLIB])dnl
302    AC_REQUIRE([AC_ISC_POSIX])dnl
303    AC_REQUIRE([AC_HEADER_STDC])dnl
304    AC_REQUIRE([AC_C_CONST])dnl
305    AC_REQUIRE([AC_C_INLINE])dnl
306    AC_REQUIRE([AC_TYPE_OFF_T])dnl
307    AC_REQUIRE([AC_TYPE_SIZE_T])dnl
308    AC_REQUIRE([AC_FUNC_ALLOCA])dnl
309    AC_REQUIRE([AC_FUNC_MMAP])dnl
310    AC_REQUIRE([jm_GLIBC21])dnl
311
312    AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
313 stdlib.h string.h unistd.h sys/param.h])
314    AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
315 getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
316 strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
317
318    AM_ICONV
319    AM_LANGINFO_CODESET
320    AM_LC_MESSAGES
321    AM_WITH_NLS([$1],[$2],[$3])
322
323    if test "x$CATOBJEXT" != "x"; then
324      if test "x$ALL_LINGUAS" = "x"; then
325        LINGUAS=
326      else
327        AC_MSG_CHECKING(for catalogs to be installed)
328        NEW_LINGUAS=
329        for presentlang in $ALL_LINGUAS; do
330          useit=no
331          for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
332            # Use the presentlang catalog if desiredlang is
333            #   a. equal to presentlang, or
334            #   b. a variant of presentlang (because in this case,
335            #      presentlang can be used as a fallback for messages
336            #      which are not translated in the desiredlang catalog).
337            case "$desiredlang" in
338              "$presentlang"*) useit=yes;;
339            esac
340          done
341          if test $useit = yes; then
342            NEW_LINGUAS="$NEW_LINGUAS $presentlang"
343          fi
344        done
345        LINGUAS=$NEW_LINGUAS
346        AC_MSG_RESULT($LINGUAS)
347      fi
348
349      dnl Construct list of names of catalog files to be constructed.
350      if test -n "$LINGUAS"; then
351        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
352      fi
353    fi
354
355    dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
356    dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
357    dnl Try to locate is.
358    MKINSTALLDIRS=
359    if test -n "$ac_aux_dir"; then
360      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
361    fi
362    if test -z "$MKINSTALLDIRS"; then
363      MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
364    fi
365    AC_SUBST(MKINSTALLDIRS)
366
367    dnl Enable libtool support if the surrounding package wishes it.
368    INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
369    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
370   ])