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