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