See ChangeLog: Tue Jun 15 14:23:10 CEST 1999 Werner Koch
[gnupg.git] / configure.in
1 dnl
2 dnl Configure template for GNUPG
3 dnl
4 dnl (Process this file with autoconf to produce a configure script.)
5 AC_REVISION($Revision$)dnl
6
7 dnl Must reset CDPATH so that bash's cd does not print to stdout
8 CDPATH=
9
10 AC_PREREQ(2.13)
11 AC_INIT(g10/g10.c)
12 AC_CONFIG_AUX_DIR(scripts)
13 AM_CONFIG_HEADER(config.h)
14
15
16 VERSION=`cat $srcdir/VERSION`
17 PACKAGE=gnupg
18 ALL_LINGUAS="de es_ES fr it pl pt_BR ru"
19 static_modules="sha1 md5 rmd160"
20 AC_SUBST(VERSION)
21 AC_SUBST(PACKAGE)
22 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
23 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
24
25 MODULES_IN_CIPHER=`awk '/# MODULES: / { for(i=3;i<=NF;i++) print $i}' \
26                                                 $srcdir/cipher/Makefile.am`
27
28 dnl
29 dnl  Check for random module options
30 dnl
31 dnl  Fixme: get the list of available modules from MODULES_IN_CIPHER
32 dnl         and check against this list
33
34 AC_MSG_CHECKING([which static random module to use])
35 AC_ARG_ENABLE(static-rnd,
36     [  --enable-static-rnd=[egd|unix|linux|none]  ],
37 [use_static_rnd=$enableval], [use_static_rnd=default] )
38
39 if test "$use_static_rnd" = no; then
40     use_static_rnd=default
41 fi
42
43 case "$use_static_rnd" in
44     egd | linux | unix | none | default )
45       AC_MSG_RESULT($use_static_rnd)
46       ;;
47     * )
48       AC_MSG_RESULT(invalid argument)
49       AC_MSG_ERROR(there is no random module rnd$use_static_rnd)
50       ;;
51 esac
52
53 dnl
54 dnl See whether the user wants to disable checking for /dev/random
55
56 AC_MSG_CHECKING([whether use of /dev/random is requested])
57 AC_ARG_ENABLE(dev-random,
58 [  --disable-dev-random    disable the use of dev random],
59     try_dev_random=$enableval, try_dev_random=yes)
60 AC_MSG_RESULT($try_dev_random)
61
62
63 dnl
64 dnl  Check other options
65 dnl
66
67 AC_MSG_CHECKING([whether use of extensions is requested])
68 AC_ARG_ENABLE(dynload,
69 [  --disable-dynload       disable use of extensions],
70     try_dynload=$enableval, try_dynload=yes)
71 AC_MSG_RESULT($try_dynload)
72
73 AC_MSG_CHECKING([whether assembler modules are requested])
74 AC_ARG_ENABLE(asm,
75 [  --disable-asm           do not use assembler modules],
76      try_asm_modules=$enableval, try_asm_modules=yes)
77 AC_MSG_RESULT($try_asm_modules)
78
79 AC_MSG_CHECKING([whether memory debugging is requested])
80 AC_ARG_ENABLE(m-debug,
81 [  --enable-m-debug        enable debugging of memory allocation],
82 use_m_debug=$enableval, use_m_debug=no)
83 AC_MSG_RESULT($use_m_debug)
84 if test "$use_m_debug" = yes; then
85     AC_DEFINE(M_DEBUG)
86     use_m_guard=yes
87 else
88     AC_MSG_CHECKING([whether memory guard is requested])
89     AC_ARG_ENABLE(m-guard,
90     [  --enable-m-guard        enable memory guard facility],
91     use_m_guard=$enableval, use_m_guard=no)
92     AC_MSG_RESULT($use_m_guard)
93 fi
94 if test "$use_m_guard" = yes ; then
95     AC_DEFINE(M_GUARD)
96 fi
97
98
99 AC_MSG_CHECKING([whether included zlib is requested])
100 AC_ARG_WITH(included-zlib,
101     [  --with-included-zlib    use the zlib code included here],
102 [g10_force_zlib=yes], [g10_force_zlib=no] )
103 AC_MSG_RESULT($g10_force_zlib)
104
105 dnl
106 dnl Check wether we want to compile libgcrypt
107 dnl
108 AC_MSG_CHECKING([whether compilation of libgcrypt is requested])
109 AC_ARG_ENABLE(libgcrypt,
110     [  --enable-libgcrypt      compile the libgcrypt [default=no]],
111 [compile_libgcrypt="$enableval"],[compile_libgcrypt=yes])
112 AM_CONDITIONAL(COMPILE_LIBGCRYPT, test x$compile_libgcrypt = xyes)
113 AC_MSG_RESULT($compile_libgcrypt)
114
115
116 dnl Checks for programs.
117
118 AC_CANONICAL_SYSTEM
119 AC_ARG_PROGRAM
120 AC_PROG_MAKE_SET
121 AM_SANITY_CHECK
122 missing_dir=`cd $ac_aux_dir && pwd`
123 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
124 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
125 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
126 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
127 dnl AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
128 AC_PROG_CC
129 AC_PROG_CPP
130 AC_ISC_POSIX
131 AC_PROG_INSTALL
132 AC_PROG_RANLIB
133
134
135 if test x$compile_libgcrypt = xyes; then
136    dnl Don't default to build shared libs
137    AM_DISABLE_SHARED
138    AM_PROG_LIBTOOL
139 fi
140
141
142 MPI_OPT_FLAGS=""
143 if test "$GCC" = yes; then
144     CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
145 fi
146
147
148 try_gettext=yes
149 try_gdbm=yes
150 case "${target}" in
151     i386--mingw32)
152         # special stuff for Windoze NT
153         cross_compiling=yes
154         CC="i386--mingw32-gcc"
155         CPP="i386--mingw32-gcc -E"
156         RANLIB="i386--mingw32-ranlib"
157         ac_cv_have_dev_random=no
158         AC_DEFINE(USE_ONLY_8DOT3)
159         AC_DEFINE(HAVE_DRIVE_LETTERS)
160         AC_DEFINE(HAVE_DOSISH_SYSTEM)
161         try_gettext="no"
162         try_gdbm="no"
163         ;;
164     i386-emx-os2 | i[3456]86-pc-os2emx )
165         # OS/2 with the EMX environment
166         ac_cv_have_dev_random=no
167         AC_DEFINE(HAVE_DRIVE_LETTERS)
168         AC_DEFINE(HAVE_DOSISH_SYSTEM)
169         try_gettext="no"
170         try_gdbm="no"
171         ;;
172     *-*-hpux*)
173         if test -z "$GCC" ; then
174             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
175         fi
176         ;;
177     *-dec-osf4*)
178         if test -z "$GCC" ; then
179             # Suppress all warnings
180             # to get rid of the unsigned/signed char mismatch warnings.
181             CFLAGS="$CFLAGS -w"
182         fi
183         ;;
184     m68k-atari-mint)
185         ;;
186     *)
187        ;;
188 esac
189
190 AC_SUBST(MPI_OPT_FLAGS)
191 GNUPG_SYS_SYMBOL_UNDERSCORE
192 GNUPG_CHECK_PIC
193 GNUPG_CHECK_RDYNAMIC
194 if test "$NO_PIC" = yes; then
195     try_dynload=no
196 fi
197
198
199 case "${target}" in
200     i386--mingw32)
201         PRINTABLE_OS_NAME="MingW32"
202         ;;
203     i386-emx-os2 | i[3456]86-pc-os2emx)
204         PRINTABLE_OS_NAME="OS/2"
205         ;;
206     *-linux*)
207         PRINTABLE_OS_NAME="GNU/Linux"
208         ;;
209     *)
210         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
211         ;;
212 esac
213 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME")
214
215 dnl  Fixme: Are these the best flags for OpenBSD????
216 dnl (I have removed the -lc from * ...CFLAGS for test purposes.)
217 case "${target}" in
218     *-openbsd*)
219         NAME_OF_DEV_RANDOM="/dev/srandom"
220         NAME_OF_DEV_URANDOM="/dev/urandom"
221         DYNLINK_MOD_CFLAGS="-shared -rdynamic -fpic -Wl,-Bshareable -Wl,-x"
222         ;;
223     *)
224         NAME_OF_DEV_RANDOM="/dev/random"
225         NAME_OF_DEV_URANDOM="/dev/urandom"
226         DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
227         ;;
228 esac
229 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM")
230 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM")
231 AC_SUBST(MPI_OPT_FLAGS)
232
233
234 dnl Checks for libraries.
235
236 if test "$try_gettext" = yes; then
237 AM_GNU_GETTEXT
238 else
239 USE_NLS=no
240 USE_INCLUDED_LIBINTL=no
241 AC_SUBST(USE_NLS)
242 AC_SUBST(USE_INCLUDED_LIBINTL)
243 fi
244
245 dnl
246 dnl There are lot of misconfigured systems.  We include
247 dnl gdbm support only if the lib and the header is installed.
248 dnl
249 if test "$try_gdbm" = yes; then
250 AC_CHECK_HEADERS(gdbm.h)
251 if test "$ac_cv_header_gdbm_h" = yes ; then
252   AC_CHECK_LIB(gdbm,gdbm_firstkey)
253 fi
254 fi
255
256
257 dnl Solaris needs -lsocket and -lnsl. Unisys system includes
258 dnl gethostbyname in libsocket but needs libnsl for socket.
259 AC_CHECK_LIB(nsl, gethostbyname)
260 AC_CHECK_LIB(socket, socket, ac_need_libsocket=1, ac_try_nsl=1)
261 if test x$ac_need_libsocket = x1; then
262     LIBS="$LIBS -lsocket"
263 fi
264 if test x$ac_try_nsl = x1; then
265     AC_CHECK_LIB(nsl, gethostbyname, ac_need_libnsl=1)
266     if test x$ac_need_libnsl = x1
267     then
268         LIBS="$LIBS -lnsl"
269     fi
270 fi
271
272
273 if test "$try_dynload" = yes ; then
274   AC_CHECK_LIB(dl,dlopen)
275   if test "$ac_cv_lib_dl_dlopen" = "yes"; then
276     AC_DEFINE(USE_DYNAMIC_LINKING)
277     AC_DEFINE(HAVE_DL_DLOPEN)
278     DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
279     use_gnupg_extensions=yes
280   else
281     AC_CHECK_LIB(c,dlopen)
282     if test "$ac_cv_lib_c_dlopen" = "yes"; then
283       AC_DEFINE(USE_DYNAMIC_LINKING)
284       AC_DEFINE(HAVE_DL_DLOPEN)
285       DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
286       use_gnupg_extensions=yes
287 dnl else
288 dnl
289 dnl  DLD is not ready for use. So I better disable this test
290 dnl
291 dnl    AC_CHECK_LIB(dld,dld_link)
292 dnl    if test "$ac_cv_lib_dld_dld_link" = "yes"; then
293 dnl      AC_DEFINE(USE_DYNAMIC_LINKING)
294 dnl      AC_DEFINE(HAVE_DLD_DLD_LINK)
295 dnl      DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
296 dnl      use_gnupg_extensions=yes
297 dnl    fi
298     fi
299   fi
300 else
301   AC_MSG_CHECKING(for dynamic loading)
302   DYNLINK_LDFLAGS=
303   DYNLINK_MOD_CFLAGS=
304   use_gnupg_extensions=no
305   AC_MSG_RESULT(has been disabled)
306 fi
307
308 AM_CONDITIONAL(ENABLE_GNUPG_EXTENSIONS, test "$use_gnupg_extensions" = yes )
309 AC_SUBST(DYNLINK_LDFLAGS)
310 AC_SUBST(DYNLINK_MOD_CFLAGS)
311
312
313 dnl Checks for header files.
314 AC_HEADER_STDC
315 AC_CHECK_HEADERS(unistd.h langinfo.h)
316
317
318 dnl Checks for typedefs, structures, and compiler characteristics.
319 AC_C_CONST
320 AC_C_INLINE
321 AC_TYPE_SIZE_T
322 AC_TYPE_SIGNAL
323 AC_DECL_SYS_SIGLIST
324
325 GNUPG_CHECK_ENDIAN
326
327
328 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
329 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
330 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
331 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
332 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
333
334 AC_CHECK_SIZEOF(unsigned short, 2)
335 AC_CHECK_SIZEOF(unsigned int, 4)
336 AC_CHECK_SIZEOF(unsigned long, 4)
337
338 if test "$ac_cv_sizeof_unsigned_short" = "0" \
339    || test "$ac_cv_sizeof_unsigned_int" = "0" \
340    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
341     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
342 fi
343
344
345
346 dnl Checks for library functions.
347 AC_FUNC_VPRINTF
348 AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mmap)
349 AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit)
350 AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime nl_langinfo)
351
352 GNUPG_CHECK_MLOCK
353
354 GNUPG_CHECK_IPC
355 if test "$ac_cv_header_sys_shm_h" = "yes"; then
356   AC_DEFINE(USE_SHM_COPROCESSING)
357 fi
358
359 dnl
360 dnl check whether we have a random device
361 dnl
362 if test "$try_dev_random" = yes ; then
363     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
364     [if test -c "$NAME_OF_DEV_RANDOM" && test -c "$NAME_OF_DEV_URANDOM" ; then
365       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
366     if test "$ac_cv_have_dev_random" = yes; then
367         AC_DEFINE(HAVE_DEV_RANDOM)
368     fi
369 else
370     AC_MSG_CHECKING(for random device)
371     ac_cv_have_dev_random=no
372     AC_MSG_RESULT(has been disabled)
373 fi
374
375 dnl
376 dnl and whether this device supports ioctl
377 dnl (Note, that we should do a real test here)
378 dnl
379 if test "$ac_cv_have_dev_random" = yes ; then
380     AC_CHECK_HEADERS(linux/random.h)
381     AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl,
382       [ if test "$ac_cv_header_linux_random_h" = yes ; then
383           ac_cv_have_dev_random_ioctl=yes;
384         else
385           ac_cv_have_dev_random_ioctl=no;
386         fi
387       ])
388     if test "$ac_cv_have_dev_random_ioctl" = yes; then
389         AC_DEFINE(HAVE_DEV_RANDOM_IOCTL)
390     fi
391 fi
392
393
394 dnl
395 dnl Figure out the default linkage mode for cipher modules
396 dnl
397 dnl (We always need a static rmd160)
398 static_modules="$static_modules rmd160"
399 if test "$use_static_rnd" = default; then
400   if test "$ac_cv_have_dev_random" = yes; then
401       static_modules="$static_modules rndlinux"
402   else
403       case "${target}" in
404           i386--mingw32)
405               static_modules="$static_modules rndw32"
406               ;;
407           i386-emx-os2|i[3456]86-pc-os2emx)
408               static_modules="$static_modules rndos2"
409               ;;
410           m68k-atari-mint)
411               static_modules="$static_modules rndatari"
412               ;;
413           *)
414               static_modules="$static_modules rndunix"
415              ;;
416       esac
417   fi
418 else
419   if test "$use_static_rnd" = none; then
420     :
421   else
422     static_modules="$static_modules rnd$use_static_rnd"
423   fi
424 fi
425
426 dnl
427 dnl Parse the modules list and build the list
428 dnl of static and dymically linked modules
429 dnl
430 STATIC_CIPHER_NAMES=""
431 STATIC_CIPHER_OBJS=""
432 DYNAMIC_CIPHER_MODS=""
433 GNUPG_MSG_PRINT([dynamically linked cipher modules:])
434 for name in $MODULES_IN_CIPHER; do
435     x="no"
436     for i in $static_modules; do
437         if test "$name" = "$i" ; then
438             x="yes"
439         fi
440     done;
441     if test $x = yes; then
442         STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
443         STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.o"
444     else
445         DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
446         GNUPG_MSG_PRINT([$name])
447     fi
448 done
449 AC_MSG_RESULT()
450 AC_SUBST(STATIC_CIPHER_OBJS)
451 AC_SUBST(STATIC_CIPHER_NAMES)
452 AC_SUBST(DYNAMIC_CIPHER_MODS)
453
454 dnl
455 dnl And build the constructor file
456 dnl
457
458 test -d cipher || mkdir cipher
459 cat <<G10EOF >cipher/construct.c
460 /* automatically generated by configure - do not edit */
461
462 G10EOF
463 GNUPG_MSG_PRINT([statically linked cipher modules:])
464 for name in $STATIC_CIPHER_NAMES; do
465     echo "void ${name}_constructor(void);" >>cipher/construct.c
466     GNUPG_MSG_PRINT([$name])
467 done
468 AC_MSG_RESULT()
469 cat <<G10EOF >>cipher/construct.c
470
471 void
472 cipher_modules_constructor(void)
473 {
474     static int done = 0;
475     if( done )
476         return;
477     done = 1;
478
479 G10EOF
480 for name in $STATIC_CIPHER_NAMES; do
481     echo "   ${name}_constructor();" >>cipher/construct.c
482 done
483 echo '}' >>cipher/construct.c
484
485
486
487
488 dnl
489 dnl Figure how to link the cipher modules
490 dnl
491 AC_SUBST(STATIC_CIPHER_OBJS)
492 AC_SUBST(DYNAMIC_CIPHER_MODS)
493
494
495 dnl setup assembler stuff
496 AC_MSG_CHECKING(for mpi assembler functions)
497 if test -f $srcdir/mpi/config.links ; then
498     . $srcdir/mpi/config.links
499     GNUPG_LINK_FILES($mpi_ln_src, $mpi_ln_dst)
500     ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
501     ac_cv_mpi_sflags="$mpi_sflags"
502     ac_cv_mpi_config_done="yes"
503     AC_MSG_RESULT(done)
504 else
505     AC_MSG_RESULT(failed)
506     AC_MSG_ERROR([mpi/config.links missing!])
507 fi
508 MPI_EXTRA_ASM_OBJS=""
509 if test "$ac_cv_mpi_extra_asm_modules" != ""; then
510 GNUPG_MSG_PRINT([mpi extra asm functions:])
511 for i in $ac_cv_mpi_extra_asm_modules; do
512     GNUPG_MSG_PRINT([$i])
513     MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
514 done
515 AC_MSG_RESULT()
516 fi
517 AC_SUBST(MPI_EXTRA_ASM_OBJS)
518 MPI_SFLAGS="$ac_cv_mpi_sflags"
519 AC_SUBST(MPI_SFLAGS)
520
521 dnl Do we have zlib? Must do it here because Solaris failed
522 dnl when compiling a conftest (due to the "-lz" from LIBS).
523 use_local_zlib=yes
524 if test "$g10_force_zlib" = "yes"; then
525   :
526 else
527   AC_CHECK_HEADERS(zlib.h)
528   if test "$ac_cv_header_zlib_h" = yes ; then
529       AC_CHECK_LIB(z,deflateInit2_,use_local_zlib=no,:)
530   fi
531 fi
532
533 if test "use_local_zlib" = yes ; then
534     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
535     GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
536     GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
537     ZLIBS="../zlib/libzlib.a"
538 else
539     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
540     ZLIBS=
541     LIBS="-lz $LIBS"
542 fi
543 AC_SUBST(ZLIBS)
544
545
546 changequote(,)dnl
547 tmp_pat='[a-zA-Z]'
548 changequote([,])dnl
549 if echo "$VERSION" | grep $tmp_pat >/dev/null ; then
550     AC_DEFINE(IS_DEVELOPMENT_VERSION)
551 fi
552
553 GNUPG_DO_LINK_FILES
554
555
556 AC_OUTPUT_COMMANDS([
557 cat >g10defs.tmp <<G10EOF
558 /* Generated automatically by configure */
559 #ifdef HAVE_DRIVE_LETTERS
560   #define G10_LOCALEDIR "c:/lib/gnupg/locale"
561   #define GNUPG_LIBDIR  "c:/lib/gnupg"
562   #define GNUPG_DATADIR "c:/lib/gnupg"
563 #else
564   #define G10_LOCALEDIR "${prefix}/${DATADIRNAME}/locale"
565   #define GNUPG_LIBDIR  "${libdir}/gnupg"
566   #define GNUPG_DATADIR "${datadir}/gnupg"
567 #endif
568 G10EOF
569 if cmp -s g10defs.h g10defs.tmp 2>/dev/null; then
570     echo "g10defs.h is unchanged"
571     rm -f g10defs.tmp
572 else
573     rm -f g10defs.h
574     mv g10defs.tmp g10defs.h
575     echo "g10defs.h created"
576 fi
577 ],[
578 prefix=$prefix
579 exec_prefix=$exec_prefix
580 libdir=$libdir
581 datadir=$datadir
582 DATADIRNAME=$DATADIRNAME
583 ])
584
585
586 AC_OUTPUT([
587 Makefile
588 intl/Makefile
589 po/Makefile.in
590 util/Makefile
591 mpi/Makefile
592 cipher/Makefile
593 g10/Makefile
594 doc/Makefile
595 tools/Makefile
596 zlib/Makefile
597 checks/Makefile
598 gcrypt/Makefile
599 ])
600
601 dnl *-*wedit:notab*-*  Please keep this as the last line.