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