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