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