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