-eliminate printing warning on MAGIC missmatch (#2138)
[oweals/gnunet.git] / configure.ac
1 # This file is part of GNUnet.
2 # (C) 2001--2011 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.1],[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.1])
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 # Check system type
72 case "$host_os" in
73 *darwin* | *rhapsody* | *macosx*)
74      AC_DEFINE_UNQUOTED(DARWIN,1,[This is an Apple Darwin system])
75      CPPFLAGS="-D_APPLE_C_SOURCE $CPPFLAGS"
76      CFLAGS="-no-cpp-precomp -fno-common $CFLAGS"
77      AC_MSG_WARN([The VPN application cannot be compiled on your OS])
78      build_target="darwin"
79      DEFAULT_INTERFACE="\"en0\""
80      LIBPREFIX=
81      DLLDIR=lib
82      UNIXONLY="#"
83      ;;
84 linux*)
85      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux system])
86      build_target="linux"
87      LIBPREFIX=
88      DLLDIR=lib
89      UNIXONLY="#"
90      AC_PATH_XTRA
91      ;;
92 freebsd*)
93      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
94      AC_DEFINE_UNQUOTED(FREEBSD,1,[This is a FreeBSD system])
95      CFLAGS="-D_THREAD_SAFE $CFLAGS"
96      build_target="freebsd"
97      LIBPREFIX=
98      DLLDIR=lib
99      UNIXONLY="#"
100      ;;
101 openbsd*)
102      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
103      AC_DEFINE_UNQUOTED(OPENBSD,1,[This is an OpenBSD system])
104      LIBS=`echo $LIBS | sed -e "s/-ldl//"`
105      build_target="openbsd"
106      LIBPREFIX=
107      DLLDIR=lib
108      UNIXONLY="#"
109      ;;
110 netbsd*)
111      AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
112      AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system])
113      LIBPREFIX=
114      DLLDIR=lib
115      UNIXONLY="#"
116      ;;
117 *solaris*)
118      AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system])
119      AC_DEFINE_UNQUOTED(_REENTRANT,1,[Need with solaris or errno doesnt work])
120      AC_CHECK_LIB(resolv, res_init)
121      AC_CHECK_LIB(rt, nanosleep)
122      build_target="solaris"
123      LIBPREFIX=
124      DLLDIR=lib
125      UNIXONLY="#"
126      ;;
127 *arm-linux*)
128      AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux system])
129      CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
130      build_target="linux"
131      LIBPREFIX=
132      DLLDIR=lib
133      UNIXONLY="#"
134      ;;
135 *cygwin*)
136      AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
137      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
138      AC_CHECK_LIB(intl, gettext)
139      LDFLAGS="$LDFLAGS -no-undefined"
140      CFLAGS="-mms-bitfields $CFLAGS"
141      build_target="cygwin"
142      LIBPREFIX=lib
143      DLLDIR=bin
144      AC_PROG_CXX
145      UNIXONLY=""
146      ;;
147 *mingw*)
148      AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
149      AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
150      AC_DEFINE_UNQUOTED(_WIN32,1,[This is a Windows system])
151      AC_CHECK_LIB(intl, gettext)
152      LDFLAGS="$LDFLAGS -Wl,-no-undefined -Wl,--export-all-symbols"
153      LIBS="$LIBS -lws2_32 -lplibc -lgnurx -lole32"
154      CFLAGS="-mms-bitfields $CFLAGS"
155      CPPFLAGS="-D_WIN32_WINNT=0x0501 $CPPFLAGS"
156      build_target="mingw"
157      AC_PROG_CXX
158      LIBPREFIX=lib
159      DLLDIR=bin
160      UNIXONLY=""
161      ;;
162 *)
163      AC_MSG_RESULT(Unrecognised OS $host_os)
164      AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
165      UNIXONLY=""
166 ;;
167 esac
168 AC_DEFINE_UNQUOTED([GNUNET_DEFAULT_INTERFACE], $DEFAULT_INTERFACE, [This should be the default choice for the name of the first network interface])
169 AC_SUBST(DEFAULT_INTERFACE)
170
171 # Disable TCP-based IPC on systems that support UNIX domain
172 # sockets in default configuratin:
173 AC_SUBST(UNIXONLY)
174
175 AC_MSG_CHECKING([for build target])
176 AM_CONDITIONAL(DARWIN,  test "$build_target" = "darwin")
177 AM_CONDITIONAL(CYGWIN,  test "$build_target" = "cygwin")
178 AM_CONDITIONAL(MINGW,   test "$build_target" = "mingw")
179 AM_CONDITIONAL(SOLARIS, test "$build_target" = "solaris")
180 AM_CONDITIONAL(XFREEBSD, test "$build_target" = "freebsd")
181 AM_CONDITIONAL(OPENBSD, test "$build_target" = "openbsd")
182 AM_CONDITIONAL(LINUX, test "$build_target" = "linux")
183
184 AC_MSG_RESULT([$build_target])
185 AC_SUBST(build_target)
186 AM_CONDITIONAL([am__fastdepOBJC], false)
187 AC_UNALIGNED_64_ACCESS
188
189 # some other checks for standard libs
190 AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
191 AC_CHECK_LIB(socket, socket)
192 AC_CHECK_LIB(m, log)
193 AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
194
195 # 'save' libs; only those libs found so far will be
196 # linked against _everywhere_.  For the others, we
197 # will be more selective!
198 SAVE_LIBS=$LIBS
199
200 # libgnurx (regex library for W32)
201 gnurx=0
202 AC_CHECK_LIB(gnurx, regexec, gnurx=1)
203 if test "x$gnurx" = "x0" -a "x$build_target" = "xmingw"
204 then
205   AC_MSG_ERROR([on W32 GNUnet needs libgnurx])
206 fi
207
208 # libgcrypt
209 gcrypt=0
210 AM_PATH_LIBGCRYPT(1.2.0, gcrypt=1)
211 AC_CHECK_DECLS([gcry_mpi_lshift], [], [], [[#include <gcrypt.h>]])
212
213 if test $gcrypt = 0
214 then
215   AC_MSG_ERROR([GNUnet needs libgcrypt])
216 fi
217
218 # Adam shostack suggests the following for Windows:
219 # -D_FORTIFY_SOURCE=2 -fstack-protector-all
220 AC_ARG_ENABLE(gcc-hardening,
221    AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks),
222 [if test x$enableval = xyes; then
223     CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2 -fstack-protector-all"
224     CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector"
225     CFLAGS="$CFLAGS --param ssp-buffer-size=1"
226     LDFLAGS="$LDFLAGS -pie"
227 fi])
228
229
230 # Linker hardening options
231 # Currently these options are ELF specific - you can't use this with MacOSX
232 AC_ARG_ENABLE(linker-hardening,
233   AS_HELP_STRING(--enable-linker-hardening, enable linker security fixups),
234 [if test x$enableval = xyes; then
235    LDFLAGS="$LDFLAGS -z relro -z now"
236 fi])
237
238
239 extra_logging=GNUNET_NO
240 AC_ARG_ENABLE([logging],
241    AS_HELP_STRING([--enable-logging@<:@=value@:>@],[Enable logging calls. Possible values: yes,no,verbose,veryverbose ('yes' is the default)]),
242    [AS_IF([test "x$enableval" = "xyes"], [],
243           [test "x$enableval" = "xno"], [AC_DEFINE([GNUNET_CULL_LOGGING],[],[Define to cull all logging calls])],
244           [test "x$enableval" = "xverbose"], [extra_logging=GNUNET_YES]
245           [test "x$enableval" = "xveryverbose"], [extra_logging=\(GNUNET_YES+1\)])
246    ], [])
247 AC_DEFINE_UNQUOTED([GNUNET_EXTRA_LOGGING],[$extra_logging],[1 if extra logging is enabled, 2 for very verbose extra logging, 0 otherwise])
248
249 if test $build = $target
250 then
251 AC_MSG_CHECKING([for working HMAC])
252 AC_LANG_PUSH(C)
253 LIBS="$LIBS $LIBGCRYPT_LIBS"
254 CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
255 AC_RUN_IFELSE(
256   [AC_LANG_PROGRAM([#include <gcrypt.h> 
257         #include <stdio.h>], [[
258         gcry_md_hd_t mac;
259       
260         unsigned char data[] = { 0xbf, 0x16, 0x6e, 0x46, 0x3a, 0x6c, 0xf3, 0x93, 0xa7, 0x72,
261             0x11, 0xa1, 0xdc, 0x0b, 0x07, 0xdb, 0x1a, 0x5e, 0xd9, 0xb9, 0x81, 0xbe,
262             0xea, 0xe4, 0x31, 0x5f, 0x24, 0xff, 0xfe, 0x50, 0x8a, 0xde };
263         unsigned char key[] = { 0xfc, 0x62, 0x76, 0x35 };
264         unsigned char result[] = {0xa2, 0xb, 0x1, 0xd9, 0xc0, 0x8b, 0x5a, 0x12, 0x80,
265             0xd5, 0x50, 0x12, 0x8e, 0xd0, 0x5b, 0xb6, 0x5c, 0x87, 0x24, 0xe2, 0xd0,
266             0xd2, 0xaf, 0x63, 0xae, 0xd1, 0xd6, 0x64, 0x14, 0xe3, 0x6e, 0x61, 0x5b,
267             0xd, 0xba, 0x17, 0x7d, 0xd3, 0x10, 0xb1, 0x37, 0x41, 0x91, 0x7d, 0xeb,
268             0x1, 0x4d, 0x71, 0xe8, 0x59, 0x71, 0x42, 0x8e, 0xd6, 0xf3, 0x29, 0x3b,
269             0x90, 0xf2, 0xd1, 0xaf, 0x65, 0x1e, 0xb3};
270       
271         if (!gcry_check_version (GCRYPT_VERSION))
272         {
273           fprintf (stderr, "Version mismatch %s <-> %s \n", gcry_check_version (NULL), GCRYPT_VERSION);
274           return 1;
275         }
276   
277         gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
278         gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
279   
280         if (gcry_md_open(&mac, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
281         {
282           fprintf (stderr, "gcry_md_open error\n");
283           return 2;
284         }
285   
286         gcry_md_setkey (mac, key, sizeof (key));
287         gcry_md_write (mac, data, sizeof (data));
288   
289         if (memcmp(gcry_md_read (mac, 0), result, gcry_md_get_algo_dlen (gcry_md_get_algo (mac))) != 0)
290         {
291           fprintf (stderr, "memcmp error\n");
292           return 3;
293         }
294   
295         gcry_md_close (mac);
296   
297         return 0;
298     ]])],
299   [AC_MSG_RESULT([yes])],
300   [
301    RESULT=$?
302    if test $RESULT = 3
303    then
304      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.])
305    fi
306    if test $RESULT = 2
307    then
308      AC_MSG_FAILURE([HMAC test failed])
309    fi
310    if test $RESULT = 1
311    then
312      AC_MSG_FAILURE([libgcrypt header version does not match library version])
313    fi
314   ])
315 AC_LANG_POP(C)
316 fi      # $build = $target
317
318 # libcurl
319 LIBCURL_CHECK_CONFIG(,7.20.1,,AC_MSG_ERROR([GNUnet requires libcurl >= 7.20.1]))
320 # restore LIBS
321 LIBS=$SAVE_LIBS
322
323 AC_ARG_ENABLE([ats],
324   [AS_HELP_STRING([--enable-ats], [enable ATS code])],
325   [enable_ats=${enableval}],
326   [enable_ats=no])
327 if test x${enable_ats} = xyes
328 then
329         AC_CHECK_HEADERS([glpk.h],[glpk=true],[gplk=false])
330         AC_CHECK_LIB([glpk],[glp_create_prob],,[gplk=false])
331         # GLPK must support atm MLP presolving, version >= 4.32
332         AC_CHECK_MEMBERS(glp_iocp.presolve,,[gplk=false],[[#include <glpk.h>]])
333         if test x$gplk = xfalse
334         then
335                 AM_CONDITIONAL(HAVE_LIBGLPK, false)
336                 AC_MSG_WARN([GNUnet requires GLPK  >= 4.32])
337         else
338                 AM_CONDITIONAL(HAVE_LIBGLPK, true)
339                 AC_DEFINE([HAVE_LIBGLPK],[1],[Have GLPK])
340         fi
341 else
342         AM_CONDITIONAL(HAVE_LIBGLPK, false)
343         AC_MSG_RESULT([no])
344 fi
345
346 # test for kvm and kstat (for CPU stats under BSD/Solaris)
347 AC_CHECK_LIB([kvm],[kvm_open])
348 AC_CHECK_LIB([kstat],[kstat_open])
349
350 # test for libextractor
351 extractor=0
352 AC_MSG_CHECKING(for libextractor)
353 AC_ARG_WITH(extractor,
354    [  --with-extractor=PFX    base of libextractor installation],
355    [AC_MSG_RESULT([$with_extractor])
356     case $with_extractor in
357       no)
358         ;;
359       yes)
360         AC_CHECK_HEADERS(extractor.h,
361           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
362             extractor=1))
363         ;;
364       *)
365         LDFLAGS="-L$with_extractor/lib $LDFLAGS"
366         CPPFLAGS="-I$with_extractor/include $CPPFLAGS"
367         AC_CHECK_HEADERS(extractor.h,
368           AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
369             EXT_LIB_PATH="-L$with_extractor/lib $EXT_LIB_PATH"
370             extractor=1))
371         ;;
372     esac
373    ],
374    [AC_MSG_RESULT([--with-extractor not specified])
375     AC_CHECK_HEADERS(extractor.h,
376      AC_CHECK_LIB([extractor], [EXTRACTOR_plugin_add_defaults],
377       extractor=1))])
378 if test "$extractor" != 1
379 then
380  AC_MSG_ERROR([GNUnet requires libextractor])
381 fi
382 # restore LIBS
383 LIBS=$SAVE_LIBS
384
385 # test for libunistring
386 gl_LIBUNISTRING
387 if test $HAVE_LIBUNISTRING != yes; then
388  AC_MSG_ERROR([GNUnet requires libunistring])
389 fi
390 if test $gl_libunistring_hexversion -le 2305; then
391  AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])
392 fi
393 # restore LIBS
394 LIBS=$SAVE_LIBS
395
396
397
398 # Checks for standard header files.
399 AC_HEADER_DIRENT
400 AC_HEADER_STDC
401
402 # Check for headers that are ALWAYS required
403 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]))
404
405 # Checks for headers that are only required on some systems or opional (and where we do NOT abort if they are not there)
406 AC_CHECK_HEADERS([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])
407
408 SAVE_LDFLAGS=$LDFLAGS
409 SAVE_CPPFLAGS=$CPPFLAGS
410
411 # test for sqlite
412 sqlite=false
413 AC_MSG_CHECKING(for SQLite)
414 AC_ARG_WITH(sqlite,
415   [  --with-sqlite=PFX       base of SQLite installation],
416   [AC_MSG_RESULT("$with_sqlite")
417    case $with_sqlite in
418    no)
419      ;;
420    yes)
421     AC_CHECK_HEADERS(sqlite3.h,
422      sqlite=true)
423      ;;
424    *)
425     LDFLAGS="-L$with_sqlite/lib $LDFLAGS"
426     CPPFLAGS="-I$with_sqlite/include $CPPFLAGS"
427     AC_CHECK_HEADERS(sqlite3.h,
428      EXT_LIB_PATH="-L$with_sqlite/lib $EXT_LIB_PATH"
429      SQLITE_LDFLAGS="-L$with_sqlite/lib"
430      SQLITE_CPPFLAGS="-I$with_sqlite/include"
431      sqlite=true)
432     LDFLAGS=$SAVE_LDFLAGS
433     CPPFLAGS=$SAVE_CPPFLAGS
434     ;;
435    esac
436   ],
437   [AC_MSG_RESULT([--with-sqlite not specified])
438     AC_CHECK_HEADERS(sqlite3.h, sqlite=true)])
439 AM_CONDITIONAL(HAVE_SQLITE, test x$sqlite = xtrue)
440 AC_SUBST(SQLITE_CPPFLAGS)
441 AC_SUBST(SQLITE_LDFLAGS)
442
443 # test for postgres
444 postgres=false
445 AC_MSG_CHECKING(for postgres)
446 AC_ARG_WITH(postgres,
447   [  --with-postgres=PFX       base of postgres installation],
448   [AC_MSG_RESULT("$with_postgres")
449    case $with_postgres in
450    no)
451      ;;
452    yes)
453     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
454      postgres=true)
455      ;;
456    *)
457     LDFLAGS="-L$with_postgres/lib $LDFLAGS"
458     CPPFLAGS="-I$with_postgres/include $CPPFLAGS"
459     AC_CHECK_HEADERS(postgresql/libpq-fe.h,
460      EXT_LIB_PATH="-L$with_postgres/lib $EXT_LIB_PATH"
461      POSTGRES_LDFLAGS="-L$with_postgres/lib"
462      POSTGRES_CPPFLAGS="-I$with_postgres/include"
463      postgres=true)
464     LDFLAGS=$SAVE_LDFLAGS
465     CPPFLAGS=$SAVE_CPPFLAGS
466     ;;
467    esac
468   ],
469   [AC_MSG_RESULT([--with-postgres not specified])
470     AC_CHECK_HEADERS(postgresql/libpq-fe.h, postgres=true)])
471 AM_CONDITIONAL(HAVE_POSTGRES, test x$postgres = xtrue)
472 AC_SUBST(POSTGRES_CPPFLAGS)
473 AC_SUBST(POSTGRES_LDFLAGS)
474
475 # test for libz (maybe required for linking mysql)
476 zlib=1
477 AC_CHECK_LIB(z, compress,,zlib=0)
478 AM_CONDITIONAL(HAVE_ZLIB, test x$zlib = x1)
479 if test "$zlib" != 1
480 then
481  AC_MSG_ERROR([GNUnet requires zlib])
482 fi
483
484 # mysql & windows
485 AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
486 AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
487
488 if test "$build_target" = "mingw"
489 then
490   CYGWIN_MYSQL_MAGIC="#include <mysql/my_global.h>"
491 fi
492
493 # test for mysql
494 mysql=false
495 mysqlfail=false
496 SAVE_LDFLAGS=$LDFLAGS
497 SAVE_CPPFLAGS=$CPPFLAGS
498 AC_MSG_CHECKING(for mysql)
499 AC_ARG_WITH(mysql,
500   [  --with-mysql=PFX        base of MySQL installation],
501   [AC_MSG_RESULT("$with_mysql")
502    if test "$with_mysql" != "no"
503    then
504     if test "$with_mysql" != "yes"
505     then
506       LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql $LDFLAGS $ZLIBS"
507       CPPFLAGS="-I$with_mysql/include $CPPFLAGS"
508     fi
509     AC_CHECK_HEADERS(mysql/mysql.h,
510      AC_CHECK_LIB(mysqlclient, mysql_init,
511       MYSQL_LDFLAGS="-L$with_mysql/lib -L$with_mysql/lib/mysql"
512       MYSQL_CPPFLAGS="-I$with_mysql/include"
513
514       mysql=true), [], [$CYGWIN_MYSQL_MAGIC])
515    fi
516   ],
517   [AC_MSG_RESULT([--with-mysql not specified])
518    LDFLAGS="-L/usr/lib/mysql $LDFLAGS $ZLIBS"
519    AC_CHECK_LIB(mysqlclient, mysql_init,
520     [AC_CHECK_HEADERS(mysql/mysql.h,
521       MYSQL_LDFLAGS="-L/usr/lib/mysql"
522       mysql=true
523
524      , [], [$CYGWIN_MYSQL_MAGIC])])
525   ])
526
527 AC_SUBST(MYSQL_LDFLAGS)
528 AC_SUBST(MYSQL_CPPFLAGS)
529
530 # additional version check for mysql
531 AC_ARG_ENABLE(mysql-version-check, [  --disable-mysql-version-check  do not check MySQL version],, enable_mysql_version_check=yes)
532 if test "$mysql" = "true" -a "x$enable_mysql_version_check" = "xyes"
533 then
534   AC_MSG_CHECKING(mysql version)
535   AC_RUN_IFELSE([AC_LANG_PROGRAM(
536     [[$CYGWIN_MYSQL_MAGIC
537       #include <mysql/mysql.h>]],
538     [[if (MYSQL_VERSION_ID < 40100)
539         return(-1);
540       else
541         return(0);
542     ]])
543     ],mysql=true,mysql=false)
544   if test "$mysql" = "false"
545   then
546     mysqlfail=true
547     AC_MSG_RESULT([fail, >= 4.1 required])
548   else
549     AC_MSG_RESULT(ok)
550   fi
551 fi
552 AM_CONDITIONAL(HAVE_MYSQL, test x$mysql = xtrue)
553 AM_CONDITIONAL(HAVE_MYSQLE, test "0" = "1")
554 # restore LIBS
555 LIBS=$SAVE_LIBS
556 LDFLAGS=$SAVE_LDFLAGS
557 CPPFLAGS=$SAVE_CPPFLAGS
558
559 if test "$sqlite" = 0 -a "$mysql" = 0
560 then
561  AC_MSG_ERROR([GNUnet requires SQLite or MySQL])
562 fi
563
564 # libmicrohttpd
565 lmhd=0
566 AC_MSG_CHECKING([for libmicrohttpd])
567 AC_ARG_WITH(microhttpd,
568    [  --with-microhttpd=PFX   base of libmicrohttpd installation],
569    [AC_MSG_RESULT([$with_microhttpd])
570     case $with_microhttpd in
571       no)
572         ;;
573       yes)
574         AC_CHECK_HEADERS([microhttpd.h],
575           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
576             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
577               lmhd=1),
578             [],[#include "src/include/platform.h"
579                 #include <microhttpd.h>]),,
580             [#include "src/include/platform.h"])
581         ;;
582       *)
583         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
584         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
585         AC_CHECK_HEADERS(microhttpd.h,
586           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
587             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
588               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
589               lmhd=1),
590             [],[#include "src/include/platform.h"
591                 #include <microhttpd.h>]),,
592             [#include "src/include/platform.h"])
593         ;;
594     esac
595    ],
596    [AC_MSG_RESULT([--with-microhttpd not specified])
597     AC_CHECK_HEADERS([microhttpd.h],
598       AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
599         AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
600           lmhd=1),
601         [],[#include "src/include/platform.h"
602             #include <microhttpd.h>]),,
603        [#include "src/include/platform.h"])])
604 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
605 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
606
607
608 # restore LIBS
609 LIBS=$SAVE_LIBS
610
611 # check for python & pexpect (used for some testcases only)
612 AM_PATH_PYTHON([2.6],, [:])
613 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
614
615 if test "$PYTHON" != :
616 then
617   AC_MSG_CHECKING([for pexpect])
618   $PYTHON -c "import pexpect" > /dev/null 2> /dev/null
619   PYEX=$?
620   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, test $PYEX -eq 0)
621   if test $PYEX -eq 0
622   then
623     AC_MSG_RESULT([yes])
624   else
625     AC_MSG_RESULT([not found])
626   fi
627 else
628   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, 0)
629 fi
630
631
632 # check for gettext
633 AM_GNU_GETTEXT([external])
634 AM_GNU_GETTEXT_VERSION([0.16.1])
635
636 # check for iconv
637 AM_ICONV
638
639 # Checks for standard typedefs, structures, and compiler characteristics.
640 AC_TYPE_PID_T
641 AC_TYPE_SIZE_T
642 AC_TYPE_MODE_T
643 AC_HEADER_TIME
644 AC_HEADER_STAT
645 AC_HEADER_STDBOOL
646 AC_STRUCT_TM
647
648 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
649    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
650    ],
651    [],
652    [
653       #include <sys/types.h>
654       #include <sys/socket.h>
655       #include <netinet/in.h>
656    ])
657
658
659
660 # Checks for library functions.
661 AC_FUNC_CLOSEDIR_VOID
662 AC_FUNC_FORK
663 AC_PROG_GCC_TRADITIONAL
664 AC_FUNC_MEMCMP
665 AC_FUNC_SELECT_ARGTYPES
666 AC_FUNC_CHOWN
667
668 AC_TYPE_SIGNAL
669 AC_FUNC_STAT
670 AC_FUNC_STRFTIME
671 AC_FUNC_VPRINTF
672 AC_HEADER_SYS_WAIT
673 AC_TYPE_OFF_T
674 AC_TYPE_UID_T
675 AC_CHECK_FUNCS([floor gethostname memmove rmdir strncasecmp strrchr strtol atoll dup2 fdatasync ftruncate gettimeofday memset mkdir mkfifo select socket strcasecmp strchr strdup strerror strstr clock_gettime getrusage rand uname setlocale getcwd mktime gmtime_r gmtime strlcpy strlcat ftruncate stat64 sbrk mmap mremap setrlimit sysconf gethostbyaddr initgroups getifaddrs freeifaddrs getnameinfo getaddrinfo inet_ntoa localtime_r nl_langinfo putenv realpath strndup gethostbyname2 gethostbyname getpeerucred getpeereid setresuid])
676
677 # restore LIBS
678 LIBS=$SAVE_LIBS
679
680 gn_user_home_dir="~/.gnunet"
681 AC_ARG_WITH(user-home-dir,
682         AC_HELP_STRING(
683                 [--with-user-home-dir=DIR],
684                 [default user home directory (~/.gnunet)]),
685         [gn_user_home_dir=$withval])
686 AC_SUBST(GN_USER_HOME_DIR, $gn_user_home_dir)
687 gn_daemon_home_dir="/var/lib/gnunet"
688 AC_ARG_WITH(daemon-home-dir,
689         AC_HELP_STRING(
690                 [--with-daemon-home-dir=DIR],
691                 [default daemon home directory (/var/lib/gnunet)]),
692         [gn_daemon_home_dir=$withval])
693 AC_SUBST(GN_DAEMON_HOME_DIR, $gn_daemon_home_dir)
694 gn_daemon_config_dir="/etc"
695 AC_ARG_WITH(daemon-config-dir,
696         AC_HELP_STRING(
697                 [--with-daemon-config-dir=DIR],
698                 [default daemon config directory (/etc)]),
699         [gn_daemon_config_dir=$withval])
700 AC_SUBST(GN_DAEMON_CONFIG_DIR, $gn_daemon_config_dir)
701
702 GN_INTLINCL=""
703 GN_LIBINTL="$LTLIBINTL"
704 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
705 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
706 if test x$enable_framework_build = xyes
707 then
708   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
709   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
710   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
711   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL]) 
712 fi
713
714 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
715 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
716
717 AC_SUBST(GN_LIB_LDFLAGS)
718 AC_SUBST(GN_PLUGIN_LDFLAGS)
719 AC_SUBST(GN_INTLINCL)
720 AC_SUBST(GN_LIBINTL)
721
722 AC_SUBST(CPPFLAGS)
723 AC_SUBST(LIBS)
724 AC_SUBST(LDFLAGS)
725 AC_SUBST(EXT_LIB_PATH)
726 AC_SUBST(EXT_LIBS)
727
728 AC_SUBST(LIBPREFIX)
729 AC_SUBST(DLLDIR)
730 AC_SUBST(EXT_LIB_PATH)
731
732
733 # test for sudo
734 AC_MSG_CHECKING(for sudo)
735 AC_ARG_WITH(sudo,
736   [  --with-sudo=PATH       path to sudo binary (or just yes)],
737   [AC_MSG_RESULT("$with_sudo")
738    case $with_sudo in
739    no)
740      SUDO_BINARY=
741      ;;
742    yes)
743      SUDO_BINARY=sudo
744      ;;
745    *)
746      SUDO_BINARY=$with_sudo
747     ;;
748    esac
749   ],
750   [AC_MSG_RESULT([no])])
751 AC_SUBST(SUDO_BINARY)
752
753
754 # test for gnunetdns group name
755 GNUNETDNS_GROUP=gnunetdns
756 AC_MSG_CHECKING(for gnunetdns group name)
757 AC_ARG_WITH(gnunetdns,
758   [  --with-gnunetdns=GRPNAME       name for gnunetdns group],
759   [AC_MSG_RESULT("$with_gnunetdns")
760    case $with_gnunetdns in
761    no)
762      GNUNETDNS_GROUP=gnunet
763      ;;
764    yes)
765      GNUNETDNS_GROUP=gnunetdns
766      ;;
767    *)
768      GNUNETDNS_GROUP=$with_gnunetdns
769     ;;
770    esac
771   ],
772   [AC_MSG_RESULT([gnunetdns])])
773 AC_SUBST(GNUNETDNS_GROUP)
774
775
776 # should 'make check' run tests?
777 AC_MSG_CHECKING(whether to run tests)
778 AC_ARG_ENABLE([testruns],
779    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
780    [enable_tests_run=${enableval}],
781    [enable_tests_run=yes])
782 AC_MSG_RESULT($enable_test_run)
783 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
784
785 # should expensive tests be run?
786 AC_MSG_CHECKING(whether to run expensive tests)
787 AC_ARG_ENABLE([expensivetests],
788    [AS_HELP_STRING([--enable-expensive-tests], [enable running expensive testcases])],
789    [enable_expensive=${enableval}],
790    [enable_expensive=no])
791 AC_MSG_RESULT($enable_expensive)
792 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
793
794 # should benchmarks be run?
795 AC_MSG_CHECKING(whether to run benchmarks during make check)
796 AC_ARG_ENABLE([benchmarks],
797    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
798    [enable_benchmarks=${enableval}],
799    [enable_benchmarks=no])
800 AC_MSG_RESULT($enable_benchmarks)
801 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
802
803 # should experimental code be compiled (code that may not yet compile)?
804 AC_MSG_CHECKING(whether to compile experimental code)
805 AC_ARG_ENABLE([experimental],
806    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
807    [enable_experimental=${enableval}],
808    [enable_experimental=no])
809 AC_MSG_RESULT($enable_experimental)
810 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
811
812 # should code be enabled that works around missing OS functionality on Windows?
813 # used for test cases
814 if test $build_target = "mingw"
815 then
816         workarounds=1
817 else
818   AC_MSG_CHECKING(whether to enable windows workarounds)
819   AC_ARG_ENABLE([windows_workarounds], 
820      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
821      [enable_workarounds=${enableval}],
822      [enable_workarounds=no])
823   AC_MSG_RESULT($enable_workarounds)
824   if test x$enable_windows_workarounds = "xyes"
825   then
826      workarounds=1
827   else
828      workarounds=0
829    fi
830 fi
831 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
832
833 # gcov compilation
834 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
835 AC_ARG_ENABLE([coverage], 
836               AS_HELP_STRING([--enable-coverage],
837                              [compile the library with code coverage support]),
838               [use_gcov=${enableval}], 
839               [use_gcov=no])
840 AC_MSG_RESULT($use_gcov)
841 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
842
843
844 AC_CONFIG_FILES([ 
845 Makefile
846 contrib/Makefile
847 doc/Makefile
848 doc/man/Makefile
849 m4/Makefile
850 po/Makefile.in 
851 src/Makefile
852 src/arm/Makefile
853 src/arm/arm.conf
854 src/ats/Makefile
855 src/ats/ats.conf
856 src/block/Makefile
857 src/chat/Makefile
858 src/chat/chat.conf
859 src/core/Makefile
860 src/core/core.conf
861 src/datacache/Makefile
862 src/datastore/Makefile
863 src/datastore/datastore.conf
864 src/dht/Makefile
865 src/dht/dht.conf
866 src/dns/Makefile
867 src/dns/dns.conf
868 src/dv/Makefile
869 src/dv/dv.conf
870 src/exit/Makefile
871 src/fragmentation/Makefile
872 src/fs/Makefile
873 src/fs/fs.conf
874 src/hello/Makefile
875 src/include/Makefile
876 src/include/gnunet_directories.h
877 src/hostlist/Makefile
878 src/mesh/Makefile
879 src/mesh/mesh.conf
880 src/nat/Makefile
881 src/nse/Makefile
882 src/nse/nse.conf
883 src/peerinfo/Makefile
884 src/peerinfo/peerinfo.conf
885 src/peerinfo-tool/Makefile
886 src/pt/Makefile
887 src/statistics/Makefile
888 src/statistics/statistics.conf
889 src/stream/Makefile
890 src/template/Makefile
891 src/testing/Makefile
892 src/topology/Makefile
893 src/transport/Makefile
894 src/transport/transport.conf
895 src/tun/Makefile
896 src/util/Makefile
897 src/util/resolver.conf
898 src/vpn/Makefile
899 src/vpn/vpn.conf
900 src/integration-tests/Makefile
901 pkgconfig/Makefile
902 pkgconfig/gnunetarm.pc
903 pkgconfig/gnunetblock.pc
904 pkgconfig/gnunetcore.pc
905 pkgconfig/gnunetdatacache.pc
906 pkgconfig/gnunetdatastore.pc
907 pkgconfig/gnunetdht.pc
908 pkgconfig/gnunetdhtlog.pc
909 pkgconfig/gnunetdv.pc
910 pkgconfig/gnunetfragmentation.pc
911 pkgconfig/gnunetfs.pc
912 pkgconfig/gnunethello.pc
913 pkgconfig/gnunetnat.pc
914 pkgconfig/gnunetnse.pc
915 pkgconfig/gnunetpeerinfo.pc
916 pkgconfig/gnunetstatistics.pc
917 pkgconfig/gnunettesting.pc
918 pkgconfig/gnunettransport.pc
919 pkgconfig/gnunetutil.pc
920 ])
921 AC_OUTPUT
922
923 # Finally: summary!
924
925 # warn user if mysql found but not used due to version
926 if test "$mysqlfail" = "true"
927 then
928   AC_MSG_NOTICE([NOTICE: MySQL found, but too old. MySQL support will not be compiled.])
929 fi
930
931 # sqlite
932 if test "x$sqlite" = "x0"
933 then
934   AC_MSG_NOTICE([NOTICE: sqlite not found.  sqLite support will not be compiled.])
935 fi
936
937 if test "x$lmhd" != "x1"
938 then
939  AC_MSG_NOTICE([NOTICE: libmicrohttpd not found, http transport will not be installed.])
940 fi
941
942 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
943
944 if test "$enable_framework_build" = "yes"
945 then
946   AC_MSG_NOTICE([NOTICE: Mac OS X framework build enabled.])
947 fi
948
949 AC_MSG_NOTICE([********************************************
950 You can compile GNUnet with
951         make
952 now. After that, run (if necessary as 'root')
953         make install
954 to install everything. You may want to create a new user account
955 to run the GNUnet service:
956         adduser gnunet
957 You also need to create an configuration file that should
958 specify the path where GNUnet should store data.  For example,
959 you could store in "/etc/gnunet.conf" the following lines:
960
961 [[PATHS]]
962 SERVICEHOME = /var/lib/gnunet
963 DEFAULTCONFIG = /etc/gnunet.conf
964
965 Now, in order to start your peer, run as the 'gnunet' user
966         gnunet-arm -s
967
968 Each GNUnet user should also create an (at least initially) empty
969 configuration file:
970         mkdir $HOME/.gnunet/
971         touch $HOME/.gnunet/gnunet.conf
972         
973 Optionally, download and compile:
974 - gnunet-gtk to get a GUI for file-sharing and configuration.
975 ********************************************])