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