ign
[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.0pre1],[bug-gnunet@gnu.org])
25 AM_INIT_AUTOMAKE([gnunet], [0.9.0pre1])
26 AC_CONFIG_HEADERS([gnunet_config.h])
27
28 AH_TOP([#define _GNU_SOURCE  1])
29
30 # Checks for programs.
31 AC_CANONICAL_HOST
32 AC_PROG_AWK
33 AC_PROG_CC
34 AC_PROG_CPP
35 AC_PROG_CXX
36 AC_PROG_OBJC
37 AC_PROG_INSTALL
38 AC_PROG_LN_S
39 AC_PROG_MAKE_SET
40 AM_PROG_CC_C_O
41 AC_CANONICAL_HOST
42 LT_INIT([disable-static dlopen win32-dll])
43 LTDL_INIT
44 AC_SUBST(LTDLINCL)
45 AC_SUBST(LIBLTDL)
46 AC_SUBST(MKDIR_P)
47
48 # large file support
49 AC_SYS_LARGEFILE
50 AC_FUNC_FSEEKO
51
52
53 if test "$enable_shared" = "no"
54 then
55  AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])
56 fi
57
58 CFLAGS="-Wall $CFLAGS"
59 # use '-fno-strict-aliasing', but only if the compiler can take it
60 if gcc -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1;
61 then
62  CFLAGS="-fno-strict-aliasing $CFLAGS"
63 fi
64
65 # Use Linux interface name unless the OS has a different preference
66 DEFAULT_INTERFACE="\"eth0\""
67
68 # Check system type
69 case "$host_os" in
70 *darwin* | *rhapsody* | *macosx*)
71      AC_DEFINE_UNQUOTED(DARWIN,1,[This is an Apple Darwin system])
72      CPPFLAGS="-D_APPLE_C_SOURCE $CPPFLAGS"
73      CFLAGS="-no-cpp-precomp -fno-common $CFLAGS"
74      AC_MSG_WARN([The VPN application cannot be compiled on your OS])
75      build_target="darwin"
76      DEFAULT_INTERFACE="\"en0\""
77      LIBPREFIX=
78      DLLDIR=lib
79      ;;
80 linux*)
81      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux system])
82      build_target="linux"
83      LIBPREFIX=
84      DLLDIR=lib
85      AC_PATH_XTRA
86      ;;
87 freebsd*)
88      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
89      AC_DEFINE_UNQUOTED(FREEBSD,1,[This is a FreeBSD system])
90      CFLAGS="-D_THREAD_SAFE $CFLAGS"
91      build_target="freebsd"
92      LIBPREFIX=
93      DLLDIR=lib
94      ;;
95 openbsd*)
96      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
97      AC_DEFINE_UNQUOTED(OPENBSD,1,[This is an OpenBSD system])
98      LIBS=`echo $LIBS | sed -e "s/-ldl//"`
99      build_target="openbsd"
100      LIBPREFIX=
101      DLLDIR=lib
102      ;;
103 netbsd*)
104      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
105      AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system])
106      LIBPREFIX=
107      DLLDIR=lib
108      ;;
109 *solaris*)
110      AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system])
111      AC_DEFINE_UNQUOTED(_REENTRANT,1,[Need with solaris or errno doesnt work])
112      AC_CHECK_LIB(resolv, res_init)
113      AC_CHECK_LIB(rt, nanosleep)
114      build_target="solaris"
115      LIBPREFIX=
116      DLLDIR=lib
117      ;;
118 *arm-linux*)
119      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux system])
120      CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
121      build_target="linux"
122      LIBPREFIX=
123      DLLDIR=lib
124      ;;
125 *cygwin*)
126      AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
127      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
128      AC_CHECK_LIB(intl, gettext)
129      LDFLAGS="$LDFLAGS -no-undefined"
130      CFLAGS="-mms-bitfields $CFLAGS"
131      build_target="cygwin"
132      LIBPREFIX=lib
133      DLLDIR=bin
134      AC_PROG_CXX
135      ;;
136 *mingw*)
137      AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
138      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
139      AC_DEFINE_UNQUOTED(_WIN32,1,[This is a Windows system])
140      AC_CHECK_LIB(intl, gettext)
141      LDFLAGS="$LDFLAGS -no-undefined -Wl,--export-all-symbols"
142      LIBS="$LIBS -lws2_32 -lplibc"
143      CFLAGS="-mms-bitfields $CFLAGS"
144      build_target="mingw"
145      AC_PROG_CXX
146      LIBPREFIX=lib
147      DLLDIR=bin
148      ;;
149 *)
150      AC_MSG_RESULT(Unrecognised OS $host_os)
151      AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
152 ;;
153 esac
154 AC_DEFINE_UNQUOTED([GNUNET_DEFAULT_INTERFACE], $DEFAULT_INTERFACE, [This should be the default choice for the name of the first network interface])
155 AC_SUBST(DEFAULT_INTERFACE)
156
157 AC_MSG_CHECKING([for build target])
158 AM_CONDITIONAL(DARWIN,  test "$build_target" = "darwin")
159 AM_CONDITIONAL(CYGWIN,  test "$build_target" = "cygwin")
160 AM_CONDITIONAL(MINGW,   test "$build_target" = "mingw")
161 AM_CONDITIONAL(SOLARIS, test "$build_target" = "solaris")
162 AM_CONDITIONAL(XFREEBSD, test "$build_target" = "freebsd")
163 AM_CONDITIONAL(OPENBSD, test "$build_target" = "openbsd")
164 AM_CONDITIONAL(LINUX, test "$build_target" = "linux")
165
166 AC_MSG_RESULT([$build_target])
167 AC_SUBST(build_target)
168 AM_CONDITIONAL([am__fastdepOBJC], false)
169 AC_UNALIGNED_64_ACCESS
170
171 # some other checks for standard libs
172 AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
173 AC_CHECK_LIB(socket, socket)
174 AC_CHECK_LIB(m, log)
175 AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
176
177 # 'save' libs; only those libs found so far will be
178 # linked against _everywhere_.  For the others, we
179 # will be more selective!
180 SAVE_LIBS=$LIBS
181
182 # libgcrypt
183 gcrypt=0
184 AM_PATH_LIBGCRYPT(1.2.0, gcrypt=1)
185 AC_CHECK_DECLS([gcry_mpi_lshift], [], [], [[#include <gcrypt.h>]])
186
187 if test $gcrypt = 0
188 then
189   AC_MSG_ERROR([GNUnet needs libgcrypt])
190 fi
191
192 AC_MSG_CHECKING([for working HMAC])
193 AC_LANG_PUSH(C)
194 LIBS="$LIBS $LIBGCRYPT_LIBS"
195 CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
196 AC_RUN_IFELSE(
197   [AC_LANG_PROGRAM([#include <gcrypt.h>], [[
198         gcry_md_hd_t mac;
199       
200         unsigned char data[] = { 0xbf, 0x16, 0x6e, 0x46, 0x3a, 0x6c, 0xf3, 0x93, 0xa7, 0x72,
201             0x11, 0xa1, 0xdc, 0x0b, 0x07, 0xdb, 0x1a, 0x5e, 0xd9, 0xb9, 0x81, 0xbe,
202             0xea, 0xe4, 0x31, 0x5f, 0x24, 0xff, 0xfe, 0x50, 0x8a, 0xde };
203         unsigned char key[] = { 0xfc, 0x62, 0x76, 0x35 };
204         unsigned char result[] = {0xa2, 0xb, 0x1, 0xd9, 0xc0, 0x8b, 0x5a, 0x12, 0x80,
205             0xd5, 0x50, 0x12, 0x8e, 0xd0, 0x5b, 0xb6, 0x5c, 0x87, 0x24, 0xe2, 0xd0,
206             0xd2, 0xaf, 0x63, 0xae, 0xd1, 0xd6, 0x64, 0x14, 0xe3, 0x6e, 0x61, 0x5b,
207             0xd, 0xba, 0x17, 0x7d, 0xd3, 0x10, 0xb1, 0x37, 0x41, 0x91, 0x7d, 0xeb,
208             0x1, 0x4d, 0x71, 0xe8, 0x59, 0x71, 0x42, 0x8e, 0xd6, 0xf3, 0x29, 0x3b,
209             0x90, 0xf2, 0xd1, 0xaf, 0x65, 0x1e, 0xb3};
210       
211         if (!gcry_check_version (GCRYPT_VERSION))
212           return 1;
213   
214         gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
215         gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
216   
217         if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
218           return 2;
219   
220         gcry_md_setkey (mac, key, sizeof (key));
221         gcry_md_write (mac, data, sizeof (data));
222   
223         if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
224           return 3;
225   
226         gcry_md_close (mac);
227   
228         return 0;
229     ]])],
230   [AC_MSG_RESULT([yes])],
231   [
232    if test $? = 3
233    then
234      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.])
235    else
236      AC_MSG_FAILURE([HMAC test failed])
237    fi
238   ])
239 AC_LANG_POP(C)
240
241 # libcurl
242 LIBCURL_CHECK_CONFIG(,7.20.1,,AC_MSG_ERROR([GNUnet requires libcurl >= 7.20.1]))
243 # restore LIBS
244 LIBS=$SAVE_LIBS
245
246 # test for kvm and kstat (for CPU stats under BSD/Solaris)
247 AC_CHECK_LIB([kvm],[kvm_open])
248 AC_CHECK_LIB([kstat],[kstat_open])
249
250 # test for libextractor
251 extractor=0
252 AC_MSG_CHECKING(for libextractor)
253 AC_ARG_WITH(extractor,
254    [  --with-extractor=PFX    base of libextractor installation],
255    [AC_MSG_RESULT([$with_extractor])
256     case $with_extractor in
257       no)
258         ;;
259       yes)
260         AC_CHECK_HEADERS(extractor.h,
261           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
262             extractor=1))
263         ;;
264       *)
265         LDFLAGS="-L$with_extractor/lib $LDFLAGS"
266         CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
267         AC_CHECK_HEADERS(extractor.h,
268           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
269             EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
270             extractor=1))
271         ;;
272     esac
273    ],
274    [AC_MSG_RESULT([--with-extractor not specified])
275     AC_CHECK_HEADERS(extractor.h,
276      AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
277       extractor=1))])
278 if test "$extractor" != 1
279 then
280  AC_MSG_ERROR([GNUnet requires libextractor])
281 fi
282 # restore LIBS
283 LIBS=$SAVE_LIBS
284
285
286 # Checks for standard header files.
287 AC_HEADER_DIRENT
288 AC_HEADER_STDC
289
290 # Check for headers that are ALWAYS required
291 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]))
292
293 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
294 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])
295
296 SAVE_LDFLAGS=$LDFLAGS
297 SAVE_CPPFLAGS=$CPPFLAGS
298
299 # test for sqlite
300 sqlite=false
301 AC_MSG_CHECKING(for SQLite)
302 AC_ARG_WITH(sqlite,
303   [  --with-sqlite=PFX       base of SQLite installation],
304   [AC_MSG_RESULT("$with_sqlite")
305    case $with_sqlite in
306    no)
307      ;;
308    yes)
309     AC_CHECK_HEADERS(sqlite3.h,
310      sqlite=true)
311      ;;
312    *)
313     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
314     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
315     AC_CHECK_HEADERS(sqlite3.h,
316      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
317      SQLITE_LDFLAGS="-L$with_sqlite/lib"
318      SQLITE_CPPFLAGS="-I$with_sqlite/include"
319      sqlite=true)
320     LDFLAGS=$SAVE_LDFLAGS
321     CPPFLAGS=$SAVE_CPPFLAGS
322     ;;
323    esac
324   ],
325   [AC_MSG_RESULT([--with-sqlite not specified])
326     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
327 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
328 AC_SUBST(SQLITE_CPPFLAGS)
329 AC_SUBST(SQLITE_LDFLAGS)
330
331 # test for postgres
332 postgres=false
333 AC_MSG_CHECKING(for postgres)
334 AC_ARG_WITH(postgres,
335   [  --with-postgres=PFX       base of postgres installation],
336   [AC_MSG_RESULT("$with_postgres")
337    case $with_postgres in
338    no)
339      ;;
340    yes)
341     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
342      postgres=true)
343      ;;
344    *)
345     LDFLAGS="-L$with_postgres/lib $LDFLAGS"
346     CPPFLAGS="-I$with_postgres/include $CPPFLAGS"
347     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
348      EXT_LIB_PATH="-L$with_postgres/lib $EXT_LIB_PATH"
349      POSTGRES_LDFLAGS="-L$with_postgres/lib"
350      POSTGRES_CPPFLAGS="-I$with_postgres/include"
351      postgres=true)
352     LDFLAGS=$SAVE_LDFLAGS
353     CPPFLAGS=$SAVE_CPPFLAGS
354     ;;
355    esac
356   ],
357   [AC_MSG_RESULT([--with-postgres not specified])
358     AC_CHECK_HEADERS(postgresql/libpq-fe.h, postgres=true)])
359 AM_CONDITIONAL(HAVE_POSTGRES, test x$postgres = xtrue)
360 AC_SUBST(POSTGRES_CPPFLAGS)
361 AC_SUBST(POSTGRES_LDFLAGS)
362
363 # test for pcap
364 pcap=0
365 AC_MSG_CHECKING(for libpcap)
366 AC_ARG_WITH(pcap,
367   [  --with-pcap=PFX       base of pcap installation],
368   [AC_MSG_RESULT("$with_pcap")
369    case $with_pcap in
370    no)
371      ;;
372    yes)
373     AC_CHECK_HEADERS(pcap.h,
374      pcap=1)
375      ;;
376    *)
377     LDFLAGS="-L$with_pcap/lib $LDFLAGS"
378     CPPFLAGS="-I$with_pcap/include $CPPFLAGS"
379     AC_CHECK_HEADERS(pcap.h,
380      EXT_LIB_PATH="-L$with_pcap/lib $EXT_LIB_PATH"
381      PCAP_LDFLAGS="-L$with_pcap/lib"
382      PCAP_CPPFLAGS="-I$with_pcap/include"
383      pcap=1)
384     LDFLAGS=$SAVE_LDFLAGS
385     CPPFLAGS=$SAVE_CPPFLAGS
386     ;;
387    esac
388   ],
389   [AC_MSG_RESULT([--with-pcap not specified])
390     AC_CHECK_HEADERS(pcap.h, pcap=1)])
391 AM_CONDITIONAL(HAVE_PCAP, test x$pcap = x1)
392 AC_SUBST(PCAP_CPPFLAGS)
393 AC_SUBST(PCAP_LDFLAGS)
394
395
396 # test for libz (maybe required for linking mysql)
397 zlib=1
398 AC_CHECK_LIB(z, compress,,zlib=0)
399 AM_CONDITIONAL(HAVE_ZLIB, test x$zlib = x1)
400 if test "$zlib" != 1
401 then
402  AC_MSG_ERROR([GNUnet requires zlib])
403 fi
404
405 # mysql & windows
406 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
407 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
408
409 if test "$build_target" = "mingw"
410 then
411   CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
412 fi
413
414 # test for mysql
415 mysql=false
416 mysqlfail=false
417 SAVE_LDFLAGS=$LDFLAGS
418 SAVE_CPPFLAGS=$CPPFLAGS
419 AC_MSG_CHECKING(for mysql)
420 AC_ARG_WITH(mysql,
421   [  --with-mysql=PFX        base of MySQL installation],
422   [AC_MSG_RESULT("$with_mysql")
423    if test "$with_mysql" != "no"
424    then
425     if test "$with_mysql" != "yes"
426     then
427       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
428       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
429     fi
430     AC_CHECK_HEADERS(mysql/mysql.h,
431      AC_CHECK_LIB(mysqlclient, mysql_init,
432       MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
433       MYSQL_CPPFLAGS="-I$with_mysql/include"
434
435       mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
436    fi
437   ],
438   [AC_MSG_RESULT([--with-mysql not specified])
439    LDFLAGS="-L/usr/lib/mysql $LDFLAGS $ZLIBS"
440    AC_CHECK_LIB(mysqlclient, mysql_init,
441     [AC_CHECK_HEADERS(mysql/mysql.h,
442       MYSQL_LDFLAGS="-L/usr/lib/mysql"
443       mysql=true
444
445      , [], [$CYGWIN_MYSQL_MAGIC])])
446   ])
447
448 AC_SUBST(MYSQL_LDFLAGS)
449 AC_SUBST(MYSQL_CPPFLAGS)
450
451 # additional version check for mysql
452 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
453 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
454 then
455   AC_MSG_CHECKING(mysql version)
456   AC_RUN_IFELSE([AC_LANG_PROGRAM(
457     [[$CYGWIN_MYSQL_MAGIC
458       #include <mysql/mysql.h>]],
459     [[if (MYSQL_VERSION_ID < 40100)
460         return(-1);
461       else
462         return(0);
463     ]])
464     ],mysql=true,mysql=false)
465   if test "$mysql" = "false"
466   then
467     mysqlfail=true
468     AC_MSG_RESULT([fail, >= 4.1 required])
469   else
470     AC_MSG_RESULT(ok)
471   fi
472 fi
473 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
474 AM_CONDITIONAL(HAVE_MYSQLE, test "0" = "1")
475 # restore LIBS
476 LIBS=$SAVE_LIBS
477 LDFLAGS=$SAVE_LDFLAGS
478 CPPFLAGS=$SAVE_CPPFLAGS
479
480 if test "$sqlite" = 0 -a "$mysql" = 0
481 then
482  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
483 fi
484
485 # libmicrohttpd
486 lmhd=0
487 AC_MSG_CHECKING([for libmicrohttpd])
488 AC_ARG_WITH(microhttpd,
489    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
490    [AC_MSG_RESULT([$with_microhttpd])
491     case $with_microhttpd in
492       no)
493         ;;
494       yes)
495         AC_CHECK_HEADERS([microhttpd.h],
496           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
497             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
498               lmhd=1),
499             [],[#include "src/include/platform.h"
500                 #include <microhttpd.h>]),,
501             [#include "src/include/platform.h"])
502         ;;
503       *)
504         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
505         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
506         AC_CHECK_HEADERS(microhttpd.h,
507           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
508             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
509               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
510               lmhd=1),
511             [],[#include "src/include/platform.h"
512                 #include <microhttpd.h>]),,
513             [#include "src/include/platform.h"])
514         ;;
515     esac
516    ],
517    [AC_MSG_RESULT([--with-microhttpd not specified])
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 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
526 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
527
528
529 # openssl
530 openssl=0
531 AC_MSG_CHECKING([for openssl])
532 AC_ARG_WITH(openssl,
533    [  --with-openssl=PFX   base of openssl installation],
534    [AC_MSG_RESULT([$with_openssl])
535     case $with_openssl in
536       no)
537         ;;
538       yes)
539         AC_CHECK_HEADERS([openssl/ssl.h],
540             AC_CHECK_LIB([ssl], [SSL_new],
541              openssl=1))
542         ;;
543       *)
544         LDFLAGS="-L$with_openssl/lib $LDFLAGS"
545         CPPFLAGS="-I$with_openssl/include $CPPFLAGS"
546         AC_CHECK_HEADERS([openssl/ssl.h],
547             AC_CHECK_LIB([ssl], [SSL_new],
548               EXT_LIB_PATH="-L$with_openssl/lib $EXT_LIB_PATH"
549               openssl=1))
550         ;;
551     esac
552    ],
553    [AC_MSG_RESULT([--with-openssl not specified])
554     AC_CHECK_HEADERS([openssl/ssl.h],
555         AC_CHECK_LIB([ssl], [SSL_new],
556           openssl=1))])
557 AM_CONDITIONAL(HAVE_OPENSSL, test x$openssl = x1)
558 AC_DEFINE_UNQUOTED([HAVE_OPENSSL], $openssl, [We have openssl])
559
560
561
562
563
564
565 # restore LIBS
566 LIBS=$SAVE_LIBS
567
568 # check for python & pexpect (used for some testcases only)
569 AM_PATH_PYTHON([2.5],, [:])
570 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
571
572 if test "$PYTHON" != :
573 then
574   AC_MSG_CHECKING([for pexpect])
575   $PYTHON -c "import pexpect" > /dev/null 2> /dev/null
576   PYEX=$?
577   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, test $PYEX -eq 0)
578   if test $PYEX -eq 0
579   then
580     AC_MSG_RESULT([yes])
581   else
582     AC_MSG_RESULT([not found])
583   fi
584 else
585   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, 0)
586 fi
587
588 # libesmtp
589 esmtp=0
590 AC_MSG_CHECKING([for libesmtp])
591 AC_ARG_WITH(esmtp,
592    [  --with-esmtp=PFX        base of libesmtp installation],
593    [AC_MSG_RESULT([$with_esmtp])
594     case $with_esmtp in
595       no)
596         ;;
597       yes)
598         AC_CHECK_HEADERS(libesmtp.h,
599           AC_CHECK_LIB([esmtp], [smtp_start_session],
600             esmtp=1))
601         ;;
602       *)
603         LDFLAGS="-L$with_esmtp/lib $LDFLAGS"
604         CPPFLAGS="-I$with_esmtp/include $CPPFLAGS"
605         AC_CHECK_HEADERS(libesmtp.h,
606           AC_CHECK_LIB([esmtp], [smtp_start_session],
607             EXT_LIB_PATH="-L$with_esmtp/lib $EXT_LIB_PATH"
608               esmtp=1))
609         ;;
610     esac
611    ],
612    [AC_MSG_RESULT([--with-esmtp not specified])
613     AC_CHECK_HEADERS(libesmtp.h,
614       AC_CHECK_LIB([esmtp], [smtp_start_session],
615           esmtp=1))])
616 AM_CONDITIONAL(HAVE_ESMTP, test x$esmtp = x1)
617 AC_DEFINE_UNQUOTED([HAVE_ESMTP], $esmtp, [We have libesmtp])
618 # restore LIBS
619 LIBS=$SAVE_LIBS
620
621 # check for gettext
622 AM_GNU_GETTEXT([external])
623 AM_GNU_GETTEXT_VERSION([0.16.1])
624
625 # check for iconv
626 AM_ICONV
627
628 # Checks for standard typedefs, structures, and compiler characteristics.
629 AC_TYPE_PID_T
630 AC_TYPE_SIZE_T
631 AC_TYPE_MODE_T
632 AC_HEADER_TIME
633 AC_HEADER_STAT
634 AC_HEADER_STDBOOL
635 AC_STRUCT_TM
636
637 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
638    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
639    ],
640    [],
641    [
642       #include <sys/types.h>
643       #include <sys/socket.h>
644       #include <netinet/in.h>
645    ])
646
647
648
649 # Checks for library functions.
650 AC_FUNC_CLOSEDIR_VOID
651 AC_FUNC_FORK
652 AC_FUNC_VFORK
653 AC_PROG_GCC_TRADITIONAL
654 AC_FUNC_MEMCMP
655 AC_FUNC_SELECT_ARGTYPES
656 AC_FUNC_CHOWN
657
658 AC_TYPE_SIGNAL
659 AC_FUNC_STAT
660 AC_FUNC_STRFTIME
661 AC_FUNC_VPRINTF
662 AC_HEADER_SYS_WAIT
663 AC_TYPE_OFF_T
664 AC_TYPE_UID_T
665 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])
666
667 # restore LIBS
668 LIBS=$SAVE_LIBS
669
670 gn_user_home_dir="~/.gnunet"
671 AC_ARG_WITH(user-home-dir,
672         AC_HELP_STRING(
673                 [--with-user-home-dir=DIR],
674                 [default user home directory (~/.gnunet)]),
675         [gn_user_home_dir=$withval])
676 AC_SUBST(GN_USER_HOME_DIR, $gn_user_home_dir)
677 gn_daemon_home_dir="/var/lib/gnunet"
678 AC_ARG_WITH(daemon-home-dir,
679         AC_HELP_STRING(
680                 [--with-daemon-home-dir=DIR],
681                 [default daemon home directory (/var/lib/gnunet)]),
682         [gn_daemon_home_dir=$withval])
683 AC_SUBST(GN_DAEMON_HOME_DIR, $gn_daemon_home_dir)
684 gn_daemon_config_dir="/etc"
685 AC_ARG_WITH(daemon-config-dir,
686         AC_HELP_STRING(
687                 [--with-daemon-config-dir=DIR],
688                 [default daemon config directory (/etc)]),
689         [gn_daemon_config_dir=$withval])
690 AC_SUBST(GN_DAEMON_CONFIG_DIR, $gn_daemon_config_dir)
691
692 GN_INTLINCL=""
693 GN_LIBINTL="$LTLIBINTL"
694 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
695 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
696 if test x$enable_framework_build = xyes
697 then
698   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
699   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
700   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
701   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL]) 
702 fi
703
704 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
705 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
706
707 AC_SUBST(GN_LIB_LDFLAGS)
708 AC_SUBST(GN_PLUGIN_LDFLAGS)
709 AC_SUBST(GN_INTLINCL)
710 AC_SUBST(GN_LIBINTL)
711
712 AC_SUBST(CPPFLAGS)
713 AC_SUBST(LIBS)
714 AC_SUBST(LDFLAGS)
715 AC_SUBST(EXT_LIB_PATH)
716 AC_SUBST(EXT_LIBS)
717
718 AC_SUBST(LIBPREFIX)
719 AC_SUBST(DLLDIR)
720 AC_SUBST(EXT_LIB_PATH)
721
722
723 # should 'make check' run tests?
724 AC_MSG_CHECKING(whether to run tests)
725 AC_ARG_ENABLE(testruns,
726    [AS_HELP_STRING([--enable-testruns=yes/no],
727                [disable running tests on make check (default is YES)])],
728    [enable_tests_run=$enableval],
729    [enable_tests_run="yes"])
730 AC_MSG_RESULT($enable_test_run)
731 AM_CONDITIONAL([DISABLE_TEST_RUN], [test "x$enable_tests_run" = "xno"])
732
733 # should experimental code be compiled (code that may not yet compile)?
734 disable_experimental=yes
735 AC_MSG_CHECKING(whether to compile experimental code)
736 AC_ARG_ENABLE(experimental,
737    [AS_HELP_STRING([--enable-experimental],
738                [enable compiling experimental code])],
739    [enable_experimental=$enableval],
740    [enable_experimental="no"])
741 AC_MSG_RESULT($enable_experimental)
742 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
743
744 # should malicious code be compiled (code used for testing with malicious peers)
745 enable_malicious=0
746 AC_MSG_CHECKING(whether to compile malicious code)
747 AC_ARG_ENABLE(malicious,
748    [AS_HELP_STRING([--enable-malicious],
749                [enable compiling malicious code (only for developers for testing)])],
750    [enable_malicious=1],
751    [enable_malicious=0])
752 AC_MSG_RESULT($enable_malicious)
753 AM_CONDITIONAL([HAVE_MALICIOUS], [test "x$enable_malicious" = "x1"])
754 AC_DEFINE_UNQUOTED([HAVE_MALICIOUS], $enable_malicious, [Compile malicious code])
755
756 # gcov compilation
757 use_gcov=no
758 AC_ARG_ENABLE([coverage], AS_HELP_STRING([--enable-coverage],
759                                         [Compile the library with code coverage support (default is NO)]),
760                                         [use_gcov=yes], [use_gcov=no])
761 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
762
763 AC_CONFIG_FILES([ 
764 Makefile
765 contrib/Makefile
766 m4/Makefile
767 po/Makefile.in 
768 src/Makefile
769 src/arm/Makefile
770 src/block/Makefile
771 src/core/Makefile
772 src/datacache/Makefile
773 src/datastore/Makefile
774 src/dht/Makefile
775 src/dv/Makefile
776 src/fragmentation/Makefile
777 src/fs/Makefile
778 src/hello/Makefile
779 src/include/Makefile
780 src/include/gnunet_directories.h
781 src/hostlist/Makefile
782 src/monkey/Makefile
783 src/nat/Makefile
784 src/peerinfo/Makefile
785 src/peerinfo-tool/Makefile
786 src/statistics/Makefile
787 src/template/Makefile
788 src/testing/Makefile
789 src/topology/Makefile
790 src/transport/Makefile
791 src/util/Makefile
792 src/vpn/Makefile
793 ])
794 AC_OUTPUT
795
796 # Finally: summary!
797
798 # warn user if mysql found but not used due to version
799 if test "$mysqlfail" = "true"
800 then
801   AC_MSG_NOTICE([NOTICE: MySQL found, but too old. MySQL support will not be compiled.])
802 fi
803
804 # sqlite
805 if test "x$sqlite" = "x0"
806 then
807   AC_MSG_NOTICE([NOTICE: sqlite not found.  sqLite support will not be compiled.])
808 fi
809
810 if test "x$lmhd" != "x1"
811 then
812  AC_MSG_NOTICE([NOTICE: libmicrohttpd not found, http transport will not be installed.])
813 fi
814
815 if test "x$esmtp" != "x1"
816 then
817  AC_MSG_NOTICE([NOTICE: libesmtp not found, monkey will not be installed.])
818 fi
819
820 if test "x$pcap" != "x1"
821 then
822  AC_MSG_NOTICE([NOTICE: libpcap not found, WiFi support will not be installed.])
823 fi
824
825 if test "x$openssl" != "x1"
826 then
827  AC_MSG_NOTICE([NOTICE: OpenSSL not found, monkey will not be installed.])
828 fi
829
830 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
831
832 if test "$enable_framework_build" = "yes"
833 then
834   AC_MSG_NOTICE([NOTICE: Mac OS X framework build enabled.])
835 fi
836
837 AC_MSG_NOTICE([********************************************
838 You can compile GNUnet with
839         make
840 now. After that, run (if necessary as 'root')
841         make install
842 to install everything. You may want to create a new user account
843 to run the GNUnet service:
844         adduser gnunet
845 You also need to create an configuration file that should
846 specify the path where GNUnet should store data.  For example,
847 you could store in "/etc/gnunet.conf" the following lines:
848
849 [PATHS]
850 SERVICEHOME = /opt/gnunet/
851 DEFAULTCONFIG = /etc/gnunet.conf
852
853 Now, in order to start your peer, run as the 'gnunet' user
854         gnunet-arm -s
855
856 Each GNUnet user should also create an (at least initially) empty
857 configuration file:
858         mkdir $HOME/.gnunet/
859         touch $HOME/.gnunet/gnunet.conf
860         
861 Optionally, download and compile gnunet-gtk to get a GUI.
862 ********************************************])