-fixing minor compilation errors and warnings
[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               lmhd=1),
571             [],[#include "src/include/platform.h"
572                 #include <microhttpd.h>]),,
573             [#include "src/include/platform.h"])
574         ;;
575       *)
576         LDFLAGS="-L$with_microhttpd/lib $LDFLAGS"
577         CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"
578         AC_CHECK_HEADERS(microhttpd.h,
579           AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
580             AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
581               EXT_LIB_PATH="-L$with_microhttpd/lib $EXT_LIB_PATH"
582               lmhd=1),
583             [],[#include "src/include/platform.h"
584                 #include <microhttpd.h>]),,
585             [#include "src/include/platform.h"])
586         ;;
587     esac
588    ],
589    [AC_MSG_RESULT([--with-microhttpd not specified])
590     AC_CHECK_HEADERS([microhttpd.h],
591       AC_CHECK_DECL(MHD_OPTION_PER_IP_CONNECTION_LIMIT,
592         AC_CHECK_LIB([microhttpd], [MHD_start_daemon],
593           lmhd=1),
594         [],[#include "src/include/platform.h"
595             #include <microhttpd.h>]),,
596        [#include "src/include/platform.h"])])
597 AM_CONDITIONAL(HAVE_MHD, test x$lmhd = x1)
598 AC_DEFINE_UNQUOTED([HAVE_MHD], $lmhd, [We have libmicrohttpd])
599
600
601 # restore LIBS
602 LIBS=$SAVE_LIBS
603
604 # check for python & pexpect (used for some testcases only)
605 AM_PATH_PYTHON([2.6],, [:])
606 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
607
608 if test "$PYTHON" != :
609 then
610   AC_MSG_CHECKING([for pexpect])
611   $PYTHON -c "import pexpect" > /dev/null 2> /dev/null
612   PYEX=$?
613   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, test $PYEX -eq 0)
614   if test $PYEX -eq 0
615   then
616     AC_MSG_RESULT([yes])
617   else
618     AC_MSG_RESULT([not found])
619   fi
620 else
621   AM_CONDITIONAL(HAVE_PYTHON_PEXPECT, 0)
622 fi
623
624
625 # check for gettext
626 AM_GNU_GETTEXT([external])
627 AM_GNU_GETTEXT_VERSION([0.16.1])
628
629 # check for iconv
630 AM_ICONV
631
632 # Checks for standard typedefs, structures, and compiler characteristics.
633 AC_TYPE_PID_T
634 AC_TYPE_SIZE_T
635 AC_TYPE_MODE_T
636 AC_HEADER_TIME
637 AC_HEADER_STAT
638 AC_HEADER_STDBOOL
639 AC_STRUCT_TM
640
641 AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
642    [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
643    ],
644    [],
645    [
646       #include <sys/types.h>
647       #include <sys/socket.h>
648       #include <netinet/in.h>
649    ])
650
651
652
653 # Checks for library functions.
654 AC_FUNC_CLOSEDIR_VOID
655 AC_FUNC_FORK
656 AC_PROG_GCC_TRADITIONAL
657 AC_FUNC_MEMCMP
658 AC_FUNC_SELECT_ARGTYPES
659 AC_FUNC_CHOWN
660
661 AC_TYPE_SIGNAL
662 AC_FUNC_STAT
663 AC_FUNC_STRFTIME
664 AC_FUNC_VPRINTF
665 AC_HEADER_SYS_WAIT
666 AC_TYPE_OFF_T
667 AC_TYPE_UID_T
668 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])
669
670 # restore LIBS
671 LIBS=$SAVE_LIBS
672
673 gn_user_home_dir="~/.gnunet"
674 AC_ARG_WITH(user-home-dir,
675         AC_HELP_STRING(
676                 [--with-user-home-dir=DIR],
677                 [default user home directory (~/.gnunet)]),
678         [gn_user_home_dir=$withval])
679 AC_SUBST(GN_USER_HOME_DIR, $gn_user_home_dir)
680 gn_daemon_home_dir="/var/lib/gnunet"
681 AC_ARG_WITH(daemon-home-dir,
682         AC_HELP_STRING(
683                 [--with-daemon-home-dir=DIR],
684                 [default daemon home directory (/var/lib/gnunet)]),
685         [gn_daemon_home_dir=$withval])
686 AC_SUBST(GN_DAEMON_HOME_DIR, $gn_daemon_home_dir)
687 gn_daemon_config_dir="/etc"
688 AC_ARG_WITH(daemon-config-dir,
689         AC_HELP_STRING(
690                 [--with-daemon-config-dir=DIR],
691                 [default daemon config directory (/etc)]),
692         [gn_daemon_config_dir=$withval])
693 AC_SUBST(GN_DAEMON_CONFIG_DIR, $gn_daemon_config_dir)
694
695 GN_INTLINCL=""
696 GN_LIBINTL="$LTLIBINTL"
697 AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
698 AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
699 if test x$enable_framework_build = xyes
700 then
701   AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
702   GN_INTLINCL='-I$(top_srcdir)/src/intlemu'
703   GN_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
704   AC_LIB_APPENDTOVAR([CPPFLAGS], [$GN_INTLINCL]) 
705 fi
706
707 GN_LIB_LDFLAGS="-export-dynamic -no-undefined"
708 GN_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
709
710 AC_SUBST(GN_LIB_LDFLAGS)
711 AC_SUBST(GN_PLUGIN_LDFLAGS)
712 AC_SUBST(GN_INTLINCL)
713 AC_SUBST(GN_LIBINTL)
714
715 AC_SUBST(CPPFLAGS)
716 AC_SUBST(LIBS)
717 AC_SUBST(LDFLAGS)
718 AC_SUBST(EXT_LIB_PATH)
719 AC_SUBST(EXT_LIBS)
720
721 AC_SUBST(LIBPREFIX)
722 AC_SUBST(DLLDIR)
723 AC_SUBST(EXT_LIB_PATH)
724
725
726 # test for sudo
727 AC_MSG_CHECKING(for sudo)
728 AC_ARG_WITH(sudo,
729   [  --with-sudo=PATH       path to sudo binary (or just yes)],
730   [AC_MSG_RESULT("$with_sudo")
731    case $with_sudo in
732    no)
733      SUDO_BINARY=
734      ;;
735    yes)
736      SUDO_BINARY=sudo
737      ;;
738    *)
739      SUDO_BINARY=$with_sudo
740     ;;
741    esac
742   ],
743   [AC_MSG_RESULT([no])])
744 AC_SUBST(SUDO_BINARY)
745
746
747 # test for gnunetdns group name
748 GNUNETDNS_GROUP=gnunetdns
749 AC_MSG_CHECKING(for gnunetdns group name)
750 AC_ARG_WITH(gnunetdns,
751   [  --with-gnunetdns=GRPNAME       name for gnunetdns group],
752   [AC_MSG_RESULT("$with_gnunetdns")
753    case $with_gnunetdns in
754    no)
755      GNUNETDNS_GROUP=gnunet
756      ;;
757    yes)
758      GNUNETDNS_GROUP=gnunetdns
759      ;;
760    *)
761      GNUNETDNS_GROUP=$with_gnunetdns
762     ;;
763    esac
764   ],
765   [AC_MSG_RESULT([gnunetdns])])
766 AC_SUBST(GNUNETDNS_GROUP)
767
768
769 # should 'make check' run tests?
770 AC_MSG_CHECKING(whether to run tests)
771 AC_ARG_ENABLE([testruns],
772    [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
773    [enable_tests_run=${enableval}],
774    [enable_tests_run=yes])
775 AC_MSG_RESULT($enable_test_run)
776 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
777
778 # should expensive tests be run?
779 AC_MSG_CHECKING(whether to run expensive tests)
780 AC_ARG_ENABLE([expensivetests],
781    [AS_HELP_STRING([--enable-expensivetests], [enable running expensive testcases])],
782    [enable_expensive=${enableval}],
783    [enable_expensive=no])
784 AC_MSG_RESULT($enable_expensive)
785 AM_CONDITIONAL([HAVE_EXPENSIVE_TESTS], [test "x$enable_expensive" = "xyes"])
786
787 # should ports be open for Java services?
788 AC_MSG_CHECKING(whether to enable ports for gnunet-java)
789 AC_ARG_ENABLE([javaports],
790    [AS_HELP_STRING([--enable-javaports], [use non-zero ports for services with Java bindings (default is NO)])],
791    [enable_java_ports=${enableval}],
792    [enable_java_ports=no])
793 AC_MSG_RESULT($enable_java_ports)
794 if test "x$enable_java_ports" = "xyes"
795 then
796   JAVAPORT=""
797 else
798   JAVAPORT="$UNIXONLY"
799 fi
800 AC_SUBST(JAVAPORT)
801
802 # should benchmarks be run?
803 AC_MSG_CHECKING(whether to run benchmarks during make check)
804 AC_ARG_ENABLE([benchmarks],
805    [AS_HELP_STRING([--enable-benchmarks], [enable running benchmarks during make check])],
806    [enable_benchmarks=${enableval}],
807    [enable_benchmarks=no])
808 AC_MSG_RESULT($enable_benchmarks)
809 AM_CONDITIONAL([HAVE_BENCHMARKS], [test "x$enable_benchmarks" = "xyes"])
810
811 # should experimental code be compiled (code that may not yet compile)?
812 AC_MSG_CHECKING(whether to compile experimental code)
813 AC_ARG_ENABLE([experimental],
814    [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
815    [enable_experimental=${enableval}],
816    [enable_experimental=no])
817 AC_MSG_RESULT($enable_experimental)
818 AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
819
820 # should code be enabled that works around missing OS functionality on Windows?
821 # used for test cases
822 if test $build_target = "mingw"
823 then
824         workarounds=1
825 else
826   AC_MSG_CHECKING(whether to enable windows workarounds)
827   AC_ARG_ENABLE([windows_workarounds], 
828      [AS_HELP_STRING([--enable-windows_workarounds], [enable workarounds used on Windows (only useful for test cases)])],
829      [enable_workarounds=${enableval}],
830      [enable_workarounds=no])
831   AC_MSG_RESULT($enable_workarounds)
832   if test x$enable_windows_workarounds = "xyes"
833   then
834      workarounds=1
835   else
836      workarounds=0
837    fi
838 fi
839 AC_DEFINE_UNQUOTED([ENABLE_WINDOWS_WORKAROUNDS], $workarounds, [enable workarounds used on Windows (only useful for test cases)])
840
841 # gcov compilation
842 AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
843 AC_ARG_ENABLE([coverage], 
844               AS_HELP_STRING([--enable-coverage],
845                              [compile the library with code coverage support]),
846               [use_gcov=${enableval}], 
847               [use_gcov=no])
848 AC_MSG_RESULT($use_gcov)
849 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
850
851
852 AC_CONFIG_FILES([ 
853 Makefile
854 contrib/Makefile
855 doc/Makefile
856 doc/man/Makefile
857 m4/Makefile
858 po/Makefile.in 
859 src/Makefile
860 src/arm/Makefile
861 src/arm/arm.conf
862 src/ats/Makefile
863 src/ats/ats.conf
864 src/block/Makefile
865 src/chat/Makefile
866 src/chat/chat.conf
867 src/core/Makefile
868 src/core/core.conf
869 src/datacache/Makefile
870 src/datastore/Makefile
871 src/datastore/datastore.conf
872 src/dht/Makefile
873 src/dht/dht.conf
874 src/dns/Makefile
875 src/dns/dns.conf
876 src/dv/Makefile
877 src/dv/dv.conf
878 src/exit/Makefile
879 src/fragmentation/Makefile
880 src/fs/Makefile
881 src/fs/fs.conf
882 src/gns/Makefile
883 src/gns/gns.conf
884 src/hello/Makefile
885 src/include/Makefile
886 src/include/gnunet_directories.h
887 src/hostlist/Makefile
888 src/mesh/Makefile
889 src/mesh/mesh.conf
890 src/namestore/Makefile
891 src/namestore/namestore.conf
892 src/nat/Makefile
893 src/nse/Makefile
894 src/nse/nse.conf
895 src/peerinfo/Makefile
896 src/peerinfo/peerinfo.conf
897 src/peerinfo-tool/Makefile
898 src/pt/Makefile
899 src/statistics/Makefile
900 src/statistics/statistics.conf
901 src/stream/Makefile
902 src/template/Makefile
903 src/testing/Makefile
904 src/topology/Makefile
905 src/transport/Makefile
906 src/transport/transport.conf
907 src/tun/Makefile
908 src/util/Makefile
909 src/util/resolver.conf
910 src/vpn/Makefile
911 src/vpn/vpn.conf
912 src/integration-tests/Makefile
913 pkgconfig/Makefile
914 pkgconfig/gnunetarm.pc
915 pkgconfig/gnunetblock.pc
916 pkgconfig/gnunetcore.pc
917 pkgconfig/gnunetdatacache.pc
918 pkgconfig/gnunetdatastore.pc
919 pkgconfig/gnunetdht.pc
920 pkgconfig/gnunetdhtlog.pc
921 pkgconfig/gnunetdv.pc
922 pkgconfig/gnunetfragmentation.pc
923 pkgconfig/gnunetfs.pc
924 pkgconfig/gnunethello.pc
925 pkgconfig/gnunetnat.pc
926 pkgconfig/gnunetnse.pc
927 pkgconfig/gnunetpeerinfo.pc
928 pkgconfig/gnunetstatistics.pc
929 pkgconfig/gnunettesting.pc
930 pkgconfig/gnunettransport.pc
931 pkgconfig/gnunetutil.pc
932 ])
933 AC_OUTPUT
934
935 # Finally: summary!
936
937 # warn user if mysql found but not used due to version
938 if test "$mysqlfail" = "true"
939 then
940   AC_MSG_NOTICE([NOTICE: MySQL found, but too old. MySQL support will not be compiled.])
941 fi
942
943 # sqlite
944 if test "x$sqlite" = "x0"
945 then
946   AC_MSG_NOTICE([NOTICE: sqlite not found.  sqLite support will not be compiled.])
947 fi
948
949 # java ports
950 if test "x$enable_java_ports" = "xyes"
951 then
952   AC_MSG_NOTICE([NOTICE: opening ports for gnunet-java bindings by default.])
953 fi
954
955 if test "x$lmhd" != "x1"
956 then
957  AC_MSG_NOTICE([NOTICE: libmicrohttpd not found, http transport will not be installed.])
958 fi
959
960 AC_MSG_NOTICE([NOTICE: Database support is set to MySQL: $mysql, SQLite: $sqlite, Postgres: $postgres])
961
962 if test "$enable_framework_build" = "yes"
963 then
964   AC_MSG_NOTICE([NOTICE: Mac OS X framework build enabled.])
965 fi
966
967 AC_MSG_NOTICE([********************************************
968 You can compile GNUnet with
969         make
970 now. After that, run (if necessary as 'root')
971         make install
972 to install everything. You may want to create a new user account
973 to run the GNUnet service:
974         adduser gnunet
975 You also need to create an configuration file that should
976 specify the path where GNUnet should store data.  For example,
977 you could store in "/etc/gnunet.conf" the following lines:
978
979 [[PATHS]]
980 SERVICEHOME = /var/lib/gnunet
981 DEFAULTCONFIG = /etc/gnunet.conf
982
983 Now, in order to start your peer, run as the 'gnunet' user
984         gnunet-arm -s
985
986 Each GNUnet user should also create an (at least initially) empty
987 configuration file:
988         mkdir $HOME/.gnunet/
989         touch $HOME/.gnunet/gnunet.conf
990         
991 Optionally, download and compile:
992 - gnunet-gtk to get a GUI for file-sharing and configuration.
993 ********************************************])