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