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