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