Bumbed version number for next development cycle
[libgcrypt.git] / acinclude.m4
1 dnl macros to configure Libgcrypt
2 dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
3 dnl
4 dnl This file is part of Libgcrypt.
5 dnl
6 dnl Libgcrypt is free software; you can redistribute it and/or modify
7 dnl it under the terms of the GNU Lesser General Public License as
8 dnl published by the Free Software Foundation; either version 2.1 of
9 dnl the License, or (at your option) any later version.
10 dnl
11 dnl Libgcrypt is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 dnl GNU Lesser General Public License for more details.
15 dnl
16 dnl You should have received a copy of the GNU Lesser General Public
17 dnl License along with this program; if not, write to the Free Software
18 dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19
20 dnl GNUPG_MSG_PRINT(STRING)
21 dnl print a message
22 dnl
23 define(GNUPG_MSG_PRINT,
24   [ echo $ac_n "$1"" $ac_c" 1>&AS_MESSAGE_FD([])
25   ])
26
27 dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME)
28 dnl Check whether a typedef exists and create a #define $2 if it exists
29 dnl
30 AC_DEFUN(GNUPG_CHECK_TYPEDEF,
31   [ AC_MSG_CHECKING(for $1 typedef)
32     AC_CACHE_VAL(gnupg_cv_typedef_$1,
33     [AC_TRY_COMPILE([#define _GNU_SOURCE 1
34     #include <stdlib.h>
35     #include <sys/types.h>], [
36     #undef $1
37     int a = sizeof($1);
38     ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
39     AC_MSG_RESULT($gnupg_cv_typedef_$1)
40     if test "$gnupg_cv_typedef_$1" = yes; then
41         AC_DEFINE($2,1,[Defined if a `]$1[' is typedef'd])
42     fi
43   ])
44
45
46 dnl GNUPG_FIX_HDR_VERSION(FILE, NAME)
47 dnl Make the version number in gcrypt/gcrypt.h the same as the one here.
48 dnl (this is easier than to have a .in file just for one substitution)
49 dnl We must use a temp file in the current directory because make distcheck 
50 dnl install all sourcefiles RO.
51 dnl
52 AC_DEFUN(GNUPG_FIX_HDR_VERSION,
53   [ sed "s/^#define $2 \".*/#define $2 \"$VERSION\"/" $srcdir/$1 > fixhdr.tmp
54     if cmp -s $srcdir/$1 fixhdr.tmp 2>/dev/null; then
55         rm -f fixhdr.tmp
56     else
57         rm -f $srcdir/$1
58         if mv fixhdr.tmp $srcdir/$1 ; then
59             :
60         else
61             AC_MSG_ERROR([[
62 ***
63 *** Failed to fix the version string macro $2 in $1.
64 *** The old file has been saved as fixhdr.tmp
65 ***]])
66         fi
67         AC_MSG_WARN([fixed the $2 macro in $1])
68     fi
69   ])
70
71
72 dnl GNUPG_CHECK_GNUMAKE
73 dnl
74 AC_DEFUN(GNUPG_CHECK_GNUMAKE,
75   [
76     if ${MAKE-make} --version 2>/dev/null | grep '^GNU ' >/dev/null 2>&1; then
77         :
78     else
79         AC_MSG_WARN([[
80 ***
81 *** It seems that you are not using GNU make.  Some make tools have serious
82 *** flaws and you may not be able to build this software at all. Before you
83 *** complain, please try GNU make:  GNU make is easy to build and available
84 *** at all GNU archives.  It is always available from ftp.gnu.org:/gnu/make.
85 ***]])
86     fi
87   ])
88
89
90 ######################################################################
91 # Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock
92 # is not called from uid 0 (not tested whether uid 0 works)
93 # For DECs Tru64 we have also to check whether mlock is in librt
94 # mlock is there a macro using memlk()
95 ######################################################################
96 dnl GNUPG_CHECK_MLOCK
97 dnl
98 define(GNUPG_CHECK_MLOCK,
99   [ AC_CHECK_FUNCS(mlock)
100     if test "$ac_cv_func_mlock" = "no"; then
101         AC_CHECK_HEADERS(sys/mman.h)
102         if test "$ac_cv_header_sys_mman_h" = "yes"; then
103             # Add librt to LIBS:
104             AC_CHECK_LIB(rt, memlk)
105             AC_CACHE_CHECK([whether mlock is in sys/mman.h],
106                             gnupg_cv_mlock_is_in_sys_mman,
107                 [AC_TRY_LINK([
108                     #include <assert.h>
109                     #ifdef HAVE_SYS_MMAN_H
110                     #include <sys/mman.h>
111                     #endif
112                 ], [
113                     int i;
114                     
115                     /* glibc defines this for functions which it implements
116                      * to always fail with ENOSYS.  Some functions are actually
117                      * named something starting with __ and the normal name
118                      * is an alias.  */
119                     #if defined (__stub_mlock) || defined (__stub___mlock)
120                     choke me
121                     #else
122                     mlock(&i, 4);
123                     #endif
124                     ; return 0;
125                 ],
126                 gnupg_cv_mlock_is_in_sys_mman=yes,
127                 gnupg_cv_mlock_is_in_sys_mman=no)])
128             if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then
129                 AC_DEFINE(HAVE_MLOCK,1,
130                           [Defined if the system supports an mlock() call])
131             fi
132         fi
133     fi
134     if test "$ac_cv_func_mlock" = "yes"; then
135         AC_MSG_CHECKING(whether mlock is broken)
136           AC_CACHE_VAL(gnupg_cv_have_broken_mlock,
137              AC_TRY_RUN([
138                 #include <stdlib.h>
139                 #include <unistd.h>
140                 #include <errno.h>
141                 #include <sys/mman.h>
142                 #include <sys/types.h>
143                 #include <fcntl.h>
144
145                 int main()
146                 {
147                     char *pool;
148                     int err;
149                     long int pgsize = getpagesize();
150
151                     pool = malloc( 4096 + pgsize );
152                     if( !pool )
153                         return 2;
154                     pool += (pgsize - ((long int)pool % pgsize));
155
156                     err = mlock( pool, 4096 );
157                     if( !err || errno == EPERM )
158                         return 0; /* okay */
159
160                     return 1;  /* hmmm */
161                 }
162
163             ],
164             gnupg_cv_have_broken_mlock="no",
165             gnupg_cv_have_broken_mlock="yes",
166             gnupg_cv_have_broken_mlock="assume-no"
167            )
168          )
169          if test "$gnupg_cv_have_broken_mlock" = "yes"; then
170              AC_DEFINE(HAVE_BROKEN_MLOCK,1,
171                        [Defined if the mlock() call does not work])
172              AC_MSG_RESULT(yes)
173          else
174             if test "$gnupg_cv_have_broken_mlock" = "no"; then
175                 AC_MSG_RESULT(no)
176             else
177                 AC_MSG_RESULT(assuming no)
178             fi
179          fi
180     fi
181   ])
182
183 # GNUPG_SYS_LIBTOOL_CYGWIN32 - find tools needed on cygwin32
184 AC_DEFUN(GNUPG_SYS_LIBTOOL_CYGWIN32,
185 [AC_CHECK_TOOL(DLLTOOL, dlltool, false)
186 AC_CHECK_TOOL(AS, as, false)
187 ])
188
189 dnl LIST_MEMBER()
190 dnl Check wether an element ist contained in a list.  Set `found' to
191 dnl `1' if the element is found in the list, to `0' otherwise.
192 AC_DEFUN(LIST_MEMBER,
193 [
194 name=$1
195 list=$2
196 found=0
197
198 for n in $list; do
199   if test "x$name" = "x$n"; then
200     found=1
201   fi
202 done
203 ])
204
205 dnl AM_PATH_GPG_ERROR([MINIMUM-VERSION,
206 dnl                   [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
207 dnl Test for libgpg-error and define GPG_ERROR_CFLAGS and GPG_ERROR_LIBS
208 dnl
209 AC_DEFUN(AM_PATH_GPG_ERROR,
210 [ AC_ARG_WITH(gpg-error-prefix,
211             AC_HELP_STRING([--with-gpg-error-prefix=PFX],
212                            [prefix where GPG Error is installed (optional)]),
213      gpg_error_config_prefix="$withval", gpg_error_config_prefix="")
214   if test x$gpg_error_config_prefix != x ; then
215      gpg_error_config_args="$gpg_error_config_args --prefix=$gpg_error_config_prefix"
216      if test x${GPG_ERROR_CONFIG+set} != xset ; then
217         GPG_ERROR_CONFIG=$gpg_error_config_prefix/bin/gpg-error-config
218      fi
219   fi
220
221   AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no)
222   min_gpg_error_version=ifelse([$1], ,0.0.0,$1)
223   AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version)
224   ok=no
225   if test "$GPG_ERROR_CONFIG" != "no" ; then
226     req_major=`echo $min_gpg_error_version | \
227                sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
228     req_minor=`echo $min_gpg_error_version | \
229                sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
230     gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version`
231     major=`echo $gpg_error_config_version | \
232                sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
233     minor=`echo $gpg_error_config_version | \
234                sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
235     if test "$major" -gt "$req_major"; then
236         ok=yes
237     else 
238         if test "$major" -eq "$req_major"; then
239             if test "$minor" -ge "$req_minor"; then
240                ok=yes
241             fi
242         fi
243     fi
244   fi
245   if test $ok = yes; then
246     GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags`
247     GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs`
248     AC_MSG_RESULT(yes)
249     ifelse([$2], , :, [$2])
250   else
251     GPG_ERROR_CFLAGS=""
252     GPG_ERROR_LIBS=""
253     AC_MSG_RESULT(no)
254     ifelse([$3], , :, [$3])
255   fi
256   AC_SUBST(GPG_ERROR_CFLAGS)
257   AC_SUBST(GPG_ERROR_LIBS)
258 ])
259