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