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