-bump requried MHD version
[oweals/gnunet.git] / configure.ac
1 # This file is part of GNUnet.
2 # (C) 2001--2013 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.5a], [bug-gnunet@gnu.org])
26
27 AC_CANONICAL_TARGET
28 AC_CANONICAL_HOST
29 AC_CANONICAL_SYSTEM
30
31 AM_INIT_AUTOMAKE
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 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 funcstocheck="getnameinfo gethostname gethostbyname gethostbyaddr getaddrinfo"
69
70 # Srcdir in a form that native compiler understands (i.e. DOS path on W32)
71 native_srcdir=$srcdir
72
73 # Check system type
74 case "$host_os" in
75 *darwin* | *rhapsody* | *macosx*)
76      AC_DEFINE_UNQUOTED(DARWIN,1,[This is an Apple Darwin system])
77      CPPFLAGS="-D_APPLE_C_SOURCE $CPPFLAGS"
78      CFLAGS="-no-cpp-precomp -fno-common $CFLAGS"
79      AC_MSG_WARN([The VPN application cannot be compiled on your OS])
80      build_target="darwin"
81      DEFAULT_INTERFACE="\"en0\""
82      LIBPREFIX=
83      DLLDIR=lib
84      UNIXONLY="#"
85      ;;
86 linux*)
87      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
88      build_target="linux"
89      LIBPREFIX=
90      DLLDIR=lib
91      UNIXONLY="#"
92      AC_PATH_XTRA
93      ;;
94 *freebsd*)
95      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
96      AC_DEFINE_UNQUOTED(FREEBSD,1,[This is a FreeBSD system])
97      CFLAGS="-D_THREAD_SAFE $CFLAGS"
98      build_target="freebsd"
99      LIBPREFIX=
100      DLLDIR=lib
101      UNIXONLY="#"
102      ;;
103 *openbsd*)
104      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
105      AC_DEFINE_UNQUOTED(OPENBSD,1,[This is an OpenBSD system])
106      LIBS=`echo $LIBS | sed -e "s/-ldl//"`
107      build_target="openbsd"
108      LIBPREFIX=
109      DLLDIR=lib
110      UNIXONLY="#"
111      ;;
112 *netbsd*)
113      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
114      AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system])
115      LIBPREFIX=
116      DLLDIR=lib
117      UNIXONLY="#"
118      ;;
119 *solaris*)
120      AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system])
121      AC_DEFINE_UNQUOTED(_REENTRANT,1,[Need with solaris or errno doesnt work])
122      AC_CHECK_LIB(resolv, res_init)
123      AC_CHECK_LIB(rt, nanosleep)
124      build_target="solaris"
125      LIBPREFIX=
126      DLLDIR=lib
127      UNIXONLY="#"
128      ;;
129 *arm-linux*)
130      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
131      CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
132      build_target="linux"
133      LIBPREFIX=
134      DLLDIR=lib
135      UNIXONLY="#"
136      ;;
137 *cygwin*)
138      AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
139      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
140      AC_CHECK_LIB(intl, gettext)
141      LDFLAGS="$LDFLAGS -no-undefined"
142      CFLAGS="-mms-bitfields $CFLAGS"
143      build_target="cygwin"
144      LIBPREFIX=lib
145      DLLDIR=bin
146      AC_PROG_CXX
147      UNIXONLY=""
148      ;;
149 *mingw*)
150      AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
151      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
152      AC_DEFINE_UNQUOTED(_WIN32,1,[This is a Windows system])
153      AC_CHECK_LIB(intl, gettext)
154      LDFLAGS="$LDFLAGS -Wl,-no-undefined -Wl,--export-all-symbols"
155      LIBS="$LIBS -lws2_32 -lplibc -lgnurx -lole32"
156      CFLAGS="-mms-bitfields $CFLAGS"
157      CPPFLAGS="-D_WIN32_WINNT=0x0501 -DHAVE_STAT64=1 -D__USE_MINGW_ANSI_STDIO=1 $CPPFLAGS"
158      build_target="mingw"
159      AC_PROG_CXX
160      LIBPREFIX=lib
161      DLLDIR=bin
162      UNIXONLY=""
163      funcstocheck=""
164      native_srcdir=$(cd $srcdir; pwd -W)
165      ;;
166 gnu*)
167      AC_DEFINE_UNQUOTED(GNU,1,[This is a GNU system])
168      build_target="gnu"
169      UNIXONLY="#"
170      ;;
171 *)
172      AC_MSG_RESULT(Unrecognised OS $host_os)
173      AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
174      UNIXONLY=""
175 ;;
176 esac
177 AC_DEFINE_UNQUOTED([GNUNET_DEFAULT_INTERFACE], $DEFAULT_INTERFACE, [This should be the default choice for the name of the first network interface])
178 AC_SUBST(DEFAULT_INTERFACE)
179
180 # Disable TCP-based IPC on systems that support UNIX domain
181 # sockets in default configuratin:
182 AC_SUBST(UNIXONLY)
183
184
185 AC_MSG_CHECKING([for build target])
186 AM_CONDITIONAL(DARWIN,  test "$build_target" = "darwin")
187 AM_CONDITIONAL(CYGWIN,  test "$build_target" = "cygwin")
188 AM_CONDITIONAL(MINGW,   test "$build_target" = "mingw")
189 AM_CONDITIONAL(SOLARIS, test "$build_target" = "solaris")
190 AM_CONDITIONAL(XFREEBSD, test "$build_target" = "freebsd")
191 AM_CONDITIONAL(OPENBSD, test "$build_target" = "openbsd")
192 AM_CONDITIONAL(LINUX, test "$build_target" = "linux")
193 AM_CONDITIONAL(GNU, test "$build_target" = "gnu")
194
195 AC_MSG_RESULT([$build_target])
196 AC_SUBST(build_target)
197 AM_CONDITIONAL([am__fastdepOBJC], false)
198 AC_UNALIGNED_64_ACCESS
199
200 # some other checks for standard libs
201 AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
202 AC_CHECK_LIB(socket, socket)
203 AC_CHECK_LIB(m, log)
204 AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
205
206 # 'save' libs; only those libs found so far will be
207 # linked against _everywhere_.  For the others, we
208 # will be more selective!
209 SAVE_LIBS=$LIBS
210
211 # libgnurx (regex library for W32)
212 gnurx=0
213 AC_CHECK_LIB(gnurx, regexec, gnurx=1)
214 if test "x$gnurx" = "x0" -a "x$build_target" = "xmingw"
215 then
216   AC_MSG_ERROR([on W32 GNUnet needs libgnurx])
217 fi
218
219 # libgcrypt
220 gcrypt=0
221 NEED_LIBGCRYPT_API=1
222 NEED_LIBGCRYPT_VERSION=1.6.0
223
224
225 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION", gcrypt=1)
226 AC_CHECK_DECLS([gcry_mpi_lshift], [], [], [[#include <gcrypt.h>]])
227
228 if test $gcrypt = 0
229 then
230   AC_MSG_ERROR([[
231 ***
232 *** You need libgcrypt to build this program.
233 **  This library is for example available at
234 ***   ftp://ftp.gnupg.org/gcrypt/libgcrypt/
235 *** (at least version $NEED_LIBGCRYPT_VERSION (API $NEED_LIBGCRYPT_API) 
236 ***  is required.)
237 ***]])
238 fi
239 AC_DEFINE_UNQUOTED([NEED_LIBGCRYPT_VERSION], "$NEED_LIBGCRYPT_VERSION", [required libgcrypt version])
240
241 # Adam shostack suggests the following for Windows:
242 # -D_FORTIFY_SOURCE=2 -fstack-protector-all
243 AC_ARG_ENABLE(gcc-hardening,
244    AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks),
245 [if test x$enableval = xyes; then
246     CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2 -fstack-protector-all"
247     CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector"
248     CFLAGS="$CFLAGS --param ssp-buffer-size=1"
249     LDFLAGS="$LDFLAGS -pie"
250 fi])
251
252
253 # Linker hardening options
254 # Currently these options are ELF specific - you can't use this with MacOSX
255 AC_ARG_ENABLE(linker-hardening,
256   AS_HELP_STRING(--enable-linker-hardening, enable linker security fixups),
257 [if test x$enableval = xyes; then
258    LDFLAGS="$LDFLAGS -z relro -z now"
259 fi])
260
261
262 extra_logging=GNUNET_NO
263 AC_ARG_ENABLE([logging],
264    AS_HELP_STRING([--enable-logging@<:@=value@:>@],[Enable logging calls. Possible values: yes,no,verbose,veryverbose ('yes' is the default)]),
265    [AS_IF([test "x$enableval" = "xyes"], [],
266           [test "x$enableval" = "xno"], [AC_DEFINE([GNUNET_CULL_LOGGING],[],[Define to cull all logging calls])],
267           [test "x$enableval" = "xverbose"], [extra_logging=GNUNET_YES]
268           [test "x$enableval" = "xveryverbose"], [extra_logging=\(GNUNET_YES+1\)])
269    ], [])
270 AC_DEFINE_UNQUOTED([GNUNET_EXTRA_LOGGING],[$extra_logging],[1 if extra logging is enabled, 2 for very verbose extra logging, 0 otherwise])
271
272 # should memory poisoning be enabled?
273 AC_MSG_CHECKING(whether to poison freed memory)
274 AC_ARG_ENABLE([poisoning],
275    [AS_HELP_STRING([--enable-poisoning], [enable poisoning of freed memory (good for debugging)])],
276    [enable_poisoning=${enableval}],
277    [
278      if test "x$extra_logging" != "xGNUNET_NO"; then
279        enable_poisoning="defaults to yes (extra logging is enabled)"
280      else
281        enable_poisoning=no
282      fi
283    ])
284 AC_MSG_RESULT($enable_poisoning)
285 if test ! "x$enable_poisoning" = "xno"; then
286   enable_poisoning=1
287 else
288   enable_poisoning=0
289 fi
290 AC_DEFINE_UNQUOTED([ENABLE_POISONING],[$enable_poisoning],[1 if freed memory should be poisoned, 0 otherwise])
291
292 if test $build = $target
293 then
294 AC_MSG_CHECKING([for working HMAC])
295 AC_LANG_PUSH(C)
296 LIBS="$LIBS $LIBGCRYPT_LIBS"
297 CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
298 AC_RUN_IFELSE(
299   [AC_LANG_PROGRAM([#include <gcrypt.h> 
300         #include <stdio.h>], [[
301         gcry_md_hd_t mac;
302       
303         unsigned char data[] = { 0xbf, 0x16, 0x6e, 0x46, 0x3a, 0x6c, 0xf3, 0x93, 0xa7, 0x72,
304             0x11, 0xa1, 0xdc, 0x0b, 0x07, 0xdb, 0x1a, 0x5e, 0xd9, 0xb9, 0x81, 0xbe,
305             0xea, 0xe4, 0x31, 0x5f, 0x24, 0xff, 0xfe, 0x50, 0x8a, 0xde };
306         unsigned char key[] = { 0xfc, 0x62, 0x76, 0x35 };
307         unsigned char result[] = {0xa2, 0xb, 0x1, 0xd9, 0xc0, 0x8b, 0x5a, 0x12, 0x80,
308             0xd5, 0x50, 0x12, 0x8e, 0xd0, 0x5b, 0xb6, 0x5c, 0x87, 0x24, 0xe2, 0xd0,
309             0xd2, 0xaf, 0x63, 0xae, 0xd1, 0xd6, 0x64, 0x14, 0xe3, 0x6e, 0x61, 0x5b,
310             0xd, 0xba, 0x17, 0x7d, 0xd3, 0x10, 0xb1, 0x37, 0x41, 0x91, 0x7d, 0xeb,
311             0x1, 0x4d, 0x71, 0xe8, 0x59, 0x71, 0x42, 0x8e, 0xd6, 0xf3, 0x29, 0x3b,
312             0x90, 0xf2, 0xd1, 0xaf, 0x65, 0x1e, 0xb3};
313       
314         if (!gcry_check_version (GCRYPT_VERSION))
315         {
316           fprintf (stderr, "Version mismatch %s <-> %s \n", gcry_check_version (NULL), GCRYPT_VERSION);
317           return 1;
318         }
319   
320         gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
321         gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
322   
323         if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
324         {
325           fprintf (stderr, "gcry_md_open error\n");
326           return 2;
327         }
328   
329         gcry_md_setkey (mac, key, sizeof (key));
330         gcry_md_write (mac, data, sizeof (data));
331   
332         if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
333         {
334           fprintf (stderr, "memcmp error\n");
335           return 3;
336         }
337   
338         gcry_md_close (mac);
339   
340         return 0;
341     ]])],
342   [AC_MSG_RESULT([yes])],
343   [
344    RESULT=$?
345    if test $RESULT = 3
346    then
347      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.])
348    fi
349    if test $RESULT = 2
350    then
351      AC_MSG_FAILURE([HMAC test failed])
352    fi
353    if test $RESULT = 1
354    then
355      AC_MSG_FAILURE([libgcrypt header version does not match library version])
356    fi
357   ])
358 AC_LANG_POP(C)
359 fi      # $build = $target
360
361 # check for bluetooth library
362 bluetooth=0
363 AC_CHECK_LIB(bluetooth, ba2str, bluetooth=1, bluetooth=0) 
364 if test "$bluetooth" = 1
365 then
366   AM_CONDITIONAL(HAVE_LIBBLUETOOTH, true)
367   AC_DEFINE([HAVE_LIBBLUETOOTH],[1],[Have bluetooth library])
368 else
369   AM_CONDITIONAL(HAVE_LIBBLUETOOTH, false)
370 fi
371
372
373 # libcurl
374 LIBCURL_CHECK_CONFIG(,7.21.3,curl=1,curl=0)
375 if test "$curl" = 1
376 then
377         AM_CONDITIONAL(HAVE_LIBCURL, true)
378         AC_DEFINE([HAVE_LIBCURL],[1],[Have libcurl])
379 else
380         AM_CONDITIONAL(HAVE_LIBCURL, false)
381 fi
382
383
384 # libidn
385 AC_MSG_CHECKING([if Libidn can be used])
386 AC_ARG_WITH(libidn, AC_HELP_STRING([--with-libidn=[DIR]],
387                                     [Support IDN (needs GNU Libidn)]),
388 libidn=$withval, libidn=yes)
389 if test "$libidn" != "no"; then
390   if test "$libidn" != "yes"; then
391      LDFLAGS="${LDFLAGS} -L$libidn/lib"
392      CPPFLAGS="${CPPFLAGS} -I$libidn/include"
393   fi
394   AC_CHECK_HEADER(idna.h,
395     AC_CHECK_LIB(idn, stringprep_check_version,
396       [libidn=yes LIBS="${LIBS} -lidn"], 
397       AC_MSG_FAILURE([GNUnet requires libidn])),
398     AC_MSG_FAILURE([GNUnet requires libidn]))
399 fi
400 AC_MSG_RESULT($libidn)
401
402 # restore LIBS
403 LIBS=$SAVE_LIBS
404
405
406 AC_CHECK_HEADERS([glpk.h],[glpk=true],[gplk=false])
407 # GLPK must support glpk_init_env, version >= 4.43
408 AC_CHECK_LIB([glpk],[glp_init_env],,[gplk=false]) 
409 # GLPK must support atm MLP presolving, version >= 4.32
410 AC_CHECK_MEMBERS(glp_iocp.presolve,,[gplk=false],[[#include <glpk.h>]])
411 if test x$gplk = xfalse
412 then
413         AM_CONDITIONAL(HAVE_LIBGLPK, false)
414         AC_MSG_WARN([GNUnet requires GLPK  >= 4.32])
415 else
416         AM_CONDITIONAL(HAVE_LIBGLPK, true)
417         AC_DEFINE([HAVE_LIBGLPK],[1],[Have GLPK])
418 fi
419
420
421
422 AC_CHECK_HEADERS([nss.h],[nss=true],[nss=false])
423 if test x$nss = xfalse
424 then
425         AM_CONDITIONAL(HAVE_GLIBCNSS, false)
426         AC_MSG_WARN([No GNU libc nss header, will not build NSS plugin])
427 else
428         AM_CONDITIONAL(HAVE_GLIBCNSS, true)
429 fi
430
431
432
433 # test for kvm and kstat (for CPU stats under BSD/Solaris)
434 AC_CHECK_LIB([kvm],[kvm_open])
435 AC_CHECK_LIB([kstat],[kstat_open])
436
437 # test for libextractor
438 extractor=0
439 AC_MSG_CHECKING(for libextractor)
440 AC_ARG_WITH(extractor,
441    [  --with-extractor=PFX    base of libextractor installation],
442    [AC_MSG_RESULT([$with_extractor])
443     case $with_extractor in
444       no)
445         ;;
446       yes)
447         AC_CHECK_HEADERS(extractor.h,
448           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
449             extractor=1))
450         ;;
451       *)
452         LDFLAGS="-L$with_extractor/lib $LDFLAGS"
453         CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
454         AC_CHECK_HEADERS(extractor.h,
455           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
456             EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
457             extractor=1))
458         ;;
459     esac
460    ],
461    [AC_MSG_RESULT([--with-extractor not specified])
462     AC_CHECK_HEADERS(extractor.h,
463      AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
464       extractor=1))])
465 if test "$extractor" != 1
466 then
467  AC_MSG_ERROR([GNUnet requires libextractor])
468 fi
469 # restore LIBS
470 LIBS=$SAVE_LIBS
471
472 # Check for libltdl header (#2999)
473 ltdl=0
474 AC_MSG_CHECKING(for libltdl)
475 AC_ARG_WITH(ltdl,
476    [  --with-ltdl=PFX    base of libltdl installation],
477    [AC_MSG_RESULT([$with_ltdl])
478     case $with_ltdl in
479       no)
480         ;;
481       yes)
482         AC_CHECK_HEADERS(ltdl.h,
483           AC_CHECK_LIB([ltdl], [lt_dlopenext],
484             ltdl=1))
485         ;;
486       *)
487         LDFLAGS="-L$with_ltdl/lib $LDFLAGS"
488         CPPFLAGS="-I$with_ltdl/include $CPPFLAGS"
489         AC_CHECK_HEADERS(ltdl.h,
490           AC_CHECK_LIB([ltdl], [lt_dlopenext],
491             EXT_LIB_PATH="-L$with_ltdl/lib $EXT_LIB_PATH"
492             ltdl=1))
493         ;;
494     esac
495    ],
496    [AC_MSG_RESULT([--with-ltdl not specified])
497     AC_CHECK_HEADERS(ltdl.h,
498      AC_CHECK_LIB([ltdl], [lt_dlopenext],
499       ltdl=1))])
500 if test "$ltdl" != 1
501 then
502  AC_MSG_ERROR([GNUnet requires libltdl (from GNU libtool), try installing libltdl-dev])
503 fi
504 # restore LIBS
505 LIBS=$SAVE_LIBS
506
507 # test for libunistring
508 gl_LIBUNISTRING
509 if test $HAVE_LIBUNISTRING != yes; then
510  AC_MSG_ERROR([GNUnet requires libunistring])
511 fi
512 if test $gl_libunistring_hexversion -le 2305; then
513  AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])
514 fi
515 # restore LIBS
516 LIBS=$SAVE_LIBS
517
518
519
520 # Checks for standard header files.
521 AC_HEADER_DIRENT
522 AC_HEADER_STDC
523
524 # Check for headers that are ALWAYS required
525 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]))
526
527
528
529 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
530 AC_CHECK_HEADERS([malloc.h malloc/malloc.h 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 netinet/ip.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 execinfo.h])
531
532 SAVE_LDFLAGS=$LDFLAGS
533 SAVE_CPPFLAGS=$CPPFLAGS
534
535 # test for sqlite
536 sqlite=false
537 AC_MSG_CHECKING(for SQLite)
538 AC_ARG_WITH(sqlite,
539   [  --with-sqlite=PFX       base of SQLite installation],
540   [AC_MSG_RESULT("$with_sqlite")
541    case $with_sqlite in
542    no)
543      ;;
544    yes)
545     AC_CHECK_HEADERS(sqlite3.h,
546      sqlite=true)
547      ;;
548    *)
549     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
550     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
551     AC_CHECK_HEADERS(sqlite3.h,
552      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
553      SQLITE_LDFLAGS="-L$with_sqlite/lib"
554      SQLITE_CPPFLAGS="-I$with_sqlite/include"
555      sqlite=true)
556     LDFLAGS=$SAVE_LDFLAGS
557     CPPFLAGS=$SAVE_CPPFLAGS
558     ;;
559    esac
560   ],
561   [AC_MSG_RESULT([--with-sqlite not specified])
562     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
563 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
564 AC_SUBST(SQLITE_CPPFLAGS)
565 AC_SUBST(SQLITE_LDFLAGS)
566
567 # test for postgres
568 postgres=false
569 AC_MSG_CHECKING(for postgres)
570 AC_ARG_WITH(postgres,
571   [  --with-postgres=PFX       base of postgres installation],
572   [AC_MSG_RESULT("$with_postgres")
573    case $with_postgres in
574    no)
575      ;;
576    yes)
577     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
578      postgres=true)
579      ;;
580    *)
581     LDFLAGS="-L$with_postgres/lib $LDFLAGS"
582     CPPFLAGS="-I$with_postgres/include $CPPFLAGS"
583     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
584      EXT_LIB_PATH="-L$with_postgres/lib $EXT_LIB_PATH"
585      POSTGRES_LDFLAGS="-L$with_postgres/lib"
586      POSTGRES_CPPFLAGS="-I$with_postgres/include"
587      postgres=true)
588     LDFLAGS=$SAVE_LDFLAGS
589     CPPFLAGS=$SAVE_CPPFLAGS
590     ;;
591    esac
592   ],
593   [AC_MSG_RESULT([--with-postgres not specified])
594     AC_CHECK_HEADERS(postgresql/libpq-fe.h, postgres=true)])
595 AM_CONDITIONAL(HAVE_POSTGRES, test x$postgres = xtrue)
596 AC_SUBST(POSTGRES_CPPFLAGS)
597 AC_SUBST(POSTGRES_LDFLAGS)
598
599 # test for zlib
600 SAVE_LDFLAGS=$LDFLAGS
601 SAVE_CPPFLAGS=$CPPFLAGS
602 AC_ARG_WITH(zlib,
603             [  --with-zlib[[=DIR]]       use libz in DIR],
604             [AS_IF([test "$withval" = "no"],
605                    [AC_MSG_ERROR([GNUnet requires zlib])],
606                    [test "$withval" != "yes"],
607                    [
608                      Z_DIR=$withval
609                      CPPFLAGS="${CPPFLAGS} -I$withval/include"
610                      LDFLAGS="${LDFLAGS} -L$withval/lib"
611                    ])
612             ])
613 AC_CHECK_HEADER(zlib.h,
614                 [],
615                 [AC_MSG_ERROR([GNUnet requires zlib])])
616 AC_CHECK_LIB(z, compress2,
617              [
618               AC_DEFINE([HAVE_ZLIB], [], [Have compression library])
619               if test "x${Z_DIR}" != "x"; then
620                       Z_CFLAGS="-I${Z_DIR}/include"
621                       Z_LIBS="-L${Z_DIR}/lib -lz"
622               else
623                       Z_LIBS="-lz"
624               fi],
625               [AC_MSG_ERROR([GNUnet requires zlib])])
626 AC_SUBST(Z_CFLAGS)
627 AC_SUBST(Z_LIBS)
628
629 LDFLAGS=$SAVE_LDFLAGS
630 CPPFLAGS=$SAVE_CPPFLAGS
631
632 # mysql & windows
633 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
634 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
635
636 if test "$build_target" = "mingw"
637 then
638   CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
639 fi
640
641 # test for mysql
642 mysql=false
643 mysqlfail=false
644 SAVE_LDFLAGS=$LDFLAGS
645 SAVE_CPPFLAGS=$CPPFLAGS
646 AC_MSG_CHECKING(for mysql)
647 AC_ARG_WITH(mysql,
648   [  --with-mysql=PFX        base of MySQL installation],
649   [AC_MSG_RESULT("$with_mysql")
650    if test "$with_mysql" != "no"
651    then
652     if test "$with_mysql" != "yes"
653     then
654       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
655       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
656     fi
657     AC_CHECK_HEADERS(mysql/mysql.h,
658      AC_CHECK_LIB(mysqlclient, mysql_init,
659       MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
660       MYSQL_CPPFLAGS="-I$with_mysql/include"
661
662       mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
663    fi
664   ],
665   [AC_MSG_RESULT([--with-mysql not specified])
666    if test -d "/usr/lib64/mysql"; then
667     MYSQL_LIBDIR="/usr/lib64/mysql"
668    elif test -d "/usr/lib/mysql"; then
669     MYSQL_LIBDIR="/usr/lib/mysql"
670    else
671     MYSQL_LIBDIR="/usr/lib"
672    fi
673    LDFLAGS="-L$MYSQL_LIBDIR $LDFLAGS $ZLIBS"
674    AC_CHECK_LIB(mysqlclient, mysql_init,
675     [AC_CHECK_HEADERS(mysql/mysql.h,
676       MYSQL_LDFLAGS="-L$MYSQL_LIBDIR"
677       mysql=true
678
679      , [], [$CYGWIN_MYSQL_MAGIC])])
680   ])
681
682 AC_SUBST(MYSQL_LDFLAGS)
683 AC_SUBST(MYSQL_CPPFLAGS)
684
685 # additional version check for mysql
686 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
687 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
688 then
689   AC_MSG_CHECKING(mysql version)
690   AC_RUN_IFELSE([AC_LANG_PROGRAM(
691     [[$CYGWIN_MYSQL_MAGIC
692       #include <mysql/mysql.h>]],
693     [[if (MYSQL_VERSION_ID < 40100)
694         return(-1);
695       else
696         return(0);
697     ]])
698     ],mysql=true,mysql=false)
699   if test "$mysql" = "false"
700   then
701     mysqlfail=true
702     AC_MSG_RESULT([fail, >= 4.1 required])
703   else
704     AC_MSG_RESULT(ok)
705   fi
706 fi
707 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
708 AM_CONDITIONAL(HAVE_MYSQLE, test "0" = "1")
709 # restore LIBS
710 LIBS=$SAVE_LIBS
711 LDFLAGS=$SAVE_LDFLAGS
712 CPPFLAGS=$SAVE_CPPFLAGS
713
714 if test "$sqlite" = 0 -a "$mysql" = 0
715 then
716  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
717 fi
718
719 # libmicrohttpd
720 lmhd=0
721 AC_MSG_CHECKING([for libmicrohttpd])
722 AC_ARG_WITH(microhttpd,
723    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
724    [AC_MSG_RESULT([$with_microhttpd])
725     case $with_microhttpd in
726       no)
727         ;;
728       yes)
729         AC_CHECK_HEADERS([microhttpd.h],
730           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
731             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
732               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.31])
733               AC_RUN_IFELSE([AC_LANG_SOURCE([
734                 #include "$native_srcdir/src/include/platform.h"
735                 #include <microhttpd.h>
736                 int main () { return MHD_VERSION >= 0x0093001 ? 0 : 1; }
737                ])], [
738                AC_MSG_RESULT(ok)
739                lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
740             [],[#include "$native_srcdir/src/include/platform.h"
741                 #include <microhttpd.h>]),,
742             [#include "$native_srcdir/src/include/platform.h"])
743         ;;
744       *)
745         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
746         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
747         AC_CHECK_HEADERS(microhttpd.h,
748           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
749             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
750               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
751               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.31])
752                AC_RUN_IFELSE([AC_LANG_SOURCE([
753                 #include "$native_srcdir/src/include/platform.h"
754                 #include <microhttpd.h>
755                 int main () { return MHD_VERSION >= 0x0093001 ? 0 : 1; }
756                ])], [
757                AC_MSG_RESULT(ok)
758                lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
759             [],[#include "$native_srcdir/src/include/platform.h"
760                 #include <microhttpd.h>]),,
761             [#include "$native_srcdir/src/include/platform.h"])
762         ;;
763     esac
764    ],
765    [AC_MSG_RESULT([--with-microhttpd not specified])
766     AC_CHECK_HEADERS([microhttpd.h],
767       AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
768         AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
769           [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.31])
770               AC_RUN_IFELSE([AC_LANG_SOURCE([
771                 #include "$native_srcdir/src/include/platform.h"
772                 #include <microhttpd.h>
773                 int main () { return MHD_VERSION >= 0x0093001 ? 0 : 1; }
774                ])], [
775                AC_MSG_RESULT(ok)
776                lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
777         [],[#include "$native_srcdir/src/include/platform.h"
778             #include <microhttpd.h>]),,
779        [#include "$native_srcdir/src/include/platform.h"])])
780 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
781 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
782
783
784 # restore LIBS
785 LIBS=$SAVE_LIBS
786
787 # check for python & pexpect (used for some testcases only)
788 AM_PATH_PYTHON([2.6],, [:])
789 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
790
791 # check for gettext
792 AM_GNU_GETTEXT([external])
793 AM_GNU_GETTEXT_VERSION([0.16.1])
794
795 # check for iconv
796 AM_ICONV
797
798 # Checks for standard typedefs, structures, and compiler characteristics.
799 AC_TYPE_PID_T
800 AC_TYPE_SIZE_T
801 AC_TYPE_MODE_T
802 AC_HEADER_TIME
803 AC_HEADER_STAT
804 AC_HEADER_STDBOOL
805 AC_STRUCT_TM
806
807 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
808    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
809    ],
810    [],
811    [
812       #include <sys/types.h>
813       #include <sys/socket.h>
814       #include <netinet/in.h>
815    ])
816
817
818
819 # Checks for library functions.
820 AC_FUNC_CLOSEDIR_VOID
821 AC_FUNC_FORK
822 AC_PROG_GCC_TRADITIONAL
823 AC_FUNC_MEMCMP
824 AC_FUNC_SELECT_ARGTYPES
825 AC_FUNC_CHOWN
826
827 AC_TYPE_SIGNAL
828 AC_FUNC_STAT
829 AC_FUNC_STRFTIME
830 AC_FUNC_VPRINTF
831 AC_HEADER_SYS_WAIT
832 AC_TYPE_OFF_T
833 AC_TYPE_UID_T
834 AC_CHECK_FUNCS([atoll stat64 strnlen mremap getrlimit setrlimit sysconf initgroups strndup gethostbyname2 getpeerucred getpeereid setresuid $funcstocheck getifaddrs freeifaddrs getresgid mallinfo malloc_size malloc_usable_size getrusage random srandom stat statfs statvfs])
835
836 # restore LIBS
837 LIBS=$SAVE_LIBS
838
839 gn_user_home_dir="~/.gnunet"
840 AC_ARG_WITH(user-home-dir,
841         AC_HELP_STRING(
842                 [--with-user-home-dir=DIR],
843                 [default user home directory (~/.gnunet)]),
844         [gn_user_home_dir=$withval])
845 AC_SUBST(GN_USER_HOME_DIR, $gn_user_home_dir)
846 gn_daemon_home_dir="/var/lib/gnunet"
847 AC_ARG_WITH(daemon-home-dir,
848         AC_HELP_STRING(
849                 [--with-daemon-home-dir=DIR],
850                 [default daemon home directory (/var/lib/gnunet)]),
851         [gn_daemon_home_dir=$withval])
852 AC_SUBST(GN_DAEMON_HOME_DIR, $gn_daemon_home_dir)
853 gn_daemon_config_dir="/etc"
854 AC_ARG_WITH(daemon-config-dir,
855         AC_HELP_STRING(
856                 [--with-daemon-config-dir=DIR],
857                 [default daemon config directory (/etc)]),
858         [gn_daemon_config_dir=$withval])
859 AC_SUBST(GN_DAEMON_CONFIG_DIR, $gn_daemon_config_dir)
860
861 GN_INTLINCL=""
862 GN_LIBINTL="$LTLIBINTL"
863 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
864 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
865 if test x$enable_framework_build = xyes
866 then
867   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
868   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
869   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
870   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL]) 
871 fi
872
873 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
874 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
875
876 AC_SUBST(GN_LIB_LDFLAGS)
877 AC_SUBST(GN_PLUGIN_LDFLAGS)
878 AC_SUBST(GN_INTLINCL)
879 AC_SUBST(GN_LIBINTL)
880
881 AC_SUBST(CPPFLAGS)
882 AC_SUBST(LIBS)
883 AC_SUBST(LDFLAGS)
884 AC_SUBST(EXT_LIB_PATH)
885 AC_SUBST(EXT_LIBS)
886
887 AC_SUBST(LIBPREFIX)
888 AC_SUBST(DLLDIR)
889 AC_SUBST(EXT_LIB_PATH)
890
891
892 # test for sudo
893 AC_MSG_CHECKING(for sudo)
894 AC_ARG_WITH(sudo,
895   [  --with-sudo=PATH       path to sudo binary (or just yes)],
896   [AC_MSG_RESULT("$with_sudo")
897    case $with_sudo in
898    no)
899      SUDO_BINARY=
900      ;;
901    yes)
902      SUDO_BINARY=sudo
903      ;;
904    *)
905      SUDO_BINARY=$with_sudo
906     ;;
907    esac
908   ],
909   [AC_MSG_RESULT([no])])
910 AC_SUBST(SUDO_BINARY)
911 AM_CONDITIONAL([HAVE_SUDO], [test "x$SUDO_BINARY" != "x" -o -w /])
912
913
914 # test for nssdir
915 AC_MSG_CHECKING(with nssdir)
916 AC_ARG_WITH(nssdir,
917   [  --with-nssdir=PATH       where to install NSS plugins],
918   [AC_MSG_RESULT("$with_nssdir")
919    case $with_nssdir in
920    no)
921      NSS_DIR=
922      install_nss=0
923      ;;
924    yes)
925      NSS_DIR="/lib"
926      install_nss=1
927      ;;
928    *)
929      NSS_DIR=$with_nssdir
930      install_nss=1
931     ;;
932    esac
933   ],
934   [
935    if test "x$SUDO_BINARY" != "x" -o -w /
936    then
937      NSS_DIR="/lib"
938      install_nss=1
939      AC_MSG_RESULT([yes, to /lib])
940    else
941      NSS_DIR=
942      install_nss=0
943      AC_MSG_RESULT([no])
944    fi
945   ])
946 AC_SUBST(NSS_DIR)
947 AM_CONDITIONAL([INSTALL_NSS], [test "x$install_nss" != "x0"])
948
949 # test for gnunetdns group name
950 GNUNETDNS_GROUP=gnunetdns
951 AC_MSG_CHECKING(for gnunetdns group name)
952 AC_ARG_WITH(gnunetdns,
953   [  --with-gnunetdns=GRPNAME       name for gnunetdns group],
954   [AC_MSG_RESULT("$with_gnunetdns")
955    case $with_gnunetdns in
956    no)
957      GNUNETDNS_GROUP=gnunet
958      ;;
959    yes)
960      GNUNETDNS_GROUP=gnunetdns
961      ;;
962    *)
963      GNUNETDNS_GROUP=$with_gnunetdns
964     ;;
965    esac
966   ],
967   [AC_MSG_RESULT([gnunetdns])])
968 AC_SUBST(GNUNETDNS_GROUP)
969
970
971
972 # gnutls
973 gnutls=0
974 AC_MSG_CHECKING(for gnutls)
975 AC_ARG_WITH(gnutls,
976    [  --with-gnutls=PFX   base of gnutls installation],
977    [AC_MSG_RESULT([$with_gnutls])
978     case $with_gnutls in
979       no)
980         ;;
981       yes)
982         AC_CHECK_HEADERS([gnutls/abstract.h],
983             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
984              gnutls=true))
985         ;;
986       *)
987         LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
988         CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
989         AC_CHECK_HEADERS([gnutls/abstract.h],
990             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
991               EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
992               gnutls=true))
993         ;;
994     esac
995    ],
996    [AC_MSG_RESULT([--with-gnutls not specified])
997     AC_CHECK_HEADERS([gnutls/abstract.h],
998         AC_CHECK_LIB([gnutls], [gnutls_priority_set],
999           gnutls=true))])
1000 AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
1001 AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have gnutls])
1002
1003
1004 # Test if we are building for superMUC
1005 AC_MSG_CHECKING(if testbed should use IBM LoadLeveler to run on SuperMUC)
1006 AC_ARG_ENABLE([ll],
1007     [AS_HELP_STRING([--enable-ll],
1008        [build GNUnet testbed for use with IBM LoadLeveler for running testbed on
1009               SuperMUC (default is NO)])],
1010     [if test "x$enable_ll" = "xno"
1011      then
1012        ll=0
1013      else
1014        ll=1
1015      fi],
1016     [ll=0
1017      enable_ll=no])
1018 AC_MSG_RESULT($enable_ll)
1019 AM_CONDITIONAL([ENABLE_LL], [test "x$ll" = "x1"])
1020 AC_DEFINE_UNQUOTED([ENABLE_LL], [$ll], [Build with LL support])
1021
1022 # Check if NSE has to send timestamp information to testbed logger for
1023 # generating histogram of messages received
1024 AC_MSG_CHECKING(if NSE has to send timestamp information to testbed logger)
1025 AC_ARG_ENABLE([nse-histogram],
1026     [AS_HELP_STRING([--enable-nse-histogram],
1027        [have NSE send timestamp information to testbed logger for generating
1028        histogram of received messages.  NOT useful for production (default is
1029        NO)])],
1030     [if test "x$enableval" = "xno"
1031      then
1032        nse_histogram=0
1033      else
1034        nse_histogram=1
1035      fi],
1036     [nse_histogram=0
1037      enable_nse_histogram=no])
1038 AC_MSG_RESULT($enable_nse_histogram)
1039 AM_CONDITIONAL([ENABLE_NSE_HISTOGRAM], [test "x$nse_histogram" = "x1"])
1040 AC_DEFINE_UNQUOTED([ENABLE_NSE_HISTOGRAM], [$nse_histogram],
1041                    [have NSE send timestamp information to testbed logger])
1042
1043 # should 'make check' run tests?
1044 AC_MSG_CHECKING(whether to run tests)
1045 AC_ARG_ENABLE([testruns],
1046    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
1047    [enable_tests_run=${enableval}],
1048    [enable_tests_run=yes])
1049 AC_MSG_RESULT($enable_test_run)
1050 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
1051
1052
1053 # should monkey be used when running (certain) services?
1054 AC_MSG_CHECKING(whether to run with monkey)
1055 AC_ARG_ENABLE([monkey],
1056    [AS_HELP_STRING([--enable-monkey], [enable running with monkey])],
1057    [enable_monkey=${enableval}],
1058    [enable_monkey=no])
1059 AC_MSG_RESULT($enable_monkey)
1060 AM_CONDITIONAL([ENABLE_MONKEY], [test "x$enable_monkey" = "xyes"])
1061 if test "x$enable_monkey" = "xyes"
1062 then
1063   MONKEYPREFIX="pathologist -d $(eval echo ${datarootdir}/gnunet/gnunet.sqlite) -p 30 --"
1064 else
1065   MONKEYPREFIX=""
1066 fi
1067 AC_SUBST(MONKEYPREFIX)
1068
1069
1070 # should expensive tests be run?
1071 AC_MSG_CHECKING(whether to run expensive tests)
1072 AC_ARG_ENABLE([expensivetests],
1073    [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
1074    [enable_expensive=${enableval}],
1075    [enable_expensive=no])
1076 AC_MSG_RESULT($enable_expensive)
1077 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
1078
1079 # should ports be open for Java services?
1080 AC_MSG_CHECKING(whether to enable ports for gnunet-java)
1081 AC_ARG_ENABLE([javaports],
1082    [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
1083    [enable_java_ports=${enableval}],
1084    [enable_java_ports=no])
1085 AC_MSG_RESULT($enable_java_ports)
1086 if test "x$enable_java_ports" = "xyes"
1087 then
1088   JAVAPORT=""
1089 else
1090   JAVAPORT="$UNIXONLY"
1091 fi
1092 AC_SUBST(JAVAPORT)
1093
1094 # should benchmarks be run?
1095 AC_MSG_CHECKING(whether to run benchmarks during make check)
1096 AC_ARG_ENABLE([benchmarks],
1097    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
1098    [enable_benchmarks=${enableval}],
1099    [enable_benchmarks=no])
1100 AC_MSG_RESULT($enable_benchmarks)
1101 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
1102
1103 # should gnunet-testing be compiled
1104 AC_MSG_CHECKING(wether to compile gnunet-testing)
1105 AC_ARG_ENABLE([testing],
1106    [AS_HELP_STRING([--disable-testing], [do not build gnunet-testing])],
1107    [enable_testing=${enableval}],
1108    [enable_testing=yes])
1109 AC_MSG_RESULT($enable_testing)
1110 AM_CONDITIONAL([HAVE_TESTING], [test "x$enable_testing" = "xyes"])
1111
1112 # should experimental code be compiled (code that may not yet compile)?
1113 AC_MSG_CHECKING(whether to compile experimental code)
1114 AC_ARG_ENABLE([experimental],
1115    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
1116    [enable_experimental=${enableval}],
1117    [enable_experimental=no])
1118 AC_MSG_RESULT($enable_experimental)
1119 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
1120
1121 # should memory statistics be kept (very expensive CPU-wise!)
1122 AC_MSG_CHECKING(whether to create expensive statistics on memory use)
1123 AC_ARG_ENABLE([heapstats],
1124    [AS_HELP_STRING([--enable-heapstats], [enable expensive heap statistics])],
1125    [enable_heapstats=1],
1126    [enable_heapstats=0])
1127 AC_MSG_RESULT($enable_heapstats)
1128 AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics])
1129
1130 # should code be enabled that works around missing OS functionality on Windows?
1131 # used for test cases
1132 if test $build_target = "mingw"
1133 then
1134         workarounds=1
1135
1136 AC_LINK_IFELSE(
1137  [AC_LANG_PROGRAM(
1138   [#include <ws2tcpip.h>
1139   ],[
1140   int s = socket (0, 0, 0);])
1141  ],[
1142   AC_DEFINE_UNQUOTED([HAVE_SOCKET],1,[Define this if socket() is available])
1143  ],[
1144   AC_DEFINE_UNQUOTED([HAVE_SOCKET],0,[Define this if socket() is available])
1145  ])
1146
1147 AC_LINK_IFELSE(
1148  [AC_LANG_PROGRAM(
1149   [#include <ws2tcpip.h>
1150   ],[
1151   int s = select (0, NULL, NULL, NULL, NULL);])
1152  ],[
1153   AC_DEFINE_UNQUOTED([HAVE_SELECT],1,[Define this if select() is available])
1154  ],[
1155   AC_DEFINE_UNQUOTED([HAVE_SELECT],0,[Define this if select() is available])
1156  ])
1157
1158 AC_LINK_IFELSE(
1159  [AC_LANG_PROGRAM(
1160   [#include <ws2tcpip.h>
1161   ],[
1162   struct in_addr i;
1163   char *s = inet_ntoa (i);])
1164  ],[
1165   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],1,[Define this if inet_ntoa() is available])
1166  ],[
1167   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],0,[Define this if inet_ntoa() is available])
1168  ])
1169
1170 AC_LINK_IFELSE(
1171  [AC_LANG_PROGRAM(
1172   [#include <ws2tcpip.h>
1173   ],[
1174   int s = getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);])
1175  ],[
1176   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],1,[Define this if getnameinfo() is available])
1177  ],[
1178   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],0,[Define this if getnameinfo() is available])
1179  ])
1180
1181 AC_LINK_IFELSE(
1182  [AC_LANG_PROGRAM(
1183   [#include <ws2tcpip.h>
1184   ],[
1185   int s = gethostname (NULL, 0);])
1186  ],[
1187   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],1,[Define this if gethostname() is available])
1188  ],[
1189   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],0,[Define this if gethostname() is available])
1190  ])
1191
1192 AC_LINK_IFELSE(
1193  [AC_LANG_PROGRAM(
1194   [#include <ws2tcpip.h>
1195   ],[
1196   void *s = gethostbyname (NULL);])
1197  ],[
1198   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],1,[Define this if gethostbyname() is available])
1199  ],[
1200   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],0,[Define this if gethostbyname() is available])
1201  ])
1202
1203 AC_LINK_IFELSE(
1204  [AC_LANG_PROGRAM(
1205   [#include <ws2tcpip.h>
1206   ],[
1207   void *s = gethostbyaddr (NULL, 0, 0);])
1208  ],[
1209   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],1,[Define this if gethostbyaddr() is available])
1210  ],[
1211   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],0,[Define this if gethostbyaddr() is available])
1212  ])
1213
1214 AC_LINK_IFELSE(
1215  [AC_LANG_PROGRAM(
1216   [#include <ws2tcpip.h>
1217   ],[
1218   int s = getaddrinfo (NULL, NULL, NULL, NULL);])
1219  ],[
1220   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1221  ],[
1222   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1223  ])
1224
1225 else
1226   AC_MSG_CHECKING(whether to enable windows workarounds)
1227   AC_ARG_ENABLE([windows_workarounds], 
1228      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
1229      [enable_workarounds=${enableval}],
1230      [enable_workarounds=no])
1231   AC_MSG_RESULT($enable_workarounds)
1232   if test x$enable_windows_workarounds = "xyes"
1233   then
1234      workarounds=1
1235   else
1236      workarounds=0
1237    fi
1238 fi
1239 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
1240
1241 # gcov compilation
1242 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
1243 AC_ARG_ENABLE([coverage], 
1244               AS_HELP_STRING([--enable-coverage],
1245                              [compile the library with code coverage support]),
1246               [use_gcov=${enableval}], 
1247               [use_gcov=no])
1248 AC_MSG_RESULT($use_gcov)
1249 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
1250
1251
1252 # version info
1253 AC_PATH_PROG(svnversioncommand, svnversion)
1254 AC_PATH_PROG(gitcommand, git)
1255 if test "X$svnversioncommand" = "X" || test `$svnversioncommand -n '.'` = "exported"
1256 then
1257   if test "X$gitcommand" = "X"
1258   then
1259     AC_DEFINE_UNQUOTED(VCS_VERSION, ["release"], [repository svn version])
1260   else
1261     gitver=$(git log -1 | grep "git-svn-id" | sed -e 's/.*@\([[0-9]]\+\) .*/\1/')
1262     if test "X$gitver" = "X"
1263     then
1264       AC_DEFINE_UNQUOTED(VCS_VERSION, ["release"], [repository svn version])
1265     else
1266       AC_DEFINE_UNQUOTED(VCS_VERSION, ["svn-$gitver"], [repository svn version])
1267     fi
1268   fi
1269 else
1270   AC_DEFINE_UNQUOTED(VCS_VERSION, ["svn-`svnversion -n`"], [repository svn version])
1271 fi
1272
1273 AC_CONFIG_FILES([ 
1274 Makefile
1275 contrib/Makefile
1276 doc/Makefile
1277 doc/man/Makefile
1278 doc/doxygen/Makefile
1279 m4/Makefile
1280 po/Makefile.in 
1281 src/Makefile
1282 src/arm/Makefile
1283 src/arm/arm.conf
1284 src/ats/Makefile
1285 src/ats/ats.conf
1286 src/ats-tool/Makefile
1287 src/ats-tests/Makefile
1288 src/block/Makefile
1289 src/core/Makefile
1290 src/core/core.conf
1291 src/consensus/Makefile
1292 src/consensus/consensus.conf
1293 src/datacache/Makefile
1294 src/datastore/Makefile
1295 src/datastore/datastore.conf
1296 src/dht/Makefile
1297 src/dht/dht.conf
1298 src/dns/Makefile
1299 src/dns/dns.conf
1300 src/dv/Makefile
1301 src/dv/dv.conf
1302 src/exit/Makefile
1303 src/experimentation/Makefile
1304 src/experimentation/experimentation.conf
1305 src/fragmentation/Makefile
1306 src/fs/Makefile
1307 src/fs/fs.conf
1308 src/gns/Makefile
1309 src/gns/gns.conf
1310 src/gns/nss/Makefile
1311 src/hello/Makefile
1312 src/identity/Makefile
1313 src/identity/identity.conf
1314 src/include/Makefile
1315 src/include/gnunet_directories.h
1316 src/integration-tests/Makefile
1317 src/hostlist/Makefile
1318 src/lockmanager/Makefile
1319 src/lockmanager/lockmanager.conf
1320 src/mesh/Makefile
1321 src/mesh/mesh.conf
1322 src/multicast/Makefile
1323 src/multicast/multicast.conf
1324 src/mysql/Makefile
1325 src/namestore/Makefile
1326 src/namestore/namestore.conf
1327 src/nat/Makefile
1328 src/nse/Makefile
1329 src/nse/nse.conf
1330 src/peerinfo/Makefile
1331 src/peerinfo/peerinfo.conf
1332 src/peerinfo-tool/Makefile
1333 src/postgres/Makefile
1334 src/psyc/Makefile
1335 src/psyc/psyc.conf
1336 src/psycstore/Makefile
1337 src/psycstore/psycstore.conf
1338 src/pt/Makefile
1339 src/regex/Makefile
1340 src/regex/regex.conf
1341 src/scalarproduct/Makefile
1342 src/scalarproduct/scalarproduct.conf
1343 src/set/Makefile
1344 src/set/set.conf
1345 src/statistics/Makefile
1346 src/statistics/statistics.conf
1347 src/template/Makefile
1348 src/testbed/Makefile
1349 src/testbed/testbed.conf
1350 src/testing/Makefile
1351 src/topology/Makefile
1352 src/transport/Makefile
1353 src/transport/transport.conf
1354 src/tun/Makefile
1355 src/util/Makefile
1356 src/util/resolver.conf
1357 src/vpn/Makefile
1358 src/vpn/vpn.conf
1359 pkgconfig/Makefile
1360 pkgconfig/gnunetats.pc
1361 pkgconfig/gnunetarm.pc
1362 pkgconfig/gnunetblock.pc
1363 pkgconfig/gnunetcore.pc
1364 pkgconfig/gnunetdatacache.pc
1365 pkgconfig/gnunetdatastore.pc
1366 pkgconfig/gnunetdht.pc
1367 pkgconfig/gnunetdns.pc
1368 pkgconfig/gnunetdnsparser.pc
1369 pkgconfig/gnunetdv.pc
1370 pkgconfig/gnunetfragmentation.pc
1371 pkgconfig/gnunetfs.pc
1372 pkgconfig/gnunetgns.pc
1373 pkgconfig/gnunethello.pc
1374 pkgconfig/gnunetlockmanager.pc
1375 pkgconfig/gnunetmesh.pc
1376 pkgconfig/gnunetmysql.pc
1377 pkgconfig/gnunetnamestore.pc
1378 pkgconfig/gnunetnat.pc
1379 pkgconfig/gnunetnse.pc
1380 pkgconfig/gnunetpeerinfo.pc
1381 pkgconfig/gnunetpostgres.pc
1382 pkgconfig/gnunetregex.pc
1383 pkgconfig/gnunetstatistics.pc
1384 pkgconfig/gnunetstream.pc
1385 pkgconfig/gnunettestbed.pc
1386 pkgconfig/gnunettesting.pc
1387 pkgconfig/gnunettransport.pc
1388 pkgconfig/gnunettun.pc
1389 pkgconfig/gnunetutil.pc
1390 pkgconfig/gnunetvpn.pc
1391 ])
1392 AC_OUTPUT
1393
1394 # Finally: summary!
1395
1396 # warn user if mysql found but not used due to version
1397 if test "$mysqlfail" = "true"
1398 then
1399   AC_MSG_NOTICE([NOTICE: MySQL found, but too old. MySQL support will not be compiled.])
1400 fi
1401
1402 # sqlite
1403 if test "x$sqlite" = "x0"
1404 then
1405   AC_MSG_NOTICE([NOTICE: sqlite not found.  sqLite support will not be compiled.])
1406 fi
1407
1408 # libcurl
1409 if test "x$curl" = "x0"
1410 then
1411   AC_MSG_NOTICE([NOTICE: libcurl not found.  http client support will not be compiled.])
1412 fi
1413
1414 # bluetooth
1415 if test "x$bluetooth" = "x0"
1416 then
1417   AC_MSG_NOTICE([NOTICE: bluetooth library not found.  bluetooth support will not be compiled.])
1418 fi
1419
1420 #gnutls
1421 if test x$gnutls != xtrue
1422 then
1423   AC_MSG_NOTICE([NOTICE: gnutls not found, gnunet-gns-proxy will not be built])
1424 fi
1425
1426 # java ports
1427 if test "x$enable_java_ports" = "xyes"
1428 then
1429   AC_MSG_NOTICE([NOTICE: opening ports for gnunet-java bindings by default.])
1430 fi
1431
1432 if test "x$lmhd" != "x1"
1433 then
1434  AC_MSG_NOTICE([NOTICE: libmicrohttpd not found, http transport will not be installed.])
1435 fi
1436
1437 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
1438
1439 if test "$enable_framework_build" = "yes"
1440 then
1441   AC_MSG_NOTICE([NOTICE: Mac OS X framework build enabled.])
1442 fi
1443
1444 if test "x$SUDO_BINARY" = "x" -a ! -w /
1445 then
1446   AC_MSG_NOTICE([NOTICE: --with-sudo not specified and not running as 'root', will not install GNS NSS library])
1447 fi
1448
1449
1450 AC_MSG_NOTICE([********************************************
1451 Please make sure NOW that you have created a user and group 'gnunet'
1452 and additionally a group 'gnunetdns':
1453         addgroup gnunetdns
1454         adduser gnunet
1455
1456 Make sure that '/var/lib/gnunet' is owned (and writable) by user
1457 'gnunet'.  Then, you can compile GNUnet with
1458         make
1459
1460 After that, run (if necessary as 'root')
1461         make install
1462 to install everything. 
1463
1464 Each GNUnet user should be added to the 'gnunet' group (may
1465 require fresh login to come into effect):
1466         adduser $USERNAME gnunet
1467 (run the above command as root once for each of your users, replacing
1468 "$USERNAME" with the respective login names).  If you have a global IP
1469 address, no further configuration is required.
1470         
1471 Optionally, download and compile gnunet-gtk to get a GUI for 
1472 file-sharing and configuration.  This is particularly recommended
1473 if your network setup is non-trivial, as gnunet-setup can be
1474 used to test in the GUI if your network configuration is working.
1475 gnunet-setup should be run as the "gnunet" user under X.  As it
1476 does very little with the network, running it as "root" is likely
1477 also harmless.  You can also run it as a normal user, but then
1478 you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
1479 home directory in the end.
1480
1481 Once you have configured your peer, run (as the 'gnunet' user)
1482         gnunet-arm -s
1483 to start the peer.  You can then run the various GNUnet-tools as
1484 your "normal" user (who should only be in the group 'gnunet').
1485 ********************************************])