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