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