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