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