New release
[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
117 ######################################################################
118 # Check for SysV IPC  (from GIMP)
119 ######################################################################
120 dnl WK_CHECK_IPC
121 dnl
122 define(WK_CHECK_IPC,
123   [ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h)
124     if test "$ac_cv_header_sys_shm_h" = "yes"; then
125       AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches)
126       AC_TRY_RUN([
127             #include <sys/types.h>
128             #include <sys/ipc.h>
129             #include <sys/shm.h>
130             int main()
131             {
132               int id;
133               char *shmaddr;
134             id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777);
135             if (id == -1)
136               exit (2);
137               shmaddr = shmat (id, 0, 0);
138               shmctl (id, IPC_RMID, 0);
139               if ((char*) shmat (id, 0, 0) == (char*) -1)
140               {
141                 shmdt (shmaddr);
142                 exit (1);
143               }
144               shmdt (shmaddr);
145               shmdt (shmaddr);
146               exit (0);
147             }
148         ],
149         AC_DEFINE(IPC_RMID_DEFERRED_RELEASE)
150         AC_MSG_RESULT(yes),
151         AC_MSG_RESULT(no),
152         AC_MSG_RESULT(assuming no))
153     fi
154   ])
155
156
157 ######################################################################
158 # progtest.m4 from gettext 0.35
159 ######################################################################
160 # Search path for a program which passes the given test.
161 # Ulrich Drepper <drepper@cygnus.com>, 1996.
162 #
163 # This file can be copied and used freely without restrictions.  It can
164 # be used in projects which are not available under the GNU Public License
165 # but which still want to provide support for the GNU gettext functionality.
166 # Please note that the actual code is *not* freely available.
167
168 # serial 1
169
170 dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
171 dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
172 AC_DEFUN(AM_PATH_PROG_WITH_TEST,
173 [# Extract the first word of "$2", so it can be a program name with args.
174 set dummy $2; ac_word=[$]2
175 AC_MSG_CHECKING([for $ac_word])
176 AC_CACHE_VAL(ac_cv_path_$1,
177 [case "[$]$1" in
178   /*)
179   ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
180   ;;
181   *)
182   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
183   for ac_dir in ifelse([$5], , $PATH, [$5]); do
184     test -z "$ac_dir" && ac_dir=.
185     if test -f $ac_dir/$ac_word; then
186       if [$3]; then
187         ac_cv_path_$1="$ac_dir/$ac_word"
188         break
189       fi
190     fi
191   done
192   IFS="$ac_save_ifs"
193 dnl If no 4th arg is given, leave the cache variable unset,
194 dnl so AC_PATH_PROGS will keep looking.
195 ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
196 ])dnl
197   ;;
198 esac])dnl
199 $1="$ac_cv_path_$1"
200 if test -n "[$]$1"; then
201   AC_MSG_RESULT([$]$1)
202 else
203   AC_MSG_RESULT(no)
204 fi
205 AC_SUBST($1)dnl
206 ])
207
208 ######################################################################
209 # lcmessage.m4 from gettext 0.35
210 ######################################################################
211 # Check whether LC_MESSAGES is available in <locale.h>.
212 # Ulrich Drepper <drepper@cygnus.com>, 1995.
213 #
214 # This file can be copied and used freely without restrictions.  It can
215 # be used in projects which are not available under the GNU Public License
216 # but which still want to provide support for the GNU gettext functionality.
217 # Please note that the actual code is *not* freely available.
218
219 # serial 1
220
221 AC_DEFUN(AM_LC_MESSAGES,
222   [if test $ac_cv_header_locale_h = yes; then
223     AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
224       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
225        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
226     if test $am_cv_val_LC_MESSAGES = yes; then
227       AC_DEFINE(HAVE_LC_MESSAGES)
228     fi
229   fi])
230
231 ######################################################################
232 # gettext.m4 from gettext 0.35
233 ######################################################################
234 # Macro to add for using GNU gettext.
235 # Ulrich Drepper <drepper@cygnus.com>, 1995.
236 #
237 # This file can be copied and used freely without restrictions.  It can
238 # be used in projects which are not available under the GNU Public License
239 # but which still want to provide support for the GNU gettext functionality.
240 # Please note that the actual code is *not* freely available.
241
242 # serial 5
243
244 AC_DEFUN(AM_WITH_NLS,
245   [AC_MSG_CHECKING([whether NLS is requested])
246     dnl Default is enabled NLS
247     AC_ARG_ENABLE(nls,
248       [  --disable-nls           do not use Native Language Support],
249       USE_NLS=$enableval, USE_NLS=yes)
250     AC_MSG_RESULT($USE_NLS)
251     AC_SUBST(USE_NLS)
252
253     USE_INCLUDED_LIBINTL=no
254
255     dnl If we use NLS figure out what method
256     if test "$USE_NLS" = "yes"; then
257       AC_DEFINE(ENABLE_NLS)
258       AC_MSG_CHECKING([whether included gettext is requested])
259       AC_ARG_WITH(included-gettext,
260         [  --with-included-gettext use the GNU gettext library included here],
261         nls_cv_force_use_gnu_gettext=$withval,
262         nls_cv_force_use_gnu_gettext=no)
263       AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
264
265       nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
266       if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
267         dnl User does not insist on using GNU NLS library.  Figure out what
268         dnl to use.  If gettext or catgets are available (in this order) we
269         dnl use this.  Else we have to fall back to GNU NLS library.
270         dnl catgets is only used if permitted by option --with-catgets.
271         nls_cv_header_intl=
272         nls_cv_header_libgt=
273         CATOBJEXT=NONE
274
275         AC_CHECK_HEADER(libintl.h,
276           [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
277             [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
278                gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
279
280            if test "$gt_cv_func_gettext_libc" != "yes"; then
281              AC_CHECK_LIB(intl, bindtextdomain,
282                [AC_CACHE_CHECK([for gettext in libintl],
283                  gt_cv_func_gettext_libintl,
284                  [AC_CHECK_LIB(intl, gettext,
285                   gt_cv_func_gettext_libintl=yes,
286                   gt_cv_func_gettext_libintl=no)],
287                  gt_cv_func_gettext_libintl=no)])
288            fi
289
290            if test "$gt_cv_func_gettext_libc" = "yes" \
291               || test "$gt_cv_func_gettext_libintl" = "yes"; then
292               AC_DEFINE(HAVE_GETTEXT)
293               AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
294                 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
295               if test "$MSGFMT" != "no"; then
296                 AC_CHECK_FUNCS(dcgettext)
297                 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
298                 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
299                   [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
300                 AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
301                                return _nl_msg_cat_cntr],
302                   [CATOBJEXT=.gmo
303                    DATADIRNAME=share],
304                   [CATOBJEXT=.mo
305                    DATADIRNAME=lib])
306                 INSTOBJEXT=.mo
307               fi
308             fi
309         ])
310
311         if test "$CATOBJEXT" = "NONE"; then
312           AC_MSG_CHECKING([whether catgets can be used])
313           AC_ARG_WITH(catgets,
314             [  --with-catgets          use catgets functions if available],
315             nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
316           AC_MSG_RESULT($nls_cv_use_catgets)
317
318           if test "$nls_cv_use_catgets" = "yes"; then
319             dnl No gettext in C library.  Try catgets next.
320             AC_CHECK_LIB(i, main)
321             AC_CHECK_FUNC(catgets,
322               [AC_DEFINE(HAVE_CATGETS)
323                INTLOBJS="\$(CATOBJS)"
324                AC_PATH_PROG(GENCAT, gencat, no)dnl
325                if test "$GENCAT" != "no"; then
326                  AC_PATH_PROG(GMSGFMT, gmsgfmt, no)
327                  if test "$GMSGFMT" = "no"; then
328                    AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
329                     [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)
330                  fi
331                  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
332                    [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
333                  USE_INCLUDED_LIBINTL=yes
334                  CATOBJEXT=.cat
335                  INSTOBJEXT=.cat
336                  DATADIRNAME=lib
337                  INTLDEPS='$(top_builddir)/intl/libintl.a'
338                  INTLLIBS=$INTLDEPS
339                  LIBS=`echo $LIBS | sed -e 's/-lintl//'`
340                  nls_cv_header_intl=intl/libintl.h
341                  nls_cv_header_libgt=intl/libgettext.h
342                fi])
343           fi
344         fi
345
346         if test "$CATOBJEXT" = "NONE"; then
347           dnl Neither gettext nor catgets in included in the C library.
348           dnl Fall back on GNU gettext library.
349           nls_cv_use_gnu_gettext=yes
350         fi
351       fi
352
353       if test "$nls_cv_use_gnu_gettext" = "yes"; then
354         dnl Mark actions used to generate GNU NLS library.
355         INTLOBJS="\$(GETTOBJS)"
356         AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
357           [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
358         AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
359         AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
360           [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
361         AC_SUBST(MSGFMT)
362         USE_INCLUDED_LIBINTL=yes
363         CATOBJEXT=.gmo
364         INSTOBJEXT=.mo
365         DATADIRNAME=share
366         INTLDEPS='$(top_builddir)/intl/libintl.a'
367         INTLLIBS=$INTLDEPS
368         LIBS=`echo $LIBS | sed -e 's/-lintl//'`
369         nls_cv_header_intl=intl/libintl.h
370         nls_cv_header_libgt=intl/libgettext.h
371       fi
372
373       dnl Test whether we really found GNU xgettext.
374       if test "$XGETTEXT" != ":"; then
375         dnl If it is no GNU xgettext we define it as : so that the
376         dnl Makefiles still can work.
377         if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
378           : ;
379         else
380           AC_MSG_RESULT(
381             [found xgettext program is not GNU xgettext; ignore it])
382           XGETTEXT=":"
383         fi
384       fi
385
386       # We need to process the po/ directory.
387       POSUB=po
388     else
389       DATADIRNAME=share
390       nls_cv_header_intl=intl/libintl.h
391       nls_cv_header_libgt=intl/libgettext.h
392     fi
393     AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
394     AC_OUTPUT_COMMANDS(
395      [case "$CONFIG_FILES" in *po/Makefile.in*)
396         sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
397       esac])
398
399
400     # If this is used in GNU gettext we have to set USE_NLS to `yes'
401     # because some of the sources are only built for this goal.
402     if test "$PACKAGE" = gettext; then
403       USE_NLS=yes
404       USE_INCLUDED_LIBINTL=yes
405     fi
406
407     dnl These rules are solely for the distribution goal.  While doing this
408     dnl we only have to keep exactly one list of the available catalogs
409     dnl in configure.in.
410     for lang in $ALL_LINGUAS; do
411       GMOFILES="$GMOFILES $lang.gmo"
412       POFILES="$POFILES $lang.po"
413     done
414
415     dnl Make all variables we use known to autoconf.
416     AC_SUBST(USE_INCLUDED_LIBINTL)
417     AC_SUBST(CATALOGS)
418     AC_SUBST(CATOBJEXT)
419     AC_SUBST(DATADIRNAME)
420     AC_SUBST(GMOFILES)
421     AC_SUBST(INSTOBJEXT)
422     AC_SUBST(INTLDEPS)
423     AC_SUBST(INTLLIBS)
424     AC_SUBST(INTLOBJS)
425     AC_SUBST(POFILES)
426     AC_SUBST(POSUB)
427   ])
428
429 AC_DEFUN(AM_GNU_GETTEXT,
430   [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
431    AC_REQUIRE([AC_PROG_CC])dnl
432    AC_REQUIRE([AC_PROG_RANLIB])dnl
433    AC_REQUIRE([AC_ISC_POSIX])dnl
434    AC_REQUIRE([AC_HEADER_STDC])dnl
435    AC_REQUIRE([AC_C_CONST])dnl
436    AC_REQUIRE([AC_C_INLINE])dnl
437    AC_REQUIRE([AC_TYPE_OFF_T])dnl
438    AC_REQUIRE([AC_TYPE_SIZE_T])dnl
439    AC_REQUIRE([AC_FUNC_ALLOCA])dnl
440    AC_REQUIRE([AC_FUNC_MMAP])dnl
441
442    AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
443 unistd.h sys/param.h])
444    AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
445 strdup __argz_count __argz_stringify __argz_next])
446
447    if test "${ac_cv_func_stpcpy+set}" != "set"; then
448      AC_CHECK_FUNCS(stpcpy)
449    fi
450    if test "${ac_cv_func_stpcpy}" = "yes"; then
451      AC_DEFINE(HAVE_STPCPY)
452    fi
453
454    AM_LC_MESSAGES
455    AM_WITH_NLS
456
457    if test "x$CATOBJEXT" != "x"; then
458      if test "x$ALL_LINGUAS" = "x"; then
459        LINGUAS=
460      else
461        AC_MSG_CHECKING(for catalogs to be installed)
462        NEW_LINGUAS=
463        for lang in ${LINGUAS=$ALL_LINGUAS}; do
464          case "$ALL_LINGUAS" in
465           *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
466          esac
467        done
468        LINGUAS=$NEW_LINGUAS
469        AC_MSG_RESULT($LINGUAS)
470      fi
471
472      dnl Construct list of names of catalog files to be constructed.
473      if test -n "$LINGUAS"; then
474        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
475      fi
476    fi
477
478    dnl The reference to <locale.h> in the installed <libintl.h> file
479    dnl must be resolved because we cannot expect the users of this
480    dnl to define HAVE_LOCALE_H.
481    if test $ac_cv_header_locale_h = yes; then
482      INCLUDE_LOCALE_H="#include <locale.h>"
483    else
484      INCLUDE_LOCALE_H="\
485 /* The system does not provide the header <locale.h>.  Take care yourself.  */"
486    fi
487    AC_SUBST(INCLUDE_LOCALE_H)
488
489    dnl Determine which catalog format we have (if any is needed)
490    dnl For now we know about two different formats:
491    dnl   Linux libc-5 and the normal X/Open format
492    test -d intl || mkdir intl
493    if test "$CATOBJEXT" = ".cat"; then
494      AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
495
496      dnl Transform the SED scripts while copying because some dumb SEDs
497      dnl cannot handle comments.
498      sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
499    fi
500    dnl po2tbl.sed is always needed.
501    sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
502      $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
503
504    dnl In the intl/Makefile.in we have a special dependency which makes
505    dnl only sense for gettext.  We comment this out for non-gettext
506    dnl packages.
507    if test "$PACKAGE" = "gettext"; then
508      GT_NO="#NO#"
509      GT_YES=
510    else
511      GT_NO=
512      GT_YES="#YES#"
513    fi
514    AC_SUBST(GT_NO)
515    AC_SUBST(GT_YES)
516
517    dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
518    dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
519    dnl Try to locate is.
520    MKINSTALLDIRS=
521    if test -n "$ac_aux_dir"; then
522      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
523    fi
524    if test -z "$MKINSTALLDIRS"; then
525      MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
526    fi
527    AC_SUBST(MKINSTALLDIRS)
528
529    dnl *** For now the libtool support in intl/Makefile is not for real.
530    l=
531    AC_SUBST(l)
532
533    dnl Generate list of files to be processed by xgettext which will
534    dnl be included in po/Makefile.
535    test -d po || mkdir po
536    if test "x$srcdir" != "x."; then
537      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
538        posrcprefix="$srcdir/"
539      else
540        posrcprefix="../$srcdir/"
541      fi
542    else
543      posrcprefix="../"
544    fi
545    rm -f po/POTFILES
546    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
547         < $srcdir/po/POTFILES.in > po/POTFILES
548   ])
549