safety check: session address comparison
[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 extra_logging=GNUNET_NO
197 AC_ARG_ENABLE([logging],
198    AS_HELP_STRING([--enable-logging@<:@=value@:>@],[Enable logging calls. Possible values: yes,no,verbose,veryverbose ('yes' is the default)]),
199    [AS_IF([test "x$enableval" = "xyes"], [],
200           [test "x$enableval" = "xno"], [AC_DEFINE([GNUNET_CULL_LOGGING],[],[Define to cull all logging calls])],
201           [test "x$enableval" = "xverbose"], [extra_logging=GNUNET_YES]
202           [test "x$enableval" = "xveryverbose"], [extra_logging=\(GNUNET_YES+1\)])
203    ], [])
204 AC_DEFINE_UNQUOTED([GNUNET_EXTRA_LOGGING],[$extra_logging],[1 if extra logging is enabled, 2 for very verbose extra logging, 0 otherwise])
205
206 if test $build = $target
207 then
208 AC_MSG_CHECKING([for working HMAC])
209 AC_LANG_PUSH(C)
210 LIBS="$LIBS $LIBGCRYPT_LIBS"
211 CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
212 AC_RUN_IFELSE(
213   [AC_LANG_PROGRAM([#include <gcrypt.h>], [[
214         gcry_md_hd_t mac;
215       
216         unsigned char data[] = { 0xbf, 0x16, 0x6e, 0x46, 0x3a, 0x6c, 0xf3, 0x93, 0xa7, 0x72,
217             0x11, 0xa1, 0xdc, 0x0b, 0x07, 0xdb, 0x1a, 0x5e, 0xd9, 0xb9, 0x81, 0xbe,
218             0xea, 0xe4, 0x31, 0x5f, 0x24, 0xff, 0xfe, 0x50, 0x8a, 0xde };
219         unsigned char key[] = { 0xfc, 0x62, 0x76, 0x35 };
220         unsigned char result[] = {0xa2, 0xb, 0x1, 0xd9, 0xc0, 0x8b, 0x5a, 0x12, 0x80,
221             0xd5, 0x50, 0x12, 0x8e, 0xd0, 0x5b, 0xb6, 0x5c, 0x87, 0x24, 0xe2, 0xd0,
222             0xd2, 0xaf, 0x63, 0xae, 0xd1, 0xd6, 0x64, 0x14, 0xe3, 0x6e, 0x61, 0x5b,
223             0xd, 0xba, 0x17, 0x7d, 0xd3, 0x10, 0xb1, 0x37, 0x41, 0x91, 0x7d, 0xeb,
224             0x1, 0x4d, 0x71, 0xe8, 0x59, 0x71, 0x42, 0x8e, 0xd6, 0xf3, 0x29, 0x3b,
225             0x90, 0xf2, 0xd1, 0xaf, 0x65, 0x1e, 0xb3};
226       
227         if (!gcry_check_version (GCRYPT_VERSION))
228           return 1;
229   
230         gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
231         gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
232   
233         if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
234           return 2;
235   
236         gcry_md_setkey (mac, key, sizeof (key));
237         gcry_md_write (mac, data, sizeof (data));
238   
239         if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
240           return 3;
241   
242         gcry_md_close (mac);
243   
244         return 0;
245     ]])],
246   [AC_MSG_RESULT([yes])],
247   [
248    if test $? = 3
249    then
250      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.])
251    else
252      AC_MSG_FAILURE([HMAC test failed])
253    fi
254   ])
255 AC_LANG_POP(C)
256 fi      # $build = $target
257
258 # libcurl
259 LIBCURL_CHECK_CONFIG(,7.20.1,,AC_MSG_ERROR([GNUnet requires libcurl >= 7.20.1]))
260 # restore LIBS
261 LIBS=$SAVE_LIBS
262
263 AC_ARG_ENABLE([ats],
264   [AS_HELP_STRING([--enable-ats], [enable ATS code])],
265   [enable_ats=${enableval}],
266   [enable_ats=no])
267 if test x${enable_ats} = xyes
268 then
269         AC_CHECK_HEADERS([glpk.h],[glpk=true],[gplk=false])
270         AC_CHECK_LIB([glpk],[glp_create_prob],,[gplk=false])
271         # GLPK must support atm MLP presolving, version >= 4.32
272         AC_CHECK_MEMBERS(glp_iocp.presolve,,[gplk=false],[[#include <glpk.h>]])
273         if test x$gplk = xfalse
274         then
275                 AM_CONDITIONAL(HAVE_LIBGLPK, false)
276                 AC_MSG_WARN([GNUnet requires GLPK  >= 4.32])
277         else
278                 AM_CONDITIONAL(HAVE_LIBGLPK, true)
279                 AC_DEFINE([HAVE_LIBGLPK],[1],[Have GLPK])
280         fi
281 else
282         AM_CONDITIONAL(HAVE_LIBGLPK, false)
283         AC_MSG_RESULT([no])
284 fi
285
286 # test for kvm and kstat (for CPU stats under BSD/Solaris)
287 AC_CHECK_LIB([kvm],[kvm_open])
288 AC_CHECK_LIB([kstat],[kstat_open])
289
290 # test for libextractor
291 extractor=0
292 AC_MSG_CHECKING(for libextractor)
293 AC_ARG_WITH(extractor,
294    [  --with-extractor=PFX    base of libextractor installation],
295    [AC_MSG_RESULT([$with_extractor])
296     case $with_extractor in
297       no)
298         ;;
299       yes)
300         AC_CHECK_HEADERS(extractor.h,
301           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
302             extractor=1))
303         ;;
304       *)
305         LDFLAGS="-L$with_extractor/lib $LDFLAGS"
306         CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
307         AC_CHECK_HEADERS(extractor.h,
308           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
309             EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
310             extractor=1))
311         ;;
312     esac
313    ],
314    [AC_MSG_RESULT([--with-extractor not specified])
315     AC_CHECK_HEADERS(extractor.h,
316      AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
317       extractor=1))])
318 if test "$extractor" != 1
319 then
320  AC_MSG_ERROR([GNUnet requires libextractor])
321 fi
322 # restore LIBS
323 LIBS=$SAVE_LIBS
324
325
326 # Checks for standard header files.
327 AC_HEADER_DIRENT
328 AC_HEADER_STDC
329
330 # Check for headers that are ALWAYS required
331 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]))
332
333 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
334 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])
335
336 SAVE_LDFLAGS=$LDFLAGS
337 SAVE_CPPFLAGS=$CPPFLAGS
338
339 # test for sqlite
340 sqlite=false
341 AC_MSG_CHECKING(for SQLite)
342 AC_ARG_WITH(sqlite,
343   [  --with-sqlite=PFX       base of SQLite installation],
344   [AC_MSG_RESULT("$with_sqlite")
345    case $with_sqlite in
346    no)
347      ;;
348    yes)
349     AC_CHECK_HEADERS(sqlite3.h,
350      sqlite=true)
351      ;;
352    *)
353     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
354     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
355     AC_CHECK_HEADERS(sqlite3.h,
356      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
357      SQLITE_LDFLAGS="-L$with_sqlite/lib"
358      SQLITE_CPPFLAGS="-I$with_sqlite/include"
359      sqlite=true)
360     LDFLAGS=$SAVE_LDFLAGS
361     CPPFLAGS=$SAVE_CPPFLAGS
362     ;;
363    esac
364   ],
365   [AC_MSG_RESULT([--with-sqlite not specified])
366     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
367 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
368 AC_SUBST(SQLITE_CPPFLAGS)
369 AC_SUBST(SQLITE_LDFLAGS)
370
371 # test for postgres
372 postgres=false
373 AC_MSG_CHECKING(for postgres)
374 AC_ARG_WITH(postgres,
375   [  --with-postgres=PFX       base of postgres installation],
376   [AC_MSG_RESULT("$with_postgres")
377    case $with_postgres in
378    no)
379      ;;
380    yes)
381     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
382      postgres=true)
383      ;;
384    *)
385     LDFLAGS="-L$with_postgres/lib $LDFLAGS"
386     CPPFLAGS="-I$with_postgres/include $CPPFLAGS"
387     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
388      EXT_LIB_PATH="-L$with_postgres/lib $EXT_LIB_PATH"
389      POSTGRES_LDFLAGS="-L$with_postgres/lib"
390      POSTGRES_CPPFLAGS="-I$with_postgres/include"
391      postgres=true)
392     LDFLAGS=$SAVE_LDFLAGS
393     CPPFLAGS=$SAVE_CPPFLAGS
394     ;;
395    esac
396   ],
397   [AC_MSG_RESULT([--with-postgres not specified])
398     AC_CHECK_HEADERS(postgresql/libpq-fe.h, postgres=true)])
399 AM_CONDITIONAL(HAVE_POSTGRES, test x$postgres = xtrue)
400 AC_SUBST(POSTGRES_CPPFLAGS)
401 AC_SUBST(POSTGRES_LDFLAGS)
402
403 # test for libz (maybe required for linking mysql)
404 zlib=1
405 AC_CHECK_LIB(z, compress,,zlib=0)
406 AM_CONDITIONAL(HAVE_ZLIB, test x$zlib = x1)
407 if test "$zlib" != 1
408 then
409  AC_MSG_ERROR([GNUnet requires zlib])
410 fi
411
412 # mysql & windows
413 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
414 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
415
416 if test "$build_target" = "mingw"
417 then
418   CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
419 fi
420
421 # test for mysql
422 mysql=false
423 mysqlfail=false
424 SAVE_LDFLAGS=$LDFLAGS
425 SAVE_CPPFLAGS=$CPPFLAGS
426 AC_MSG_CHECKING(for mysql)
427 AC_ARG_WITH(mysql,
428   [  --with-mysql=PFX        base of MySQL installation],
429   [AC_MSG_RESULT("$with_mysql")
430    if test "$with_mysql" != "no"
431    then
432     if test "$with_mysql" != "yes"
433     then
434       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
435       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
436     fi
437     AC_CHECK_HEADERS(mysql/mysql.h,
438      AC_CHECK_LIB(mysqlclient, mysql_init,
439       MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
440       MYSQL_CPPFLAGS="-I$with_mysql/include"
441
442       mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
443    fi
444   ],
445   [AC_MSG_RESULT([--with-mysql not specified])
446    LDFLAGS="-L/usr/lib/mysql $LDFLAGS $ZLIBS"
447    AC_CHECK_LIB(mysqlclient, mysql_init,
448     [AC_CHECK_HEADERS(mysql/mysql.h,
449       MYSQL_LDFLAGS="-L/usr/lib/mysql"
450       mysql=true
451
452      , [], [$CYGWIN_MYSQL_MAGIC])])
453   ])
454
455 AC_SUBST(MYSQL_LDFLAGS)
456 AC_SUBST(MYSQL_CPPFLAGS)
457
458 # additional version check for mysql
459 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
460 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
461 then
462   AC_MSG_CHECKING(mysql version)
463   AC_RUN_IFELSE([AC_LANG_PROGRAM(
464     [[$CYGWIN_MYSQL_MAGIC
465       #include <mysql/mysql.h>]],
466     [[if (MYSQL_VERSION_ID < 40100)
467         return(-1);
468       else
469         return(0);
470     ]])
471     ],mysql=true,mysql=false)
472   if test "$mysql" = "false"
473   then
474     mysqlfail=true
475     AC_MSG_RESULT([fail, >= 4.1 required])
476   else
477     AC_MSG_RESULT(ok)
478   fi
479 fi
480 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
481 AM_CONDITIONAL(HAVE_MYSQLE, test "0" = "1")
482 # restore LIBS
483 LIBS=$SAVE_LIBS
484 LDFLAGS=$SAVE_LDFLAGS
485 CPPFLAGS=$SAVE_CPPFLAGS
486
487 if test "$sqlite" = 0 -a "$mysql" = 0
488 then
489  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
490 fi
491
492 # libmicrohttpd
493 lmhd=0
494 AC_MSG_CHECKING([for libmicrohttpd])
495 AC_ARG_WITH(microhttpd,
496    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
497    [AC_MSG_RESULT([$with_microhttpd])
498     case $with_microhttpd in
499       no)
500         ;;
501       yes)
502         AC_CHECK_HEADERS([microhttpd.h],
503           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
504             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
505               lmhd=1),
506             [],[#include "src/include/platform.h"
507                 #include <microhttpd.h>]),,
508             [#include "src/include/platform.h"])
509         ;;
510       *)
511         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
512         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
513         AC_CHECK_HEADERS(microhttpd.h,
514           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
515             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
516               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
517               lmhd=1),
518             [],[#include "src/include/platform.h"
519                 #include <microhttpd.h>]),,
520             [#include "src/include/platform.h"])
521         ;;
522     esac
523    ],
524    [AC_MSG_RESULT([--with-microhttpd not specified])
525     AC_CHECK_HEADERS([microhttpd.h],
526       AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
527         AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
528           lmhd=1),
529         [],[#include "src/include/platform.h"
530             #include <microhttpd.h>]),,
531        [#include "src/include/platform.h"])])
532 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
533 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
534
535
536 # restore LIBS
537 LIBS=$SAVE_LIBS
538
539 # check for python & pexpect (used for some testcases only)
540 AM_PATH_PYTHON([2.5],, [:])
541 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
542
543 if test "$PYTHON" != :
544 then
545   AC_MSG_CHECKING([for pexpect])
546   $PYTHON -c "import pexpect" > /dev/null 2> /dev/null
547   PYEX=$?
548   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, test $PYEX -eq 0)
549   if test $PYEX -eq 0
550   then
551     AC_MSG_RESULT([yes])
552   else
553     AC_MSG_RESULT([not found])
554   fi
555 else
556   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, 0)
557 fi
558
559
560 # check for gettext
561 AM_GNU_GETTEXT([external])
562 AM_GNU_GETTEXT_VERSION([0.16.1])
563
564 # check for iconv
565 AM_ICONV
566
567 # Checks for standard typedefs, structures, and compiler characteristics.
568 AC_TYPE_PID_T
569 AC_TYPE_SIZE_T
570 AC_TYPE_MODE_T
571 AC_HEADER_TIME
572 AC_HEADER_STAT
573 AC_HEADER_STDBOOL
574 AC_STRUCT_TM
575
576 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
577    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
578    ],
579    [],
580    [
581       #include <sys/types.h>
582       #include <sys/socket.h>
583       #include <netinet/in.h>
584    ])
585
586
587
588 # Checks for library functions.
589 AC_FUNC_CLOSEDIR_VOID
590 AC_FUNC_FORK
591 AC_FUNC_VFORK
592 AC_PROG_GCC_TRADITIONAL
593 AC_FUNC_MEMCMP
594 AC_FUNC_SELECT_ARGTYPES
595 AC_FUNC_CHOWN
596
597 AC_TYPE_SIGNAL
598 AC_FUNC_STAT
599 AC_FUNC_STRFTIME
600 AC_FUNC_VPRINTF
601 AC_HEADER_SYS_WAIT
602 AC_TYPE_OFF_T
603 AC_TYPE_UID_T
604 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])
605
606 # restore LIBS
607 LIBS=$SAVE_LIBS
608
609 gn_user_home_dir="~/.gnunet"
610 AC_ARG_WITH(user-home-dir,
611         AC_HELP_STRING(
612                 [--with-user-home-dir=DIR],
613                 [default user home directory (~/.gnunet)]),
614         [gn_user_home_dir=$withval])
615 AC_SUBST(GN_USER_HOME_DIR, $gn_user_home_dir)
616 gn_daemon_home_dir="/var/lib/gnunet"
617 AC_ARG_WITH(daemon-home-dir,
618         AC_HELP_STRING(
619                 [--with-daemon-home-dir=DIR],
620                 [default daemon home directory (/var/lib/gnunet)]),
621         [gn_daemon_home_dir=$withval])
622 AC_SUBST(GN_DAEMON_HOME_DIR, $gn_daemon_home_dir)
623 gn_daemon_config_dir="/etc"
624 AC_ARG_WITH(daemon-config-dir,
625         AC_HELP_STRING(
626                 [--with-daemon-config-dir=DIR],
627                 [default daemon config directory (/etc)]),
628         [gn_daemon_config_dir=$withval])
629 AC_SUBST(GN_DAEMON_CONFIG_DIR, $gn_daemon_config_dir)
630
631 GN_INTLINCL=""
632 GN_LIBINTL="$LTLIBINTL"
633 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
634 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
635 if test x$enable_framework_build = xyes
636 then
637   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
638   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
639   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
640   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL]) 
641 fi
642
643 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
644 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
645
646 AC_SUBST(GN_LIB_LDFLAGS)
647 AC_SUBST(GN_PLUGIN_LDFLAGS)
648 AC_SUBST(GN_INTLINCL)
649 AC_SUBST(GN_LIBINTL)
650
651 AC_SUBST(CPPFLAGS)
652 AC_SUBST(LIBS)
653 AC_SUBST(LDFLAGS)
654 AC_SUBST(EXT_LIB_PATH)
655 AC_SUBST(EXT_LIBS)
656
657 AC_SUBST(LIBPREFIX)
658 AC_SUBST(DLLDIR)
659 AC_SUBST(EXT_LIB_PATH)
660
661
662 # should 'make check' run tests?
663 AC_MSG_CHECKING(whether to run tests)
664 AC_ARG_ENABLE([testruns],
665    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
666    [enable_tests_run=${enableval}],
667    [enable_tests_run=yes])
668 AC_MSG_RESULT($enable_test_run)
669 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
670
671 # should expensive tests be run?
672 AC_MSG_CHECKING(whether to run expensive tests)
673 AC_ARG_ENABLE([expensivetests],
674    [AS_HELP_STRING([--enable-expensive-tests], [enable running expensive testcases])],
675    [enable_expensive=${enableval}],
676    [enable_expensive=no])
677 AC_MSG_RESULT($enable_expensive)
678 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
679
680 # should benchmarks be run?
681 AC_MSG_CHECKING(whether to run benchmarks during make check)
682 AC_ARG_ENABLE([benchmarks],
683    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
684    [enable_benchmarks=${enableval}],
685    [enable_benchmarks=no])
686 AC_MSG_RESULT($enable_benchmarks)
687 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
688
689 # should experimental code be compiled (code that may not yet compile)?
690 AC_MSG_CHECKING(whether to compile experimental code)
691 AC_ARG_ENABLE([experimental],
692    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
693    [enable_experimental=${enableval}],
694    [enable_experimental=no])
695 AC_MSG_RESULT($enable_experimental)
696 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
697
698 # should code be enabled that works around missing OS functionality on Windows?
699 # used for test cases
700 if test $build_target = "mingw"
701 then
702         workarounds=1
703 else
704   AC_MSG_CHECKING(whether to enable windows workarounds)
705   AC_ARG_ENABLE([windows_workarounds], 
706      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
707      [enable_workarounds=${enableval}],
708      [enable_workarounds=no])
709   AC_MSG_RESULT($enable_workarounds)
710   if test x$enable_windows_workarounds = "xyes"
711   then
712      workarounds=1
713   else
714      workarounds=0
715    fi
716 fi
717 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
718
719 # gcov compilation
720 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
721 AC_ARG_ENABLE([coverage], 
722               AS_HELP_STRING([--enable-coverage],
723                              [compile the library with code coverage support]),
724               [use_gcov=${enableval}], 
725               [use_gcov=no])
726 AC_MSG_RESULT($use_gcov)
727 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
728
729
730 AC_CONFIG_FILES([ 
731 Makefile
732 contrib/Makefile
733 doc/Makefile
734 doc/man/Makefile
735 m4/Makefile
736 po/Makefile.in 
737 src/Makefile
738 src/arm/Makefile
739 src/ats/Makefile
740 src/block/Makefile
741 src/core/Makefile
742 src/datacache/Makefile
743 src/datastore/Makefile
744 src/dht/Makefile
745 src/dv/Makefile
746 src/fragmentation/Makefile
747 src/fs/Makefile
748 src/hello/Makefile
749 src/include/Makefile
750 src/include/gnunet_directories.h
751 src/hostlist/Makefile
752 src/mesh/Makefile
753 src/nat/Makefile
754 src/nse/Makefile
755 src/peerinfo/Makefile
756 src/peerinfo-tool/Makefile
757 src/statistics/Makefile
758 src/template/Makefile
759 src/testing/Makefile
760 src/topology/Makefile
761 src/transport/Makefile
762 src/util/Makefile
763 src/vpn/Makefile
764 src/chat/Makefile
765 pkgconfig/Makefile
766 pkgconfig/gnunetarm.pc
767 pkgconfig/gnunetblock.pc
768 pkgconfig/gnunetcore.pc
769 pkgconfig/gnunetdatacache.pc
770 pkgconfig/gnunetdatastore.pc
771 pkgconfig/gnunetdht.pc
772 pkgconfig/gnunetdhtlog.pc
773 pkgconfig/gnunetdv.pc
774 pkgconfig/gnunetfragmentation.pc
775 pkgconfig/gnunetfs.pc
776 pkgconfig/gnunethello.pc
777 pkgconfig/gnunetnat.pc
778 pkgconfig/gnunetnse.pc
779 pkgconfig/gnunetpeerinfo.pc
780 pkgconfig/gnunetstatistics.pc
781 pkgconfig/gnunettesting.pc
782 pkgconfig/gnunettransport.pc
783 pkgconfig/gnunetutil.pc
784 ])
785 AC_OUTPUT
786
787 # Finally: summary!
788
789 # warn user if mysql found but not used due to version
790 if test "$mysqlfail" = "true"
791 then
792   AC_MSG_NOTICE([NOTICE: MySQL found, but too old. MySQL support will not be compiled.])
793 fi
794
795 # sqlite
796 if test "x$sqlite" = "x0"
797 then
798   AC_MSG_NOTICE([NOTICE: sqlite not found.  sqLite support will not be compiled.])
799 fi
800
801 if test "x$lmhd" != "x1"
802 then
803  AC_MSG_NOTICE([NOTICE: libmicrohttpd not found, http transport will not be installed.])
804 fi
805
806 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
807
808 if test "$enable_framework_build" = "yes"
809 then
810   AC_MSG_NOTICE([NOTICE: Mac OS X framework build enabled.])
811 fi
812
813 AC_MSG_NOTICE([********************************************
814 You can compile GNUnet with
815         make
816 now. After that, run (if necessary as 'root')
817         make install
818 to install everything. You may want to create a new user account
819 to run the GNUnet service:
820         adduser gnunet
821 You also need to create an configuration file that should
822 specify the path where GNUnet should store data.  For example,
823 you could store in "/etc/gnunet.conf" the following lines:
824
825 [[PATHS]]
826 SERVICEHOME = /var/lib/gnunet
827 DEFAULTCONFIG = /etc/gnunet.conf
828
829 Now, in order to start your peer, run as the 'gnunet' user
830         gnunet-arm -s
831
832 Each GNUnet user should also create an (at least initially) empty
833 configuration file:
834         mkdir $HOME/.gnunet/
835         touch $HOME/.gnunet/gnunet.conf
836         
837 Optionally, download and compile:
838 - gnunet-gtk to get a GUI for file-sharing and configuration.
839 ********************************************])