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