simple switch to disable ats
[oweals/gnunet.git] / configure.ac
1 # This file is part of GNUnet.
2 # (C) 2001--2010 Christian Grothoff (and other contributing authors)
3 #
4 # GNUnet is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published
6 # by the Free Software Foundation; either version 2, or (at your
7 # option) any later version.
8 #
9 # GNUnet is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with GNUnet; see the file COPYING.  If not, write to the
16 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 # Boston, MA 02111-1307, USA.
18 #
19 #
20 # Process this file with autoconf to produce a configure script.
21 #
22 #
23 AC_PREREQ(2.61)
24 # Checks for programs.
25 AC_INIT([gnunet], [0.9.0pre3],[bug-gnunet@gnu.org])
26
27 AC_CANONICAL_TARGET
28 AC_CANONICAL_HOST
29 AC_CANONICAL_SYSTEM
30
31 AM_INIT_AUTOMAKE([gnunet], [0.9.0pre3])
32 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
33 AC_CONFIG_HEADERS([gnunet_config.h])
34 AH_TOP([#define _GNU_SOURCE  1])
35
36 AC_PROG_AWK
37 AC_PROG_CC
38 AC_PROG_CPP
39 AC_PROG_CXX
40 AC_PROG_OBJC
41 AC_PROG_INSTALL
42 AC_PROG_LN_S
43 AC_PROG_MAKE_SET
44 AM_PROG_CC_C_O
45 LT_INIT([disable-static dlopen win32-dll])
46 LTDL_INIT
47 AC_SUBST(LTDLINCL)
48 AC_SUBST(LIBLTDL)
49 AC_SUBST(MKDIR_P)
50
51 # large file support
52 AC_SYS_LARGEFILE
53 AC_FUNC_FSEEKO
54
55
56 if test "$enable_shared" = "no"
57 then
58  AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])
59 fi
60
61 CFLAGS="-Wall $CFLAGS"
62 # use '-fno-strict-aliasing', but only if the compiler can take it
63 if gcc -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1;
64 then
65  CFLAGS="-fno-strict-aliasing $CFLAGS"
66 fi
67
68 # Use Linux interface name unless the OS has a different preference
69 DEFAULT_INTERFACE="\"eth0\""
70
71 # Check system type
72 case "$host_os" in
73 *darwin* | *rhapsody* | *macosx*)
74      AC_DEFINE_UNQUOTED(DARWIN,1,[This is an Apple Darwin system])
75      CPPFLAGS="-D_APPLE_C_SOURCE $CPPFLAGS"
76      CFLAGS="-no-cpp-precomp -fno-common $CFLAGS"
77      AC_MSG_WARN([The VPN application cannot be compiled on your OS])
78      build_target="darwin"
79      DEFAULT_INTERFACE="\"en0\""
80      LIBPREFIX=
81      DLLDIR=lib
82      ;;
83 linux*)
84      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux system])
85      build_target="linux"
86      LIBPREFIX=
87      DLLDIR=lib
88      AC_PATH_XTRA
89      ;;
90 freebsd*)
91      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
92      AC_DEFINE_UNQUOTED(FREEBSD,1,[This is a FreeBSD system])
93      CFLAGS="-D_THREAD_SAFE $CFLAGS"
94      build_target="freebsd"
95      LIBPREFIX=
96      DLLDIR=lib
97      ;;
98 openbsd*)
99      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
100      AC_DEFINE_UNQUOTED(OPENBSD,1,[This is an OpenBSD system])
101      LIBS=`echo $LIBS | sed -e "s/-ldl//"`
102      build_target="openbsd"
103      LIBPREFIX=
104      DLLDIR=lib
105      ;;
106 netbsd*)
107      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
108      AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system])
109      LIBPREFIX=
110      DLLDIR=lib
111      ;;
112 *solaris*)
113      AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system])
114      AC_DEFINE_UNQUOTED(_REENTRANT,1,[Need with solaris or errno doesnt work])
115      AC_CHECK_LIB(resolv, res_init)
116      AC_CHECK_LIB(rt, nanosleep)
117      build_target="solaris"
118      LIBPREFIX=
119      DLLDIR=lib
120      ;;
121 *arm-linux*)
122      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux system])
123      CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
124      build_target="linux"
125      LIBPREFIX=
126      DLLDIR=lib
127      ;;
128 *cygwin*)
129      AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
130      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
131      AC_CHECK_LIB(intl, gettext)
132      LDFLAGS="$LDFLAGS -no-undefined"
133      CFLAGS="-mms-bitfields $CFLAGS"
134      build_target="cygwin"
135      LIBPREFIX=lib
136      DLLDIR=bin
137      AC_PROG_CXX
138      ;;
139 *mingw*)
140      AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
141      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
142      AC_DEFINE_UNQUOTED(_WIN32,1,[This is a Windows system])
143      AC_CHECK_LIB(intl, gettext)
144      LDFLAGS="$LDFLAGS -no-undefined -Wl,--export-all-symbols"
145      LIBS="$LIBS -lws2_32 -lplibc"
146      CFLAGS="-mms-bitfields $CFLAGS"
147      CPPFLAGS="-D_WIN32_WINNT=0x0501 $CPPFLAGS"
148      build_target="mingw"
149      AC_PROG_CXX
150      LIBPREFIX=lib
151      DLLDIR=bin
152      ;;
153 *)
154      AC_MSG_RESULT(Unrecognised OS $host_os)
155      AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
156 ;;
157 esac
158 AC_DEFINE_UNQUOTED([GNUNET_DEFAULT_INTERFACE], $DEFAULT_INTERFACE, [This should be the default choice for the name of the first network interface])
159 AC_SUBST(DEFAULT_INTERFACE)
160
161 AC_MSG_CHECKING([for build target])
162 AM_CONDITIONAL(DARWIN,  test "$build_target" = "darwin")
163 AM_CONDITIONAL(CYGWIN,  test "$build_target" = "cygwin")
164 AM_CONDITIONAL(MINGW,   test "$build_target" = "mingw")
165 AM_CONDITIONAL(SOLARIS, test "$build_target" = "solaris")
166 AM_CONDITIONAL(XFREEBSD, test "$build_target" = "freebsd")
167 AM_CONDITIONAL(OPENBSD, test "$build_target" = "openbsd")
168 AM_CONDITIONAL(LINUX, test "$build_target" = "linux")
169
170 AC_MSG_RESULT([$build_target])
171 AC_SUBST(build_target)
172 AM_CONDITIONAL([am__fastdepOBJC], false)
173 AC_UNALIGNED_64_ACCESS
174
175 # some other checks for standard libs
176 AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
177 AC_CHECK_LIB(socket, socket)
178 AC_CHECK_LIB(m, log)
179 AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
180
181 # 'save' libs; only those libs found so far will be
182 # linked against _everywhere_.  For the others, we
183 # will be more selective!
184 SAVE_LIBS=$LIBS
185
186 # libgcrypt
187 gcrypt=0
188 AM_PATH_LIBGCRYPT(1.2.0, gcrypt=1)
189 AC_CHECK_DECLS([gcry_mpi_lshift], [], [], [[#include <gcrypt.h>]])
190
191 if test $gcrypt = 0
192 then
193   AC_MSG_ERROR([GNUnet needs libgcrypt])
194 fi
195
196 if test $build = $target
197 then
198 AC_MSG_CHECKING([for working HMAC])
199 AC_LANG_PUSH(C)
200 LIBS="$LIBS $LIBGCRYPT_LIBS"
201 CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
202 AC_RUN_IFELSE(
203   [AC_LANG_PROGRAM([#include <gcrypt.h>], [[
204         gcry_md_hd_t mac;
205       
206         unsigned char data[] = { 0xbf, 0x16, 0x6e, 0x46, 0x3a, 0x6c, 0xf3, 0x93, 0xa7, 0x72,
207             0x11, 0xa1, 0xdc, 0x0b, 0x07, 0xdb, 0x1a, 0x5e, 0xd9, 0xb9, 0x81, 0xbe,
208             0xea, 0xe4, 0x31, 0x5f, 0x24, 0xff, 0xfe, 0x50, 0x8a, 0xde };
209         unsigned char key[] = { 0xfc, 0x62, 0x76, 0x35 };
210         unsigned char result[] = {0xa2, 0xb, 0x1, 0xd9, 0xc0, 0x8b, 0x5a, 0x12, 0x80,
211             0xd5, 0x50, 0x12, 0x8e, 0xd0, 0x5b, 0xb6, 0x5c, 0x87, 0x24, 0xe2, 0xd0,
212             0xd2, 0xaf, 0x63, 0xae, 0xd1, 0xd6, 0x64, 0x14, 0xe3, 0x6e, 0x61, 0x5b,
213             0xd, 0xba, 0x17, 0x7d, 0xd3, 0x10, 0xb1, 0x37, 0x41, 0x91, 0x7d, 0xeb,
214             0x1, 0x4d, 0x71, 0xe8, 0x59, 0x71, 0x42, 0x8e, 0xd6, 0xf3, 0x29, 0x3b,
215             0x90, 0xf2, 0xd1, 0xaf, 0x65, 0x1e, 0xb3};
216       
217         if (!gcry_check_version (GCRYPT_VERSION))
218           return 1;
219   
220         gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
221         gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
222   
223         if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
224           return 2;
225   
226         gcry_md_setkey (mac, key, sizeof (key));
227         gcry_md_write (mac, data, sizeof (data));
228   
229         if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
230           return 3;
231   
232         gcry_md_close (mac);
233   
234         return 0;
235     ]])],
236   [AC_MSG_RESULT([yes])],
237   [
238    if test $? = 3
239    then
240      AC_MSG_FAILURE([HMAC test vector does not match. This is a known problem with libgcrypt 1.2.2 on Windows and fixed in 1.4.6.])
241    else
242      AC_MSG_FAILURE([HMAC test failed])
243    fi
244   ])
245 AC_LANG_POP(C)
246 fi      # $build = $target
247
248 # libcurl
249 LIBCURL_CHECK_CONFIG(,7.20.1,,AC_MSG_ERROR([GNUnet requires libcurl >= 7.20.1]))
250 # restore LIBS
251 LIBS=$SAVE_LIBS
252
253 USE_ATS=false
254
255 if test x$USE_ATS = xtrue
256 then
257         glpk=true
258         AC_MSG_WARN([ATS enabled])
259         AC_CHECK_HEADERS(glpk.h, ,[gplk=false])
260         AC_CHECK_LIB([glpk],[glp_create_prob], , [gplk=false])
261         # GLPK must support atm MLP presolving, version >= 4.32
262         AC_CHECK_MEMBERS(glp_iocp.presolve, ,[gplk=false],[[#include <glpk.h>]])
263         if test x$gplk = xfalse
264         then
265                 AM_CONDITIONAL(HAVE_GLPK, [test x$gplk = xtrue])
266                 AM_CONDITIONAL(HAVE_LIBGLPK, [test x$gplk != x$gplk])
267                 AC_MSG_WARN([GNUnet requires GLPK  >= 4.32])
268         else
269                 AM_CONDITIONAL(HAVE_GLPK, [test x$gplk = xtrue])
270                 AM_CONDITIONAL(HAVE_LIBGLPK, [test x$gplk = x$gplk])
271                 AC_MSG_WARN([GLPK is installed])
272         fi
273 else
274         AC_MSG_WARN([ATS disabled])
275         AM_CONDITIONAL(HAVE_GLPK, false)
276         AM_CONDITIONAL(HAVE_LIBGLPK, false)
277 fi
278
279 # test for kvm and kstat (for CPU stats under BSD/Solaris)
280 AC_CHECK_LIB([kvm],[kvm_open])
281 AC_CHECK_LIB([kstat],[kstat_open])
282
283 # test for libextractor
284 extractor=0
285 AC_MSG_CHECKING(for libextractor)
286 AC_ARG_WITH(extractor,
287    [  --with-extractor=PFX    base of libextractor installation],
288    [AC_MSG_RESULT([$with_extractor])
289     case $with_extractor in
290       no)
291         ;;
292       yes)
293         AC_CHECK_HEADERS(extractor.h,
294           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
295             extractor=1))
296         ;;
297       *)
298         LDFLAGS="-L$with_extractor/lib $LDFLAGS"
299         CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
300         AC_CHECK_HEADERS(extractor.h,
301           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
302             EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
303             extractor=1))
304         ;;
305     esac
306    ],
307    [AC_MSG_RESULT([--with-extractor not specified])
308     AC_CHECK_HEADERS(extractor.h,
309      AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
310       extractor=1))])
311 if test "$extractor" != 1
312 then
313  AC_MSG_ERROR([GNUnet requires libextractor])
314 fi
315 # restore LIBS
316 LIBS=$SAVE_LIBS
317
318
319 # Checks for standard header files.
320 AC_HEADER_DIRENT
321 AC_HEADER_STDC
322
323 # Check for headers that are ALWAYS required
324 AC_CHECK_HEADERS([fcntl.h math.h errno.h ctype.h limits.h stdio.h stdlib.h string.h unistd.h stdarg.h signal.h locale.h sys/stat.h sys/types.h],,AC_MSG_ERROR([Compiling GNUnet requires standard UNIX headers files]))
325
326 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
327 AC_CHECK_HEADERS([langinfo.h sys/param.h sys/mount.h sys/statvfs.h sys/select.h sockLib.h sys/mman.h sys/msg.h sys/vfs.h arpa/inet.h fcntl.h libintl.h netdb.h netinet/in.h netinet/in_systm.h sys/ioctl.h sys/socket.h sys/time.h unistd.h kstat.h sys/sysinfo.h kvm.h sys/file.h sys/resource.h ifaddrs.h mach/mach.h stddef.h sys/timeb.h terminos.h argz.h ucred.h endian.h sys/endian.h])
328
329 SAVE_LDFLAGS=$LDFLAGS
330 SAVE_CPPFLAGS=$CPPFLAGS
331
332 # test for sqlite
333 sqlite=false
334 AC_MSG_CHECKING(for SQLite)
335 AC_ARG_WITH(sqlite,
336   [  --with-sqlite=PFX       base of SQLite installation],
337   [AC_MSG_RESULT("$with_sqlite")
338    case $with_sqlite in
339    no)
340      ;;
341    yes)
342     AC_CHECK_HEADERS(sqlite3.h,
343      sqlite=true)
344      ;;
345    *)
346     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
347     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
348     AC_CHECK_HEADERS(sqlite3.h,
349      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
350      SQLITE_LDFLAGS="-L$with_sqlite/lib"
351      SQLITE_CPPFLAGS="-I$with_sqlite/include"
352      sqlite=true)
353     LDFLAGS=$SAVE_LDFLAGS
354     CPPFLAGS=$SAVE_CPPFLAGS
355     ;;
356    esac
357   ],
358   [AC_MSG_RESULT([--with-sqlite not specified])
359     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
360 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
361 AC_SUBST(SQLITE_CPPFLAGS)
362 AC_SUBST(SQLITE_LDFLAGS)
363
364 # test for postgres
365 postgres=false
366 AC_MSG_CHECKING(for postgres)
367 AC_ARG_WITH(postgres,
368   [  --with-postgres=PFX       base of postgres installation],
369   [AC_MSG_RESULT("$with_postgres")
370    case $with_postgres in
371    no)
372      ;;
373    yes)
374     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
375      postgres=true)
376      ;;
377    *)
378     LDFLAGS="-L$with_postgres/lib $LDFLAGS"
379     CPPFLAGS="-I$with_postgres/include $CPPFLAGS"
380     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
381      EXT_LIB_PATH="-L$with_postgres/lib $EXT_LIB_PATH"
382      POSTGRES_LDFLAGS="-L$with_postgres/lib"
383      POSTGRES_CPPFLAGS="-I$with_postgres/include"
384      postgres=true)
385     LDFLAGS=$SAVE_LDFLAGS
386     CPPFLAGS=$SAVE_CPPFLAGS
387     ;;
388    esac
389   ],
390   [AC_MSG_RESULT([--with-postgres not specified])
391     AC_CHECK_HEADERS(postgresql/libpq-fe.h, postgres=true)])
392 AM_CONDITIONAL(HAVE_POSTGRES, test x$postgres = xtrue)
393 AC_SUBST(POSTGRES_CPPFLAGS)
394 AC_SUBST(POSTGRES_LDFLAGS)
395
396 # test for libz (maybe required for linking mysql)
397 zlib=1
398 AC_CHECK_LIB(z, compress,,zlib=0)
399 AM_CONDITIONAL(HAVE_ZLIB, test x$zlib = x1)
400 if test "$zlib" != 1
401 then
402  AC_MSG_ERROR([GNUnet requires zlib])
403 fi
404
405 # mysql & windows
406 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
407 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
408
409 if test "$build_target" = "mingw"
410 then
411   CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
412 fi
413
414 # test for mysql
415 mysql=false
416 mysqlfail=false
417 SAVE_LDFLAGS=$LDFLAGS
418 SAVE_CPPFLAGS=$CPPFLAGS
419 AC_MSG_CHECKING(for mysql)
420 AC_ARG_WITH(mysql,
421   [  --with-mysql=PFX        base of MySQL installation],
422   [AC_MSG_RESULT("$with_mysql")
423    if test "$with_mysql" != "no"
424    then
425     if test "$with_mysql" != "yes"
426     then
427       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
428       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
429     fi
430     AC_CHECK_HEADERS(mysql/mysql.h,
431      AC_CHECK_LIB(mysqlclient, mysql_init,
432       MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
433       MYSQL_CPPFLAGS="-I$with_mysql/include"
434
435       mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
436    fi
437   ],
438   [AC_MSG_RESULT([--with-mysql not specified])
439    LDFLAGS="-L/usr/lib/mysql $LDFLAGS $ZLIBS"
440    AC_CHECK_LIB(mysqlclient, mysql_init,
441     [AC_CHECK_HEADERS(mysql/mysql.h,
442       MYSQL_LDFLAGS="-L/usr/lib/mysql"
443       mysql=true
444
445      , [], [$CYGWIN_MYSQL_MAGIC])])
446   ])
447
448 AC_SUBST(MYSQL_LDFLAGS)
449 AC_SUBST(MYSQL_CPPFLAGS)
450
451 # additional version check for mysql
452 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
453 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
454 then
455   AC_MSG_CHECKING(mysql version)
456   AC_RUN_IFELSE([AC_LANG_PROGRAM(
457     [[$CYGWIN_MYSQL_MAGIC
458       #include <mysql/mysql.h>]],
459     [[if (MYSQL_VERSION_ID < 40100)
460         return(-1);
461       else
462         return(0);
463     ]])
464     ],mysql=true,mysql=false)
465   if test "$mysql" = "false"
466   then
467     mysqlfail=true
468     AC_MSG_RESULT([fail, >= 4.1 required])
469   else
470     AC_MSG_RESULT(ok)
471   fi
472 fi
473 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
474 AM_CONDITIONAL(HAVE_MYSQLE, test "0" = "1")
475 # restore LIBS
476 LIBS=$SAVE_LIBS
477 LDFLAGS=$SAVE_LDFLAGS
478 CPPFLAGS=$SAVE_CPPFLAGS
479
480 if test "$sqlite" = 0 -a "$mysql" = 0
481 then
482  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
483 fi
484
485 # libmicrohttpd
486 lmhd=0
487 AC_MSG_CHECKING([for libmicrohttpd])
488 AC_ARG_WITH(microhttpd,
489    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
490    [AC_MSG_RESULT([$with_microhttpd])
491     case $with_microhttpd in
492       no)
493         ;;
494       yes)
495         AC_CHECK_HEADERS([microhttpd.h],
496           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
497             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
498               lmhd=1),
499             [],[#include "src/include/platform.h"
500                 #include <microhttpd.h>]),,
501             [#include "src/include/platform.h"])
502         ;;
503       *)
504         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
505         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
506         AC_CHECK_HEADERS(microhttpd.h,
507           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
508             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
509               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
510               lmhd=1),
511             [],[#include "src/include/platform.h"
512                 #include <microhttpd.h>]),,
513             [#include "src/include/platform.h"])
514         ;;
515     esac
516    ],
517    [AC_MSG_RESULT([--with-microhttpd not specified])
518     AC_CHECK_HEADERS([microhttpd.h],
519       AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
520         AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
521           lmhd=1),
522         [],[#include "src/include/platform.h"
523             #include <microhttpd.h>]),,
524        [#include "src/include/platform.h"])])
525 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
526 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
527
528
529 # openssl
530 openssl=0
531 AC_MSG_CHECKING([for openssl])
532 AC_ARG_WITH(openssl,
533    [  --with-openssl=PFX   base of openssl installation],
534    [AC_MSG_RESULT([$with_openssl])
535     case $with_openssl in
536       no)
537         ;;
538       yes)
539         AC_CHECK_HEADERS([openssl/ssl.h],
540             AC_CHECK_LIB([ssl], [SSL_new],
541              openssl=1))
542         ;;
543       *)
544         LDFLAGS="-L$with_openssl/lib $LDFLAGS"
545         CPPFLAGS="-I$with_openssl/include $CPPFLAGS"
546         AC_CHECK_HEADERS([openssl/ssl.h],
547             AC_CHECK_LIB([ssl], [SSL_new],
548               EXT_LIB_PATH="-L$with_openssl/lib $EXT_LIB_PATH"
549               openssl=1))
550         ;;
551     esac
552    ],
553    [AC_MSG_RESULT([--with-openssl not specified])
554     AC_CHECK_HEADERS([openssl/ssl.h],
555         AC_CHECK_LIB([ssl], [SSL_new],
556           openssl=1))])
557 AM_CONDITIONAL(HAVE_OPENSSL, test x$openssl = x1)
558 AC_DEFINE_UNQUOTED([HAVE_OPENSSL], $openssl, [We have openssl])
559
560
561
562
563
564
565 # restore LIBS
566 LIBS=$SAVE_LIBS
567
568 # check for python & pexpect (used for some testcases only)
569 AM_PATH_PYTHON([2.5],, [:])
570 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
571
572 if test "$PYTHON" != :
573 then
574   AC_MSG_CHECKING([for pexpect])
575   $PYTHON -c "import pexpect" > /dev/null 2> /dev/null
576   PYEX=$?
577   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, test $PYEX -eq 0)
578   if test $PYEX -eq 0
579   then
580     AC_MSG_RESULT([yes])
581   else
582     AC_MSG_RESULT([not found])
583   fi
584 else
585   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, 0)
586 fi
587
588 # libesmtp
589 esmtp=0
590 AC_MSG_CHECKING([for libesmtp])
591 AC_ARG_WITH(esmtp,
592    [  --with-esmtp=PFX        base of libesmtp installation],
593    [AC_MSG_RESULT([$with_esmtp])
594     case $with_esmtp in
595       no)
596         ;;
597       yes)
598         AC_CHECK_HEADERS(libesmtp.h,
599           AC_CHECK_LIB([esmtp], [smtp_start_session],
600             esmtp=1))
601         ;;
602       *)
603         LDFLAGS="-L$with_esmtp/lib $LDFLAGS"
604         CPPFLAGS="-I$with_esmtp/include $CPPFLAGS"
605         AC_CHECK_HEADERS(libesmtp.h,
606           AC_CHECK_LIB([esmtp], [smtp_start_session],
607             EXT_LIB_PATH="-L$with_esmtp/lib $EXT_LIB_PATH"
608               esmtp=1))
609         ;;
610     esac
611    ],
612    [AC_MSG_RESULT([--with-esmtp not specified])
613     AC_CHECK_HEADERS(libesmtp.h,
614       AC_CHECK_LIB([esmtp], [smtp_start_session],
615           esmtp=1))])
616 AM_CONDITIONAL(HAVE_ESMTP, test x$esmtp = x1)
617 AC_DEFINE_UNQUOTED([HAVE_ESMTP], $esmtp, [We have libesmtp])
618 # restore LIBS
619 LIBS=$SAVE_LIBS
620
621
622
623 # check for gettext
624 AM_GNU_GETTEXT([external])
625 AM_GNU_GETTEXT_VERSION([0.16.1])
626
627 # check for iconv
628 AM_ICONV
629
630 # Checks for standard typedefs, structures, and compiler characteristics.
631 AC_TYPE_PID_T
632 AC_TYPE_SIZE_T
633 AC_TYPE_MODE_T
634 AC_HEADER_TIME
635 AC_HEADER_STAT
636 AC_HEADER_STDBOOL
637 AC_STRUCT_TM
638
639 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
640    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
641    ],
642    [],
643    [
644       #include <sys/types.h>
645       #include <sys/socket.h>
646       #include <netinet/in.h>
647    ])
648
649
650
651 # Checks for library functions.
652 AC_FUNC_CLOSEDIR_VOID
653 AC_FUNC_FORK
654 AC_FUNC_VFORK
655 AC_PROG_GCC_TRADITIONAL
656 AC_FUNC_MEMCMP
657 AC_FUNC_SELECT_ARGTYPES
658 AC_FUNC_CHOWN
659
660 AC_TYPE_SIGNAL
661 AC_FUNC_STAT
662 AC_FUNC_STRFTIME
663 AC_FUNC_VPRINTF
664 AC_HEADER_SYS_WAIT
665 AC_TYPE_OFF_T
666 AC_TYPE_UID_T
667 AC_CHECK_FUNCS([floor gethostname memmove rmdir strncasecmp strrchr strtol atoll dup2 fdatasync ftruncate gettimeofday memset mkdir mkfifo select socket strcasecmp strchr strdup strerror strstr clock_gettime getrusage rand uname setlocale getcwd mktime gmtime_r gmtime strlcpy strlcat ftruncate stat64 sbrk mmap mremap setrlimit sysconf gethostbyaddr initgroups getifaddrs freeifaddrs getnameinfo getaddrinfo inet_ntoa localtime_r nl_langinfo putenv realpath strndup gethostbyname2 gethostbyname getpeerucred getpeereid])
668
669 # restore LIBS
670 LIBS=$SAVE_LIBS
671
672 gn_user_home_dir="~/.gnunet"
673 AC_ARG_WITH(user-home-dir,
674         AC_HELP_STRING(
675                 [--with-user-home-dir=DIR],
676                 [default user home directory (~/.gnunet)]),
677         [gn_user_home_dir=$withval])
678 AC_SUBST(GN_USER_HOME_DIR, $gn_user_home_dir)
679 gn_daemon_home_dir="/var/lib/gnunet"
680 AC_ARG_WITH(daemon-home-dir,
681         AC_HELP_STRING(
682                 [--with-daemon-home-dir=DIR],
683                 [default daemon home directory (/var/lib/gnunet)]),
684         [gn_daemon_home_dir=$withval])
685 AC_SUBST(GN_DAEMON_HOME_DIR, $gn_daemon_home_dir)
686 gn_daemon_config_dir="/etc"
687 AC_ARG_WITH(daemon-config-dir,
688         AC_HELP_STRING(
689                 [--with-daemon-config-dir=DIR],
690                 [default daemon config directory (/etc)]),
691         [gn_daemon_config_dir=$withval])
692 AC_SUBST(GN_DAEMON_CONFIG_DIR, $gn_daemon_config_dir)
693
694 GN_INTLINCL=""
695 GN_LIBINTL="$LTLIBINTL"
696 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
697 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
698 if test x$enable_framework_build = xyes
699 then
700   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
701   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
702   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
703   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL]) 
704 fi
705
706 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
707 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
708
709 AC_SUBST(GN_LIB_LDFLAGS)
710 AC_SUBST(GN_PLUGIN_LDFLAGS)
711 AC_SUBST(GN_INTLINCL)
712 AC_SUBST(GN_LIBINTL)
713
714 AC_SUBST(CPPFLAGS)
715 AC_SUBST(LIBS)
716 AC_SUBST(LDFLAGS)
717 AC_SUBST(EXT_LIB_PATH)
718 AC_SUBST(EXT_LIBS)
719
720 AC_SUBST(LIBPREFIX)
721 AC_SUBST(DLLDIR)
722 AC_SUBST(EXT_LIB_PATH)
723
724
725 # should 'make check' run tests?
726 AC_MSG_CHECKING(whether to run tests)
727 AC_ARG_ENABLE([testruns],
728    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
729    [enable_tests_run=${enableval}],
730    [enable_tests_run=yes])
731 AC_MSG_RESULT($enable_test_run)
732 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
733
734 # should expensive tests be run?
735 AC_MSG_CHECKING(whether to run expensive tests)
736 AC_ARG_ENABLE([expensivetests],
737    [AS_HELP_STRING([--enable-expensive-tests], [enable running expensive testcases])],
738    [enable_expensive=${enableval}],
739    [enable_expensive=no])
740 AC_MSG_RESULT($enable_expensive)
741 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
742
743 # should benchmarks be run?
744 AC_MSG_CHECKING(whether to run benchmarks during make check)
745 AC_ARG_ENABLE([benchmarks],
746    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
747    [enable_benchmarks=${enableval}],
748    [enable_benchmarks=no])
749 AC_MSG_RESULT($enable_benchmarks)
750 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
751
752 # should experimental code be compiled (code that may not yet compile)?
753 AC_MSG_CHECKING(whether to compile experimental code)
754 AC_ARG_ENABLE([experimental],
755    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
756    [enable_experimental=${enableval}],
757    [enable_experimental=no])
758 AC_MSG_RESULT($enable_experimental)
759 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
760
761 # should malicious code be compiled (code used for testing with malicious peers)
762 AC_MSG_CHECKING(whether to compile malicious code)
763 AC_ARG_ENABLE([malicious],
764    [AS_HELP_STRING([--enable-malicious], [enable compiling malicious code (only for developers for testing)])],
765    [enable_malicious=${enableval}],
766    [enable_malicious=no])
767 AC_MSG_RESULT($enable_malicious)
768 AM_CONDITIONAL([HAVE_MALICIOUS], [test "x$enable_malicious" = "xyes"])
769 if test "$enable_malicious" = "yes"
770 then
771  AC_DEFINE([HAVE_MALICIOUS],[1],[include malicious code])
772 else
773  AC_DEFINE([HAVE_MALICIOUS],[0],[disable malicious code])
774 fi
775
776 # should code be enabled that works around missing OS functionality on Windows?
777 # used for test cases
778 if test $build_target = "mingw"
779 then
780         workarounds=1
781 else
782   AC_MSG_CHECKING(whether to enable windows workarounds)
783   AC_ARG_ENABLE([windows_workarounds], 
784      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
785      [enable_workarounds=${enableval}],
786      [enable_workarounds=no])
787   AC_MSG_RESULT($enable_workarounds)
788   if test x$enable_windows_workarounds = "xyes"
789   then
790      workarounds=1
791   else
792      workarounds=0
793    fi
794 fi
795 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
796
797 # gcov compilation
798 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
799 AC_ARG_ENABLE([coverage], 
800               AS_HELP_STRING([--enable-coverage],
801                              [compile the library with code coverage support]),
802               [use_gcov=${enableval}], 
803               [use_gcov=no])
804 AC_MSG_RESULT($use_gcov)
805 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
806
807
808 AC_CONFIG_FILES([ 
809 Makefile
810 contrib/Makefile
811 doc/Makefile
812 doc/man/Makefile
813 m4/Makefile
814 po/Makefile.in 
815 src/Makefile
816 src/arm/Makefile
817 src/block/Makefile
818 src/core/Makefile
819 src/datacache/Makefile
820 src/datastore/Makefile
821 src/dht/Makefile
822 src/dv/Makefile
823 src/fragmentation/Makefile
824 src/fs/Makefile
825 src/hello/Makefile
826 src/include/Makefile
827 src/include/gnunet_directories.h
828 src/hostlist/Makefile
829 src/mesh/Makefile
830 src/monkey/Makefile
831 src/nat/Makefile
832 src/peerinfo/Makefile
833 src/peerinfo-tool/Makefile
834 src/statistics/Makefile
835 src/template/Makefile
836 src/testing/Makefile
837 src/topology/Makefile
838 src/transport/Makefile
839 src/util/Makefile
840 src/vpn/Makefile
841 src/chat/Makefile
842 pkgconfig/Makefile
843 pkgconfig/gnunetarm.pc
844 pkgconfig/gnunetblock.pc
845 pkgconfig/gnunetcore.pc
846 pkgconfig/gnunetdatacache.pc
847 pkgconfig/gnunetdatastore.pc
848 pkgconfig/gnunetdht.pc
849 pkgconfig/gnunetdhtlog.pc
850 pkgconfig/gnunetdv.pc
851 pkgconfig/gnunetfragmentation.pc
852 pkgconfig/gnunetfs.pc
853 pkgconfig/gnunethello.pc
854 pkgconfig/gnunetpeerinfo.pc
855 pkgconfig/gnunetstatistics.pc
856 pkgconfig/gnunettesting.pc
857 pkgconfig/gnunettransport.pc
858 pkgconfig/gnunetutil.pc
859 ])
860 AC_OUTPUT
861
862 # Finally: summary!
863
864 # warn user if mysql found but not used due to version
865 if test "$mysqlfail" = "true"
866 then
867   AC_MSG_NOTICE([NOTICE: MySQL found, but too old. MySQL support will not be compiled.])
868 fi
869
870 # sqlite
871 if test "x$sqlite" = "x0"
872 then
873   AC_MSG_NOTICE([NOTICE: sqlite not found.  sqLite support will not be compiled.])
874 fi
875
876 if test "x$lmhd" != "x1"
877 then
878  AC_MSG_NOTICE([NOTICE: libmicrohttpd not found, http transport will not be installed.])
879 fi
880
881 if test "x$esmtp" != "x1"
882 then
883  AC_MSG_NOTICE([NOTICE: libesmtp not found, monkey will not be installed.])
884 fi
885
886 if test "x$openssl" != "x1"
887 then
888  AC_MSG_NOTICE([NOTICE: OpenSSL not found, monkey will not be installed.])
889 fi
890
891 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
892
893 if test "$enable_framework_build" = "yes"
894 then
895   AC_MSG_NOTICE([NOTICE: Mac OS X framework build enabled.])
896 fi
897
898 AC_MSG_NOTICE([********************************************
899 You can compile GNUnet with
900         make
901 now. After that, run (if necessary as 'root')
902         make install
903 to install everything. You may want to create a new user account
904 to run the GNUnet service:
905         adduser gnunet
906 You also need to create an configuration file that should
907 specify the path where GNUnet should store data.  For example,
908 you could store in "/etc/gnunet.conf" the following lines:
909
910 [[PATHS]]
911 SERVICEHOME = /var/lib/gnunet
912 DEFAULTCONFIG = /etc/gnunet.conf
913
914 Now, in order to start your peer, run as the 'gnunet' user
915         gnunet-arm -s
916
917 Each GNUnet user should also create an (at least initially) empty
918 configuration file:
919         mkdir $HOME/.gnunet/
920         touch $HOME/.gnunet/gnunet.conf
921         
922 Optionally, download and compile gnunet-gtk to get a GUI.
923 ********************************************])