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