* configure.ac: Reordered the C_CHECK_FUNCS.
[libgcrypt.git] / configure.ac
1 # Configure.ac script for Libgcrypt
2 # Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
3 #
4 # This file is part of Libgcrypt.
5 #
6 # Libgcrypt is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU Lesser general Public License as
8 # published by the Free Software Foundation; either version 2.1 of
9 # the License, or (at your option) any later version.
10 #
11 # Libgcrypt is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU Lesser General Public License for more details.
15 #
16 # You should have received a copy of the GNU Lesser General Public
17 # License along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19 #
20 # (Process this file with autoconf to produce a configure script.)
21 AC_REVISION($Revision$)dnl
22
23 AC_PREREQ(2.53)
24 # Version numbers (Remember to change them just before a release)
25 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
26 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
27 #   (No interfaces changed:                   REVISION++)
28 AC_INIT(libgcrypt,1.1.7-cvs)
29 LIBGCRYPT_LT_CURRENT=3
30 LIBGCRYPT_LT_AGE=2
31 LIBGCRYPT_LT_REVISION=1
32 #-----------------------
33
34 PACKAGE=$PACKAGE_NAME
35 VERSION=$PACKAGE_VERSION
36
37 AC_CONFIG_SRCDIR([src/gcrypt.h])
38 AC_CONFIG_AUX_DIR(scripts)
39 AC_CANONICAL_TARGET()
40 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
41 AM_CONFIG_HEADER(config.h)
42
43 AH_TOP([
44 /* need this, because some autoconf tests rely on this (e.g. stpcpy)
45  * and it should be used for new programs  */
46 #define _GNU_SOURCE  1
47 ])
48
49
50 AH_BOTTOM([
51 #include "gcrypt-defs.h"
52 #define _GCRYPT_IN_LIBGCRYPT 1
53 ])
54
55 AH_VERBATIM([_REENTRANT],
56 [/* To allow the use of Libgcrypt in multithreaded programs we have to use
57     special features from the library. */
58 #ifndef _REENTRANT
59 # define _REENTRANT 1
60 #endif])
61
62
63
64 AC_SUBST(LIBGCRYPT_LT_CURRENT)
65 AC_SUBST(LIBGCRYPT_LT_AGE)
66 AC_SUBST(LIBGCRYPT_LT_REVISION)
67 AC_SUBST(PACKAGE)
68 AC_SUBST(VERSION)
69 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
70 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
71
72 static_modules="sha1 md5 rmd160"
73 static_random_module=""
74
75 AC_PROG_AWK
76
77 MODULES_IN_CIPHER=`$AWK '/^EXTRA_PROGRAMS/ { for(i=3;i<=NF;i++) print $i}' \
78                                               $srcdir/cipher/Makefile.am`
79
80 dnl
81 dnl  Check for random module options
82 dnl
83 dnl  Fixme: get the list of available modules from MODULES_IN_CIPHER
84 dnl         and check against this list
85
86 AC_MSG_CHECKING([which static random module to use])
87 AC_ARG_ENABLE(static-rnd,
88     [  --enable-static-rnd=[egd|unix|linux|none]  ],
89 [use_static_rnd=$enableval], [use_static_rnd=default] )
90
91 if test "$use_static_rnd" = no; then
92     use_static_rnd=default
93 fi
94
95 case "$use_static_rnd" in
96     egd | linux | unix | none | default )
97       AC_MSG_RESULT($use_static_rnd)
98       ;;
99     * )
100       AC_MSG_RESULT(invalid argument)
101       AC_MSG_ERROR(there is no random module rnd$use_static_rnd)
102       ;;
103 esac
104
105 AC_ARG_WITH(egd-socket,
106     [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
107             egd_socket_name="$withval", egd_socket_name="" )
108 AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
109                    [Define if you don't want the default EGD socket name.
110                     For details see cipher/rndegd.c])
111
112
113
114 dnl
115 dnl See whether the user wants to disable checking for /dev/random
116
117 AC_MSG_CHECKING([whether use of /dev/random is requested])
118 AC_ARG_ENABLE(dev-random,
119 [  --disable-dev-random    disable the use of dev random],
120     try_dev_random=$enableval, try_dev_random=yes)
121 AC_MSG_RESULT($try_dev_random)
122
123
124 dnl
125 dnl  Check other options
126 dnl
127
128 AC_MSG_CHECKING([whether use of extensions is requested])
129 AC_ARG_ENABLE(dynload,
130 [  --disable-dynload       disable use of extensions],
131     try_dynload=$enableval, try_dynload=yes)
132 AC_MSG_RESULT($try_dynload)
133
134 AC_MSG_CHECKING([whether assembler modules are requested])
135 AC_ARG_ENABLE(asm,
136 [  --disable-asm           do not use assembler modules],
137      try_asm_modules=$enableval, try_asm_modules=yes)
138 AC_MSG_RESULT($try_asm_modules)
139
140 AC_MSG_CHECKING([whether memory guard is requested])
141 AC_ARG_ENABLE(m-guard,
142     [  --enable-m-guard        enable memory guard facility],
143     use_m_guard=$enableval, use_m_guard=no)
144     AC_MSG_RESULT($use_m_guard)
145 if test "$use_m_guard" = yes ; then
146     AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
147 fi
148
149 dnl
150 dnl Check whether we want to use Linux capabilities
151 dnl
152 AC_MSG_CHECKING([whether use of capabilities is requested])
153 AC_ARG_WITH(capabilities,
154     [  --with-capabilities     use linux capabilities [default=no]],
155 [use_capabilities="$withval"],[use_capabilities=no])
156 AC_MSG_RESULT($use_capabilities)
157
158
159 AM_MAINTAINER_MODE
160
161 dnl Checks for programs.
162
163 dnl
164 dnl Setup some stuff depending on host/target.
165 dnl
166 case "${target}" in
167     *-*-mingw32*)
168         # special stuff for Windoze NT
169         disallowed_modules="rndunix rndlinux rndegd"
170         ;;
171     *)
172         disallowed_modules="rndw32"
173        ;;
174 esac
175
176 AC_PROG_MAKE_SET
177 AM_SANITY_CHECK
178 missing_dir=`cd $ac_aux_dir && pwd`
179 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
180 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
181 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
182 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
183 dnl AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
184 AC_PROG_CC
185 AC_PROG_CPP
186 AM_PROG_AS
187 AC_ISC_POSIX
188 AC_PROG_INSTALL
189 AC_PROG_AWK
190 GPH_PROG_DB2ANY
191
192 AM_PROG_LIBTOOL
193
194
195 MPI_OPT_FLAGS=""
196
197
198 try_gettext=no
199 case "${target}" in
200     *-*-mingw32*)
201         # special stuff for Windoze NT
202         ac_cv_have_dev_random=no
203         AC_DEFINE(USE_ONLY_8DOT3,1,
204                   [set this to limit filenames to the 8.3 format])
205         AC_DEFINE(HAVE_DRIVE_LETTERS,1,
206                   [defined if we must run on a stupid file system])
207         AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
208                   [defined if we run on some of the PCDOS like systems 
209                    (DOS, Windoze. OS/2) with special properties like
210                     no file modes])
211         try_gettext="no"
212         ;;
213     i?86-emx-os2 | i?86-*-os2*emx )
214         # OS/2 with the EMX environment
215         ac_cv_have_dev_random=no
216         AC_DEFINE(HAVE_DRIVE_LETTERS)
217         AC_DEFINE(HAVE_DOSISH_SYSTEM)
218         try_gettext="no"
219         ;;
220
221     i?86-*-msdosdjgpp*)
222         # DOS with the DJGPP environment
223         ac_cv_have_dev_random=no
224         AC_DEFINE(HAVE_DRIVE_LETTERS)
225         AC_DEFINE(HAVE_DOSISH_SYSTEM)
226         try_gettext="no"
227         ;;
228
229     *-*-freebsd*)
230        # FreeBSD
231        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
232        LDFLAGS="$LDFLAGS -L/usr/local/lib"
233        ;;
234
235     *-*-hpux*)
236         if test -z "$GCC" ; then
237             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
238         fi
239         ;;
240     *-dec-osf4*)
241         if test -z "$GCC" ; then
242             # Suppress all warnings
243             # to get rid of the unsigned/signed char mismatch warnings.
244             CFLAGS="$CFLAGS -w"
245         fi
246         ;;
247     m68k-atari-mint)
248         ;;
249     *)
250        ;;
251 esac
252
253 AC_SUBST(MPI_OPT_FLAGS)
254 GNUPG_SYS_SYMBOL_UNDERSCORE
255 GNUPG_CHECK_PIC
256 GNUPG_CHECK_EXPORTDYNAMIC
257 if test "$NO_PIC" = yes; then
258     try_dynload=no
259 fi
260
261
262 case "${target}" in
263     *-*-mingw32*)
264         PRINTABLE_OS_NAME="MingW32"
265         ;;
266     i?86-emx-os2 | i?86-*-os2*emx )
267         PRINTABLE_OS_NAME="OS/2"
268         ;;
269     i?86-*-msdosdjgpp*)
270         PRINTABLE_OS_NAME="MSDOS/DJGPP"
271         try_dynload=no
272         ;;
273     *-linux*)
274         PRINTABLE_OS_NAME="GNU/Linux"
275         ;;
276 dnl let that after linux to avoid gnu-linux problems
277     *-gnu*)
278         PRINTABLE_OS_NAME="GNU/Hurd"
279         ;;
280     *)
281         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
282         ;;
283 esac
284 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
285                    [A human readable text with the name of the OS])
286
287 dnl  Fixme: Are these the best flags for OpenBSD????
288 case "${target}" in
289     *-openbsd* | *-netbsd*)
290         NAME_OF_DEV_RANDOM="/dev/srandom"
291         NAME_OF_DEV_URANDOM="/dev/urandom"
292         DYNLINK_MOD_CFLAGS="-shared -rdynamic $CFLAGS_PIC -Wl,-Bshareable -Wl,-x"
293         ;;
294
295     *-solaris* | *-irix* | *-dec-osf* )
296         NAME_OF_DEV_RANDOM="/dev/random"
297         NAME_OF_DEV_URANDOM="/dev/random"
298         DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
299         ;;
300
301     *)
302         NAME_OF_DEV_RANDOM="/dev/random"
303         NAME_OF_DEV_URANDOM="/dev/urandom"
304         # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
305         if test -n "$GCC" ; then
306            DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"                            
307         else
308            DYNLINK_MOD_CFLAGS="$CFLAGS_PIC"
309         fi
310         ;;
311 esac
312 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
313                    [defined to the name of the strong random device])
314 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
315                    [defined to the name of the weaker random device])
316 AC_SUBST(MPI_OPT_FLAGS)
317
318
319 dnl Checks for libraries.
320
321 USE_NLS=no
322 USE_INCLUDED_LIBINTL=no
323 AC_SUBST(USE_NLS)
324 AC_SUBST(USE_INCLUDED_LIBINTL)
325
326
327 dnl Solaris needs -lsocket and -lnsl. Unisys system includes
328 dnl gethostbyname in libsocket but needs libnsl for socket.
329 AC_CHECK_LIB(nsl, gethostbyname)
330 AC_CHECK_LIB(socket, socket, ac_need_libsocket=1, ac_try_nsl=1)
331 if test x$ac_need_libsocket = x1; then
332     LIBS="$LIBS -lsocket"
333 fi
334 if test x$ac_try_nsl = x1; then
335     AC_CHECK_LIB(nsl, gethostbyname, ac_need_libnsl=1)
336     if test x$ac_need_libnsl = x1
337     then
338         LIBS="$LIBS -lnsl"
339     fi
340 fi
341
342
343 if test "$try_dynload" = yes ; then
344   AC_CHECK_LIB(dl,dlopen)
345   if test "$ac_cv_lib_dl_dlopen" = "yes"; then
346     AC_DEFINE(USE_DYNAMIC_LINKING,1,
347               [define to enable the use of extensions])
348     AC_DEFINE(HAVE_DL_DLOPEN,1,
349               [Defined when the dlopen function family is available])
350     DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
351     use_gnupg_extensions=yes
352   else
353     AC_CHECK_FUNCS(dlopen)
354     if test "$ac_cv_func_dlopen" = "yes"; then
355       AC_DEFINE(USE_DYNAMIC_LINKING)
356       AC_DEFINE(HAVE_DL_DLOPEN)
357       DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
358       use_gnupg_extensions=yes
359     else
360       AC_CHECK_LIB(dld,shl_load)
361       if test "$ac_cv_lib_dld_shl_load" = "yes"; then
362         AC_DEFINE(USE_DYNAMIC_LINKING)
363         AC_DEFINE(HAVE_DL_SHL_LOAD,1,
364                   [Defined if the shl_load function family is available])
365         DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
366         use_gnupg_extensions=yes
367 dnl -----------------
368 dnl  DLD is not ready for use. So I better disable this test
369 dnl
370 dnl    AC_CHECK_LIB(dld,dld_link)
371 dnl    if test "$ac_cv_lib_dld_dld_link" = "yes"; then
372 dnl      AC_DEFINE(USE_DYNAMIC_LINKING)
373 dnl      AC_DEFINE(HAVE_DLD_DLD_LINK)
374 dnl      DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
375 dnl      use_gnupg_extensions=yes
376 dnl ---------------
377       fi
378     fi
379   fi
380 else
381   AC_MSG_CHECKING(for dynamic loading)
382   DYNLINK_LDFLAGS=
383   DYNLINK_MOD_CFLAGS=
384   use_gnupg_extensions=no
385   AC_MSG_RESULT(has been disabled)
386 fi
387
388 AM_CONDITIONAL(ENABLE_GNUPG_EXTENSIONS, test "$use_gnupg_extensions" = yes )
389 AC_SUBST(DYNLINK_LDFLAGS)
390 AC_SUBST(DYNLINK_MOD_CFLAGS)
391
392
393 dnl Checks for header files.
394 AC_HEADER_STDC
395 AC_CHECK_HEADERS(unistd.h langinfo.h termio.h)
396
397
398 dnl Checks for typedefs, structures, and compiler characteristics.
399 AC_C_CONST
400 AC_C_INLINE
401 AC_TYPE_SIZE_T
402 AC_TYPE_SIGNAL
403 AC_DECL_SYS_SIGLIST
404
405 GNUPG_CHECK_ENDIAN
406
407
408 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
409 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
410 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
411 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
412 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
413
414 AC_CHECK_SIZEOF(unsigned short, 2)
415 AC_CHECK_SIZEOF(unsigned int, 4)
416 AC_CHECK_SIZEOF(unsigned long, 4)
417 AC_CHECK_SIZEOF(unsigned long long, 0)
418
419 if test "$ac_cv_sizeof_unsigned_short" = "0" \
420    || test "$ac_cv_sizeof_unsigned_int" = "0" \
421    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
422     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
423 fi
424
425
426 #
427 # Checks for library functions.
428 #
429 AC_FUNC_VPRINTF
430 dnl We have replacements for these in src/missing-string.c
431 AC_CHECK_FUNCS(stpcpy strsep strlwr strcasecmp)
432 dnl We have replacements for these in src/g10lib.h
433 AC_CHECK_FUNCS(strtoul memmove stricmp atexit raise)
434 dnl Other checks
435 AC_CHECK_FUNCS(strerror tcgetattr rand mmap)
436 AC_CHECK_FUNCS(gettimeofday getrusage gethrtime setrlimit clock_gettime)
437 AC_CHECK_FUNCS(getpagesize strftime nl_langinfo)
438 AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask fopen64 fstat64)
439
440 GNUPG_CHECK_MLOCK
441 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
442
443 dnl
444 dnl Check whether we can use Linux capabilities as requested
445 dnl
446 if test "$use_capabilities" = "yes" ; then
447 use_capabilities=no
448 AC_CHECK_HEADERS(sys/capability.h)
449 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
450   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
451   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
452      AC_DEFINE(USE_CAPABILITIES,1,
453                [define if capabilities should be used])
454      LIBS="$LIBS -lcap"
455      use_capabilities=yes
456   fi
457 fi
458 if test "$use_capabilities" = "no" ; then
459     AC_MSG_WARN([[
460 ***
461 *** The use of capabilities on this system is not possible.
462 *** You need a recent Linux kernel and some patches:
463 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
464 ***   fcap-module-990613.tar.gz     (kernel module)
465 ***   libcap-1.92.tar.gz            (user mode library and utilities)
466 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
467 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
468 ***]])
469 fi
470 fi
471
472
473 GNUPG_CHECK_IPC
474 if test "$ac_cv_header_sys_shm_h" = "yes"; then
475   AC_DEFINE(USE_SHM_COPROCESSING,1,
476             [define if the shared memory interface should be made available])
477 fi
478
479 dnl
480 dnl check whether we have a random device
481 dnl
482 if test "$try_dev_random" = yes ; then
483     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
484     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
485       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
486     if test "$ac_cv_have_dev_random" = yes; then
487         AC_DEFINE(HAVE_DEV_RANDOM,1,
488                  [defined if the system supports a random device] )
489     fi
490 else
491     AC_MSG_CHECKING(for random device)
492     ac_cv_have_dev_random=no
493     AC_MSG_RESULT(has been disabled)
494 fi
495
496 dnl
497 dnl and whether this device supports ioctl
498 dnl (Note, that we should do a real test here)
499 dnl
500 if test "$ac_cv_have_dev_random" = yes ; then
501     AC_CHECK_HEADERS(linux/random.h)
502     AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl,
503       [ if test "$ac_cv_header_linux_random_h" = yes ; then
504           ac_cv_have_dev_random_ioctl=yes;
505         else
506           ac_cv_have_dev_random_ioctl=no;
507         fi
508       ])
509     if test "$ac_cv_have_dev_random_ioctl" = yes; then
510         AC_DEFINE(HAVE_DEV_RANDOM_IOCTL,1,
511                   [defined if the random device supports some IOCTLs])
512     fi
513 fi
514
515
516 dnl
517 dnl Figure out the default linkage mode for cipher modules
518 dnl
519 print_egd_notice=no
520 if test "$use_static_rnd" = default; then
521   if test "$ac_cv_have_dev_random" = yes; then
522       static_random_module="rndlinux"
523   else
524       case "${target}" in
525           *-*-mingw32*)
526               static_random_module="rndw32"
527               AC_DEFINE(USE_STATIC_RNDW32,1,
528                        [At a certain point in the code we need to know that
529                         we use the Windows random module.])
530               ;;
531           i?86-emx-os2|i?86-*-os2*emx)
532               static_random_module="rndos2"
533               ;;
534           m68k-atari-mint)
535               static_random_module="rndatari"
536               ;;
537           i?86-*-msdosdjgpp*)
538               :
539               ;;
540           *)
541               static_random_module="rndunix"
542               print_egd_notice=yes
543              ;;
544       esac
545   fi
546 else
547   if test "$use_static_rnd" = none; then
548     :
549   else
550     static_random_module="rnd$use_static_rnd"
551     if test "$use_static_rnd" = "unix"; then
552         print_egd_notice=yes
553     fi
554   fi
555 fi
556
557
558 if test "$print_egd_notice" = "yes"; then
559     AC_MSG_WARN([[
560 ***
561 *** The performance of the UNIX random gatherer module is not very good
562 *** and it does not keep the entropy pool over multiple invocations of
563 *** GnuPG.  The suggested way to overcome this problem is to use the
564 ***
565 ***               Entropy Gathering Daemon (EGD)
566 ***
567 *** which provides a entropy source for the whole system.  It is written
568 *** in Perl and available at the GnuPG FTP servers.  For more information
569 *** consult the GnuPG webpages:
570 ***
571 ***           http://www.gnupg.org/download.html#egd
572 ***
573 *** You may want to run ./configure with --enable-static-rnd=none to be
574 *** able to load the EGD client code dynamically; this way you can choose
575 *** between RNDUNIX and RNDEGD without recompilation.
576 ***]])
577 fi
578
579 dnl
580 dnl Parse the modules list and build the list
581 dnl of static and dymically linked modules
582 dnl
583 dnl (We always need a static rmd160)
584 static_modules="$static_modules rmd160 $static_random_module"
585 STATIC_CIPHER_NAMES=""
586 STATIC_CIPHER_OBJS=""
587 DYNAMIC_CIPHER_MODS=""
588 GNUPG_MSG_PRINT([dynamically linked cipher modules:])
589 for name in $MODULES_IN_CIPHER; do
590     x="yes"
591     for i in $disallowed_modules; do
592         if test "$name" = "$i" ; then x="no" ; fi
593     done;
594     if test $x = yes; then
595         x="no"
596         for i in $static_modules; do
597             if test "$name" = "$i" ; then
598                 x="yes"
599             fi
600         done;
601         if test $x = yes; then
602             STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
603             STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.lo"
604         else
605             DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
606             GNUPG_MSG_PRINT([$name])
607         fi
608
609 dnl        dnl Very ugly way to do this, but I don't knwo how to
610 dnl        dnl cope with AC_SUBST otherwise
611 dnl        case "$name" in
612 dnl          tiger)
613 dnl            AM_CONDITIONAL(BUILD_MODULE_TIGER,   [test $x = no])
614 dnl            ;;                                   
615 dnl          twofish)                               
616 dnl            AM_CONDITIONAL(BUILD_MODULE_TWOFISH, [test $x = no])
617 dnl            ;;                                   
618 dnl          rndunix)                               
619 dnl            AM_CONDITIONAL(BUILD_MODULE_RNDUNIX, [test $x = no])
620 dnl            ;;                                   
621 dnl          rndlinux)                              
622 dnl            AM_CONDITIONAL(BUILD_MODULE_RNDLINUX,[test $x = no])
623 dnl            ;;                                   
624 dnl          rndegd)                                
625 dnl            AM_CONDITIONAL(BUILD_MODULE_RNDEGD,  [test $x = no])
626 dnl            ;;
627 dnl          *)
628 dnl            ;;
629 dnl        esac
630     fi
631 done
632 AC_MSG_RESULT()
633 AC_SUBST(STATIC_CIPHER_OBJS)
634 AC_SUBST(STATIC_CIPHER_NAMES)
635 AC_SUBST(DYNAMIC_CIPHER_MODS)
636
637
638 dnl
639 dnl And build the constructor file
640 dnl
641
642 test -d cipher || mkdir cipher
643 cat <<G10EOF >cipher/construct.c
644 /* automatically generated by configure - do not edit */
645
646 G10EOF
647 GNUPG_MSG_PRINT([statically linked cipher modules:])
648 for name in $STATIC_CIPHER_NAMES; do
649     echo "void _gcry_${name}_constructor(void);" >>cipher/construct.c
650     GNUPG_MSG_PRINT([$name])
651 done
652 AC_MSG_RESULT()
653 cat <<G10EOF >>cipher/construct.c
654
655 void
656 _gcry_cipher_modules_constructor(void)
657 {
658     static int done = 0;
659     if( done )
660         return;
661     done = 1;
662
663 G10EOF
664 for name in $STATIC_CIPHER_NAMES; do
665     echo "   _gcry_${name}_constructor();" >>cipher/construct.c
666 done
667 echo '}' >>cipher/construct.c
668
669
670
671
672 dnl
673 dnl Figure how to link the cipher modules
674 dnl
675 AC_SUBST(STATIC_CIPHER_OBJS)
676 AC_SUBST(DYNAMIC_CIPHER_MODS)
677
678 #
679 # setup assembler stuff
680 #
681 AC_MSG_CHECKING(for mpi assembler functions)
682 if test -f $srcdir/mpi/config.links ; then
683     . $srcdir/mpi/config.links
684     AC_CONFIG_LINKS("$mpi_ln_list")
685     ac_cv_mpi_mod_list="$mpi_mod_list"
686     ac_cv_mpi_sflags="$mpi_sflags"
687     ac_cv_mpi_config_done="yes"
688     AC_MSG_RESULT(done)
689 else
690     AC_MSG_RESULT(failed)
691     AC_MSG_ERROR([mpi/config.links missing!])
692 fi
693 MPI_MOD_LIST_LO=""
694 MPI_MOD_LIST_O=""
695 if test "$ac_cv_mpi_mod_list" != ""; then
696   for i in $ac_cv_mpi_mod_list; do
697       MPI_MOD_LIST_LO="$MPI_MOD_LIST_LO $i.lo"
698       MPI_MOD_LIST_O="$MPI_MOD_LIST_O $i.o"
699   done
700 fi
701 AC_SUBST(MPI_MOD_LIST_LO)
702 AC_SUBST(MPI_MOD_LIST_O)
703 MPI_SFLAGS="$ac_cv_mpi_sflags"
704 AC_SUBST(MPI_SFLAGS)
705
706 # [not used anymore]
707 ## Set the condtionals for the assembler modules
708 ## Fixme: We should put this into acinclude and write a script
709 ##        which can be run to update this list and the mpi/Makefile
710 #AM_CONDITIONAL(MPI_MOD_ASM_MPIH_ADD1, test "$mpi_mod_asm_mpih_add1" = yes )
711 #AM_CONDITIONAL(MPI_MOD_ASM_MPIH_SUB1, test "$mpi_mod_asm_mpih_sub1" = yes )
712 #AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL1, test "$mpi_mod_asm_mpih_mul1" = yes )
713 #AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL2, test "$mpi_mod_asm_mpih_mul2" = yes )
714 #AM_CONDITIONAL(MPI_MOD_ASM_MPIH_MUL3, test "$mpi_mod_asm_mpih_mul3" = yes )
715 #AM_CONDITIONAL(MPI_MOD_ASM_MPIH_LSHIFT, test "$mpi_mod_asm_mpih_lshift" = yes )
716 #AM_CONDITIONAL(MPI_MOD_ASM_MPIH_RSHIFT, test "$mpi_mod_asm_mpih_rshift" = yes )
717 #AM_CONDITIONAL(MPI_MOD_ASM_UDIV, test "$mpi_mod_asm_udiv" = yes )
718 #AM_CONDITIONAL(MPI_MOD_ASM_UDIV_QRNND, test "$mpi_mod_asm_udiv_qrnnd" = yes )
719 ## And the corresponding conditionals for C
720 #AM_CONDITIONAL(MPI_MOD_C_MPIH_ADD1, test "$mpi_mod_c_mpih_add1" = yes )
721 #AM_CONDITIONAL(MPI_MOD_C_MPIH_SUB1, test "$mpi_mod_c_mpih_sub1" = yes )
722 #AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL1, test "$mpi_mod_c_mpih_mul1" = yes )
723 #AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL2, test "$mpi_mod_c_mpih_mul2" = yes )
724 #AM_CONDITIONAL(MPI_MOD_C_MPIH_MUL3, test "$mpi_mod_c_mpih_mul3" = yes )
725 #AM_CONDITIONAL(MPI_MOD_C_MPIH_LSHIFT, test "$mpi_mod_c_mpih_lshift" = yes )
726 #AM_CONDITIONAL(MPI_MOD_C_MPIH_RSHIFT, test "$mpi_mod_c_mpih_rshift" = yes )
727 #AM_CONDITIONAL(MPI_MOD_C_UDIV, test "$mpi_mod_c_udiv" = yes )
728 #AM_CONDITIONAL(MPI_MOD_C_UDIV_QRNND, test "$mpi_mod_c_udiv_qrnnd" = yes )
729 #
730
731
732 # Allow users to append something to the version string without
733 # flagging it as development version.  The user version part is
734 # considered everything after a dash.
735 changequote(,)dnl
736 tmp_pat='[a-zA-Z]'
737 changequote([,])dnl
738 if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
739     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
740               [Defined if this is not a regular release])
741 fi
742
743 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
744
745 GNUPG_CHECK_GNUMAKE
746
747 if test "$GCC" = yes; then
748     if test "$MAINTAINER_MODE" = "yes"; then
749         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
750     else
751         CFLAGS="$CFLAGS -Wall"
752     fi
753 fi
754
755 dnl
756 dnl Make the version number in src/gcrypt.h the same as the one here.
757 dnl (this is easier than to have a *.in file just for one substitution)
758 dnl
759 GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
760
761 LIBGCRYPT_LIBS="-L${libdir} -lgcrypt"
762 LIBGCRYPT_CFLAGS=""
763 AC_SUBST(LIBGCRYPT_LIBS)
764 AC_SUBST(LIBGCRYPT_CFLAGS)
765
766 AC_CONFIG_COMMANDS([gcrypt-defs],[[
767 chmod +x src/libgcrypt-config
768 cat >gcrypt-defs.tmp <<G10EOF
769 /* Generated automatically by configure */
770 #ifdef HAVE_DRIVE_LETTERS
771   #define GNUPG_LOCALEDIR "c:/lib/gnupg/locale"
772   #define GNUPG_LIBDIR  "c:/lib/gnupg"
773   #define GNUPG_DATADIR "c:/lib/gnupg"
774   #define GNUPG_HOMEDIR "c:/gnupg-test"
775 #else
776   #define GNUPG_LOCALEDIR "${prefix}/${DATADIRNAME}/locale"
777   #define GNUPG_LIBDIR  "${libdir}/gnupg"
778   #define GNUPG_DATADIR "${datadir}/gnupg"
779   #ifdef __VMS
780     #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
781   #else
782     #define GNUPG_HOMEDIR "~/.gnupg-test" 
783   #endif
784 #endif
785 G10EOF
786 if cmp -s gcrypt-defs.h gcrypt-defs.tmp 2>/dev/null; then
787     echo "gcrypt-defs.h is unchanged"
788     rm -f gcrypt-defs.tmp
789 else
790     rm -f gcrypt-defs.h
791     mv gcrypt-defs.tmp gcrypt-defs.h
792     echo "gcrypt-defs.h created"
793 fi
794 ]],[[
795 prefix=$prefix
796 exec_prefix=$exec_prefix
797 libdir=$libdir
798 datadir=$datadir
799 DATADIRNAME=$DATADIRNAME
800 ]])
801
802
803 AC_CONFIG_FILES([
804 Makefile
805 mpi/Makefile
806 cipher/Makefile
807 doc/Makefile
808 doc/version.sgml
809 src/Makefile
810 src/libgcrypt-config
811 tests/Makefile
812 ])
813 AC_OUTPUT
814
815 # Give some feedback
816 echo
817 warn=""
818 for file in "$static_random_module"; do
819   case "$file" in rndunix | rndw32) warn="$warn $file";; esac
820 done
821 if test -n "$warn"; then
822   echo "Please note that you are building a version of Libgcrypt with"
823   echo "  $warn"
824   echo "included.  These parts are licensed under the GPL and thus the"
825   echo "use of this library has to comply with the conditions of the GPL"
826 fi