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