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