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