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