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