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