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