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