See ChangeLog: Wed Jun 16 20:16:21 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 AC_CHECK_PROG(DOCBOOK_TO_MAN, docbook-to-man, yes, no)
134 AM_CONDITIONAL(HAVE_DOCBOOK_TO_MAN, test "$ac_cv_prog_DOCBOOK_TO_MAN" = yes)
135
136
137
138 if test x$compile_libgcrypt = xyes; then
139    dnl Don't default to build shared libs
140    AM_DISABLE_SHARED
141    AM_PROG_LIBTOOL
142 fi
143
144
145 MPI_OPT_FLAGS=""
146 if test "$GCC" = yes; then
147     CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
148 fi
149
150
151 try_gettext=yes
152 try_gdbm=yes
153 case "${target}" in
154     i386--mingw32)
155         # special stuff for Windoze NT
156         cross_compiling=yes
157         CC="i386--mingw32-gcc"
158         CPP="i386--mingw32-gcc -E"
159         RANLIB="i386--mingw32-ranlib"
160         ac_cv_have_dev_random=no
161         AC_DEFINE(USE_ONLY_8DOT3)
162         AC_DEFINE(HAVE_DRIVE_LETTERS)
163         AC_DEFINE(HAVE_DOSISH_SYSTEM)
164         try_gettext="no"
165         try_gdbm="no"
166         ;;
167     i386-emx-os2 | i[3456]86-pc-os2emx )
168         # OS/2 with the EMX environment
169         ac_cv_have_dev_random=no
170         AC_DEFINE(HAVE_DRIVE_LETTERS)
171         AC_DEFINE(HAVE_DOSISH_SYSTEM)
172         try_gettext="no"
173         try_gdbm="no"
174         ;;
175     *-*-hpux*)
176         if test -z "$GCC" ; then
177             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
178         fi
179         ;;
180     *-dec-osf4*)
181         if test -z "$GCC" ; then
182             # Suppress all warnings
183             # to get rid of the unsigned/signed char mismatch warnings.
184             CFLAGS="$CFLAGS -w"
185         fi
186         ;;
187     m68k-atari-mint)
188         ;;
189     *)
190        ;;
191 esac
192
193 AC_SUBST(MPI_OPT_FLAGS)
194 GNUPG_SYS_SYMBOL_UNDERSCORE
195 GNUPG_CHECK_PIC
196 GNUPG_CHECK_RDYNAMIC
197 if test "$NO_PIC" = yes; then
198     try_dynload=no
199 fi
200
201
202 case "${target}" in
203     i386--mingw32)
204         PRINTABLE_OS_NAME="MingW32"
205         ;;
206     i386-emx-os2 | i[3456]86-pc-os2emx)
207         PRINTABLE_OS_NAME="OS/2"
208         ;;
209     *-linux*)
210         PRINTABLE_OS_NAME="GNU/Linux"
211         ;;
212     *)
213         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
214         ;;
215 esac
216 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME")
217
218 dnl  Fixme: Are these the best flags for OpenBSD????
219 dnl (I have removed the -lc from * ...CFLAGS for test purposes.)
220 case "${target}" in
221     *-openbsd*)
222         NAME_OF_DEV_RANDOM="/dev/srandom"
223         NAME_OF_DEV_URANDOM="/dev/urandom"
224         DYNLINK_MOD_CFLAGS="-shared -rdynamic -fpic -Wl,-Bshareable -Wl,-x"
225         ;;
226     *)
227         NAME_OF_DEV_RANDOM="/dev/random"
228         NAME_OF_DEV_URANDOM="/dev/urandom"
229         DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
230         ;;
231 esac
232 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM")
233 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM")
234 AC_SUBST(MPI_OPT_FLAGS)
235
236
237 dnl Checks for libraries.
238
239 if test "$try_gettext" = yes; then
240 AM_GNU_GETTEXT
241 else
242 USE_NLS=no
243 USE_INCLUDED_LIBINTL=no
244 AC_SUBST(USE_NLS)
245 AC_SUBST(USE_INCLUDED_LIBINTL)
246 fi
247
248 dnl
249 dnl There are lot of misconfigured systems.  We include
250 dnl gdbm support only if the lib and the header is installed.
251 dnl
252 if test "$try_gdbm" = yes; then
253 AC_CHECK_HEADERS(gdbm.h)
254 if test "$ac_cv_header_gdbm_h" = yes ; then
255   AC_CHECK_LIB(gdbm,gdbm_firstkey)
256 fi
257 fi
258
259
260 dnl Solaris needs -lsocket and -lnsl. Unisys system includes
261 dnl gethostbyname in libsocket but needs libnsl for socket.
262 AC_CHECK_LIB(nsl, gethostbyname)
263 AC_CHECK_LIB(socket, socket, ac_need_libsocket=1, ac_try_nsl=1)
264 if test x$ac_need_libsocket = x1; then
265     LIBS="$LIBS -lsocket"
266 fi
267 if test x$ac_try_nsl = x1; then
268     AC_CHECK_LIB(nsl, gethostbyname, ac_need_libnsl=1)
269     if test x$ac_need_libnsl = x1
270     then
271         LIBS="$LIBS -lnsl"
272     fi
273 fi
274
275
276 if test "$try_dynload" = yes ; then
277   AC_CHECK_LIB(dl,dlopen)
278   if test "$ac_cv_lib_dl_dlopen" = "yes"; then
279     AC_DEFINE(USE_DYNAMIC_LINKING)
280     AC_DEFINE(HAVE_DL_DLOPEN)
281     DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
282     use_gnupg_extensions=yes
283   else
284     AC_CHECK_LIB(c,dlopen)
285     if test "$ac_cv_lib_c_dlopen" = "yes"; then
286       AC_DEFINE(USE_DYNAMIC_LINKING)
287       AC_DEFINE(HAVE_DL_DLOPEN)
288       DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
289       use_gnupg_extensions=yes
290 dnl else
291 dnl
292 dnl  DLD is not ready for use. So I better disable this test
293 dnl
294 dnl    AC_CHECK_LIB(dld,dld_link)
295 dnl    if test "$ac_cv_lib_dld_dld_link" = "yes"; then
296 dnl      AC_DEFINE(USE_DYNAMIC_LINKING)
297 dnl      AC_DEFINE(HAVE_DLD_DLD_LINK)
298 dnl      DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
299 dnl      use_gnupg_extensions=yes
300 dnl    fi
301     fi
302   fi
303 else
304   AC_MSG_CHECKING(for dynamic loading)
305   DYNLINK_LDFLAGS=
306   DYNLINK_MOD_CFLAGS=
307   use_gnupg_extensions=no
308   AC_MSG_RESULT(has been disabled)
309 fi
310
311 AM_CONDITIONAL(ENABLE_GNUPG_EXTENSIONS, test "$use_gnupg_extensions" = yes )
312 AC_SUBST(DYNLINK_LDFLAGS)
313 AC_SUBST(DYNLINK_MOD_CFLAGS)
314
315
316 dnl Checks for header files.
317 AC_HEADER_STDC
318 AC_CHECK_HEADERS(unistd.h langinfo.h)
319
320
321 dnl Checks for typedefs, structures, and compiler characteristics.
322 AC_C_CONST
323 AC_C_INLINE
324 AC_TYPE_SIZE_T
325 AC_TYPE_SIGNAL
326 AC_DECL_SYS_SIGLIST
327
328 GNUPG_CHECK_ENDIAN
329
330
331 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
332 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
333 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
334 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
335 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
336
337 AC_CHECK_SIZEOF(unsigned short, 2)
338 AC_CHECK_SIZEOF(unsigned int, 4)
339 AC_CHECK_SIZEOF(unsigned long, 4)
340
341 if test "$ac_cv_sizeof_unsigned_short" = "0" \
342    || test "$ac_cv_sizeof_unsigned_int" = "0" \
343    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
344     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
345 fi
346
347
348
349 dnl Checks for library functions.
350 AC_FUNC_VPRINTF
351 AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mmap)
352 AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit)
353 AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime nl_langinfo)
354
355 GNUPG_CHECK_MLOCK
356
357 GNUPG_CHECK_IPC
358 if test "$ac_cv_header_sys_shm_h" = "yes"; then
359   AC_DEFINE(USE_SHM_COPROCESSING)
360 fi
361
362 dnl
363 dnl check whether we have a random device
364 dnl
365 if test "$try_dev_random" = yes ; then
366     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
367     [if test -c "$NAME_OF_DEV_RANDOM" && test -c "$NAME_OF_DEV_URANDOM" ; then
368       ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
369     if test "$ac_cv_have_dev_random" = yes; then
370         AC_DEFINE(HAVE_DEV_RANDOM)
371     fi
372 else
373     AC_MSG_CHECKING(for random device)
374     ac_cv_have_dev_random=no
375     AC_MSG_RESULT(has been disabled)
376 fi
377
378 dnl
379 dnl and whether this device supports ioctl
380 dnl (Note, that we should do a real test here)
381 dnl
382 if test "$ac_cv_have_dev_random" = yes ; then
383     AC_CHECK_HEADERS(linux/random.h)
384     AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl,
385       [ if test "$ac_cv_header_linux_random_h" = yes ; then
386           ac_cv_have_dev_random_ioctl=yes;
387         else
388           ac_cv_have_dev_random_ioctl=no;
389         fi
390       ])
391     if test "$ac_cv_have_dev_random_ioctl" = yes; then
392         AC_DEFINE(HAVE_DEV_RANDOM_IOCTL)
393     fi
394 fi
395
396
397 dnl
398 dnl Figure out the default linkage mode for cipher modules
399 dnl
400 dnl (We always need a static rmd160)
401 static_modules="$static_modules rmd160"
402 if test "$use_static_rnd" = default; then
403   if test "$ac_cv_have_dev_random" = yes; then
404       static_modules="$static_modules rndlinux"
405   else
406       case "${target}" in
407           i386--mingw32)
408               static_modules="$static_modules rndw32"
409               ;;
410           i386-emx-os2|i[3456]86-pc-os2emx)
411               static_modules="$static_modules rndos2"
412               ;;
413           m68k-atari-mint)
414               static_modules="$static_modules rndatari"
415               ;;
416           *)
417               static_modules="$static_modules rndunix"
418              ;;
419       esac
420   fi
421 else
422   if test "$use_static_rnd" = none; then
423     :
424   else
425     static_modules="$static_modules rnd$use_static_rnd"
426   fi
427 fi
428
429 dnl
430 dnl Parse the modules list and build the list
431 dnl of static and dymically linked modules
432 dnl
433 STATIC_CIPHER_NAMES=""
434 STATIC_CIPHER_OBJS=""
435 DYNAMIC_CIPHER_MODS=""
436 GNUPG_MSG_PRINT([dynamically linked cipher modules:])
437 for name in $MODULES_IN_CIPHER; do
438     x="no"
439     for i in $static_modules; do
440         if test "$name" = "$i" ; then
441             x="yes"
442         fi
443     done;
444     if test $x = yes; then
445         STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
446         STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.o"
447     else
448         DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
449         GNUPG_MSG_PRINT([$name])
450     fi
451 done
452 AC_MSG_RESULT()
453 AC_SUBST(STATIC_CIPHER_OBJS)
454 AC_SUBST(STATIC_CIPHER_NAMES)
455 AC_SUBST(DYNAMIC_CIPHER_MODS)
456
457 dnl
458 dnl And build the constructor file
459 dnl
460
461 test -d cipher || mkdir cipher
462 cat <<G10EOF >cipher/construct.c
463 /* automatically generated by configure - do not edit */
464
465 G10EOF
466 GNUPG_MSG_PRINT([statically linked cipher modules:])
467 for name in $STATIC_CIPHER_NAMES; do
468     echo "void ${name}_constructor(void);" >>cipher/construct.c
469     GNUPG_MSG_PRINT([$name])
470 done
471 AC_MSG_RESULT()
472 cat <<G10EOF >>cipher/construct.c
473
474 void
475 cipher_modules_constructor(void)
476 {
477     static int done = 0;
478     if( done )
479         return;
480     done = 1;
481
482 G10EOF
483 for name in $STATIC_CIPHER_NAMES; do
484     echo "   ${name}_constructor();" >>cipher/construct.c
485 done
486 echo '}' >>cipher/construct.c
487
488
489
490
491 dnl
492 dnl Figure how to link the cipher modules
493 dnl
494 AC_SUBST(STATIC_CIPHER_OBJS)
495 AC_SUBST(DYNAMIC_CIPHER_MODS)
496
497
498 dnl setup assembler stuff
499 AC_MSG_CHECKING(for mpi assembler functions)
500 if test -f $srcdir/mpi/config.links ; then
501     . $srcdir/mpi/config.links
502     GNUPG_LINK_FILES($mpi_ln_src, $mpi_ln_dst)
503     ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
504     ac_cv_mpi_sflags="$mpi_sflags"
505     ac_cv_mpi_config_done="yes"
506     AC_MSG_RESULT(done)
507 else
508     AC_MSG_RESULT(failed)
509     AC_MSG_ERROR([mpi/config.links missing!])
510 fi
511 MPI_EXTRA_ASM_OBJS=""
512 if test "$ac_cv_mpi_extra_asm_modules" != ""; then
513 GNUPG_MSG_PRINT([mpi extra asm functions:])
514 for i in $ac_cv_mpi_extra_asm_modules; do
515     GNUPG_MSG_PRINT([$i])
516     MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
517 done
518 AC_MSG_RESULT()
519 fi
520 AC_SUBST(MPI_EXTRA_ASM_OBJS)
521 MPI_SFLAGS="$ac_cv_mpi_sflags"
522 AC_SUBST(MPI_SFLAGS)
523
524 dnl Do we have zlib? Must do it here because Solaris failed
525 dnl when compiling a conftest (due to the "-lz" from LIBS).
526 use_local_zlib=yes
527 if test "$g10_force_zlib" = "yes"; then
528   :
529 else
530   AC_CHECK_HEADERS(zlib.h)
531   if test "$ac_cv_header_zlib_h" = yes ; then
532       AC_CHECK_LIB(z,deflateInit2_,use_local_zlib=no,:)
533   fi
534 fi
535
536 if test "use_local_zlib" = yes ; then
537     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
538     GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
539     GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
540     ZLIBS="../zlib/libzlib.a"
541 else
542     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
543     ZLIBS=
544     LIBS="-lz $LIBS"
545 fi
546 AC_SUBST(ZLIBS)
547
548
549 changequote(,)dnl
550 tmp_pat='[a-zA-Z]'
551 changequote([,])dnl
552 if echo "$VERSION" | grep $tmp_pat >/dev/null ; then
553     AC_DEFINE(IS_DEVELOPMENT_VERSION)
554 fi
555
556 GNUPG_DO_LINK_FILES
557
558
559 AC_OUTPUT_COMMANDS([
560 cat >g10defs.tmp <<G10EOF
561 /* Generated automatically by configure */
562 #ifdef HAVE_DRIVE_LETTERS
563   #define G10_LOCALEDIR "c:/lib/gnupg/locale"
564   #define GNUPG_LIBDIR  "c:/lib/gnupg"
565   #define GNUPG_DATADIR "c:/lib/gnupg"
566 #else
567   #define G10_LOCALEDIR "${prefix}/${DATADIRNAME}/locale"
568   #define GNUPG_LIBDIR  "${libdir}/gnupg"
569   #define GNUPG_DATADIR "${datadir}/gnupg"
570 #endif
571 G10EOF
572 if cmp -s g10defs.h g10defs.tmp 2>/dev/null; then
573     echo "g10defs.h is unchanged"
574     rm -f g10defs.tmp
575 else
576     rm -f g10defs.h
577     mv g10defs.tmp g10defs.h
578     echo "g10defs.h created"
579 fi
580 ],[
581 prefix=$prefix
582 exec_prefix=$exec_prefix
583 libdir=$libdir
584 datadir=$datadir
585 DATADIRNAME=$DATADIRNAME
586 ])
587
588
589 AC_OUTPUT([
590 Makefile
591 intl/Makefile
592 po/Makefile.in
593 util/Makefile
594 mpi/Makefile
595 cipher/Makefile
596 g10/Makefile
597 doc/Makefile
598 tools/Makefile
599 zlib/Makefile
600 checks/Makefile
601 gcrypt/Makefile
602 ])
603
604 dnl *-*wedit:notab*-*  Please keep this as the last line.