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