sticky-check -> setgid-check
[coreutils.git] / m4 / libintl.m4
blob3c68b52b5d522e233523c0d968cd5c62deb82809
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.
9 # serial 109
11 AC_PREREQ(2.13)               dnl Minimum Autoconf version required.
13 AC_DEFUN(AM_WITH_NLS,
14   [AC_MSG_CHECKING([whether NLS is requested])
15     dnl Default is enabled NLS
16     AC_ARG_ENABLE(nls,
17       [  --disable-nls           do not use Native Language Support],
18       USE_NLS=$enableval, USE_NLS=yes)
19     AC_MSG_RESULT($USE_NLS)
20     AC_SUBST(USE_NLS)
22     USE_INCLUDED_LIBINTL=no
24     dnl If we use NLS figure out what method
25     if test "$USE_NLS" = "yes"; then
26       AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if NLS is requested.])
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)
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=NONE
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)])
49            if test "$gt_cv_func_gettext_libc" != "yes"; then
50              AC_CHECK_LIB(intl, bindtextdomain,
51                [AC_CHECK_LIB(intl, gettext)])
52            fi
54            if test "$gt_cv_func_gettext_libc" = "yes" \
55               || test "$ac_cv_lib_intl_gettext" = "yes"; then
56               AC_DEFINE(HAVE_GETTEXT, 1,
57           [Define to 1 if you have gettext and don't want to use GNU gettext.])
58               AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
59                 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
60               if test "$MSGFMT" != "no"; then
61                 AC_CHECK_FUNCS(dcgettext)
62                 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
63                 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
64                   [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
65                 AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
66                                return _nl_msg_cat_cntr],
67                   [CATOBJEXT=.gmo
68                    DATADIRNAME=share],
69                   [CATOBJEXT=.mo
70                    DATADIRNAME=lib])
71                 INSTOBJEXT=.mo
72               fi
73             fi
74         ])
76         if test "$CATOBJEXT" = "NONE"; then
77           AC_MSG_CHECKING([whether catgets can be used])
78           AC_ARG_WITH(catgets,
79             [  --with-catgets          use catgets functions if available],
80             nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
81           AC_MSG_RESULT($nls_cv_use_catgets)
83           if test "$nls_cv_use_catgets" = "yes"; then
84             dnl No gettext in C library.  Try catgets next.
85             AC_CHECK_LIB(i, main)
86             AC_CHECK_FUNC(catgets,
87               [AC_DEFINE(HAVE_CATGETS, 1,
88                          [Define as 1 if you have catgets and don't want to use GNU gettext.])
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
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
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
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 program is not GNU xgettext; ignore it])
148           XGETTEXT=":"
149         fi
150       fi
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     if test -z "$nls_cv_header_intl"; then
160       # Clean out junk possibly left behind by a previous configuration.
161       rm -f intl/libintl.h
162     fi
163     AC_CONFIG_LINKS($nls_cv_header_intl:$nls_cv_header_libgt)
164     AC_OUTPUT_COMMANDS(
165      [case "$CONFIG_FILES" in *po/Makefile.in*)
166         sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
167       esac])
170     # If this is used in GNU gettext we have to set USE_NLS to `yes'
171     # because some of the sources are only built for this goal.
172     if test "$PACKAGE" = gettext; then
173       USE_NLS=yes
174       USE_INCLUDED_LIBINTL=yes
175     fi
177     dnl These rules are solely for the distribution goal.  While doing this
178     dnl we only have to keep exactly one list of the available catalogs
179     dnl in configure.in.
180     for lang in $ALL_LINGUAS; do
181       GMOFILES="$GMOFILES $lang.gmo"
182       POFILES="$POFILES $lang.po"
183     done
185     dnl Make all variables we use known to autoconf.
186     AC_SUBST(USE_INCLUDED_LIBINTL)
187     AC_SUBST(CATALOGS)
188     AC_SUBST(CATOBJEXT)
189     AC_SUBST(DATADIRNAME)
190     AC_SUBST(GMOFILES)
191     AC_SUBST(INSTOBJEXT)
192     AC_SUBST(INTLDEPS)
193     AC_SUBST(INTLLIBS)
194     AC_SUBST(INTLOBJS)
195     AC_SUBST(POFILES)
196     AC_SUBST(POSUB)
197   ])
199 AC_DEFUN(AM_GNU_GETTEXT,
200   [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
201    AC_REQUIRE([AC_PROG_CC])dnl
202    AC_REQUIRE([AC_PROG_RANLIB])dnl
203    AC_REQUIRE([AC_ISC_POSIX])dnl
204    AC_REQUIRE([AC_HEADER_STDC])dnl
205    AC_REQUIRE([AC_C_CONST])dnl
206    AC_REQUIRE([AC_C_INLINE])dnl
207    AC_REQUIRE([AC_TYPE_OFF_T])dnl
208    AC_REQUIRE([AC_TYPE_SIZE_T])dnl
209    AC_REQUIRE([AC_FUNC_ALLOCA])dnl
210    AC_REQUIRE([AC_FUNC_MMAP])dnl
212    AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
213 unistd.h sys/param.h])
214    AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
215 strdup __argz_count __argz_stringify __argz_next])
217    if test "${ac_cv_func_stpcpy+set}" != "set"; then
218      AC_CHECK_FUNCS(stpcpy)
219    fi
220    if test "${ac_cv_func_stpcpy}" = "yes"; then
221      AC_DEFINE(HAVE_STPCPY, 1, [Define to 1 if you have the stpcpy function.])
222    fi
224    AM_LC_MESSAGES
225    AM_WITH_NLS
227    if test "x$CATOBJEXT" != "x"; then
228      if test "x$ALL_LINGUAS" = "x"; then
229        LINGUAS=
230      else
231        AC_MSG_CHECKING(for catalogs to be installed)
232        NEW_LINGUAS=
233        for lang in ${LINGUAS=$ALL_LINGUAS}; do
234          case "$ALL_LINGUAS" in
235           *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
236          esac
237        done
238        LINGUAS=$NEW_LINGUAS
239        AC_MSG_RESULT($LINGUAS)
240      fi
242      dnl Construct list of names of catalog files to be constructed.
243      if test -n "$LINGUAS"; then
244        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
245      fi
246    fi
248    dnl The reference to <locale.h> in the installed <libintl.h> file
249    dnl must be resolved because we cannot expect the users of this
250    dnl to define HAVE_LOCALE_H.
251    if test $ac_cv_header_locale_h = yes; then
252      INCLUDE_LOCALE_H="#include <locale.h>"
253    else
254      INCLUDE_LOCALE_H="\
255 /* The system does not provide the header <locale.h>.  Take care yourself.  */"
256    fi
257    AC_SUBST(INCLUDE_LOCALE_H)
259    dnl Determine which catalog format we have (if any is needed)
260    dnl For now we know about two different formats:
261    dnl   Linux libc-5 and the normal X/Open format
262    test -d intl || mkdir intl
263    if test "$CATOBJEXT" = ".cat"; then
264      AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
266      dnl Transform the SED scripts while copying because some dumb SEDs
267      dnl cannot handle comments.
268      sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
269    fi
270    dnl po2tbl.sed is always needed.
271    sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
272      $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
274    dnl In the intl/Makefile.in we have a special dependency which makes
275    dnl only sense for gettext.  We comment this out for non-gettext
276    dnl packages.
277    if test "$PACKAGE" = "gettext"; then
278      GT_NO="#NO#"
279      GT_YES=
280    else
281      GT_NO=
282      GT_YES="#YES#"
283    fi
284    AC_SUBST(GT_NO)
285    AC_SUBST(GT_YES)
287    dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
288    dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
289    dnl Try to locate it.
290    MKINSTALLDIRS=
291    if test -n "$ac_aux_dir"; then
292      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
293    fi
294    if test -z "$MKINSTALLDIRS"; then
295      MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
296    fi
297    AC_SUBST(MKINSTALLDIRS)
299    dnl *** For now the libtool support in intl/Makefile is not for real.
300    l=
301    AC_SUBST(l)
303    dnl Generate list of files to be processed by xgettext which will
304    dnl be included in po/Makefile.
305    test -d po || mkdir po
306    case "$srcdir" in
307    .)
308      posrcprefix="../" ;;
309    /* | [[A-Za-z]]:*)
310      posrcprefix="$srcdir/" ;;
311    *)
312      posrcprefix="../$srcdir/" ;;
313    esac
314    rm -f po/POTFILES
315    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
316         < $srcdir/po/POTFILES.in > po/POTFILES
317   ])