108cf657b60eb9301ab036331d78d7d2a69741db
[libgcrypt.git] / configure.ac
1 dnl Configure.ac script for Libgcrypt
2 dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
3 dnl
4 dnl This file is part of Libgcrypt.
5 dnl
6 dnl Libgcrypt is free software; you can redistribute it and/or modify
7 dnl it under the terms of the GNU Lesser general Public License as
8 dnl published by the Free Software Foundation; either version 2.1 of
9 dnl the License, or (at your option) any later version.
10 dnl
11 dnl Libgcrypt is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 dnl GNU Lesser General Public License for more details.
15 dnl
16 dnl You should have received a copy of the GNU Lesser General Public
17 dnl License along with this program; if not, write to the Free Software
18 dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19 dnl
20 dnl (Process this file with autoconf to produce a configure script.)
21 AC_REVISION($Revision$)dnl
22
23 AC_PREREQ(2.52)
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 dnl Checks for library functions.
428 AC_FUNC_VPRINTF
429 AC_CHECK_FUNCS(strerror stpcpy strlwr stricmp tcgetattr rand strtoul mmap)
430 AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit clock_gettime)
431 AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime nl_langinfo)
432 AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask fopen64 fstat64)
433
434 GNUPG_CHECK_MLOCK
435 GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
436
437 dnl
438 dnl Check whether we can use Linux capabilities as requested
439 dnl
440 if test "$use_capabilities" = "yes" ; then
441 use_capabilities=no
442 AC_CHECK_HEADERS(sys/capability.h)
443 if test "$ac_cv_header_sys_capability_h" = "yes" ; then
444   AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
445   if test "$ac_cv_lib_cap_cap_init" = "yes"; then
446      AC_DEFINE(USE_CAPABILITIES,1,
447                [define if capabilities should be used])
448      LIBS="$LIBS -lcap"
449      use_capabilities=yes
450   fi
451 fi
452 if test "$use_capabilities" = "no" ; then
453     AC_MSG_WARN([[
454 ***
455 *** The use of capabilities on this system is not possible.
456 *** You need a recent Linux kernel and some patches:
457 ***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
458 ***   fcap-module-990613.tar.gz     (kernel module)
459 ***   libcap-1.92.tar.gz            (user mode library and utilities)
460 *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
461 *** set (filesystems menu). Be warned: This code is *really* ALPHA.
462 ***]])
463 fi
464 fi
465
466
467 GNUPG_CHECK_IPC
468 if test "$ac_cv_header_sys_shm_h" = "yes"; then
469   AC_DEFINE(USE_SHM_COPROCESSING,1,
470             [define if the shared memory interface should be made available])
471 fi
472
473 dnl
474 dnl check whether we have a random device
475 dnl
476 if test "$try_dev_random" = yes ; then
477     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
478     [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
479       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
480     if test "$ac_cv_have_dev_random" = yes; then
481         AC_DEFINE(HAVE_DEV_RANDOM,1,
482                  [defined if the system supports a random device] )
483     fi
484 else
485     AC_MSG_CHECKING(for random device)
486     ac_cv_have_dev_random=no
487     AC_MSG_RESULT(has been disabled)
488 fi
489
490 dnl
491 dnl and whether this device supports ioctl
492 dnl (Note, that we should do a real test here)
493 dnl
494 if test "$ac_cv_have_dev_random" = yes ; then
495     AC_CHECK_HEADERS(linux/random.h)
496     AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl,
497       [ if test "$ac_cv_header_linux_random_h" = yes ; then
498           ac_cv_have_dev_random_ioctl=yes;
499         else
500           ac_cv_have_dev_random_ioctl=no;
501         fi
502       ])
503     if test "$ac_cv_have_dev_random_ioctl" = yes; then
504         AC_DEFINE(HAVE_DEV_RANDOM_IOCTL,1,
505                   [defined if the random device supports some IOCTLs])
506     fi
507 fi
508
509
510 dnl
511 dnl Figure out the default linkage mode for cipher modules
512 dnl
513 print_egd_notice=no
514 if test "$use_static_rnd" = default; then
515   if test "$ac_cv_have_dev_random" = yes; then
516       static_random_module="rndlinux"
517   else
518       case "${target}" in
519           *-*-mingw32*)
520               static_random_module="rndw32"
521               AC_DEFINE(USE_STATIC_RNDW32,1,
522                        [At a certain point in the code we need to know that
523                         we use the Windows random module.])
524               ;;
525           i?86-emx-os2|i?86-*-os2*emx)
526               static_random_module="rndos2"
527               ;;
528           m68k-atari-mint)
529               static_random_module="rndatari"
530               ;;
531           i?86-*-msdosdjgpp*)
532               :
533               ;;
534           *)
535               static_random_module="rndunix"
536               print_egd_notice=yes
537              ;;
538       esac
539   fi
540 else
541   if test "$use_static_rnd" = none; then
542     :
543   else
544     static_random_module="rnd$use_static_rnd"
545     if test "$use_static_rnd" = "unix"; then
546         print_egd_notice=yes
547     fi
548   fi
549 fi
550
551
552 if test "$print_egd_notice" = "yes"; then
553     AC_MSG_WARN([[
554 ***
555 *** The performance of the UNIX random gatherer module is not very good
556 *** and it does not keep the entropy pool over multiple invocations of
557 *** GnuPG.  The suggested way to overcome this problem is to use the
558 ***
559 ***               Entropy Gathering Daemon (EGD)
560 ***
561 *** which provides a entropy source for the whole system.  It is written
562 *** in Perl and available at the GnuPG FTP servers.  For more information
563 *** consult the GnuPG webpages:
564 ***
565 ***           http://www.gnupg.org/download.html#egd
566 ***
567 *** You may want to run ./configure with --enable-static-rnd=none to be
568 *** able to load the EGD client code dynamically; this way you can choose
569 *** between RNDUNIX and RNDEGD without recompilation.
570 ***]])
571 fi
572
573 dnl
574 dnl Parse the modules list and build the list
575 dnl of static and dymically linked modules
576 dnl
577 dnl (We always need a static rmd160)
578 static_modules="$static_modules rmd160 $static_random_module"
579 STATIC_CIPHER_NAMES=""
580 STATIC_CIPHER_OBJS=""
581 DYNAMIC_CIPHER_MODS=""
582 GNUPG_MSG_PRINT([dynamically linked cipher modules:])
583 for name in $MODULES_IN_CIPHER; do
584     x="yes"
585     for i in $disallowed_modules; do
586         if test "$name" = "$i" ; then x="no" ; fi
587     done;
588     if test $x = yes; then
589         x="no"
590         for i in $static_modules; do
591             if test "$name" = "$i" ; then
592                 x="yes"
593             fi
594         done;
595         if test $x = yes; then
596             STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
597             STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.lo"
598         else
599             DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
600             GNUPG_MSG_PRINT([$name])
601         fi
602
603 dnl        dnl Very ugly way to do this, but I don't knwo how to
604 dnl        dnl cope with AC_SUBST otherwise
605 dnl        case "$name" in
606 dnl          tiger)
607 dnl            AM_CONDITIONAL(BUILD_MODULE_TIGER,   [test $x = no])
608 dnl            ;;                                   
609 dnl          twofish)                               
610 dnl            AM_CONDITIONAL(BUILD_MODULE_TWOFISH, [test $x = no])
611 dnl            ;;                                   
612 dnl          rndunix)                               
613 dnl            AM_CONDITIONAL(BUILD_MODULE_RNDUNIX, [test $x = no])
614 dnl            ;;                                   
615 dnl          rndlinux)                              
616 dnl            AM_CONDITIONAL(BUILD_MODULE_RNDLINUX,[test $x = no])
617 dnl            ;;                                   
618 dnl          rndegd)                                
619 dnl            AM_CONDITIONAL(BUILD_MODULE_RNDEGD,  [test $x = no])
620 dnl            ;;
621 dnl          *)
622 dnl            ;;
623 dnl        esac
624     fi
625 done
626 AC_MSG_RESULT()
627 AC_SUBST(STATIC_CIPHER_OBJS)
628 AC_SUBST(STATIC_CIPHER_NAMES)
629 AC_SUBST(DYNAMIC_CIPHER_MODS)
630
631
632 dnl
633 dnl And build the constructor file
634 dnl
635
636 test -d cipher || mkdir cipher
637 cat <<G10EOF >cipher/construct.c
638 /* automatically generated by configure - do not edit */
639
640 G10EOF
641 GNUPG_MSG_PRINT([statically linked cipher modules:])
642 for name in $STATIC_CIPHER_NAMES; do
643     echo "void _gcry_${name}_constructor(void);" >>cipher/construct.c
644     GNUPG_MSG_PRINT([$name])
645 done
646 AC_MSG_RESULT()
647 cat <<G10EOF >>cipher/construct.c
648
649 void
650 _gcry_cipher_modules_constructor(void)
651 {
652     static int done = 0;
653     if( done )
654         return;
655     done = 1;
656
657 G10EOF
658 for name in $STATIC_CIPHER_NAMES; do
659     echo "   _gcry_${name}_constructor();" >>cipher/construct.c
660 done
661 echo '}' >>cipher/construct.c
662
663
664
665
666 dnl
667 dnl Figure how to link the cipher modules
668 dnl
669 AC_SUBST(STATIC_CIPHER_OBJS)
670 AC_SUBST(DYNAMIC_CIPHER_MODS)
671
672 #
673 # setup assembler stuff
674 #
675 AC_MSG_CHECKING(for mpi assembler functions)
676 if test -f $srcdir/mpi/config.links ; then
677     . $srcdir/mpi/config.links
678     AC_CONFIG_LINKS("$mpi_ln_list")
679     ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
680     ac_cv_mpi_sflags="$mpi_sflags"
681     ac_cv_mpi_config_done="yes"
682     AC_MSG_RESULT(done)
683 else
684     AC_MSG_RESULT(failed)
685     AC_MSG_ERROR([mpi/config.links missing!])
686 fi
687 MPI_EXTRA_ASM_OBJS=""
688 show_extraasm=""
689 if test "$ac_cv_mpi_extra_asm_modules" != ""; then
690 for i in $ac_cv_mpi_extra_asm_modules; do
691     show_extraasm="$show_extraasm $i"
692     MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.lo"
693 done
694 fi
695 AC_SUBST(MPI_EXTRA_ASM_OBJS)
696 MPI_SFLAGS="$ac_cv_mpi_sflags"
697 AC_SUBST(MPI_SFLAGS)
698
699
700 # Allow users to append something to the version string without
701 # flagging it as development version.  The user version part is
702 # considered everything after a dash.
703 changequote(,)dnl
704 tmp_pat='[a-zA-Z]'
705 changequote([,])dnl
706 if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
707     AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
708               [Defined if this is not a regular release])
709 fi
710
711 AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
712
713 GNUPG_CHECK_GNUMAKE
714
715 if test "$GCC" = yes; then
716     if test "$MAINTAINER_MODE" = "yes"; then
717         CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
718     else
719         CFLAGS="$CFLAGS -Wall"
720     fi
721 fi
722
723 dnl
724 dnl Make the version number in src/gcrypt.h the same as the one here.
725 dnl (this is easier than to have a *.in file just for one substitution)
726 dnl
727 GNUPG_FIX_HDR_VERSION([src/gcrypt.h], GCRYPT_VERSION)
728
729 LIBGCRYPT_LIBS="-L${libdir} -lgcrypt"
730 LIBGCRYPT_CFLAGS=""
731 AC_SUBST(LIBGCRYPT_LIBS)
732 AC_SUBST(LIBGCRYPT_CFLAGS)
733
734 AC_CONFIG_COMMANDS([gcrypt-defs],[[
735 chmod +x src/libgcrypt-config
736 cat >gcrypt-defs.tmp <<G10EOF
737 /* Generated automatically by configure */
738 #ifdef HAVE_DRIVE_LETTERS
739   #define GNUPG_LOCALEDIR "c:/lib/gnupg/locale"
740   #define GNUPG_LIBDIR  "c:/lib/gnupg"
741   #define GNUPG_DATADIR "c:/lib/gnupg"
742   #define GNUPG_HOMEDIR "c:/gnupg-test"
743 #else
744   #define GNUPG_LOCALEDIR "${prefix}/${DATADIRNAME}/locale"
745   #define GNUPG_LIBDIR  "${libdir}/gnupg"
746   #define GNUPG_DATADIR "${datadir}/gnupg"
747   #ifdef __VMS
748     #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
749   #else
750     #define GNUPG_HOMEDIR "~/.gnupg-test" 
751   #endif
752 #endif
753 G10EOF
754 if cmp -s gcrypt-defs.h gcrypt-defs.tmp 2>/dev/null; then
755     echo "gcrypt-defs.h is unchanged"
756     rm -f gcrypt-defs.tmp
757 else
758     rm -f gcrypt-defs.h
759     mv gcrypt-defs.tmp gcrypt-defs.h
760     echo "gcrypt-defs.h created"
761 fi
762 ]],[[
763 prefix=$prefix
764 exec_prefix=$exec_prefix
765 libdir=$libdir
766 datadir=$datadir
767 DATADIRNAME=$DATADIRNAME
768 ]])
769
770
771 AC_CONFIG_FILES([
772 Makefile
773 mpi/Makefile
774 cipher/Makefile
775 doc/Makefile
776 doc/version.sgml
777 src/Makefile
778 src/libgcrypt-config
779 tests/Makefile
780 ])
781 AC_OUTPUT
782
783 # Give some feedback
784 echo
785 warn=""
786 for file in "$static_random_module"; do
787   case "$file" in rndunix | rndw32) warn="$warn $file";; esac
788 done
789 if test -n "$warn"; then
790   echo "Please note that you are building a version of Libgcrypt with"
791   echo "  $warn"
792   echo "included.  These parts are licensed under the GPL and thus the"
793   echo "use of this library has to comply with the conditions of the GPL"
794 fi
795
796