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