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