6ea0a81ac58f4c75adc4682279f48ae80e8388ad
[libgcrypt.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 AC_MSG_CHECKING([whether use of /dev/random is requested])
28 AC_ARG_ENABLE(dev-random,
29 [  --disable-dev-random    disable the use of dev random],
30     try_dev_random=$enableval, try_dev_random=yes)
31 AC_MSG_RESULT($try_dev_random)
32
33 AC_MSG_CHECKING([whether use of extensions is requested])
34 AC_ARG_ENABLE(dynload,
35 [  --disable-dynload       disable use of extensions],
36     try_dynload=$enableval, try_dynload=yes)
37 AC_MSG_RESULT($try_dynload)
38
39 AC_MSG_CHECKING([whether assembler modules are requested])
40 AC_ARG_ENABLE(asm,
41 [  --disable-asm           do not use assembler modules],
42      try_asm_modules=$enableval, try_asm_modules=yes)
43 AC_MSG_RESULT($try_asm_modules)
44
45 AC_MSG_CHECKING([whether memory debugging is requested])
46 AC_ARG_ENABLE(m-debug,
47 [  --enable-m-debug        enable debugging of memory allocation],
48 use_m_debug=$enableval, use_m_debug=no)
49 AC_MSG_RESULT($use_m_debug)
50 if test "$use_m_debug" = yes; then
51     AC_DEFINE(M_DEBUG)
52     use_m_guard=yes
53 else
54     AC_MSG_CHECKING([whether memory guard is requested])
55     AC_ARG_ENABLE(m-guard,
56     [  --enable-m-guard        enable memory guard facility],
57     use_m_guard=$enableval, use_m_guard=no)
58     AC_MSG_RESULT($use_m_guard)
59 fi
60 if test "$use_m_guard" = yes ; then
61     AC_DEFINE(M_GUARD)
62     CFLAGS="$CFLAGS -g"
63 else
64     CFLAGS="$CFLAGS -O2"
65 fi
66
67
68 AC_MSG_CHECKING([whether included zlib is requested])
69 AC_ARG_WITH(included-zlib,
70     [  --with-included-zlib    use the zlib code included here],
71 [g10_force_zlib=yes], [g10_force_zlib=no] )
72 AC_MSG_RESULT($g10_force_zlib)
73
74 dnl Checks for programs.
75
76 AC_CANONICAL_SYSTEM
77 AC_ARG_PROGRAM
78 AC_PROG_MAKE_SET
79 AM_SANITY_CHECK
80 missing_dir=`cd $ac_aux_dir && pwd`
81 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
82 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
83 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
84 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
85 dnl AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
86 AC_PROG_CC
87 AC_PROG_CPP
88 AC_ISC_POSIX
89 AC_PROG_RANLIB
90 AC_PROG_INSTALL
91 dnl AC_CYGWIN32
92
93
94 if test "$GCC" = yes; then
95     CFLAGS="$CFLAGS -Wall"
96 fi
97
98 try_gettext=yes
99 try_gdbm=yes
100 case "${target}" in
101     i386--mingw32)
102         # special stuff for Windoze NT
103         cross_compiling=yes
104         CC="i386--mingw32-gcc"
105         CPP="i386--mingw32-gcc -E"
106         RANLIB="i386--mingw32-ranlib"
107         ac_cv_have_dev_random=no
108         AC_DEFINE(USE_ONLY_8DOT3)
109         AC_DEFINE(HAVE_DRIVE_LETTERS)
110         AC_DEFINE(HAVE_DOSISH_SYSTEM)
111         try_gettext="no"
112         try_gdbm="no"
113         ;;
114     i386-emx-os2)
115         # OS/2 with the EMX environment
116         ac_cv_have_dev_random=no
117         AC_DEFINE(HAVE_DRIVE_LETTERS)
118         AC_DEFINE(HAVE_DOSISH_SYSTEM)
119         try_gettext="no"
120         try_gdbm="no"
121         ;;
122     *-*-hpux*)
123         if test -z "$GCC" ; then
124             CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
125         fi
126         ;;
127     m68k-atari-mint)
128         ;;
129     *)
130        ;;
131 esac
132
133
134 GNUPG_CHECK_PIC
135 GNUPG_CHECK_RDYNAMIC
136 if test "$NO_PIC" = yes; then
137     try_dynload=no
138 fi
139
140
141 case "${target}" in
142     i386--mingw32)
143         PRINTABLE_OS_NAME="MingW32"
144         ;;
145     i386-emx-os2)
146         PRINTABLE_OS_NAME="OS/2"
147         ;;
148     *-linux*)
149         PRINTABLE_OS_NAME="GNU/Linux"
150         ;;
151     *)
152         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
153         ;;
154 esac
155 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME")
156
157 dnl  Fixme: Are these the best flags for OpenBSD????
158 case "${target}" in
159     *-openbsd*)
160         NAME_OF_DEV_RANDOM="/dev/srandom"
161         NAME_OF_DEV_URANDOM="/dev/urandom"
162         DYNLINK_MOD_CFLAGS="-shared -rdynamic -fpic -Wl,-Bshareable -Wl,-x"
163         ;;
164     *)
165         NAME_OF_DEV_RANDOM="/dev/random"
166         NAME_OF_DEV_URANDOM="/dev/urandom"
167         DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC -lc"
168         ;;
169 esac
170 AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM")
171 AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM")
172
173
174 dnl Checks for libraries.
175
176 if test "$try_gettext" = yes; then
177 AM_GNU_GETTEXT
178 fi
179
180 if test "$try_gdbm" = yes; then
181 AC_CHECK_LIB(gdbm,gdbm_firstkey)
182 fi
183
184
185 if test "$try_dynload" = yes ; then
186   AC_CHECK_LIB(dl,dlopen)
187   if test "$ac_cv_lib_dl_dlopen" = "yes"; then
188     AC_DEFINE(USE_DYNAMIC_LINKING)
189     AC_DEFINE(HAVE_DL_DLOPEN)
190     DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
191     use_gnupg_extensions=yes
192   else
193     AC_CHECK_LIB(c,dlopen)
194     if test "$ac_cv_lib_c_dlopen" = "yes"; then
195       AC_DEFINE(USE_DYNAMIC_LINKING)
196       AC_DEFINE(HAVE_DL_DLOPEN)
197       DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
198       dnl fixme: this is probably false but it should
199       dnl work for freebsd
200       AC_DEFINE(DLSYM_NEEDS_UNDERSCORE)
201       use_gnupg_extensions=yes
202     else
203       AC_CHECK_LIB(dld,dld_link)
204       if test "$ac_cv_lib_dld_dld_link" = "yes"; then
205         AC_DEFINE(USE_DYNAMIC_LINKING)
206         AC_DEFINE(HAVE_DLD_DLD_LINK)
207         DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
208         use_gnupg_extensions=yes
209       fi
210     fi
211   fi
212 else
213   AC_MSG_CHECKING(for dynamic loading)
214   DYNLINK_LDFLAGS=
215   DYNLINK_MOD_CFLAGS=
216   use_gnupg_extensions=no
217   AC_MSG_RESULT(has been disabled)
218 fi
219
220 AM_CONDITIONAL(ENABLE_GNUPG_EXTENSIONS, test "$use_gnupg_extensions" = yes )
221 AC_SUBST(DYNLINK_LDFLAGS)
222 AC_SUBST(DYNLINK_MOD_CFLAGS)
223
224
225 dnl Checks for header files.
226 AC_HEADER_STDC
227 AC_CHECK_HEADERS(unistd.h)
228
229
230 dnl Checks for typedefs, structures, and compiler characteristics.
231 AC_C_CONST
232 AC_C_INLINE
233 AC_TYPE_SIZE_T
234 AC_TYPE_SIGNAL
235 AC_DECL_SYS_SIGLIST
236
237 GNUPG_CHECK_ENDIAN
238
239
240 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
241 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
242 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
243 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
244 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
245
246 AC_CHECK_SIZEOF(unsigned short, 2)
247 AC_CHECK_SIZEOF(unsigned int, 4)
248 AC_CHECK_SIZEOF(unsigned long, 4)
249
250 if test "$ac_cv_sizeof_unsigned_short" = "0" \
251    || test "$ac_cv_sizeof_unsigned_int" = "0" \
252    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
253     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
254 fi
255
256
257
258 dnl Checks for library functions.
259 AC_FUNC_VPRINTF
260 AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mmap)
261 AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit)
262 AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime)
263
264 GNUPG_CHECK_MLOCK
265
266 GNUPG_CHECK_IPC
267 if test "$ac_cv_header_sys_shm_h" = "yes"; then
268   AC_DEFINE(USE_SHM_COPROCESSING)
269 fi
270
271 dnl check whether we have a random device
272 if test "$try_dev_random" = yes ; then
273 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
274 [if test -c "$NAME_OF_DEV_RANDOM" && test -c "$NAME_OF_DEV_URANDOM" ; then
275   ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
276 if test "$ac_cv_have_dev_random" = yes; then
277     AC_DEFINE(HAVE_DEV_RANDOM)
278 fi
279 else
280     AC_MSG_CHECKING(for random device)
281     ac_cv_have_dev_random=no
282     AC_MSG_RESULT(has been disabled)
283 fi
284
285
286 dnl
287 dnl Figure out the default linkage mode for cipher modules
288 dnl
289 dnl (We always need a static rmd160)
290 static_modules="$static_modules rmd160"
291 if test "$ac_cv_have_dev_random" = yes; then
292     static_modules="$static_modules rndlinux"
293 else
294     case "${target}" in
295         i386--mingw32)
296             static_modules="$static_modules rndw32"
297             ;;
298         i386-emx-os2)
299             static_modules="$static_modules rndos2"
300             ;;
301         m68k-atari-mint)
302             static_modules="$static_modules rndatari"
303             ;;
304         *)
305             static_modules="$static_modules rndunix"
306            ;;
307     esac
308 fi
309
310 dnl
311 dnl Parse the modules list and build the list
312 dnl of static and dymically linked modules
313 dnl
314 STATIC_CIPHER_NAMES=""
315 STATIC_CIPHER_OBJS=""
316 DYNAMIC_CIPHER_MODS=""
317 GNUPG_MSG_PRINT([dynamically linked cipher modules:])
318 for name in $MODULES_IN_CIPHER; do
319     x="no"
320     for i in $static_modules; do
321         if test "$name" = "$i" ; then
322             x="yes"
323         fi
324     done;
325     if test $x = yes; then
326         STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
327         STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.o"
328     else
329         DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
330         GNUPG_MSG_PRINT([$name])
331     fi
332 done
333 AC_MSG_RESULT()
334 AC_SUBST(STATIC_CIPHER_OBJS)
335 AC_SUBST(STATIC_CIPHER_NAMES)
336 AC_SUBST(DYNAMIC_CIPHER_MODS)
337
338 dnl
339 dnl And build the constructor file
340 dnl
341 cat <<EOF >cipher/construct.c
342 /* automatically generated by configure - do not edit */
343
344 EOF
345 GNUPG_MSG_PRINT([statically linked cipher modules:])
346 for name in $STATIC_CIPHER_NAMES; do
347     echo "void ${name}_constructor(void);" >>cipher/construct.c
348     GNUPG_MSG_PRINT([$name])
349 done
350 AC_MSG_RESULT()
351 cat <<EOF >>cipher/construct.c
352
353 void
354 cipher_modules_constructor(void)
355 {
356     static int done = 0;
357     if( done )
358         return;
359     done = 1;
360
361 EOF
362 for name in $STATIC_CIPHER_NAMES; do
363     echo "   ${name}_constructor();" >>cipher/construct.c
364 done
365 echo '}' >>cipher/construct.c
366
367
368
369
370 dnl
371 dnl Figure how to link the cipher modules
372 dnl
373 dnl (form now these are only dynamic)
374 AC_SUBST(STATIC_CIPHER_OBJS)
375 AC_SUBST(DYNAMIC_CIPHER_MODS)
376
377
378
379 dnl setup assembler stuff
380 AC_MSG_CHECKING(for mpi assembler functions)
381 if test -f $srcdir/mpi/config.links ; then
382     . $srcdir/mpi/config.links
383     GNUPG_LINK_FILES($mpi_ln_src, $mpi_ln_dst)
384     ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
385     ac_cv_mpi_sflags="$mpi_sflags"
386     ac_cv_mpi_config_done="yes"
387     AC_MSG_RESULT(done)
388 else
389     AC_MSG_RESULT(failed)
390     AC_MSG_ERROR([mpi/config.links missing!])
391 fi
392 MPI_EXTRA_ASM_OBJS=""
393 if test "$ac_cv_mpi_extra_asm_modules" != ""; then
394 GNUPG_MSG_PRINT([mpi extra asm functions:])
395 for i in $ac_cv_mpi_extra_asm_modules; do
396     GNUPG_MSG_PRINT([$i])
397     MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
398 done
399 AC_MSG_RESULT()
400 fi
401 AC_SUBST(MPI_EXTRA_ASM_OBJS)
402 MPI_SFLAGS="$ac_cv_mpi_sflags"
403 AC_SUBST(MPI_SFLAGS)
404
405 dnl Do we have zlib? Must do it here because Solaris failed
406 dnl when compiling a conftest (due to the "-lz" from LIBS).
407 if test "$g10_force_zlib" = "yes"; then
408     ZLIBS="../zlib/libzlib.a"
409     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
410     GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
411     GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
412 else
413 AC_CHECK_HEADERS(zlib.h)
414 if test "$ac_cv_header_zlib_h" = yes ; then
415     LIBS="$LIBS -lz"
416     ZLIBS=
417     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
418 else
419     ZLIBS="../zlib/libzlib.a"
420     AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
421     GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
422     GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
423 fi
424 fi
425 AC_SUBST(ZLIBS)
426
427 if echo "$VERSION" | grep '[a-zA-Z]' >/dev/null ; then
428     AC_DEFINE(IS_DEVELOPMENT_VERSION)
429 fi
430
431 GNUPG_DO_LINK_FILES
432
433
434 AC_OUTPUT([
435 Makefile
436 intl/Makefile
437 po/Makefile.in
438 util/Makefile
439 mpi/Makefile
440 cipher/Makefile
441 g10/Makefile
442 doc/Makefile
443 tools/Makefile
444 zlib/Makefile
445 checks/Makefile
446 ])
447
448 dnl *-*wedit:notab*-*  Please keep this as the last line.