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