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