c33437e40004d27aa245891e9ef18abffcdb37b1
[libgcrypt.git] / configure.ac
1 # Configure.ac script for Libgcrypt
2 # Copyright (C) 1998, 1999, 2000, 2001, 2002
3 #               2003, 2004, 2006 Free Software Foundation, Inc.
4 #
5 # This file is part of Libgcrypt.
6 #
7 # Libgcrypt is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU Lesser general Public License as
9 # published by the Free Software Foundation; either version 2.1 of
10 # the License, or (at your option) any later version.
11 #
12 # Libgcrypt is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20 #
21 # (Process this file with autoconf to produce a configure script.)
22 AC_REVISION($Revision$)
23 AC_PREREQ(2.59)
24 min_automake_version="1.9.3"
25
26
27 # Remember to change the version number immediately *after* a release.
28 # Set my_issvn to "yes" for non-released code.  Remember to run an
29 # "svn up" and "autogen.sh" right before creating a distribution.
30 m4_define([my_version], [1.3.0])
31 m4_define([my_issvn], [yes])
32
33 m4_define([svn_revision], m4_esyscmd([echo -n $( (svn info 2>/dev/null \
34             || echo 'Revision: 0')|sed -n '/^Revision:/ {s/[^0-9]//gp;q;}')]))
35 AC_INIT([libgcrypt], my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision]),
36         [bug-libgcrypt@gnupg.org])
37 # LT Version numbers, remember to change them just *before* a release.
38 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
39 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
40 #   (No interfaces changed:                   REVISION++)
41 LIBGCRYPT_LT_CURRENT=14
42 LIBGCRYPT_LT_AGE=3
43 LIBGCRYPT_LT_REVISION=0
44
45
46 # If the API is changed in an incompatible way: increment the next counter.
47 LIBGCRYPT_CONFIG_API_VERSION=1
48
49 NEED_GPG_ERROR_VERSION=1.0
50
51
52 PACKAGE=$PACKAGE_NAME
53 VERSION=$PACKAGE_VERSION
54
55 AC_CONFIG_SRCDIR([src/libgcrypt.vers])
56 AC_CANONICAL_TARGET()
57 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
58 AM_CONFIG_HEADER(config.h)
59 AM_MAINTAINER_MODE
60
61 AH_TOP([
62 /* need this, because some autoconf tests rely on this (e.g. stpcpy)
63  * and it should be used for new programs  */
64 #define _GNU_SOURCE  1
65 ])
66
67 AH_BOTTOM([
68 #define _GCRYPT_IN_LIBGCRYPT 1
69
70 /* If the configure check for endianness has been disabled, get it from
71    OS macros.  This is intended for making fat binary builds on OS X.  */
72 #ifdef DISABLED_ENDIAN_CHECK
73 # if defined(__BIG_ENDIAN__)
74 #  define WORDS_BIGENDIAN 1
75 # elif defined(__LITTLE_ENDIAN__)
76 #  undef WORDS_BIGENDIAN
77 # else
78 #  error "No endianness found"
79 # endif
80 #endif /*DISABLED_ENDIAN_CHECK*/
81
82 ])
83
84 AH_VERBATIM([_REENTRANT],
85 [/* To allow the use of Libgcrypt in multithreaded programs we have to use
86     special features from the library. */
87 #ifndef _REENTRANT
88 # define _REENTRANT 1
89 #endif
90 ])
91
92
93 AC_SUBST(LIBGCRYPT_LT_CURRENT)
94 AC_SUBST(LIBGCRYPT_LT_AGE)
95 AC_SUBST(LIBGCRYPT_LT_REVISION)
96 AC_SUBST(PACKAGE)
97 AC_SUBST(VERSION)
98 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
99 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
100
101
102 ######################
103 ##  Basic checks.  ### (we need some results later on (e.g. $GCC)
104 ######################
105
106 AC_PROG_MAKE_SET
107 missing_dir=`cd $ac_aux_dir && pwd`
108 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
109 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
110 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
111 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
112 # AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
113 AC_PROG_CC
114 AC_PROG_CPP
115 AM_PROG_AS
116 AC_ISC_POSIX
117 AC_PROG_INSTALL
118 AC_PROG_AWK
119
120 AC_LIBTOOL_WIN32_DLL
121 AC_LIBTOOL_RC
122 AM_PROG_LIBTOOL
123
124
125 ##########################
126 ## General definitions. ##
127 ##########################
128
129 # Used by libgcrypt-config
130 LIBGCRYPT_CONFIG_LIBS="-lgcrypt"
131 LIBGCRYPT_CONFIG_CFLAGS=""
132
133 # Definitions for symmetric ciphers.
134 available_ciphers="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed"
135 enabled_ciphers=""
136
137 # Definitions for public-key ciphers.
138 available_pubkey_ciphers="dsa elgamal rsa"
139 enabled_pubkey_ciphers=""
140
141 # Definitions for message digests.
142 available_digests="crc md4 md5 rmd160 sha1 sha256"
143 available_digests_64="sha512 tiger whirlpool"
144 enabled_digests=""
145
146 # Definitions for random modules.
147 available_random_modules="linux egd unix"
148 auto_random_modules="$available_random_modules"
149
150 # Supported thread backends.
151 LIBGCRYPT_THREAD_MODULES=""
152
153 # Other definitions.
154 print_egd_notice=no
155 have_w32_system=no
156
157 # Setup some stuff depending on host/target.
158 case "${target}" in
159     *-*-mingw32*)
160       available_random_modules="w32"
161       ac_cv_have_dev_random=no
162       have_w32_system=yes
163       AC_DEFINE(USE_ONLY_8DOT3,1,
164                 [set this to limit filenames to the 8.3 format])
165       AC_DEFINE(HAVE_DRIVE_LETTERS,1,
166                 [defined if we must run on a stupid file system])
167       AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
168                 [defined if we run on some of the PCDOS like systems 
169                  (DOS, Windoze. OS/2) with special properties like
170                   no file modes])
171       ;;
172
173     i?86-emx-os2 | i?86-*-os2*emx)
174         # OS/2 with the EMX environment
175         ac_cv_have_dev_random=no
176         AC_DEFINE(HAVE_DRIVE_LETTERS)
177         AC_DEFINE(HAVE_DOSISH_SYSTEM)
178         ;;
179
180     i?86-*-msdosdjgpp*)
181         # DOS with the DJGPP environment
182         ac_cv_have_dev_random=no
183         AC_DEFINE(HAVE_DRIVE_LETTERS)
184         AC_DEFINE(HAVE_DOSISH_SYSTEM)
185         ;;
186
187     *-*-freebsd*)
188        # FreeBSD
189        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
190        LDFLAGS="$LDFLAGS -L/usr/local/lib"
191        ;;
192
193     *-*-hpux*)
194         if test -z "$GCC" ; then
195             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
196         fi
197         ;;
198     *-dec-osf4*)
199         if test -z "$GCC" ; then
200             # Suppress all warnings
201             # to get rid of the unsigned/signed char mismatch warnings.
202             CFLAGS="$CFLAGS -w"
203         fi
204         ;;
205     m68k-atari-mint)
206         ;;
207     *)
208       ;;
209 esac
210
211 if test "$have_w32_system" = yes; then
212    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
213 fi
214 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
215
216
217
218 # A printable OS Name is sometime useful.
219 case "${target}" in
220     *-*-mingw32*)
221         PRINTABLE_OS_NAME="MingW32"
222         ;;
223
224     i?86-emx-os2 | i?86-*-os2*emx )
225         PRINTABLE_OS_NAME="OS/2"
226         ;;
227
228     i?86-*-msdosdjgpp*)
229         PRINTABLE_OS_NAME="MSDOS/DJGPP"
230         ;;
231
232     *-linux*)
233         PRINTABLE_OS_NAME="GNU/Linux"
234         ;;
235
236     *)
237         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
238         ;;
239 esac
240
241
242 case "${target}" in
243     *-openbsd*)
244         # FIXME: Are these the best flags for OpenBSD?
245         NAME_OF_DEV_RANDOM="/dev/srandom"
246         NAME_OF_DEV_URANDOM="/dev/urandom"
247 #       DYNLINK_MOD_CFLAGS="-shared -rdynamic $CFLAGS_PIC -Wl,-Bshareable -Wl,-x"
248         ;;
249
250     *-solaris* | *-irix* | *-dec-osf* | *-netbsd* )
251         NAME_OF_DEV_RANDOM="/dev/random"
252         NAME_OF_DEV_URANDOM="/dev/random"
253 #       DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
254         ;;
255
256     *)
257         NAME_OF_DEV_RANDOM="/dev/random"
258         NAME_OF_DEV_URANDOM="/dev/urandom"
259         # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
260 #        if test -n "$GCC" ; then
261 #           DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"                            
262 #        else
263 #           DYNLINK_MOD_CFLAGS="$CFLAGS_PIC"
264 #        fi
265         ;;
266 esac
267
268
269 AC_ARG_ENABLE(endian-check,
270               AC_HELP_STRING([--disable-endian-check],
271               [disable the endian check and trust the OS provided macros]),
272               endiancheck=$enableval,endiancheck=yes)
273 if test x"$endiancheck" = xyes ; then
274   AC_C_BIGENDIAN
275 else
276   AC_DEFINE(DISABLED_ENDIAN_CHECK,1,[configure did not test for endianess])
277 fi
278
279
280 AC_CHECK_SIZEOF(unsigned short, 2)
281 AC_CHECK_SIZEOF(unsigned int, 4)
282 AC_CHECK_SIZEOF(unsigned long, 4)
283 AC_CHECK_SIZEOF(unsigned long long, 0)
284
285 if test "$ac_cv_sizeof_unsigned_short" = "0" \
286    || test "$ac_cv_sizeof_unsigned_int" = "0" \
287    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
288     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
289 fi
290
291 # Do we have any 64-bit data types?
292 if test "$ac_cv_sizeof_unsigned_int" != "8" \
293    && test "$ac_cv_sizeof_unsigned_long" != "8" \
294    && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
295    && test "$ac_cv_sizeof_uint64_t" != "8"; then
296     AC_MSG_WARN([No 64-bit types.  Disabling TIGER/192, SHA-384, and SHA-512])
297 else
298   available_digests="$available_digests $available_digests_64"
299 fi
300
301 # If not specified otherwise, all available algorithms will be
302 # included.
303 default_ciphers="$available_ciphers"
304 default_pubkey_ciphers="$available_pubkey_ciphers"
305 default_digests="$available_digests"
306
307 ############################
308 ## Command line switches. ##
309 ############################
310
311 # Implementation of the --enable-ciphers switch.
312 AC_ARG_ENABLE(ciphers,
313               AC_HELP_STRING([--enable-ciphers=ciphers],
314                              [select the symmetric ciphers to include]),
315               [enabled_ciphers=`echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]'`],
316               [enabled_ciphers=""])
317 if test "x$enabled_ciphers" = "x" \
318    -o "$enabled_ciphers" = "yes"  \
319    -o "$enabled_ciphers" = "no"; then
320    enabled_ciphers=$default_ciphers
321 fi
322 AC_MSG_CHECKING([which symmetric ciphers to include])
323 for cipher in $enabled_ciphers; do
324     LIST_MEMBER($cipher, $available_ciphers)
325     if test "$found" = "0"; then
326        AC_MSG_ERROR([unsupported cipher specified])
327     fi
328 done
329 AC_MSG_RESULT([$enabled_ciphers])
330
331 # Implementation of the --enable-pubkey-ciphers switch.
332 AC_ARG_ENABLE(pubkey-ciphers,
333               AC_HELP_STRING([--enable-pubkey-ciphers=ciphers],
334                              [select the public-key ciphers to include]),
335               [enabled_pubkey_ciphers=`echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]'`],
336               [enabled_pubkey_ciphers=""])
337 if test "x$enabled_pubkey_ciphers" = "x" \
338    -o "$enabled_pubkey_ciphers" = "yes"  \
339    -o "$enabled_pubkey_ciphers" = "no"; then
340    enabled_pubkey_ciphers=$default_pubkey_ciphers
341 fi
342 AC_MSG_CHECKING([which public-key ciphers to include])
343 for cipher in $enabled_pubkey_ciphers; do
344     LIST_MEMBER($cipher, $available_pubkey_ciphers)
345     if test "$found" = "0"; then
346        AC_MSG_ERROR([unsupported public-key cipher specified])
347     fi
348 done
349 AC_MSG_RESULT([$enabled_pubkey_ciphers])
350
351 # Implementation of the --enable-digests switch.
352 AC_ARG_ENABLE(digests,
353               AC_HELP_STRING([--enable-digests=digests],
354                              [select the message digests to include]),
355               [enabled_digests=`echo $enableval | tr , ' ' | tr '[A-Z]' '[a-z]'`],
356               [enabled_digests=""])
357 if test "x$enabled_digests" = "x" \
358    -o "$enabled_digests" = "yes"  \
359    -o "$enabled_digests" = "no"; then
360    enabled_digests=$default_digests
361 fi
362 AC_MSG_CHECKING([which message digests to include])
363 for digest in $enabled_digests; do
364     LIST_MEMBER($digest, $available_digests)
365     if test "$found" = "0"; then
366        AC_MSG_ERROR([unsupported message digest specified])
367     fi
368 done
369 AC_MSG_RESULT([$enabled_digests])
370
371 # Implementation of the --enable-random switch.
372 AC_ARG_ENABLE(random,
373               AC_HELP_STRING([--enable-random=name],
374                              [select which random number generator to use]),
375               [random=`echo $enableval | tr '[A-Z]' '[a-z]'`],
376               [])
377 if test "x$random" = "x" -o "$random" = "yes" -o "$random" = "no"; then
378     random=default
379 fi
380 AC_MSG_CHECKING([which random module to use])
381 if test "$random" != "default" -a "$random" != "auto"; then
382     LIST_MEMBER($random, $available_random_modules)
383     if test "$found" = "0"; then
384        AC_MSG_ERROR([unsupported random module specified])
385     fi
386 fi
387 AC_MSG_RESULT($random)
388
389 # Implementation of the --disable-dev-random switch.
390 AC_MSG_CHECKING([whether use of /dev/random is requested])
391 AC_ARG_ENABLE(dev-random,
392 [  --disable-dev-random    disable the use of dev random],
393     try_dev_random=$enableval, try_dev_random=yes)
394 AC_MSG_RESULT($try_dev_random)
395
396 # Implementation of the --with-egd-socket switch.
397 AC_ARG_WITH(egd-socket,
398     [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
399             egd_socket_name="$withval", egd_socket_name="" )
400 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
401                    [Define if you don't want the default EGD socket name.
402                     For details see cipher/rndegd.c])
403
404 # Implementation of --disable-asm.
405 AC_MSG_CHECKING([whether assembler modules are requested])
406 AC_ARG_ENABLE([asm],
407               AC_HELP_STRING([--disable-asm],
408                              [Disable assembler modules]),
409               [try_asm_modules=$enableval],
410               [try_asm_modules=yes])
411 AC_MSG_RESULT($try_asm_modules)
412
413 # Implementation of the --enable-m-guard switch.
414 AC_MSG_CHECKING([whether memory guard is requested])
415 AC_ARG_ENABLE(m-guard,
416     [  --enable-m-guard        enable memory guard facility],
417     use_m_guard=$enableval, use_m_guard=no)
418     AC_MSG_RESULT($use_m_guard)
419 if test "$use_m_guard" = yes ; then
420     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
421 fi
422
423 # Implementation of the --with-capabilities switch.
424 # Check whether we want to use Linux capabilities
425 AC_MSG_CHECKING([whether use of capabilities is requested])
426 AC_ARG_WITH(capabilities,
427     [  --with-capabilities     use linux capabilities [default=no]],
428 [use_capabilities="$withval"],[use_capabilities=no])
429 AC_MSG_RESULT($use_capabilities)
430
431 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
432                    [A human readable text with the name of the OS])
433
434 # For some systems we know that we have ld_version scripts.  
435 # Use it then as default.
436 have_ld_version_script=no
437 case "${host}" in
438     *-*-linux*)
439         have_ld_version_script=yes
440         ;;
441     *-*-gnu*)
442         have_ld_version_script=yes
443         ;;
444 esac
445 AC_ARG_ENABLE([ld-version-script],
446               AC_HELP_STRING([--enable-ld-version-script],
447                              [enable/disable use of linker version script.
448                               (default is system dependent)]),
449               [have_ld_version_script=$enableval],
450               [ : ] )
451 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
452
453 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
454                    [defined to the name of the strong random device])
455 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
456                    [defined to the name of the weaker random device])
457
458 ###############################
459 #### Checks for libraries. ####
460 ###############################
461
462 #
463 # gpg-error is required.
464 #
465 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION")
466 if test "x$GPG_ERROR_LIBS" = "x"; then
467   AC_MSG_ERROR([libgpg-error is needed.
468                 See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ .])
469 fi
470
471 AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GCRYPT,
472           [The default error source for libgcrypt.])
473
474 #
475 # Check whether the GNU Pth library is available.  We require this 
476 # to build the optional gcryptrnd program.
477 #
478 AC_ARG_WITH(pth-prefix,
479             AC_HELP_STRING([--with-pth-prefix=PFX],
480                            [prefix where GNU Pth is installed (optional)]),
481      pth_config_prefix="$withval", pth_config_prefix="")
482 if test x$pth_config_prefix != x ; then
483    PTH_CONFIG="$pth_config_prefix/bin/pth-config"
484 fi
485 AC_PATH_PROG(PTH_CONFIG, pth-config, no)
486 if test "$PTH_CONFIG" = "no"; then
487     AC_MSG_WARN([[
488 ***
489 *** To build the Libgcrypt's random humber daemon
490 *** we need the support of the GNU Portable Threads Library.
491 *** Download it from ftp://ftp.gnu.org/gnu/pth/
492 *** On a Debian GNU/Linux system you might want to try 
493 ***   apt-get install libpth-dev
494 ***]])
495  else
496   GNUPG_PTH_VERSION_CHECK([1.3.7])
497   if test $have_pth = yes; then      
498      PTH_CFLAGS=`$PTH_CONFIG --cflags`
499      PTH_LIBS=`$PTH_CONFIG --ldflags`
500      PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
501      AC_DEFINE(USE_GNU_PTH, 1,
502               [Defined if the GNU Portable Thread Library should be used])
503      AC_DEFINE(HAVE_PTH, 1,
504               [Defined if the GNU Pth is available])
505   fi
506 fi
507 AC_SUBST(PTH_CFLAGS)
508 AC_SUBST(PTH_LIBS)
509
510
511 # Solaris needs -lsocket and -lnsl. Unisys system includes
512 # gethostbyname in libsocket but needs libnsl for socket.
513 AC_SEARCH_LIBS(setsockopt, [socket], ,
514         [AC_SEARCH_LIBS(setsockopt, [socket], , , [-lnsl])])
515 AC_SEARCH_LIBS(setsockopt, [nsl])
516
517 ##################################
518 #### Checks for header files. ####
519 ##################################
520
521 AC_HEADER_STDC
522 AC_CHECK_HEADERS(unistd.h sys/select.h)
523
524 ##########################################
525 #### Checks for typedefs, structures, ####
526 ####  and compiler characteristics.   ####
527 ##########################################
528
529 AC_C_CONST
530 AC_C_INLINE
531 AC_TYPE_SIZE_T
532 AC_TYPE_SIGNAL
533 AC_DECL_SYS_SIGLIST
534
535 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
536 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
537 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
538 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
539 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
540
541 gl_TYPE_SOCKLEN_T
542 case "${host}" in
543   *-*-mingw32*)
544     # socklen_t may or may not be defined depending on what headers
545     # are included.  To be safe we use int as this is the actual type.
546     FALLBACK_SOCKLEN_T="typedef int gcry_socklen_t;"
547     ;;
548   *)
549     if test ".$gl_cv_socklen_t_equiv" = "."; then
550       FALLBACK_SOCKLEN_T="typedef socklen_t gcry_socklen_t;"
551     else
552       FALLBACK_SOCKLEN_T="typedef ${gl_cv_socklen_t_equiv} gcry_socklen_t;"
553     fi
554 esac
555 AC_SUBST(FALLBACK_SOCKLEN_T)
556
557
558
559 #######################################
560 #### Checks for library functions. ####
561 #######################################
562
563 AC_FUNC_VPRINTF
564 # We have replacements for these in src/missing-string.c
565 AC_CHECK_FUNCS(stpcpy strcasecmp)
566 # We have replacements for these in src/g10lib.h
567 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
568 # Other checks
569 AC_CHECK_FUNCS(strerror rand mmap getpagesize waitpid wait4)
570 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime clock_gettime)
571 AC_CHECK_FUNCS(fcntl ftruncate)
572
573 GNUPG_CHECK_MLOCK
574
575 # Check whether we can use Linux capabilities as requested.
576 if test "$use_capabilities" = "yes" ; then
577 use_capabilities=no
578 AC_CHECK_HEADERS(sys/capability.h)
579 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
580   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
581   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
582      AC_DEFINE(USE_CAPABILITIES,1,
583                [define if capabilities should be used])
584      LIBS="$LIBS -lcap"
585      use_capabilities=yes
586   fi
587 fi
588 if test "$use_capabilities" = "no" ; then
589     AC_MSG_WARN([[
590 ***
591 *** The use of capabilities on this system is not possible.
592 *** You need a recent Linux kernel and some patches:
593 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
594 ***   fcap-module-990613.tar.gz     (kernel module)
595 ***   libcap-1.92.tar.gz            (user mode library and utilities)
596 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
597 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
598 ***]])
599 fi
600 fi
601
602 # Check whether a random device is available.
603 if test "$try_dev_random" = yes ; then
604     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
605     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
606       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
607     if test "$ac_cv_have_dev_random" = yes; then
608         AC_DEFINE(HAVE_DEV_RANDOM,1,
609                  [defined if the system supports a random device] )
610     fi
611 else
612     AC_MSG_CHECKING(for random device)
613     ac_cv_have_dev_random=no
614     AC_MSG_RESULT(has been disabled)
615 fi
616
617 # Figure out the random modules for this configuration.
618 if test "$random" = "default"; then
619
620     # Select default value.
621     if test "$ac_cv_have_dev_random" = yes; then
622         # Try Linuxish random device.
623         random_modules="linux"
624     else
625         case "${target}" in
626         *-*-mingw32*|*-*-cygwin*)
627           # Windows random device.
628           random_modules="w32"
629           ;;
630         *)
631           # Build everything, allow to select at runtime.
632           random_modules="$auto_random_modules"
633           ;;
634         esac    
635     fi
636 else
637     if test "$random" = "auto"; then
638         # Build everything, allow to select at runtime.
639         random_modules="$auto_random_modules"
640     else
641         random_modules="$random"
642     fi
643 fi
644
645
646 #
647 # Setup assembler stuff.
648 #
649 GNUPG_SYS_SYMBOL_UNDERSCORE()
650 AC_MSG_CHECKING(for mpi assembler functions)
651 if test -f $srcdir/mpi/config.links ; then
652     . $srcdir/mpi/config.links
653     AC_CONFIG_LINKS("$mpi_ln_list")
654     ac_cv_mpi_mod_list="$mpi_mod_list"
655     ac_cv_mpi_sflags="$mpi_sflags"
656     ac_cv_mpi_config_done="yes"
657     AC_MSG_RESULT(done)
658 else
659     AC_MSG_RESULT(failed)
660     AC_MSG_ERROR([mpi/config.links missing!])
661 fi
662 MPI_MOD_LIST_LO=""
663 MPI_MOD_LIST_O=""
664 if test "$ac_cv_mpi_mod_list" != ""; then
665   for i in $ac_cv_mpi_mod_list; do
666       MPI_MOD_LIST_LO="$MPI_MOD_LIST_LO $i.lo"
667       MPI_MOD_LIST_O="$MPI_MOD_LIST_O $i.o"
668   done
669 fi
670 AC_SUBST(MPI_MOD_LIST_LO)
671 AC_SUBST(MPI_MOD_LIST_O)
672 MPI_SFLAGS="$ac_cv_mpi_sflags"
673 AC_SUBST(MPI_SFLAGS)
674
675 # Allow users to append something to the version string without
676 # flagging it as development version.  The user version part is
677 # considered everything after a dash.
678 changequote(,)#
679 tmp_pat='[a-zA-Z]'
680 changequote([,])#
681 if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
682     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
683               [Defined if this is not a regular release])
684 fi
685
686 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
687
688
689 # This is handy for debugging so the compiler doesn't rearrange
690 # things and eliminate variables.
691 AC_ARG_ENABLE(optimization,
692        AC_HELP_STRING([--disable-optimization],
693                       [disable compiler optimization]),
694                       [if test $enableval = no ; then
695                          CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'`
696                        fi])
697
698 AC_ARG_ENABLE(gcc-warnings,
699               AC_HELP_STRING([--enable-gcc-warnings],
700                              [enable more verbose gcc warnings]),
701               [more_gcc_warnings="$enableval"],
702               [more_gcc_warnings="no"])
703
704 if test "$GCC" = yes; then
705     if test "$USE_MAINTAINER_MODE" = "yes" ||
706        test "$more_gcc_warnings" = "yes"; then
707         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
708         if test "$more_gcc_warnings" = "yes"; then
709             CFLAGS="$CFLAGS -W -Wextra -Wpointer-arith -Wbad-function-cast"
710             CFLAGS="$CFLAGS -Wwrite-strings"
711             CFLAGS="$CFLAGS -Wdeclaration-after-statement"
712             CFLAGS="$CFLAGS -Wno-missing-field-initializers"
713             CFLAGS="$CFLAGS -Wno-sign-compare"
714             # Note: We don't use -Wunreachable-code because this gives
715             # warnings for all asserts and many inline functions like
716             # gpg_error (gcc 4.1.2 20060928).
717         fi
718     else
719         CFLAGS="$CFLAGS -Wall"
720     fi
721 fi
722
723 # Check whether as(1) supports a noeexecstack feature.  This test
724 # includes an override option.
725 CL_AS_NOEXECSTACK
726
727
728 AC_SUBST(LIBGCRYPT_CONFIG_API_VERSION)
729 AC_SUBST(LIBGCRYPT_CONFIG_LIBS)
730 AC_SUBST(LIBGCRYPT_CONFIG_CFLAGS)
731 AC_SUBST(LIBGCRYPT_THREAD_MODULES)
732
733 AC_CONFIG_COMMANDS([gcrypt-conf],[[
734 chmod +x src/libgcrypt-config
735 ]],[[
736 prefix=$prefix
737 exec_prefix=$exec_prefix
738 libdir=$libdir
739 datadir=$datadir
740 DATADIRNAME=$DATADIRNAME
741 ]])
742
743 #####################
744 #### Conclusion. ####
745 #####################
746
747 # Define conditional sources and config.h symbols depending on the
748 # selected ciphers, pubkey-ciphers, digests and random modules.
749
750 LIST_MEMBER(arcfour, $enabled_ciphers)
751 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
752 AC_DEFINE_UNQUOTED(USE_ARCFOUR, $found,
753                                  [Defined if this module should be included])
754
755 LIST_MEMBER(blowfish, $enabled_ciphers)
756 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
757 AC_DEFINE_UNQUOTED(USE_BLOWFISH, $found,
758                                   [Defined if this module should be included])
759
760 LIST_MEMBER(cast5, $enabled_ciphers)
761 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
762 AC_DEFINE_UNQUOTED(USE_CAST5, $found,
763                                [Defined if this module should be included])
764
765 LIST_MEMBER(des, $enabled_ciphers)
766 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
767 AC_DEFINE_UNQUOTED(USE_DES, $found,
768                              [Defined if this module should be included])
769
770 LIST_MEMBER(aes, $enabled_ciphers)
771 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
772 AC_DEFINE_UNQUOTED(USE_AES, $found,
773                              [Defined if this module should be included])
774
775 LIST_MEMBER(twofish, $enabled_ciphers)
776 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
777 AC_DEFINE_UNQUOTED(USE_TWOFISH, $found,
778                                  [Defined if this module should be included])
779
780 LIST_MEMBER(serpent, $enabled_ciphers)
781 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
782 AC_DEFINE_UNQUOTED(USE_SERPENT, $found,
783                                  [Defined if this module should be included])
784
785 LIST_MEMBER(rfc2268, $enabled_ciphers)
786 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS rfc2268.lo"
787 AC_DEFINE_UNQUOTED(USE_RFC2268, $found,
788                                  [Defined if this module should be included])
789
790 LIST_MEMBER(seed, $enabled_ciphers)
791 test "$found" = "1" && GCRYPT_CIPHERS="$GCRYPT_CIPHERS seed.lo"
792 AC_DEFINE_UNQUOTED(USE_SEED, $found,
793                              [Defined if this module should be included])
794
795 LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
796 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
797 AC_DEFINE_UNQUOTED(USE_DSA, $found,
798                              [Defined if this module should be included])
799
800 LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
801 test "$found" = "1" && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
802 AC_DEFINE_UNQUOTED(USE_RSA, $found,
803                             [Defined if this module should be included])
804
805 LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
806 test "$found" = "1" \ 
807      && GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
808 AC_DEFINE_UNQUOTED(USE_ELGAMAL, $found,
809                                 [Defined if this module should be included])
810
811 LIST_MEMBER(crc, $enabled_digests)
812 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
813 AC_DEFINE_UNQUOTED(USE_CRC, $found,
814                             [Defined if this module should be included])
815
816 LIST_MEMBER(md4, $enabled_digests)
817 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
818 AC_DEFINE_UNQUOTED(USE_MD4, $found,
819                              [Defined if this module should be included])
820
821 LIST_MEMBER(md5, $enabled_digests)
822 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
823 AC_DEFINE_UNQUOTED(USE_MD5, $found,
824                              [Defined if this module should be included])
825
826 LIST_MEMBER(sha256, $enabled_digests)
827 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
828 AC_DEFINE_UNQUOTED(USE_SHA256, $found,
829                                 [Defined if this module should be included])
830
831 LIST_MEMBER(sha512, $enabled_digests)
832 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
833 AC_DEFINE_UNQUOTED(USE_SHA512, $found,
834                                 [Defined if this module should be included])
835
836 LIST_MEMBER(tiger, $enabled_digests)
837 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
838 AC_DEFINE_UNQUOTED(USE_TIGER, $found,
839                                [Defined if this module should be included])
840
841 LIST_MEMBER(whirlpool, $enabled_digests)
842 test "$found" = "1" && GCRYPT_DIGESTS="$GCRYPT_DIGESTS whirlpool.lo"
843 AC_DEFINE_UNQUOTED(USE_WHIRLPOOL, $found,
844                                [Defined if this module should be included])
845
846 # rmd160 and sha1 should be included always.
847 GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo sha1.lo"
848 AC_DEFINE_UNQUOTED(USE_RMD160, 1, [Defined if this module should be included])
849 AC_DEFINE_UNQUOTED(USE_SHA1, 1,   [Defined if this module should be included])
850
851 LIST_MEMBER(linux, $random_modules)
852 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndlinux.lo"
853 AC_DEFINE_UNQUOTED(USE_RNDLINUX, $found,
854                    [Defined if the /dev/random based RNG should be used.])
855
856
857 LIST_MEMBER(unix, $random_modules)
858 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
859 AC_DEFINE_UNQUOTED(USE_RNDUNIX, $found,
860                   [Defined if the default Unix RNG should be used.])
861 if test "$found" = "1"; then
862    print_egd_notice=yes
863 fi
864
865 LIST_MEMBER(egd, $random_modules)
866 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
867 AC_DEFINE_UNQUOTED(USE_RNDEGD, $found,
868                   [Defined if the EGD based RNG should be used.])
869
870 LIST_MEMBER(w32, $random_modules)
871 test "$found" = "1" && GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
872 AC_DEFINE_UNQUOTED(USE_RNDW32, $found,
873                   [Defined if the Windows specific RNG should be used.])
874
875 AC_SUBST([GCRYPT_CIPHERS])
876 AC_SUBST([GCRYPT_PUBKEY_CIPHERS])
877 AC_SUBST([GCRYPT_DIGESTS])
878 AC_SUBST([GCRYPT_RANDOM])
879
880 AC_SUBST(LIBGCRYPT_CIPHERS, $enabled_ciphers)
881 AC_SUBST(LIBGCRYPT_PUBKEY_CIPHERS, $enabled_pubkey_ciphers)
882 AC_SUBST(LIBGCRYPT_DIGESTS, $enabled_digests)
883
884
885 AC_CONFIG_FILES([
886 Makefile
887 m4/Makefile
888 mpi/Makefile
889 cipher/Makefile
890 doc/Makefile
891 src/Makefile
892 src/gcrypt.h
893 src/libgcrypt-config
894 tests/Makefile
895 w32-dll/Makefile
896 ])
897 AC_OUTPUT
898
899 # Give some feedback
900 echo
901
902 if test "$print_egd_notice" = "yes"; then
903 cat <<G10EOF
904   
905    The performance of the Unix random gatherer module (rndunix) is not
906    very good and it does not keep the entropy pool over multiple
907    invocations of GnuPG.  The suggested way to overcome this problem is
908    to use the
909   
910                  Entropy Gathering Daemon (EGD)
911   
912    which provides a entropy source for the whole system.  It is written
913    in Perl and available at the GnuPG FTP servers.  To enable EGD you
914    should rerun configure with the option "--enable-static-rnd=egd".
915    For more information consult the GnuPG webpages:
916   
917              http://www.gnupg.org/download.html#egd
918
919 G10EOF
920 fi
921
922 warn=""
923 for file in "random_modules"; do
924   case "$file" in rndunix | rndw32) warn="$warn $file";; esac
925 done
926 if test -n "$warn"; then
927   echo "Please note that you are building a version of Libgcrypt with"
928   echo "  $warn"
929   echo "included.  These parts are licensed under the GPL and thus the"
930   echo "use of this library has to comply with the conditions of the GPL."
931 fi
932
933 # Give some feedback
934 echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
935 echo