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