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