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