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