1 # This file is part of GNUnet.
2 # (C) 2001--2013 Christian Grothoff (and other contributing authors)
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.
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.
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.
20 # Process this file with autoconf to produce a configure script.
24 # Checks for programs.
25 AC_INIT([gnunet], [0.9.5a],[bug-gnunet@gnu.org])
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])
45 LT_INIT([disable-static dlopen win32-dll])
56 if test "$enable_shared" = "no"
58 AC_MSG_ERROR([GNUnet only works with shared libraries. Sorry.])
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;
65 CFLAGS="-fno-strict-aliasing $CFLAGS"
68 # Use Linux interface name unless the OS has a different preference
69 DEFAULT_INTERFACE="\"eth0\""
71 funcstocheck="getnameinfo gethostname gethostbyname gethostbyaddr getaddrinfo"
73 # Srcdir in a form that native compiler understands (i.e. DOS path on W32)
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])
84 DEFAULT_INTERFACE="\"en0\""
90 AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
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"
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"
116 AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
117 AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system])
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"
133 AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux kernel])
134 CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
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"
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"
167 native_srcdir=$(cd $srcdir; pwd -W)
170 AC_DEFINE_UNQUOTED(GNU,1,[This is a GNU system])
175 AC_MSG_RESULT(Unrecognised OS $host_os)
176 AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
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)
183 # Disable TCP-based IPC on systems that support UNIX domain
184 # sockets in default configuratin:
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")
198 AC_MSG_RESULT([$build_target])
199 AC_SUBST(build_target)
200 AM_CONDITIONAL([am__fastdepOBJC], false)
201 AC_UNALIGNED_64_ACCESS
203 # some other checks for standard libs
204 AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
205 AC_CHECK_LIB(socket, socket)
207 AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
209 # 'save' libs; only those libs found so far will be
210 # linked against _everywhere_. For the others, we
211 # will be more selective!
214 # libgnurx (regex library for W32)
216 AC_CHECK_LIB(gnurx, regexec, gnurx=1)
217 if test "x$gnurx" = "x0" -a "x$build_target" = "xmingw"
219 AC_MSG_ERROR([on W32 GNUnet needs libgnurx])
225 NEED_LIBGCRYPT_VERSION=1.6.0
228 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION", gcrypt=1)
229 AC_CHECK_DECLS([gcry_mpi_lshift], [], [], [[#include <gcrypt.h>]])
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)
242 AC_DEFINE_UNQUOTED([NEED_LIBGCRYPT_VERSION], "$NEED_LIBGCRYPT_VERSION", [required libgcrypt version])
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"
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"
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\)])
273 AC_DEFINE_UNQUOTED([GNUNET_EXTRA_LOGGING],[$extra_logging],[1 if extra logging is enabled, 2 for very verbose extra logging, 0 otherwise])
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}],
281 if test "x$extra_logging" != "xGNUNET_NO"; then
282 enable_poisoning="defaults to yes (extra logging is enabled)"
287 AC_MSG_RESULT($enable_poisoning)
288 if test ! "x$enable_poisoning" = "xno"; then
293 AC_DEFINE_UNQUOTED([ENABLE_POISONING],[$enable_poisoning],[1 if freed memory should be poisoned, 0 otherwise])
295 if test $build = $target
297 AC_MSG_CHECKING([for working HMAC])
299 LIBS="$LIBS $LIBGCRYPT_LIBS"
300 CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
302 [AC_LANG_PROGRAM([#include <gcrypt.h>
303 #include <stdio.h>], [[
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};
317 if (!gcry_check_version (GCRYPT_VERSION))
319 fprintf (stderr, "Version mismatch %s <-> %s \n", gcry_check_version (NULL), GCRYPT_VERSION);
323 gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
324 gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
326 if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
328 fprintf (stderr, "gcry_md_open error\n");
332 gcry_md_setkey (mac, key, sizeof (key));
333 gcry_md_write (mac, data, sizeof (data));
335 if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
337 fprintf (stderr, "memcmp error\n");
345 [AC_MSG_RESULT([yes])],
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.])
354 AC_MSG_FAILURE([HMAC test failed])
358 AC_MSG_FAILURE([libgcrypt header version does not match library version])
362 fi # $build = $target
365 LIBCURL_CHECK_CONFIG(,7.21.3,curl=1,curl=0)
368 AM_CONDITIONAL(HAVE_LIBCURL, true)
369 AC_DEFINE([HAVE_LIBCURL],[1],[Have libcurl])
371 AM_CONDITIONAL(HAVE_LIBCURL, false)
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"
385 AC_CHECK_HEADER(idna.h,
386 AC_CHECK_LIB(idn, stringprep_check_version,
387 [libidn=yes LIBS="${LIBS} -lidn"], libidn=no),
390 if test "$libidn" != "no" ; then
391 AC_DEFINE(LIBIDN, 1, [Define to 1 if you want IDN support.])
393 AC_MSG_FAILURE([Libidn not found])
395 AC_MSG_RESULT($libidn)
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
409 AM_CONDITIONAL(HAVE_LIBGLPK, false)
410 AC_MSG_WARN([GNUnet requires GLPK >= 4.32])
412 AM_CONDITIONAL(HAVE_LIBGLPK, true)
413 AC_DEFINE([HAVE_LIBGLPK],[1],[Have GLPK])
417 # Minimum required version for glibtop is 2.6.0
418 AM_PATH_GLIB_2_0(2.6.0, [glib2=true] , [glib2=false] ,)
419 if test x$glib2 = xfalse
421 AM_CONDITIONAL(HAVE_GLIB2, false)
422 AC_MSG_WARN([GNUnet requires GLIB >= 2.6.0])
424 AM_CONDITIONAL(HAVE_GLIB2, true)
425 AC_DEFINE([HAVE_GLIB2],[1],[Have glib2])
426 LIBS="$LIBS $GLIB_LIBS"
427 CFLAGS="$CFLAGS $GLIB_CFLAGS"
430 AC_CHECK_HEADERS([nss.h],[nss=true],[nss=false])
431 if test x$nss = xfalse
433 AM_CONDITIONAL(HAVE_GLIBCNSS, false)
434 AC_MSG_WARN([No GNU libc nss header, will not build NSS plugin])
436 AM_CONDITIONAL(HAVE_GLIBCNSS, true)
441 # test for kvm and kstat (for CPU stats under BSD/Solaris)
442 AC_CHECK_LIB([kvm],[kvm_open])
443 AC_CHECK_LIB([kstat],[kstat_open])
445 # test for libextractor
447 AC_MSG_CHECKING(for libextractor)
448 AC_ARG_WITH(extractor,
449 [ --with-extractor=PFX base of libextractor installation],
450 [AC_MSG_RESULT([$with_extractor])
451 case $with_extractor in
455 AC_CHECK_HEADERS(extractor.h,
456 AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
460 LDFLAGS="-L$with_extractor/lib $LDFLAGS"
461 CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
462 AC_CHECK_HEADERS(extractor.h,
463 AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
464 EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
469 [AC_MSG_RESULT([--with-extractor not specified])
470 AC_CHECK_HEADERS(extractor.h,
471 AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
473 if test "$extractor" != 1
475 AC_MSG_ERROR([GNUnet requires libextractor])
480 # test for libunistring
482 if test $HAVE_LIBUNISTRING != yes; then
483 AC_MSG_ERROR([GNUnet requires libunistring])
485 if test $gl_libunistring_hexversion -le 2305; then
486 AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])
493 # Checks for standard header files.
497 # Check for headers that are ALWAYS required
498 AC_CHECK_HEADERS([fcntl.h math.h errno.h ctype.h limits.h stdio.h stdlib.h string.h unistd.h stdarg.h signal.h locale.h sys/stat.h sys/types.h],,AC_MSG_ERROR([Compiling GNUnet requires standard UNIX headers files]))
500 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
501 AC_CHECK_HEADERS([malloc.h malloc/malloc.h langinfo.h sys/param.h sys/mount.h sys/statvfs.h sys/select.h sockLib.h sys/mman.h sys/msg.h sys/vfs.h arpa/inet.h fcntl.h libintl.h netdb.h netinet/in.h netinet/in_systm.h sys/ioctl.h sys/socket.h sys/time.h unistd.h kstat.h sys/sysinfo.h kvm.h sys/file.h sys/resource.h ifaddrs.h mach/mach.h stddef.h sys/timeb.h terminos.h argz.h ucred.h endian.h sys/endian.h execinfo.h])
503 SAVE_LDFLAGS=$LDFLAGS
504 SAVE_CPPFLAGS=$CPPFLAGS
508 AC_MSG_CHECKING(for SQLite)
510 [ --with-sqlite=PFX base of SQLite installation],
511 [AC_MSG_RESULT("$with_sqlite")
516 AC_CHECK_HEADERS(sqlite3.h,
520 LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
521 CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
522 AC_CHECK_HEADERS(sqlite3.h,
523 EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
524 SQLITE_LDFLAGS="-L$with_sqlite/lib"
525 SQLITE_CPPFLAGS="-I$with_sqlite/include"
527 LDFLAGS=$SAVE_LDFLAGS
528 CPPFLAGS=$SAVE_CPPFLAGS
532 [AC_MSG_RESULT([--with-sqlite not specified])
533 AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
534 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
535 AC_SUBST(SQLITE_CPPFLAGS)
536 AC_SUBST(SQLITE_LDFLAGS)
540 AC_MSG_CHECKING(for postgres)
541 AC_ARG_WITH(postgres,
542 [ --with-postgres=PFX base of postgres installation],
543 [AC_MSG_RESULT("$with_postgres")
544 case $with_postgres in
548 AC_CHECK_HEADERS(postgresql/libpq-fe.h,
552 LDFLAGS="-L$with_postgres/lib $LDFLAGS"
553 CPPFLAGS="-I$with_postgres/include $CPPFLAGS"
554 AC_CHECK_HEADERS(postgresql/libpq-fe.h,
555 EXT_LIB_PATH="-L$with_postgres/lib $EXT_LIB_PATH"
556 POSTGRES_LDFLAGS="-L$with_postgres/lib"
557 POSTGRES_CPPFLAGS="-I$with_postgres/include"
559 LDFLAGS=$SAVE_LDFLAGS
560 CPPFLAGS=$SAVE_CPPFLAGS
564 [AC_MSG_RESULT([--with-postgres not specified])
565 AC_CHECK_HEADERS(postgresql/libpq-fe.h, postgres=true)])
566 AM_CONDITIONAL(HAVE_POSTGRES, test x$postgres = xtrue)
567 AC_SUBST(POSTGRES_CPPFLAGS)
568 AC_SUBST(POSTGRES_LDFLAGS)
570 # test for libz (maybe required for linking mysql)
572 AC_CHECK_LIB(z, compress,,zlib=0)
573 AM_CONDITIONAL(HAVE_ZLIB, test x$zlib = x1)
576 AC_MSG_ERROR([GNUnet requires zlib])
580 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
581 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
583 if test "$build_target" = "mingw"
585 CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
591 SAVE_LDFLAGS=$LDFLAGS
592 SAVE_CPPFLAGS=$CPPFLAGS
593 AC_MSG_CHECKING(for mysql)
595 [ --with-mysql=PFX base of MySQL installation],
596 [AC_MSG_RESULT("$with_mysql")
597 if test "$with_mysql" != "no"
599 if test "$with_mysql" != "yes"
601 LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
602 CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
604 AC_CHECK_HEADERS(mysql/mysql.h,
605 AC_CHECK_LIB(mysqlclient, mysql_init,
606 MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
607 MYSQL_CPPFLAGS="-I$with_mysql/include"
609 mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
612 [AC_MSG_RESULT([--with-mysql not specified])
613 if test -d "/usr/lib64/mysql"; then
614 MYSQL_LIBDIR="/usr/lib64/mysql"
615 elif test -d "/usr/lib/mysql"; then
616 MYSQL_LIBDIR="/usr/lib/mysql"
618 MYSQL_LIBDIR="/usr/lib"
620 LDFLAGS="-L$MYSQL_LIBDIR $LDFLAGS $ZLIBS"
621 AC_CHECK_LIB(mysqlclient, mysql_init,
622 [AC_CHECK_HEADERS(mysql/mysql.h,
623 MYSQL_LDFLAGS="-L$MYSQL_LIBDIR"
626 , [], [$CYGWIN_MYSQL_MAGIC])])
629 AC_SUBST(MYSQL_LDFLAGS)
630 AC_SUBST(MYSQL_CPPFLAGS)
632 # additional version check for mysql
633 AC_ARG_ENABLE(mysql-version-check, [ --disable-mysql-version-check do not check MySQL version],, enable_mysql_version_check=yes)
634 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
636 AC_MSG_CHECKING(mysql version)
637 AC_RUN_IFELSE([AC_LANG_PROGRAM(
638 [[$CYGWIN_MYSQL_MAGIC
639 #include <mysql/mysql.h>]],
640 [[if (MYSQL_VERSION_ID < 40100)
645 ],mysql=true,mysql=false)
646 if test "$mysql" = "false"
649 AC_MSG_RESULT([fail, >= 4.1 required])
654 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
655 AM_CONDITIONAL(HAVE_MYSQLE, test "0" = "1")
658 LDFLAGS=$SAVE_LDFLAGS
659 CPPFLAGS=$SAVE_CPPFLAGS
661 if test "$sqlite" = 0 -a "$mysql" = 0
663 AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
668 AC_MSG_CHECKING([for libmicrohttpd])
669 AC_ARG_WITH(microhttpd,
670 [ --with-microhttpd=PFX base of libmicrohttpd installation],
671 [AC_MSG_RESULT([$with_microhttpd])
672 case $with_microhttpd in
676 AC_CHECK_HEADERS([microhttpd.h],
677 AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
678 AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
679 [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.18])
681 #include "$native_srcdir/src/include/platform.h"
682 #include <microhttpd.h>
683 int main () { return MHD_VERSION >= 0x0091200 ? 0 : 1; }
686 lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
687 [],[#include "$native_srcdir/src/include/platform.h"
688 #include <microhttpd.h>]),,
689 [#include "$native_srcdir/src/include/platform.h"])
692 LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
693 CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
694 AC_CHECK_HEADERS(microhttpd.h,
695 AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
696 AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
697 EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
698 [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.18])
700 #include "$native_srcdir/src/include/platform.h"
701 #include <microhttpd.h>
702 int main () { return MHD_VERSION >= 0x0091200 ? 0 : 1; }
705 lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
706 [],[#include "$native_srcdir/src/include/platform.h"
707 #include <microhttpd.h>]),,
708 [#include "$native_srcdir/src/include/platform.h"])
712 [AC_MSG_RESULT([--with-microhttpd not specified])
713 AC_CHECK_HEADERS([microhttpd.h],
714 AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
715 AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
716 [AC_MSG_CHECKING([for libmicrohttpd >= 0.9.18])
718 #include "$native_srcdir/src/include/platform.h"
719 #include <microhttpd.h>
720 int main () { return MHD_VERSION >= 0x0091200 ? 0 : 1; }
723 lmhd=1],[AC_MSG_RESULT(failed)],lmhd=1)]),
724 [],[#include "$native_srcdir/src/include/platform.h"
725 #include <microhttpd.h>]),,
726 [#include "$native_srcdir/src/include/platform.h"])])
727 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
728 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
734 # check for python & pexpect (used for some testcases only)
735 AM_PATH_PYTHON([2.6],, [:])
736 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
739 AM_GNU_GETTEXT([external])
740 AM_GNU_GETTEXT_VERSION([0.16.1])
745 # Checks for standard typedefs, structures, and compiler characteristics.
754 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
755 [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
759 #include <sys/types.h>
760 #include <sys/socket.h>
761 #include <netinet/in.h>
766 # Checks for library functions.
767 AC_FUNC_CLOSEDIR_VOID
769 AC_PROG_GCC_TRADITIONAL
771 AC_FUNC_SELECT_ARGTYPES
781 AC_CHECK_FUNCS([atoll stat64 strnlen mremap getrlimit setrlimit sysconf initgroups strndup gethostbyname2 getpeerucred getpeereid setresuid $funcstocheck getifaddrs freeifaddrs getresgid mallinfo malloc_size malloc_usable_size getrusage])
786 gn_user_home_dir="~/.gnunet"
787 AC_ARG_WITH(user-home-dir,
789 [--with-user-home-dir=DIR],
790 [default user home directory (~/.gnunet)]),
791 [gn_user_home_dir=$withval])
792 AC_SUBST(GN_USER_HOME_DIR, $gn_user_home_dir)
793 gn_daemon_home_dir="/var/lib/gnunet"
794 AC_ARG_WITH(daemon-home-dir,
796 [--with-daemon-home-dir=DIR],
797 [default daemon home directory (/var/lib/gnunet)]),
798 [gn_daemon_home_dir=$withval])
799 AC_SUBST(GN_DAEMON_HOME_DIR, $gn_daemon_home_dir)
800 gn_daemon_config_dir="/etc"
801 AC_ARG_WITH(daemon-config-dir,
803 [--with-daemon-config-dir=DIR],
804 [default daemon config directory (/etc)]),
805 [gn_daemon_config_dir=$withval])
806 AC_SUBST(GN_DAEMON_CONFIG_DIR, $gn_daemon_config_dir)
809 GN_LIBINTL="$LTLIBINTL"
810 AC_ARG_ENABLE(framework, [ --enable-framework enable Mac OS X framework build helpers],enable_framework_build=$enableval)
811 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
812 if test x$enable_framework_build = xyes
814 AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
815 GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
816 GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
817 AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL])
820 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
821 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
823 AC_SUBST(GN_LIB_LDFLAGS)
824 AC_SUBST(GN_PLUGIN_LDFLAGS)
825 AC_SUBST(GN_INTLINCL)
831 AC_SUBST(EXT_LIB_PATH)
836 AC_SUBST(EXT_LIB_PATH)
840 AC_MSG_CHECKING(for sudo)
842 [ --with-sudo=PATH path to sudo binary (or just yes)],
843 [AC_MSG_RESULT("$with_sudo")
852 SUDO_BINARY=$with_sudo
856 [AC_MSG_RESULT([no])])
857 AC_SUBST(SUDO_BINARY)
858 AM_CONDITIONAL([HAVE_SUDO], [test "x$SUDO_BINARY" != "x" -o -w /])
862 AC_MSG_CHECKING(with nssdir)
864 [ --with-nssdir=PATH where to install NSS plugins],
865 [AC_MSG_RESULT("$with_nssdir")
882 if test "x$SUDO_BINARY" != "x" -o -w /
886 AC_MSG_RESULT([yes, to /lib])
894 AM_CONDITIONAL([INSTALL_NSS], [test "x$install_nss" != "x0"])
896 # test for gnunetdns group name
897 GNUNETDNS_GROUP=gnunetdns
898 AC_MSG_CHECKING(for gnunetdns group name)
899 AC_ARG_WITH(gnunetdns,
900 [ --with-gnunetdns=GRPNAME name for gnunetdns group],
901 [AC_MSG_RESULT("$with_gnunetdns")
902 case $with_gnunetdns in
904 GNUNETDNS_GROUP=gnunet
907 GNUNETDNS_GROUP=gnunetdns
910 GNUNETDNS_GROUP=$with_gnunetdns
914 [AC_MSG_RESULT([gnunetdns])])
915 AC_SUBST(GNUNETDNS_GROUP)
921 AC_MSG_CHECKING(for gnutls)
923 [ --with-gnutls=PFX base of gnutls installation],
924 [AC_MSG_RESULT([$with_gnutls])
929 AC_CHECK_HEADERS([gnutls/abstract.h],
930 AC_CHECK_LIB([gnutls], [gnutls_priority_set],
934 LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
935 CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
936 AC_CHECK_HEADERS([gnutls/abstract.h],
937 AC_CHECK_LIB([gnutls], [gnutls_priority_set],
938 EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
943 [AC_MSG_RESULT([--with-gnutls not specified])
944 AC_CHECK_HEADERS([gnutls/abstract.h],
945 AC_CHECK_LIB([gnutls], [gnutls_priority_set],
947 AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
948 AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have gnutls])
951 # Test if we are building for superMUC
952 AC_MSG_CHECKING(if testbed should use IBM LoadLeveler to run on SuperMUC)
954 [AS_HELP_STRING([--enable-ll],
955 [build GNUnet testbed for use with IBM LoadLeveler for running testbed on
956 SuperMUC (default is NO)])],
957 [if test "x$enable_ll" = "xno"
965 AC_MSG_RESULT($enable_ll)
966 AM_CONDITIONAL([ENABLE_LL], [test "x$ll" = "x1"])
967 AC_DEFINE_UNQUOTED([ENABLE_LL], [$ll], [Build with LL support])
969 # should 'make check' run tests?
970 AC_MSG_CHECKING(whether to run tests)
971 AC_ARG_ENABLE([testruns],
972 [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
973 [enable_tests_run=${enableval}],
974 [enable_tests_run=yes])
975 AC_MSG_RESULT($enable_test_run)
976 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
979 # should monkey be used when running (certain) services?
980 AC_MSG_CHECKING(whether to run with monkey)
981 AC_ARG_ENABLE([monkey],
982 [AS_HELP_STRING([--enable-monkey], [enable running with monkey])],
983 [enable_monkey=${enableval}],
985 AC_MSG_RESULT($enable_monkey)
986 AM_CONDITIONAL([ENABLE_MONKEY], [test "x$enable_monkey" = "xyes"])
987 if test "x$enable_monkey" = "xyes"
989 MONKEYPREFIX="monkey"
993 AC_SUBST(MONKEYPREFIX)
996 # should expensive tests be run?
997 AC_MSG_CHECKING(whether to run expensive tests)
998 AC_ARG_ENABLE([expensivetests],
999 [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
1000 [enable_expensive=${enableval}],
1001 [enable_expensive=no])
1002 AC_MSG_RESULT($enable_expensive)
1003 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
1005 # should ports be open for Java services?
1006 AC_MSG_CHECKING(whether to enable ports for gnunet-java)
1007 AC_ARG_ENABLE([javaports],
1008 [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
1009 [enable_java_ports=${enableval}],
1010 [enable_java_ports=no])
1011 AC_MSG_RESULT($enable_java_ports)
1012 if test "x$enable_java_ports" = "xyes"
1016 JAVAPORT="$UNIXONLY"
1020 # should benchmarks be run?
1021 AC_MSG_CHECKING(whether to run benchmarks during make check)
1022 AC_ARG_ENABLE([benchmarks],
1023 [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
1024 [enable_benchmarks=${enableval}],
1025 [enable_benchmarks=no])
1026 AC_MSG_RESULT($enable_benchmarks)
1027 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
1029 # should experimental code be compiled (code that may not yet compile)?
1030 AC_MSG_CHECKING(whether to compile experimental code)
1031 AC_ARG_ENABLE([experimental],
1032 [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
1033 [enable_experimental=${enableval}],
1034 [enable_experimental=no])
1035 AC_MSG_RESULT($enable_experimental)
1036 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
1038 # should memory statistics be kept (very expensive CPU-wise!)
1039 AC_MSG_CHECKING(whether to create expensive statistics on memory use)
1040 AC_ARG_ENABLE([heapstats],
1041 [AS_HELP_STRING([--enable-heapstats], [enable expensive heap statistics])],
1042 [enable_heapstats=1],
1043 [enable_heapstats=0])
1044 AC_MSG_RESULT($enable_heapstats)
1045 AC_DEFINE_UNQUOTED([ENABLE_HEAP_STATISTICS],$enable_heapstats,[enable expensive heap statistics])
1047 # should code be enabled that works around missing OS functionality on Windows?
1048 # used for test cases
1049 if test $build_target = "mingw"
1055 [#include <ws2tcpip.h>
1057 int s = socket (0, 0, 0);])
1059 AC_DEFINE_UNQUOTED([HAVE_SOCKET],1,[Define this if socket() is available])
1061 AC_DEFINE_UNQUOTED([HAVE_SOCKET],0,[Define this if socket() is available])
1066 [#include <ws2tcpip.h>
1068 int s = select (0, NULL, NULL, NULL, NULL);])
1070 AC_DEFINE_UNQUOTED([HAVE_SELECT],1,[Define this if select() is available])
1072 AC_DEFINE_UNQUOTED([HAVE_SELECT],0,[Define this if select() is available])
1077 [#include <ws2tcpip.h>
1080 char *s = inet_ntoa (i);])
1082 AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],1,[Define this if inet_ntoa() is available])
1084 AC_DEFINE_UNQUOTED([HAVE_INET_NTOA],0,[Define this if inet_ntoa() is available])
1089 [#include <ws2tcpip.h>
1091 int s = getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);])
1093 AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],1,[Define this if getnameinfo() is available])
1095 AC_DEFINE_UNQUOTED([HAVE_GETNAMEINFO],0,[Define this if getnameinfo() is available])
1100 [#include <ws2tcpip.h>
1102 int s = gethostname (NULL, 0);])
1104 AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],1,[Define this if gethostname() is available])
1106 AC_DEFINE_UNQUOTED([HAVE_GETHOSTNAME],0,[Define this if gethostname() is available])
1111 [#include <ws2tcpip.h>
1113 void *s = gethostbyname (NULL);])
1115 AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],1,[Define this if gethostbyname() is available])
1117 AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYNAME],0,[Define this if gethostbyname() is available])
1122 [#include <ws2tcpip.h>
1124 void *s = gethostbyaddr (NULL, 0, 0);])
1126 AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],1,[Define this if gethostbyaddr() is available])
1128 AC_DEFINE_UNQUOTED([HAVE_GETHOSTBYADDR],0,[Define this if gethostbyaddr() is available])
1133 [#include <ws2tcpip.h>
1135 int s = getaddrinfo (NULL, NULL, NULL, NULL);])
1137 AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1139 AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO],1,[Define this if getaddrinfo() is available])
1143 AC_MSG_CHECKING(whether to enable windows workarounds)
1144 AC_ARG_ENABLE([windows_workarounds],
1145 [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
1146 [enable_workarounds=${enableval}],
1147 [enable_workarounds=no])
1148 AC_MSG_RESULT($enable_workarounds)
1149 if test x$enable_windows_workarounds = "xyes"
1156 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
1159 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
1160 AC_ARG_ENABLE([coverage],
1161 AS_HELP_STRING([--enable-coverage],
1162 [compile the library with code coverage support]),
1163 [use_gcov=${enableval}],
1165 AC_MSG_RESULT($use_gcov)
1166 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
1170 AC_PATH_PROG(svnversioncommand, svnversion)
1171 AC_PATH_PROG(gitcommand, git)
1172 if test "X$svnversioncommand" = "X" || test `$svnversioncommand -n '.'` = "exported"
1174 if test "X$gitcommand" = "X"
1176 AC_DEFINE_UNQUOTED(VCS_VERSION, ["release"], [repository svn version])
1178 gitver=$(git log -1 | grep "git-svn-id" | sed -e 's/.*@\([[0-9]]\+\) .*/\1/')
1179 if test "X$gitver" = "X"
1181 AC_DEFINE_UNQUOTED(VCS_VERSION, ["release"], [repository svn version])
1183 AC_DEFINE_UNQUOTED(VCS_VERSION, ["svn-$gitver"], [repository svn version])
1187 AC_DEFINE_UNQUOTED(VCS_VERSION, ["svn-`svnversion -n`"], [repository svn version])
1202 src/ats-tool/Makefile
1208 src/consensus/Makefile
1209 src/consensus/consensus.conf
1210 src/datacache/Makefile
1211 src/datastore/Makefile
1212 src/datastore/datastore.conf
1220 src/fragmentation/Makefile
1225 src/gns/nss/Makefile
1227 src/include/Makefile
1228 src/include/gnunet_directories.h
1229 src/hostlist/Makefile
1230 src/lockmanager/Makefile
1231 src/lockmanager/lockmanager.conf
1235 src/namestore/Makefile
1236 src/namestore/namestore.conf
1240 src/peerinfo/Makefile
1241 src/peerinfo/peerinfo.conf
1242 src/peerinfo-tool/Makefile
1243 src/postgres/Makefile
1246 src/statistics/Makefile
1247 src/statistics/statistics.conf
1249 src/template/Makefile
1250 src/testbed/Makefile
1251 src/testbed/testbed.conf
1252 src/testing/Makefile
1253 src/topology/Makefile
1254 src/transport/Makefile
1255 src/transport/transport.conf
1258 src/util/resolver.conf
1261 src/integration-tests/Makefile
1263 pkgconfig/gnunetats.pc
1264 pkgconfig/gnunetarm.pc
1265 pkgconfig/gnunetblock.pc
1266 pkgconfig/gnunetcore.pc
1267 pkgconfig/gnunetdatacache.pc
1268 pkgconfig/gnunetdatastore.pc
1269 pkgconfig/gnunetdht.pc
1270 pkgconfig/gnunetdns.pc
1271 pkgconfig/gnunetdnsparser.pc
1272 pkgconfig/gnunetdv.pc
1273 pkgconfig/gnunetfragmentation.pc
1274 pkgconfig/gnunetfs.pc
1275 pkgconfig/gnunetgns.pc
1276 pkgconfig/gnunethello.pc
1277 pkgconfig/gnunetlockmanager.pc
1278 pkgconfig/gnunetmesh.pc
1279 pkgconfig/gnunetmysql.pc
1280 pkgconfig/gnunetnamestore.pc
1281 pkgconfig/gnunetnat.pc
1282 pkgconfig/gnunetnse.pc
1283 pkgconfig/gnunetpeerinfo.pc
1284 pkgconfig/gnunetpostgres.pc
1285 pkgconfig/gnunetregex.pc
1286 pkgconfig/gnunetstatistics.pc
1287 pkgconfig/gnunetstream.pc
1288 pkgconfig/gnunettestbed.pc
1289 pkgconfig/gnunettesting.pc
1290 pkgconfig/gnunettransport.pc
1291 pkgconfig/gnunettun.pc
1292 pkgconfig/gnunetutil.pc
1293 pkgconfig/gnunetvpn.pc
1299 # warn user if mysql found but not used due to version
1300 if test "$mysqlfail" = "true"
1302 AC_MSG_NOTICE([NOTICE: MySQL found, but too old. MySQL support will not be compiled.])
1306 if test "x$sqlite" = "x0"
1308 AC_MSG_NOTICE([NOTICE: sqlite not found. sqLite support will not be compiled.])
1312 if test "x$curl" = "x0"
1314 AC_MSG_NOTICE([NOTICE: libcurl not found. http client support will not be compiled.])
1318 if test x$gnutls != xtrue
1320 AC_MSG_NOTICE([NOTICE: gnutls not found, gnunet-gns-proxy will not be built])
1324 if test "x$enable_java_ports" = "xyes"
1326 AC_MSG_NOTICE([NOTICE: opening ports for gnunet-java bindings by default.])
1329 if test "x$lmhd" != "x1"
1331 AC_MSG_NOTICE([NOTICE: libmicrohttpd not found, http transport will not be installed.])
1334 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
1336 if test "$enable_framework_build" = "yes"
1338 AC_MSG_NOTICE([NOTICE: Mac OS X framework build enabled.])
1341 if test "x$SUDO_BINARY" = "x" -a ! -w /
1343 AC_MSG_NOTICE([NOTICE: --with-sudo not specified and not running as 'root', will not install GNS NSS library])
1347 AC_MSG_NOTICE([********************************************
1348 Please make sure NOW that you have created a user and group 'gnunet'
1349 and additionally a group 'gnunetdns':
1353 Make sure that '/var/lib/gnunet' is owned (and writable) by user
1354 'gnunet'. Then, you can compile GNUnet with
1357 After that, run (if necessary as 'root')
1359 to install everything.
1361 Each GNUnet user should be added to the 'gnunet' group (may
1362 require fresh login to come into effect):
1363 adduser $USERNAME gnunet
1364 (run the above command as root once for each of your users, replacing
1365 "$USERNAME" with the respective login names). If you have a global IP
1366 address, no further configuration is required.
1368 Optionally, download and compile gnunet-gtk to get a GUI for
1369 file-sharing and configuration. This is particularly recommended
1370 if your network setup is non-trivial, as gnunet-setup can be
1371 used to test in the GUI if your network configuration is working.
1372 gnunet-setup should be run as the "gnunet" user under X. As it
1373 does very little with the network, running it as "root" is likely
1374 also harmless. You can also run it as a normal user, but then
1375 you have to copy ~/.gnunet/gnunet.conf" over to the "gnunet" user's
1376 home directory in the end.
1378 Once you have configured your peer, run (as the 'gnunet' user)
1380 to start the peer. You can then run the various GNUnet-tools as
1381 your "normal" user (who should only be in the group 'gnunet').
1382 ********************************************])