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