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