missing
[gnupg.git] / acinclude.m4
1 dnl macros to configure g10
2
3
4 dnl WK_MSG_PRINT(STRING)
5 dnl print a message
6 dnl
7 define(WK_MSG_PRINT,
8   [ echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG
9   ])
10
11
12 dnl WK_CHECK_TYPEDEF(TYPE, HAVE_NAME)
13 dnl Check whether a typedef exists and create a #define $2 if it exists
14 dnl
15 AC_DEFUN(WK_CHECK_TYPEDEF,
16   [ AC_MSG_CHECKING(for $1 typedef)
17     AC_CACHE_VAL(wk_cv_typedef_$1,
18     [AC_TRY_COMPILE([#include <stdlib.h>
19     #include <sys/types.h>], [
20     #undef $1
21     int a = sizeof($1);
22     ], wk_cv_typedef_$1=yes, wk_cv_typedef_$1=no )])
23     AC_MSG_RESULT($wk_cv_typedef_$1)
24     if test "$wk_cv_typedef_$1" = yes; then
25         AC_DEFINE($2)
26     fi
27   ])
28
29
30
31 dnl WK_LINK_FILES( SRC, DEST )
32 dnl same as AC_LINK_FILES, but collect the files to link in
33 dnl some special variables and do the link
34 dnl when WK_DO_LINK_FILES is called
35 dnl This is a workaround for AC_LINK_FILES, because it does not work
36 dnl correct when using a caching scheme
37 dnl
38 define(WK_LINK_FILES,
39   [ if test "x$wk_link_files_src" = "x"; then
40         wk_link_files_src="$1"
41         wk_link_files_dst="$2"
42     else
43         wk_link_files_src="$wk_link_files_src $1"
44         wk_link_files_dst="$wk_link_files_dst $2"
45     fi
46   ])
47 define(WK_DO_LINK_FILES,
48   [ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst )
49   ])
50
51
52 dnl WK_CHECK_ENDIAN
53 dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
54 dnl
55 define(WK_CHECK_ENDIAN,
56   [ if test "$cross_compiling" = yes; then
57         AC_MSG_WARN(cross compiling; assuming little endianess)
58     fi
59     AC_MSG_CHECKING(endianess)
60     AC_CACHE_VAL(wk_cv_c_endian,
61       [ wk_cv_c_endian=unknown
62         # See if sys/param.h defines the BYTE_ORDER macro.
63         AC_TRY_COMPILE([#include <sys/types.h>
64         #include <sys/param.h>], [
65         #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
66          bogus endian macros
67         #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
68         AC_TRY_COMPILE([#include <sys/types.h>
69         #include <sys/param.h>], [
70         #if BYTE_ORDER != BIG_ENDIAN
71          not big endian
72         #endif], wk_cv_c_endian=big, wk_cv_c_endian=little)])
73         if test "$wk_cv_c_endian" = unknown; then
74             AC_TRY_RUN([main () {
75               /* Are we little or big endian?  From Harbison&Steele.  */
76               union
77               {
78                 long l;
79                 char c[sizeof (long)];
80               } u;
81               u.l = 1;
82               exit (u.c[sizeof (long) - 1] == 1);
83               }],
84               wk_cv_c_endian=little,
85               wk_cv_c_endian=big,
86               wk_cv_c_endian=little
87             )
88         fi
89       ])
90     AC_MSG_RESULT([$wk_cv_c_endian])
91     if test "$wk_cv_c_endian" = little; then
92       AC_DEFINE(LITTLE_ENDIAN_HOST)
93     else
94       AC_DEFINE(BIG_ENDIAN_HOST)
95     fi
96   ])
97
98 dnl WK_CHECK_CACHE
99 dnl
100 define(WK_CHECK_CACHE,
101   [ AC_MSG_CHECKING(cached information)
102     wk_hostcheck="$target"
103     AC_CACHE_VAL(wk_cv_hostcheck, [ wk_cv_hostcheck="$wk_hostcheck" ])
104     if test "$wk_cv_hostcheck" != "$wk_hostcheck"; then
105         AC_MSG_RESULT(changed)
106         AC_MSG_WARN(config.cache exists!)
107         AC_MSG_ERROR(you must do 'make distclean' first to compile for
108                  different target or different parameters.)
109     else
110         AC_MSG_RESULT(ok)
111     fi
112   ])
113
114
115 ######################################################################
116 # progtest.m4 from gettext 0.32
117 ######################################################################
118 # Search path for a program which passes the given test.
119 # Ulrich Drepper <drepper@cygnus.com>, 1996.
120 #
121 # This file file be copied and used freely without restrictions.  It can
122 # be used in projects which are not available under the GNU Public License
123 # but which still want to provide support for the GNU gettext functionality.
124 # Please note that the actual code is *not* freely available.
125
126 # serial 1
127
128 dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
129 dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
130 AC_DEFUN(AM_PATH_PROG_WITH_TEST,
131 [# Extract the first word of "$2", so it can be a program name with args.
132 set dummy $2; ac_word=[$]2
133 AC_MSG_CHECKING([for $ac_word])
134 AC_CACHE_VAL(ac_cv_path_$1,
135 [case "[$]$1" in
136   /*)
137   ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
138   ;;
139   *)
140   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
141   for ac_dir in ifelse([$5], , $PATH, [$5]); do
142     test -z "$ac_dir" && ac_dir=.
143     if test -f $ac_dir/$ac_word; then
144       if [$3]; then
145         ac_cv_path_$1="$ac_dir/$ac_word"
146         break
147       fi
148     fi
149   done
150   IFS="$ac_save_ifs"
151 dnl If no 4th arg is given, leave the cache variable unset,
152 dnl so AC_PATH_PROGS will keep looking.
153 ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
154 ])dnl
155   ;;
156 esac])dnl
157 $1="$ac_cv_path_$1"
158 if test -n "[$]$1"; then
159   AC_MSG_RESULT([$]$1)
160 else
161   AC_MSG_RESULT(no)
162 fi
163 AC_SUBST($1)dnl
164 ])
165
166
167 ######################################################################
168 # lcmessage.m4 from gettext 0.32
169 ######################################################################
170 # Check whether LC_MESSAGES is available in <locale.h>.
171 # Ulrich Drepper <drepper@cygnus.com>, 1995.
172 #
173 # This file file be copied and used freely without restrictions.  It can
174 # be used in projects which are not available under the GNU Public License
175 # but which still want to provide support for the GNU gettext functionality.
176 # Please note that the actual code is *not* freely available.
177
178 # serial 1
179
180 AC_DEFUN(AM_LC_MESSAGES,
181   [if test $ac_cv_header_locale_h = yes; then
182     AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
183       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
184        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
185     if test $am_cv_val_LC_MESSAGES = yes; then
186       AC_DEFINE(HAVE_LC_MESSAGES)
187     fi
188   fi])
189
190
191
192 ######################################################################
193 # gettext.m4 from gettext 0.32
194 ######################################################################
195 # Macro to add for using GNU gettext.
196 # Ulrich Drepper <drepper@cygnus.com>, 1995.
197 #
198 # This file file be copied and used freely without restrictions.  It can
199 # be used in projects which are not available under the GNU Public License
200 # but which still want to provide support for the GNU gettext functionality.
201 # Please note that the actual code is *not* freely available.
202
203 # serial 3
204
205 AC_DEFUN(AM_WITH_NLS,
206   [AC_MSG_CHECKING([whether NLS is requested])
207     dnl Default is enabled NLS
208     AC_ARG_ENABLE(nls,
209       [  --disable-nls           do not use Native Language Support],
210       USE_NLS=$enableval, USE_NLS=yes)
211     AC_MSG_RESULT($USE_NLS)
212     AC_SUBST(USE_NLS)
213
214     USE_INCLUDED_LIBINTL=no
215
216     dnl If we use NLS figure out what method
217     if test "$USE_NLS" = "yes"; then
218       AC_DEFINE(ENABLE_NLS)
219       AC_MSG_CHECKING([whether included gettext is requested])
220       AC_ARG_WITH(included-gettext,
221         [  --with-included-gettext use the GNU gettext library included here],
222         nls_cv_force_use_gnu_gettext=$withval,
223         nls_cv_force_use_gnu_gettext=no)
224       AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
225
226       nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
227       if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
228         dnl User does not insist on using GNU NLS library.  Figure out what
229         dnl to use.  If gettext or catgets are available (in this order) we
230         dnl use this.  Else we have to fall back to GNU NLS library.
231         dnl catgets is only used if permitted by option --with-catgets.
232         nls_cv_header_intl=
233         nls_cv_header_libgt=
234         CATOBJEXT=NONE
235
236         AC_CHECK_HEADER(libintl.h,
237           [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
238             [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
239                gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
240
241            if test "$gt_cv_func_gettext_libc" != "yes"; then
242              AC_CHECK_LIB(intl, bindtextdomain,
243                [AC_CACHE_CHECK([for gettext in libintl],
244                  gt_cv_func_gettext_libintl,
245                  [AC_TRY_LINK([], [return (int) gettext ("")],
246                  gt_cv_func_gettext_libintl=yes,
247                  gt_cv_func_gettext_libintl=no)])])
248            fi
249
250            if test "$gt_cv_func_gettext_libc" = "yes" \
251               || test "$gt_cv_func_gettext_libintl" = "yes"; then
252               AC_DEFINE(HAVE_GETTEXT)
253               AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
254                 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
255               if test "$MSGFMT" != "no"; then
256                 AC_CHECK_FUNCS(dcgettext)
257                 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
258                 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
259                   [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
260                 AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
261                                return _nl_msg_cat_cntr],
262                   [CATOBJEXT=.gmo
263                    DATADIRNAME=share],
264                   [CATOBJEXT=.mo
265                    DATADIRNAME=lib])
266                 INSTOBJEXT=.mo
267               fi
268             fi
269         ])
270
271         if test "$CATOBJEXT" = "NONE"; then
272           AC_MSG_CHECKING([whether catgets can be used])
273           AC_ARG_WITH(catgets,
274             [  --with-catgets          use catgets functions if available],
275             nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
276           AC_MSG_RESULT($nls_cv_use_catgets)
277
278           if test "$nls_cv_use_catgets" = "yes"; then
279             dnl No gettext in C library.  Try catgets next.
280             AC_CHECK_LIB(i, main)
281             AC_CHECK_FUNC(catgets,
282               [AC_DEFINE(HAVE_CATGETS)
283                INTLOBJS="\$(CATOBJS)"
284                AC_PATH_PROG(GENCAT, gencat, no)dnl
285                if test "$GENCAT" != "no"; then
286                  AC_PATH_PROG(GMSGFMT, gmsgfmt, no)
287                  if test "$GMSGFMT" = "no"; then
288                    AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
289                     [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)
290                  fi
291                  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
292                    [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
293                  USE_INCLUDED_LIBINTL=yes
294                  CATOBJEXT=.cat
295                  INSTOBJEXT=.cat
296                  DATADIRNAME=lib
297                  INTLDEPS='$(top_builddir)/intl/libintl.a'
298                  INTLLIBS=$INTLDEPS
299                  LIBS=`echo $LIBS | sed -e 's/-lintl//'`
300                  nls_cv_header_intl=intl/libintl.h
301                  nls_cv_header_libgt=intl/libgettext.h
302                fi])
303           fi
304         fi
305
306         if test "$CATOBJEXT" = "NONE"; then
307           dnl Neither gettext nor catgets in included in the C library.
308           dnl Fall back on GNU gettext library.
309           nls_cv_use_gnu_gettext=yes
310         fi
311       fi
312
313       if test "$nls_cv_use_gnu_gettext" = "yes"; then
314         dnl Mark actions used to generate GNU NLS library.
315         INTLOBJS="\$(GETTOBJS)"
316         AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
317           [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
318         AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
319         AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
320           [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
321         AC_SUBST(MSGFMT)
322         USE_INCLUDED_LIBINTL=yes
323         CATOBJEXT=.gmo
324         INSTOBJEXT=.mo
325         DATADIRNAME=share
326         INTLDEPS='$(top_builddir)/intl/libintl.a'
327         INTLLIBS=$INTLDEPS
328         LIBS=`echo $LIBS | sed -e 's/-lintl//'`
329         nls_cv_header_intl=intl/libintl.h
330         nls_cv_header_libgt=intl/libgettext.h
331       fi
332
333       dnl Test whether we really found GNU xgettext.
334       if test "$XGETTEXT" != ":"; then
335         dnl If it is no GNU xgettext we define it as : so that the
336         dnl Makefiles still can work.
337         if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
338           : ;
339         else
340           AC_MSG_RESULT(
341             [found xgettext programs is not GNU xgettext; ignore it])
342           XGETTEXT=":"
343         fi
344       fi
345
346       # We need to process the po/ directory.
347       POSUB=po
348     else
349       DATADIRNAME=share
350       nls_cv_header_intl=intl/libintl.h
351       nls_cv_header_libgt=intl/libgettext.h
352     fi
353
354     # If this is used in GNU gettext we have to set USE_NLS to `yes'
355     # because some of the sources are only built for this goal.
356     if test "$PACKAGE" = gettext; then
357       USE_NLS=yes
358       USE_INCLUDED_LIBINTL=yes
359     fi
360
361     dnl These rules are solely for the distribution goal.  While doing this
362     dnl we only have to keep exactly one list of the available catalogs
363     dnl in configure.in.
364     for lang in $ALL_LINGUAS; do
365       GMOFILES="$GMOFILES $lang.gmo"
366       POFILES="$POFILES $lang.po"
367     done
368
369     dnl Make all variables we use known to autoconf.
370     AC_SUBST(USE_INCLUDED_LIBINTL)
371     AC_SUBST(CATALOGS)
372     AC_SUBST(CATOBJEXT)
373     AC_SUBST(DATADIRNAME)
374     AC_SUBST(GMOFILES)
375     AC_SUBST(INSTOBJEXT)
376     AC_SUBST(INTLDEPS)
377     AC_SUBST(INTLLIBS)
378     AC_SUBST(INTLOBJS)
379     AC_SUBST(POFILES)
380     AC_SUBST(POSUB)
381   ])
382
383 AC_DEFUN(AM_GNU_GETTEXT,
384   [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
385    AC_REQUIRE([AC_PROG_CC])dnl
386    AC_REQUIRE([AC_PROG_RANLIB])dnl
387    AC_REQUIRE([AC_ISC_POSIX])dnl
388    AC_REQUIRE([AC_HEADER_STDC])dnl
389    AC_REQUIRE([AC_C_CONST])dnl
390    AC_REQUIRE([AC_C_INLINE])dnl
391    AC_REQUIRE([AC_TYPE_OFF_T])dnl
392    AC_REQUIRE([AC_TYPE_SIZE_T])dnl
393    AC_REQUIRE([AC_FUNC_ALLOCA])dnl
394    AC_REQUIRE([AC_FUNC_MMAP])dnl
395
396    AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
397 unistd.h values.h sys/param.h])
398    AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
399 __argz_count __argz_stringify __argz_next])
400
401    if test "${ac_cv_func_stpcpy+set}" != "set"; then
402      AC_CHECK_FUNCS(stpcpy)
403    fi
404    if test "${ac_cv_func_stpcpy}" = "yes"; then
405      AC_DEFINE(HAVE_STPCPY)
406    fi
407
408    AM_LC_MESSAGES
409    AM_WITH_NLS
410
411    if test "x$CATOBJEXT" != "x"; then
412      if test "x$ALL_LINGUAS" = "x"; then
413        LINGUAS=
414      else
415        AC_MSG_CHECKING(for catalogs to be installed)
416        NEW_LINGUAS=
417        for lang in ${LINGUAS=$ALL_LINGUAS}; do
418          case "$ALL_LINGUAS" in
419           *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
420          esac
421        done
422        LINGUAS=$NEW_LINGUAS
423        AC_MSG_RESULT($LINGUAS)
424      fi
425
426      dnl Construct list of names of catalog files to be constructed.
427      if test -n "$LINGUAS"; then
428        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
429      fi
430    fi
431
432    dnl The reference to <locale.h> in the installed <libintl.h> file
433    dnl must be resolved because we cannot expect the users of this
434    dnl to define HAVE_LOCALE_H.
435    if test $ac_cv_header_locale_h = yes; then
436      INCLUDE_LOCALE_H="#include <locale.h>"
437    else
438      INCLUDE_LOCALE_H="\
439 /* The system does not provide the header <locale.h>.  Take care yourself.  */"
440    fi
441    AC_SUBST(INCLUDE_LOCALE_H)
442
443    dnl Determine which catalog format we have (if any is needed)
444    dnl For now we know about two different formats:
445    dnl   Linux libc-5 and the normal X/Open format
446    test -d intl || mkdir intl
447    if test "$CATOBJEXT" = ".cat"; then
448      AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
449
450      dnl Transform the SED scripts while copying because some dumb SEDs
451      dnl cannot handle comments.
452      sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
453    fi
454    dnl po2tbl.sed is always needed.
455    sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
456      $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
457
458    dnl In the intl/Makefile.in we have a special dependency which makes
459    dnl only sense for gettext.  We comment this out for non-gettext
460    dnl packages.
461    if test "$PACKAGE" = "gettext"; then
462      GT_NO="#NO#"
463      GT_YES=
464    else
465      GT_NO=
466      GT_YES="#YES#"
467    fi
468    AC_SUBST(GT_NO)
469    AC_SUBST(GT_YES)
470
471    dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
472    dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
473    dnl Try to locate is.
474    MKINSTALLDIRS=
475    if test -n "$ac_aux_dir"; then
476      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
477    fi
478    if test -z "$MKINSTALLDIRS"; then
479      MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
480    fi
481    AC_SUBST(MKINSTALLDIRS)
482
483    dnl *** For now the libtool support in intl/Makefile is not for real.
484    l=
485    AC_SUBST(l)
486
487    dnl Generate list of files to be processed by xgettext which will
488    dnl be included in po/Makefile.
489    test -d po || mkdir po
490    if test "x$srcdir" != "x."; then
491      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
492        posrcprefix="$srcdir/"
493      else
494        posrcprefix="../$srcdir/"
495      fi
496    else
497      posrcprefix="../"
498    fi
499    rm -f po/POTFILES
500    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
501         < $srcdir/po/POTFILES.in > po/POTFILES
502   ])
503
504
505