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