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