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