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