0f6602f2127914755fd18040ca2a5e9e31f45ad6
[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 $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 # libcurl
366 LIBCURL_CHECK_CONFIG(,7.21.3,curl=1,curl=0)
367 if test "$curl" = 1
368 then
369         AM_CONDITIONAL(HAVE_LIBCURL, true)
370         AC_DEFINE([HAVE_LIBCURL],[1],[Have libcurl])
371 else
372         AM_CONDITIONAL(HAVE_LIBCURL, false)
373 fi
374
375
376 # libidn
377 AC_MSG_CHECKING([if Libidn can be used])
378 AC_ARG_WITH(libidn, AC_HELP_STRING([--with-libidn=[DIR]],
379                                     [Support IDN (needs GNU Libidn)]),
380 libidn=$withval, libidn=yes)
381 if test "$libidn" != "no"; then
382   if test "$libidn" != "yes"; then
383      LDFLAGS="${LDFLAGS} -L$libidn/lib"
384      CPPFLAGS="${CPPFLAGS} -I$libidn/include"
385   fi
386   AC_CHECK_HEADER(idna.h,
387   AC_CHECK_LIB(idn, stringprep_check_version,
388     [libidn=yes LIBS="${LIBS} -lidn"], libidn=no),
389      libidn=no)
390 fi
391 AM_CONDITIONAL([HAVE_LIBIDN], [test "$libidn" != "no"]) 
392 AC_MSG_RESULT($libidn)
393
394
395
396 # restore LIBS
397 LIBS=$SAVE_LIBS
398
399
400 AC_CHECK_HEADERS([glpk.h],[glpk=true],[gplk=false])
401 # GLPK must support glpk_init_env, version >= 4.43
402 AC_CHECK_LIB([glpk],[glp_init_env],,[gplk=false]) 
403 # GLPK must support atm MLP presolving, version >= 4.32
404 AC_CHECK_MEMBERS(glp_iocp.presolve,,[gplk=false],[[#include <glpk.h>]])
405 if test x$gplk = xfalse
406 then
407         AM_CONDITIONAL(HAVE_LIBGLPK, false)
408         AC_MSG_WARN([GNUnet requires GLPK  >= 4.32])
409 else
410         AM_CONDITIONAL(HAVE_LIBGLPK, true)
411         AC_DEFINE([HAVE_LIBGLPK],[1],[Have GLPK])
412 fi
413
414 # test for glib
415 # Minimum required version for glibtop is 2.6.0
416 AM_PATH_GLIB_2_0(2.6.0, [glib2=true] , [glib2=false] ,)
417 if test x$glib2 = xfalse
418 then
419         AM_CONDITIONAL(HAVE_GLIB2, false)
420         AC_MSG_WARN([GNUnet requires GLIB >= 2.6.0])
421 else
422         AM_CONDITIONAL(HAVE_GLIB2, true)
423         AC_DEFINE([HAVE_GLIB2],[1],[Have glib2])
424         LIBS="$LIBS $GLIB_LIBS"
425         CFLAGS="$CFLAGS $GLIB_CFLAGS"
426 fi
427
428 AC_CHECK_HEADERS([nss.h],[nss=true],[nss=false])
429 if test x$nss = xfalse
430 then
431         AM_CONDITIONAL(HAVE_GLIBCNSS, false)
432         AC_MSG_WARN([No GNU libc nss header, will not build NSS plugin])
433 else
434         AM_CONDITIONAL(HAVE_GLIBCNSS, true)
435 fi
436
437
438
439 # test for kvm and kstat (for CPU stats under BSD/Solaris)
440 AC_CHECK_LIB([kvm],[kvm_open])
441 AC_CHECK_LIB([kstat],[kstat_open])
442
443 # test for libextractor
444 extractor=0
445 AC_MSG_CHECKING(for libextractor)
446 AC_ARG_WITH(extractor,
447    [  --with-extractor=PFX    base of libextractor installation],
448    [AC_MSG_RESULT([$with_extractor])
449     case $with_extractor in
450       no)
451         ;;
452       yes)
453         AC_CHECK_HEADERS(extractor.h,
454           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
455             extractor=1))
456         ;;
457       *)
458         LDFLAGS="-L$with_extractor/lib $LDFLAGS"
459         CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
460         AC_CHECK_HEADERS(extractor.h,
461           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
462             EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
463             extractor=1))
464         ;;
465     esac
466    ],
467    [AC_MSG_RESULT([--with-extractor not specified])
468     AC_CHECK_HEADERS(extractor.h,
469      AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
470       extractor=1))])
471 if test "$extractor" != 1
472 then
473  AC_MSG_ERROR([GNUnet requires libextractor])
474 fi
475 # restore LIBS
476 LIBS=$SAVE_LIBS
477
478 # test for libunistring
479 gl_LIBUNISTRING
480 if test $HAVE_LIBUNISTRING != yes; then
481  AC_MSG_ERROR([GNUnet requires libunistring])
482 fi
483 if test $gl_libunistring_hexversion -le 2305; then
484  AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])
485 fi
486 # restore LIBS
487 LIBS=$SAVE_LIBS
488
489
490
491 # Checks for standard header files.
492 AC_HEADER_DIRENT
493 AC_HEADER_STDC
494
495 # Check for headers that are ALWAYS required
496 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]))
497
498 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
499 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])
500
501 SAVE_LDFLAGS=$LDFLAGS
502 SAVE_CPPFLAGS=$CPPFLAGS
503
504 # test for sqlite
505 sqlite=false
506 AC_MSG_CHECKING(for SQLite)
507 AC_ARG_WITH(sqlite,
508   [  --with-sqlite=PFX       base of SQLite installation],
509   [AC_MSG_RESULT("$with_sqlite")
510    case $with_sqlite in
511    no)
512      ;;
513    yes)
514     AC_CHECK_HEADERS(sqlite3.h,
515      sqlite=true)
516      ;;
517    *)
518     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
519     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
520     AC_CHECK_HEADERS(sqlite3.h,
521      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
522      SQLITE_LDFLAGS="-L$with_sqlite/lib"
523      SQLITE_CPPFLAGS="-I$with_sqlite/include"
524      sqlite=true)
525     LDFLAGS=$SAVE_LDFLAGS
526     CPPFLAGS=$SAVE_CPPFLAGS
527     ;;
528    esac
529   ],
530   [AC_MSG_RESULT([--with-sqlite not specified])
531     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
532 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
533 AC_SUBST(SQLITE_CPPFLAGS)
534 AC_SUBST(SQLITE_LDFLAGS)
535
536 # test for postgres
537 postgres=false
538 AC_MSG_CHECKING(for postgres)
539 AC_ARG_WITH(postgres,
540   [  --with-postgres=PFX       base of postgres installation],
541   [AC_MSG_RESULT("$with_postgres")
542    case $with_postgres in
543    no)
544      ;;
545    yes)
546     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
547      postgres=true)
548      ;;
549    *)
550     LDFLAGS="-L$with_postgres/lib $LDFLAGS"
551     CPPFLAGS="-I$with_postgres/include $CPPFLAGS"
552     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
553      EXT_LIB_PATH="-L$with_postgres/lib $EXT_LIB_PATH"
554      POSTGRES_LDFLAGS="-L$with_postgres/lib"
555      POSTGRES_CPPFLAGS="-I$with_postgres/include"
556      postgres=true)
557     LDFLAGS=$SAVE_LDFLAGS
558     CPPFLAGS=$SAVE_CPPFLAGS
559     ;;
560    esac
561   ],
562   [AC_MSG_RESULT([--with-postgres not specified])
563     AC_CHECK_HEADERS(postgresql/libpq-fe.h, postgres=true)])
564 AM_CONDITIONAL(HAVE_POSTGRES, test x$postgres = xtrue)
565 AC_SUBST(POSTGRES_CPPFLAGS)
566 AC_SUBST(POSTGRES_LDFLAGS)
567
568 # test for zlib
569 SAVE_LDFLAGS=$LDFLAGS
570 SAVE_CPPFLAGS=$CPPFLAGS
571 AC_ARG_WITH(zlib,
572             [  --with-zlib[[=DIR]]       use libz in DIR],
573             [AS_IF([test "$withval" = "no"],
574                    [AC_MSG_ERROR([GNUnet requires zlib])],
575                    [test "$withval" != "yes"],
576                    [
577                      Z_DIR=$withval
578                      CPPFLAGS="${CPPFLAGS} -I$withval/include"
579                      LDFLAGS="${LDFLAGS} -L$withval/lib"
580                    ])
581             ])
582 AC_CHECK_HEADER(zlib.h,
583                 [],
584                 [AC_MSG_ERROR([GNUnet requires zlib])])
585 AC_CHECK_LIB(z, compress2,
586              [
587               AC_DEFINE([HAVE_ZLIB], [], [Have compression library])
588               if test "x${Z_DIR}" != "x"; then
589                       Z_CFLAGS="-I${Z_DIR}/include"
590                       Z_LIBS="-L${Z_DIR}/lib -lz"
591               else
592                       Z_LIBS="-lz"
593               fi],
594               [AC_MSG_ERROR([GNUnet requires zlib])])
595 AC_SUBST(Z_CFLAGS)
596 AC_SUBST(Z_LIBS)
597
598 LDFLAGS=$SAVE_LDFLAGS
599 CPPFLAGS=$SAVE_CPPFLAGS
600
601 # mysql & windows
602 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
603 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
604
605 if test "$build_target" = "mingw"
606 then
607   CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
608 fi
609
610 # test for mysql
611 mysql=false
612 mysqlfail=false
613 SAVE_LDFLAGS=$LDFLAGS
614 SAVE_CPPFLAGS=$CPPFLAGS
615 AC_MSG_CHECKING(for mysql)
616 AC_ARG_WITH(mysql,
617   [  --with-mysql=PFX        base of MySQL installation],
618   [AC_MSG_RESULT("$with_mysql")
619    if test "$with_mysql" != "no"
620    then
621     if test "$with_mysql" != "yes"
622     then
623       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
624       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
625     fi
626     AC_CHECK_HEADERS(mysql/mysql.h,
627      AC_CHECK_LIB(mysqlclient, mysql_init,
628       MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
629       MYSQL_CPPFLAGS="-I$with_mysql/include"
630
631       mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
632    fi
633   ],
634   [AC_MSG_RESULT([--with-mysql not specified])
635    if test -d "/usr/lib64/mysql"; then
636     MYSQL_LIBDIR="/usr/lib64/mysql"
637    elif test -d "/usr/lib/mysql"; then
638     MYSQL_LIBDIR="/usr/lib/mysql"
639    else
640     MYSQL_LIBDIR="/usr/lib"
641    fi
642    LDFLAGS="-L$MYSQL_LIBDIR $LDFLAGS $ZLIBS"
643    AC_CHECK_LIB(mysqlclient, mysql_init,
644     [AC_CHECK_HEADERS(mysql/mysql.h,
645       MYSQL_LDFLAGS="-L$MYSQL_LIBDIR"
646       mysql=true
647
648      , [], [$CYGWIN_MYSQL_MAGIC])])
649   ])
650
651 AC_SUBST(MYSQL_LDFLAGS)
652 AC_SUBST(MYSQL_CPPFLAGS)
653
654 # additional version check for mysql
655 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
656 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
657 then
658   AC_MSG_CHECKING(mysql version)
659   AC_RUN_IFELSE([AC_LANG_PROGRAM(
660     [[$CYGWIN_MYSQL_MAGIC
661       #include <mysql/mysql.h>]],
662     [[if (MYSQL_VERSION_ID < 40100)
663         return(-1);
664       else
665         return(0);
666     ]])
667     ],mysql=true,mysql=false)
668   if test "$mysql" = "false"
669   then
670     mysqlfail=true
671     AC_MSG_RESULT([fail, >= 4.1 required])
672   else
673     AC_MSG_RESULT(ok)
674   fi
675 fi
676 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
677 AM_CONDITIONAL(HAVE_MYSQLE, test "0" = "1")
678 # restore LIBS
679 LIBS=$SAVE_LIBS
680 LDFLAGS=$SAVE_LDFLAGS
681 CPPFLAGS=$SAVE_CPPFLAGS
682
683 if test "$sqlite" = 0 -a "$mysql" = 0
684 then
685  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
686 fi
687
688 # libmicrohttpd
689 lmhd=0
690 AC_MSG_CHECKING([for libmicrohttpd])
691 AC_ARG_WITH(microhttpd,
692    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
693    [AC_MSG_RESULT([$with_microhttpd])
694     case $with_microhttpd in
695       no)
696         ;;
697       yes)
698         AC_CHECK_HEADERS([microhttpd.h],
699           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
700             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
701               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.18])
702               AC_RUN_IFELSE([
703                 #include "$native_srcdir/src/include/platform.h"
704                 #include <microhttpd.h>
705                 int main () { return MHD_VERSION >= 0x0091200 ? 0 : 1; }
706                ], [
707                AC_MSG_RESULT(ok)
708                lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
709             [],[#include "$native_srcdir/src/include/platform.h"
710                 #include <microhttpd.h>]),,
711             [#include "$native_srcdir/src/include/platform.h"])
712         ;;
713       *)
714         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
715         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
716         AC_CHECK_HEADERS(microhttpd.h,
717           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
718             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
719               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
720               [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.18])
721                AC_RUN_IFELSE([
722                 #include "$native_srcdir/src/include/platform.h"
723                 #include <microhttpd.h>
724                 int main () { return MHD_VERSION >= 0x0091200 ? 0 : 1; }
725                ], [
726                AC_MSG_RESULT(ok)
727                lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
728             [],[#include "$native_srcdir/src/include/platform.h"
729                 #include <microhttpd.h>]),,
730             [#include "$native_srcdir/src/include/platform.h"])
731         ;;
732     esac
733    ],
734    [AC_MSG_RESULT([--with-microhttpd not specified])
735     AC_CHECK_HEADERS([microhttpd.h],
736       AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
737         AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
738           [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.18])
739               AC_RUN_IFELSE([
740                 #include "$native_srcdir/src/include/platform.h"
741                 #include <microhttpd.h>
742                 int main () { return MHD_VERSION >= 0x0091200 ? 0 : 1; }
743                ], [
744                AC_MSG_RESULT(ok)
745                lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
746         [],[#include "$native_srcdir/src/include/platform.h"
747             #include <microhttpd.h>]),,
748        [#include "$native_srcdir/src/include/platform.h"])])
749 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
750 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
751
752
753 # restore LIBS
754 LIBS=$SAVE_LIBS
755
756 # check for python & pexpect (used for some testcases only)
757 AM_PATH_PYTHON([2.6],, [:])
758 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
759
760 # check for gettext
761 AM_GNU_GETTEXT([external])
762 AM_GNU_GETTEXT_VERSION([0.16.1])
763
764 # check for iconv
765 AM_ICONV
766
767 # Checks for standard typedefs, structures, and compiler characteristics.
768 AC_TYPE_PID_T
769 AC_TYPE_SIZE_T
770 AC_TYPE_MODE_T
771 AC_HEADER_TIME
772 AC_HEADER_STAT
773 AC_HEADER_STDBOOL
774 AC_STRUCT_TM
775
776 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
777    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
778    ],
779    [],
780    [
781       #include <sys/types.h>
782       #include <sys/socket.h>
783       #include <netinet/in.h>
784    ])
785
786
787
788 # Checks for library functions.
789 AC_FUNC_CLOSEDIR_VOID
790 AC_FUNC_FORK
791 AC_PROG_GCC_TRADITIONAL
792 AC_FUNC_MEMCMP
793 AC_FUNC_SELECT_ARGTYPES
794 AC_FUNC_CHOWN
795
796 AC_TYPE_SIGNAL
797 AC_FUNC_STAT
798 AC_FUNC_STRFTIME
799 AC_FUNC_VPRINTF
800 AC_HEADER_SYS_WAIT
801 AC_TYPE_OFF_T
802 AC_TYPE_UID_T
803 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])
804
805 # restore LIBS
806 LIBS=$SAVE_LIBS
807
808 gn_user_home_dir="~/.gnunet"
809 AC_ARG_WITH(user-home-dir,
810         AC_HELP_STRING(
811                 [--with-user-home-dir=DIR],
812                 [default user home directory (~/.gnunet)]),
813         [gn_user_home_dir=$withval])
814 AC_SUBST(GN_USER_HOME_DIR, $gn_user_home_dir)
815 gn_daemon_home_dir="/var/lib/gnunet"
816 AC_ARG_WITH(daemon-home-dir,
817         AC_HELP_STRING(
818                 [--with-daemon-home-dir=DIR],
819                 [default daemon home directory (/var/lib/gnunet)]),
820         [gn_daemon_home_dir=$withval])
821 AC_SUBST(GN_DAEMON_HOME_DIR, $gn_daemon_home_dir)
822 gn_daemon_config_dir="/etc"
823 AC_ARG_WITH(daemon-config-dir,
824         AC_HELP_STRING(
825                 [--with-daemon-config-dir=DIR],
826                 [default daemon config directory (/etc)]),
827         [gn_daemon_config_dir=$withval])
828 AC_SUBST(GN_DAEMON_CONFIG_DIR, $gn_daemon_config_dir)
829
830 GN_INTLINCL=""
831 GN_LIBINTL="$LTLIBINTL"
832 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
833 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
834 if test x$enable_framework_build = xyes
835 then
836   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
837   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
838   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
839   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL]) 
840 fi
841
842 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
843 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
844
845 AC_SUBST(GN_LIB_LDFLAGS)
846 AC_SUBST(GN_PLUGIN_LDFLAGS)
847 AC_SUBST(GN_INTLINCL)
848 AC_SUBST(GN_LIBINTL)
849
850 AC_SUBST(CPPFLAGS)
851 AC_SUBST(LIBS)
852 AC_SUBST(LDFLAGS)
853 AC_SUBST(EXT_LIB_PATH)
854 AC_SUBST(EXT_LIBS)
855
856 AC_SUBST(LIBPREFIX)
857 AC_SUBST(DLLDIR)
858 AC_SUBST(EXT_LIB_PATH)
859
860
861 # test for sudo
862 AC_MSG_CHECKING(for sudo)
863 AC_ARG_WITH(sudo,
864   [  --with-sudo=PATH       path to sudo binary (or just yes)],
865   [AC_MSG_RESULT("$with_sudo")
866    case $with_sudo in
867    no)
868      SUDO_BINARY=
869      ;;
870    yes)
871      SUDO_BINARY=sudo
872      ;;
873    *)
874      SUDO_BINARY=$with_sudo
875     ;;
876    esac
877   ],
878   [AC_MSG_RESULT([no])])
879 AC_SUBST(SUDO_BINARY)
880 AM_CONDITIONAL([HAVE_SUDO], [test "x$SUDO_BINARY" != "x" -o -w /])
881
882
883 # test for nssdir
884 AC_MSG_CHECKING(with nssdir)
885 AC_ARG_WITH(nssdir,
886   [  --with-nssdir=PATH       where to install NSS plugins],
887   [AC_MSG_RESULT("$with_nssdir")
888    case $with_nssdir in
889    no)
890      NSS_DIR=
891      install_nss=0
892      ;;
893    yes)
894      NSS_DIR="/lib"
895      install_nss=1
896      ;;
897    *)
898      NSS_DIR=$with_nssdir
899      install_nss=1
900     ;;
901    esac
902   ],
903   [
904    if test "x$SUDO_BINARY" != "x" -o -w /
905    then
906      NSS_DIR="/lib"
907      install_nss=1
908      AC_MSG_RESULT([yes, to /lib])
909    else
910      NSS_DIR=
911      install_nss=0
912      AC_MSG_RESULT([no])
913    fi
914   ])
915 AC_SUBST(NSS_DIR)
916 AM_CONDITIONAL([INSTALL_NSS], [test "x$install_nss" != "x0"])
917
918 # test for gnunetdns group name
919 GNUNETDNS_GROUP=gnunetdns
920 AC_MSG_CHECKING(for gnunetdns group name)
921 AC_ARG_WITH(gnunetdns,
922   [  --with-gnunetdns=GRPNAME       name for gnunetdns group],
923   [AC_MSG_RESULT("$with_gnunetdns")
924    case $with_gnunetdns in
925    no)
926      GNUNETDNS_GROUP=gnunet
927      ;;
928    yes)
929      GNUNETDNS_GROUP=gnunetdns
930      ;;
931    *)
932      GNUNETDNS_GROUP=$with_gnunetdns
933     ;;
934    esac
935   ],
936   [AC_MSG_RESULT([gnunetdns])])
937 AC_SUBST(GNUNETDNS_GROUP)
938
939
940
941 # gnutls
942 gnutls=0
943 AC_MSG_CHECKING(for gnutls)
944 AC_ARG_WITH(gnutls,
945    [  --with-gnutls=PFX   base of gnutls installation],
946    [AC_MSG_RESULT([$with_gnutls])
947     case $with_gnutls in
948       no)
949         ;;
950       yes)
951         AC_CHECK_HEADERS([gnutls/abstract.h],
952             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
953              gnutls=true))
954         ;;
955       *)
956         LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
957         CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
958         AC_CHECK_HEADERS([gnutls/abstract.h],
959             AC_CHECK_LIB([gnutls], [gnutls_priority_set],
960               EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
961               gnutls=true))
962         ;;
963     esac
964    ],
965    [AC_MSG_RESULT([--with-gnutls not specified])
966     AC_CHECK_HEADERS([gnutls/abstract.h],
967         AC_CHECK_LIB([gnutls], [gnutls_priority_set],
968           gnutls=true))])
969 AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
970 AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have gnutls])
971
972
973 # Test if we are building for superMUC
974 AC_MSG_CHECKING(if testbed should use IBM LoadLeveler to run on SuperMUC)
975 AC_ARG_ENABLE([ll],
976     [AS_HELP_STRING([--enable-ll],
977        [build GNUnet testbed for use with IBM LoadLeveler for running testbed on
978               SuperMUC (default is NO)])],
979     [if test "x$enable_ll" = "xno"
980      then
981        ll=0
982      else
983        ll=1
984      fi],
985     [ll=0
986      enable_ll=no])
987 AC_MSG_RESULT($enable_ll)
988 AM_CONDITIONAL([ENABLE_LL], [test "x$ll" = "x1"])
989 AC_DEFINE_UNQUOTED([ENABLE_LL], [$ll], [Build with LL support])
990
991 # Check if NSE has to send timestamp information to testbed logger for
992 # generating histogram of messages received
993 AC_MSG_CHECKING(if NSE has to send timestamp information to testbed logger)
994 AC_ARG_ENABLE([nse-histogram],
995     [AS_HELP_STRING([--enable-nse-histogram],
996        [have NSE send timestamp information to testbed logger for generating
997        histogram of received messages.  NOT useful for production (default is
998        NO)])],
999     [if test "x$enableval" = "xno"
1000      then
1001        nse_histogram=0
1002      else
1003        nse_histogram=1
1004      fi],
1005     [nse_histogram=0
1006      enable_nse_histogram=no])
1007 AC_MSG_RESULT($enable_nse_histogram)
1008 AM_CONDITIONAL([ENABLE_NSE_HISTOGRAM], [test "x$nse_histogram" = "x1"])
1009 AC_DEFINE_UNQUOTED([ENABLE_NSE_HISTOGRAM], [$nse_histogram],
1010                    [have NSE send timestamp information to testbed logger])
1011
1012 # should 'make check' run tests?
1013 AC_MSG_CHECKING(whether to run tests)
1014 AC_ARG_ENABLE([testruns],
1015    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
1016    [enable_tests_run=${enableval}],
1017    [enable_tests_run=yes])
1018 AC_MSG_RESULT($enable_test_run)
1019 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
1020
1021
1022 # should monkey be used when running (certain) services?
1023 AC_MSG_CHECKING(whether to run with monkey)
1024 AC_ARG_ENABLE([monkey],
1025    [AS_HELP_STRING([--enable-monkey], [enable running with monkey])],
1026    [enable_monkey=${enableval}],
1027    [enable_monkey=no])
1028 AC_MSG_RESULT($enable_monkey)
1029 AM_CONDITIONAL([ENABLE_MONKEY], [test "x$enable_monkey" = "xyes"])
1030 if test "x$enable_monkey" = "xyes"
1031 then
1032   MONKEYPREFIX="monkey"
1033 else
1034   MONKEYPREFIX=""
1035 fi
1036 AC_SUBST(MONKEYPREFIX)
1037
1038
1039 # should expensive tests be run?
1040 AC_MSG_CHECKING(whether to run expensive tests)
1041 AC_ARG_ENABLE([expensivetests],
1042    [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
1043    [enable_expensive=${enableval}],
1044    [enable_expensive=no])
1045 AC_MSG_RESULT($enable_expensive)
1046 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
1047
1048 # should ports be open for Java services?
1049 AC_MSG_CHECKING(whether to enable ports for gnunet-java)
1050 AC_ARG_ENABLE([javaports],
1051    [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
1052    [enable_java_ports=${enableval}],
1053    [enable_java_ports=no])
1054 AC_MSG_RESULT($enable_java_ports)
1055 if test "x$enable_java_ports" = "xyes"
1056 then
1057   JAVAPORT=""
1058 else
1059   JAVAPORT="$UNIXONLY"
1060 fi
1061 AC_SUBST(JAVAPORT)
1062
1063 # should benchmarks be run?
1064 AC_MSG_CHECKING(whether to run benchmarks during make check)
1065 AC_ARG_ENABLE([benchmarks],
1066    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
1067    [enable_benchmarks=${enableval}],
1068    [enable_benchmarks=no])
1069 AC_MSG_RESULT($enable_benchmarks)
1070 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
1071
1072 # should experimental code be compiled (code that may not yet compile)?
1073 AC_MSG_CHECKING(whether to compile experimental code)
1074 AC_ARG_ENABLE([experimental],
1075    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
1076    [enable_experimental=${enableval}],
1077    [enable_experimental=no])
1078 AC_MSG_RESULT($enable_experimental)
1079 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
1080
1081 # should memory statistics be kept (very expensive CPU-wise!)
1082 AC_MSG_CHECKING(whether to create expensive statistics on memory use)
1083 AC_ARG_ENABLE([heapstats],
1084    [AS_HELP_STRING([--enable-heapstats], [enable expensive heap statistics])],
1085    [enable_heapstats=1],
1086    [enable_heapstats=0])
1087 AC_MSG_RESULT($enable_heapstats)
1088 AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics])
1089
1090 # should code be enabled that works around missing OS functionality on Windows?
1091 # used for test cases
1092 if test $build_target = "mingw"
1093 then
1094         workarounds=1
1095
1096 AC_LINK_IFELSE(
1097  [AC_LANG_PROGRAM(
1098   [#include <ws2tcpip.h>
1099   ],[
1100   int s = socket (0, 0, 0);])
1101  ],[
1102   AC_DEFINE_UNQUOTED([HAVE_SOCKET],1,[Define this if socket() is available])
1103  ],[
1104   AC_DEFINE_UNQUOTED([HAVE_SOCKET],0,[Define this if socket() is available])
1105  ])
1106
1107 AC_LINK_IFELSE(
1108  [AC_LANG_PROGRAM(
1109   [#include <ws2tcpip.h>
1110   ],[
1111   int s = select (0, NULL, NULL, NULL, NULL);])
1112  ],[
1113   AC_DEFINE_UNQUOTED([HAVE_SELECT],1,[Define this if select() is available])
1114  ],[
1115   AC_DEFINE_UNQUOTED([HAVE_SELECT],0,[Define this if select() is available])
1116  ])
1117
1118 AC_LINK_IFELSE(
1119  [AC_LANG_PROGRAM(
1120   [#include <ws2tcpip.h>
1121   ],[
1122   struct in_addr i;
1123   char *s = inet_ntoa (i);])
1124  ],[
1125   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],1,[Define this if inet_ntoa() is available])
1126  ],[
1127   AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],0,[Define this if inet_ntoa() is available])
1128  ])
1129
1130 AC_LINK_IFELSE(
1131  [AC_LANG_PROGRAM(
1132   [#include <ws2tcpip.h>
1133   ],[
1134   int s = getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);])
1135  ],[
1136   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],1,[Define this if getnameinfo() is available])
1137  ],[
1138   AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],0,[Define this if getnameinfo() is available])
1139  ])
1140
1141 AC_LINK_IFELSE(
1142  [AC_LANG_PROGRAM(
1143   [#include <ws2tcpip.h>
1144   ],[
1145   int s = gethostname (NULL, 0);])
1146  ],[
1147   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],1,[Define this if gethostname() is available])
1148  ],[
1149   AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],0,[Define this if gethostname() is available])
1150  ])
1151
1152 AC_LINK_IFELSE(
1153  [AC_LANG_PROGRAM(
1154   [#include <ws2tcpip.h>
1155   ],[
1156   void *s = gethostbyname (NULL);])
1157  ],[
1158   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],1,[Define this if gethostbyname() is available])
1159  ],[
1160   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],0,[Define this if gethostbyname() is available])
1161  ])
1162
1163 AC_LINK_IFELSE(
1164  [AC_LANG_PROGRAM(
1165   [#include <ws2tcpip.h>
1166   ],[
1167   void *s = gethostbyaddr (NULL, 0, 0);])
1168  ],[
1169   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],1,[Define this if gethostbyaddr() is available])
1170  ],[
1171   AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],0,[Define this if gethostbyaddr() is available])
1172  ])
1173
1174 AC_LINK_IFELSE(
1175  [AC_LANG_PROGRAM(
1176   [#include <ws2tcpip.h>
1177   ],[
1178   int s = getaddrinfo (NULL, NULL, NULL, NULL);])
1179  ],[
1180   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1181  ],[
1182   AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1183  ])
1184
1185 else
1186   AC_MSG_CHECKING(whether to enable windows workarounds)
1187   AC_ARG_ENABLE([windows_workarounds], 
1188      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
1189      [enable_workarounds=${enableval}],
1190      [enable_workarounds=no])
1191   AC_MSG_RESULT($enable_workarounds)
1192   if test x$enable_windows_workarounds = "xyes"
1193   then
1194      workarounds=1
1195   else
1196      workarounds=0
1197    fi
1198 fi
1199 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
1200
1201 # gcov compilation
1202 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
1203 AC_ARG_ENABLE([coverage], 
1204               AS_HELP_STRING([--enable-coverage],
1205                              [compile the library with code coverage support]),
1206               [use_gcov=${enableval}], 
1207               [use_gcov=no])
1208 AC_MSG_RESULT($use_gcov)
1209 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
1210
1211
1212 # version info
1213 AC_PATH_PROG(svnversioncommand, svnversion)
1214 AC_PATH_PROG(gitcommand, git)
1215 if test "X$svnversioncommand" = "X" || test `$svnversioncommand -n '.'` = "exported"
1216 then
1217   if test "X$gitcommand" = "X"
1218   then
1219     AC_DEFINE_UNQUOTED(VCS_VERSION, ["release"], [repository svn version])
1220   else
1221     gitver=$(git log -1 | grep "git-svn-id" | sed -e 's/.*@\([[0-9]]\+\) .*/\1/')
1222     if test "X$gitver" = "X"
1223     then
1224       AC_DEFINE_UNQUOTED(VCS_VERSION, ["release"], [repository svn version])
1225     else
1226       AC_DEFINE_UNQUOTED(VCS_VERSION, ["svn-$gitver"], [repository svn version])
1227     fi
1228   fi
1229 else
1230   AC_DEFINE_UNQUOTED(VCS_VERSION, ["svn-`svnversion -n`"], [repository svn version])
1231 fi
1232
1233 AC_CONFIG_FILES([ 
1234 Makefile
1235 contrib/Makefile
1236 doc/Makefile
1237 doc/man/Makefile
1238 m4/Makefile
1239 po/Makefile.in 
1240 src/Makefile
1241 src/arm/Makefile
1242 src/arm/arm.conf
1243 src/ats/Makefile
1244 src/ats/ats.conf
1245 src/ats-tool/Makefile
1246 src/block/Makefile
1247 src/core/Makefile
1248 src/core/core.conf
1249 src/consensus/Makefile
1250 src/consensus/consensus.conf
1251 src/datacache/Makefile
1252 src/datastore/Makefile
1253 src/datastore/datastore.conf
1254 src/dht/Makefile
1255 src/dht/dht.conf
1256 src/dns/Makefile
1257 src/dns/dns.conf
1258 src/dv/Makefile
1259 src/dv/dv.conf
1260 src/exit/Makefile
1261 src/experimentation/Makefile
1262 src/experimentation/experimentation.conf
1263 src/fragmentation/Makefile
1264 src/fs/Makefile
1265 src/fs/fs.conf
1266 src/gns/Makefile
1267 src/gns/gns.conf
1268 src/gns/nss/Makefile
1269 src/hello/Makefile
1270 src/include/Makefile
1271 src/include/gnunet_directories.h
1272 src/hostlist/Makefile
1273 src/lockmanager/Makefile
1274 src/lockmanager/lockmanager.conf
1275 src/mesh/Makefile
1276 src/mesh/mesh.conf
1277 src/mysql/Makefile
1278 src/namestore/Makefile
1279 src/namestore/namestore.conf
1280 src/nat/Makefile
1281 src/nse/Makefile
1282 src/nse/nse.conf
1283 src/peerinfo/Makefile
1284 src/peerinfo/peerinfo.conf
1285 src/peerinfo-tool/Makefile
1286 src/postgres/Makefile
1287 src/pt/Makefile
1288 src/regex/Makefile
1289 src/regex/regex.conf
1290 src/set/Makefile
1291 src/set/set.conf
1292 src/statistics/Makefile
1293 src/statistics/statistics.conf
1294 src/stream/Makefile
1295 src/template/Makefile
1296 src/testbed/Makefile
1297 src/testbed/testbed.conf
1298 src/testing/Makefile
1299 src/topology/Makefile
1300 src/transport/Makefile
1301 src/transport/transport.conf
1302 src/tun/Makefile
1303 src/util/Makefile
1304 src/util/resolver.conf
1305 src/vpn/Makefile
1306 src/vpn/vpn.conf
1307 src/integration-tests/Makefile
1308 pkgconfig/Makefile
1309 pkgconfig/gnunetats.pc
1310 pkgconfig/gnunetarm.pc
1311 pkgconfig/gnunetblock.pc
1312 pkgconfig/gnunetcore.pc
1313 pkgconfig/gnunetdatacache.pc
1314 pkgconfig/gnunetdatastore.pc
1315 pkgconfig/gnunetdht.pc
1316 pkgconfig/gnunetdns.pc
1317 pkgconfig/gnunetdnsparser.pc
1318 pkgconfig/gnunetdv.pc
1319 pkgconfig/gnunetfragmentation.pc
1320 pkgconfig/gnunetfs.pc
1321 pkgconfig/gnunetgns.pc
1322 pkgconfig/gnunethello.pc
1323 pkgconfig/gnunetlockmanager.pc
1324 pkgconfig/gnunetmesh.pc
1325 pkgconfig/gnunetmysql.pc
1326 pkgconfig/gnunetnamestore.pc
1327 pkgconfig/gnunetnat.pc
1328 pkgconfig/gnunetnse.pc
1329 pkgconfig/gnunetpeerinfo.pc
1330 pkgconfig/gnunetpostgres.pc
1331 pkgconfig/gnunetregex.pc
1332 pkgconfig/gnunetstatistics.pc
1333 pkgconfig/gnunetstream.pc
1334 pkgconfig/gnunettestbed.pc
1335 pkgconfig/gnunettesting.pc
1336 pkgconfig/gnunettransport.pc
1337 pkgconfig/gnunettun.pc
1338 pkgconfig/gnunetutil.pc
1339 pkgconfig/gnunetvpn.pc
1340 ])
1341 AC_OUTPUT
1342
1343 # Finally: summary!
1344
1345 # warn user if mysql found but not used due to version
1346 if test "$mysqlfail" = "true"
1347 then
1348   AC_MSG_NOTICE([NOTICE: MySQL found, but too old. MySQL support will not be compiled.])
1349 fi
1350
1351 # sqlite
1352 if test "x$sqlite" = "x0"
1353 then
1354   AC_MSG_NOTICE([NOTICE: sqlite not found.  sqLite support will not be compiled.])
1355 fi
1356
1357 # libcurl
1358 if test "x$curl" = "x0"
1359 then
1360   AC_MSG_NOTICE([NOTICE: libcurl not found.  http client support will not be compiled.])
1361 fi
1362
1363 #gnutls
1364 if test x$gnutls != xtrue
1365 then
1366   AC_MSG_NOTICE([NOTICE: gnutls not found, gnunet-gns-proxy will not be built])
1367 fi
1368
1369 # java ports
1370 if test "x$enable_java_ports" = "xyes"
1371 then
1372   AC_MSG_NOTICE([NOTICE: opening ports for gnunet-java bindings by default.])
1373 fi
1374
1375 if test "x$lmhd" != "x1"
1376 then
1377  AC_MSG_NOTICE([NOTICE: libmicrohttpd not found, http transport will not be installed.])
1378 fi
1379
1380 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
1381
1382 if test "$enable_framework_build" = "yes"
1383 then
1384   AC_MSG_NOTICE([NOTICE: Mac OS X framework build enabled.])
1385 fi
1386
1387 if test "x$SUDO_BINARY" = "x" -a ! -w /
1388 then
1389   AC_MSG_NOTICE([NOTICE: --with-sudo not specified and not running as 'root', will not install GNS NSS library])
1390 fi
1391
1392
1393 AC_MSG_NOTICE([********************************************
1394 Please make sure NOW that you have created a user and group 'gnunet'
1395 and additionally a group 'gnunetdns':
1396         addgroup gnunetdns
1397         adduser gnunet
1398
1399 Make sure that '/var/lib/gnunet' is owned (and writable) by user
1400 'gnunet'.  Then, you can compile GNUnet with
1401         make
1402
1403 After that, run (if necessary as 'root')
1404         make install
1405 to install everything. 
1406
1407 Each GNUnet user should be added to the 'gnunet' group (may
1408 require fresh login to come into effect):
1409         adduser $USERNAME gnunet
1410 (run the above command as root once for each of your users, replacing
1411 "$USERNAME" with the respective login names).  If you have a global IP
1412 address, no further configuration is required.
1413         
1414 Optionally, download and compile gnunet-gtk to get a GUI for 
1415 file-sharing and configuration.  This is particularly recommended
1416 if your network setup is non-trivial, as gnunet-setup can be
1417 used to test in the GUI if your network configuration is working.
1418 gnunet-setup should be run as the "gnunet" user under X.  As it
1419 does very little with the network, running it as "root" is likely
1420 also harmless.  You can also run it as a normal user, but then
1421 you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
1422 home directory in the end.
1423
1424 Once you have configured your peer, run (as the 'gnunet' user)
1425         gnunet-arm -s
1426 to start the peer.  You can then run the various GNUnet-tools as
1427 your "normal" user (who should only be in the group 'gnunet').
1428 ********************************************])