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