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