Point to the Debian 7.8 installer
[bitcoinplatinum.git] / configure.ac
blob2c918218bb836e19cf078b55526e34f72a456eee
1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
2 AC_PREREQ([2.60])
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 10)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2015)
9 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitcoin.org],[bitcoin])
10 AC_CONFIG_SRCDIR([src/main.cpp])
11 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
12 AC_CONFIG_AUX_DIR([build-aux])
13 AC_CONFIG_MACRO_DIR([build-aux/m4])
15 AC_CANONICAL_HOST
17 AH_TOP([#ifndef BITCOIN_CONFIG_H])
18 AH_TOP([#define BITCOIN_CONFIG_H])
19 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
21 dnl faketime breaks configure and is only needed for make. Disable it here.
22 unset FAKETIME
24 dnl Automake init set-up and checks
25 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
27 dnl faketime messes with timestamps and causes configure to be re-run.
28 dnl --disable-maintainer-mode can be used to bypass this.
29 AM_MAINTAINER_MODE([enable])
31 dnl make the compilation flags quiet unless V=1 is used
32 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
34 dnl Compiler checks (here before libtool).
35 if test "x${CXXFLAGS+set}" = "xset"; then
36   CXXFLAGS_overridden=yes
37 else
38   CXXFLAGS_overridden=no
40 AC_PROG_CXX
41 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
43 dnl By default, libtool for mingw refuses to link static libs into a dll for
44 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
45 dnl we have those under control, re-enable that functionality.
46 case $host in
47   *mingw*)
48      lt_cv_deplibs_check_method="pass_all"
49   ;;
50 esac
51 dnl Libtool init checks.
52 LT_INIT([pic-only])
54 dnl Check/return PATH for base programs.
55 AC_PATH_TOOL(AR, ar)
56 AC_PATH_TOOL(RANLIB, ranlib)
57 AC_PATH_TOOL(STRIP, strip)
58 AC_PATH_TOOL(GCOV, gcov)
59 AC_PATH_PROG(LCOV, lcov)
60 AC_PATH_PROG(JAVA, java)
61 AC_PATH_PROG(GENHTML, genhtml)
62 AC_PATH_PROG([GIT], [git])
63 AC_PATH_PROG(CCACHE,ccache)
64 AC_PATH_PROG(XGETTEXT,xgettext)
65 AC_PATH_PROG(HEXDUMP,hexdump)
67 dnl pkg-config check.
68 PKG_PROG_PKG_CONFIG
70 # Enable wallet
71 AC_ARG_ENABLE([wallet],
72   [AS_HELP_STRING([--enable-wallet],
73   [enable wallet (default is yes)])],
74   [enable_wallet=$enableval],
75   [enable_wallet=yes])
77 AC_ARG_WITH([miniupnpc],
78   [AS_HELP_STRING([--with-miniupnpc],
79   [enable UPNP (default is yes if libminiupnpc is found)])],
80   [use_upnp=$withval],
81   [use_upnp=auto])
83 AC_ARG_ENABLE([upnp-default],
84   [AS_HELP_STRING([--enable-upnp-default],
85   [if UPNP is enabled, turn it on at startup (default is no)])],
86   [use_upnp_default=$enableval],
87   [use_upnp_default=no])
89 AC_ARG_ENABLE(tests,
90     AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
91     [use_tests=$enableval],
92     [use_tests=yes])
94 AC_ARG_WITH([comparison-tool],
95     AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
96     [use_comparison_tool=$withval],
97     [use_comparison_tool=no])
99 AC_ARG_ENABLE([comparison-tool-reorg-tests],
100     AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
101     [use_comparison_tool_reorg_tests=$enableval],
102     [use_comparison_tool_reorg_tests=no])
104 AC_ARG_WITH([qrencode],
105   [AS_HELP_STRING([--with-qrencode],
106   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
107   [use_qr=$withval],
108   [use_qr=auto])
110 AC_ARG_ENABLE([hardening],
111   [AS_HELP_STRING([--enable-hardening],
112   [attempt to harden the resulting executables (default is yes)])],
113   [use_hardening=$enableval],
114   [use_hardening=yes])
116 AC_ARG_ENABLE([reduce-exports],
117   [AS_HELP_STRING([--enable-reduce-exports],
118   [attempt to reduce exported symbols in the resulting executables (default is no)])],
119   [use_reduce_exports=$enableval],
120   [use_reduce_exports=no])
122 AC_ARG_ENABLE([ccache],
123   [AS_HELP_STRING([--enable-ccache],
124   [use ccache for building (default is yes if ccache is found)])],
125   [use_ccache=$enableval],
126   [use_ccache=auto])
128 AC_ARG_ENABLE([lcov],
129   [AS_HELP_STRING([--enable-lcov],
130   [enable lcov testing (default is no)])],
131   [use_lcov=yes],
132   [use_lcov=no])
134 AC_ARG_ENABLE([glibc-back-compat],
135   [AS_HELP_STRING([--enable-glibc-back-compat],
136   [enable backwards compatibility with glibc])],
137   [use_glibc_compat=$enableval],
138   [use_glibc_compat=no])
140 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
142 # Enable debug 
143 AC_ARG_ENABLE([debug],
144     [AS_HELP_STRING([--enable-debug],
145                     [use debug compiler flags and macros (default is no)])],
146     [enable_debug=$enableval],
147     [enable_debug=no])
149 if test "x$enable_debug" = xyes; then
150     if test "x$GCC" = xyes; then
151         CFLAGS="-g3 -O0 -DDEBUG"
152     fi
153     
154     if test "x$GXX" = xyes; then
155         CXXFLAGS="-g3 -O0 -DDEBUG"
156     fi
157 fi 
159 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
160 ##       compatibility with the legacy buildsystem.
162 if test "x$CXXFLAGS_overridden" = "xno"; then
163   CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
165 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
167 AC_ARG_WITH([utils],
168   [AS_HELP_STRING([--with-utils],
169   [build bitcoin-cli bitcoin-tx (default=yes)])],
170   [build_bitcoin_utils=$withval],
171   [build_bitcoin_utils=yes])
173 AC_ARG_WITH([libs],
174   [AS_HELP_STRING([--with-libs],
175   [build libraries (default=yes)])],
176   [build_bitcoin_libs=$withval],
177   [build_bitcoin_libs=yes])
179 AC_ARG_WITH([daemon],
180   [AS_HELP_STRING([--with-daemon],
181   [build bitcoind daemon (default=yes)])],
182   [build_bitcoind=$withval],
183   [build_bitcoind=yes])
185 AC_LANG_PUSH([C++])
187 use_pkgconfig=yes
188 case $host in
189   *mingw*)
191      #pkgconfig does more harm than good with MinGW
192      use_pkgconfig=no
194      TARGET_OS=windows
195      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
196      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
197      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
198      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
199      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
200      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
201      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
202      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
203      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
204      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
205      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
206      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
207      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
208      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
209      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
210      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
211      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
212      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
213      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
215      # -static is interpreted by libtool, where it has a different meaning.
216      # In libtool-speak, it's -all-static.
217      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
219      AC_PATH_PROG([MAKENSIS], [makensis], none)
220      if test x$MAKENSIS = xnone; then
221        AC_MSG_WARN("makensis not found. Cannot create installer.")
222      fi
224      AC_PATH_TOOL(WINDRES, windres, none)
225      if test x$WINDRES = xnone; then
226        AC_MSG_ERROR("windres not found")
227      fi
229      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
230      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
231      if test "x$CXXFLAGS_overridden" = "xno"; then
232        CXXFLAGS="$CXXFLAGS -w"
233      fi
234      case $host in
235        i?86-*) WINDOWS_BITS=32 ;;
236        x86_64-*) WINDOWS_BITS=64 ;;
237        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
238      esac
239      AC_SUBST(WINDOWS_BITS)
241      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
242      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
243      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
244      dnl also overridden to prevent their insertion later.
245      dnl This should only affect dll's.
246      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
247      postdeps_CXX=
249      ;;
250   *darwin*)
251      TARGET_OS=darwin
252      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
253      if  test x$cross_compiling != xyes; then
254        BUILD_OS=darwin
255        AC_CHECK_PROG([PORT],port, port)
256        if test x$PORT = xport; then
257          dnl add default macports paths
258          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
259          LIBS="$LIBS -L/opt/local/lib"
260          if test -d /opt/local/include/db48; then
261            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
262            LIBS="$LIBS -L/opt/local/lib/db48"
263          fi
264        fi
266        AC_CHECK_PROG([BREW],brew, brew)
267        if test x$BREW = xbrew; then
268          dnl These Homebrew packages may be keg-only, meaning that they won't be found
269          dnl in expected paths because they may conflict with system files. Ask
270          dnl Homebrew where each one is located, then adjust paths accordingly.
271          dnl It's safe to add these paths even if the functionality is disabled by
272          dnl the user (--without-wallet or --without-gui for example).
274          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
275          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
276          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
277          if test x$openssl_prefix != x; then
278            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
279            export PKG_CONFIG_PATH
280          fi
281          if test x$bdb_prefix != x; then
282            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
283            LIBS="$LIBS -L$bdb_prefix/lib"
284          fi
285          if test x$qt5_prefix != x; then
286            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
287            export PKG_CONFIG_PATH
288          fi
289        fi
290      else
291        case $build_os in
292          *darwin*)
293            BUILD_OS=darwin
294            ;;
295          *)
296            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
297            AC_PATH_TOOL([OTOOL], [otool], otool)
298            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
300            dnl libtool will try to strip the static lib, which is a problem for
301            dnl cross-builds because strip attempts to call a hard-coded ld,
302            dnl which may not exist in the path. Stripping the .a is not
303            dnl necessary, so just disable it.
304            old_striplib=
305            ;;
306        esac
307      fi
309      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
310      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
311      ;;
312    *linux*)
313      TARGET_OS=linux
314      ;;
315    *)
316      ;;
317 esac
319 if test x$use_comparison_tool != xno; then
320   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
323 if test x$use_comparison_tool_reorg_tests != xno; then
324   if test x$use_comparison_tool = x; then
325     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
326   fi
327   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
328 else
329   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
332 if test x$use_lcov = xyes; then
333   if test x$LCOV = x; then
334     AC_MSG_ERROR("lcov testing requested but lcov not found")
335   fi
336   if test x$GCOV = x; then
337     AC_MSG_ERROR("lcov testing requested but gcov not found")
338   fi
339   if test x$JAVA = x; then
340     AC_MSG_ERROR("lcov testing requested but java not found")
341   fi
342   if test x$GENHTML = x; then
343     AC_MSG_ERROR("lcov testing requested but genhtml not found")
344   fi
345   if test x$use_comparison_tool = x; then
346     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
347   fi
348   LCOV="$LCOV --gcov-tool=$GCOV"
349   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
350     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
353 dnl Check for endianness
354 AC_C_BIGENDIAN
356 dnl Check for pthread compile/link requirements
357 AX_PTHREAD
359 # The following macro will add the necessary defines to bitcoin-config.h, but
360 # they also need to be passed down to any subprojects. Pull the results out of
361 # the cache and add them to CPPFLAGS.
362 AC_SYS_LARGEFILE
363 # detect POSIX or GNU variant of strerror_r
364 AC_FUNC_STRERROR_R
366 if test x$ac_cv_sys_file_offset_bits != x &&
367    test x$ac_cv_sys_file_offset_bits != xno &&
368    test x$ac_cv_sys_file_offset_bits != xunknown; then
369   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
372 if test x$ac_cv_sys_large_files != x &&
373    test x$ac_cv_sys_large_files != xno &&
374    test x$ac_cv_sys_large_files != xunknown; then
375   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
378 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
380 AX_GCC_FUNC_ATTRIBUTE([visibility])
381 AX_GCC_FUNC_ATTRIBUTE([dllexport])
382 AX_GCC_FUNC_ATTRIBUTE([dllimport])
384 if test x$use_glibc_compat != xno; then
386   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
387   # See which one is present here.
388   AC_MSG_CHECKING(__fdelt_chk type)
389   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
390                     #undef _FORTIFY_SOURCE
391                   #endif
392                   #define _FORTIFY_SOURCE 2
393                   #include <sys/select.h>
394      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
395     [ fdelt_type="long unsigned int"],
396     [ fdelt_type="long int"])
397   AC_MSG_RESULT($fdelt_type)
398   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
402 if test x$use_hardening != xno; then
403   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
404   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
406   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
407     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
408       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
409     ])
410     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
411   ])
413   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
414   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
415   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
416   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
418   if test x$TARGET_OS != xwindows; then
419     # All windows code is PIC, forcing it on just adds useless compile warnings
420     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
421     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
422   fi
424   case $host in
425     *mingw*)
426        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
427     ;;
428   esac
430   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
431   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
432   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
433   OBJCXXFLAGS="$CXXFLAGS"
436 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
437 if test x$TARGET_OS = xdarwin; then
438   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
441 AC_CHECK_HEADERS([endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
442 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
443 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
445 AC_CHECK_DECLS([strnlen])
447 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
448                 [#if HAVE_ENDIAN_H
449                  #include <endian.h>
450                  #endif])
452 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
453                 [#if HAVE_BYTESWAP_H
454                  #include <byteswap.h>
455                  #endif])
457 dnl Check for MSG_NOSIGNAL
458 AC_MSG_CHECKING(for MSG_NOSIGNAL)
459 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
460  [[ int f = MSG_NOSIGNAL; ]])],
461  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
462  [ AC_MSG_RESULT(no)]
465 AC_SEARCH_LIBS([clock_gettime],[rt])
467 AC_MSG_CHECKING([for visibility attribute])
468 AC_LINK_IFELSE([AC_LANG_SOURCE([
469   int foo_def( void ) __attribute__((visibility("default")));
470   int main(){}
471   ])],
472   [
473     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
474     AC_MSG_RESULT(yes)
475   ],
476   [
477     AC_MSG_RESULT(no)
478     if test x$use_reduce_exports = xyes; then
479       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
480     fi
481   ]
484 if test x$use_reduce_exports = xyes; then
485   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
486   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
489 LEVELDB_CPPFLAGS=
490 LIBLEVELDB=
491 LIBMEMENV=
492 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
493 AC_SUBST(LEVELDB_CPPFLAGS)
494 AC_SUBST(LIBLEVELDB)
495 AC_SUBST(LIBMEMENV)
497 if test x$enable_wallet != xno; then
498     dnl Check for libdb_cxx only if wallet enabled
499     BITCOIN_FIND_BDB48
502 dnl Check for libminiupnpc (optional)
503 if test x$use_upnp != xno; then
504   AC_CHECK_HEADERS(
505     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
506     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
507     [have_miniupnpc=no]
508   )
511 BITCOIN_QT_INIT
513 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
514 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
516 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
517     use_boost=no
518 else
519     use_boost=yes
522 if test x$use_boost = xyes; then
524 dnl Check for boost libs
525 AX_BOOST_BASE
526 AX_BOOST_SYSTEM
527 AX_BOOST_FILESYSTEM
528 AX_BOOST_PROGRAM_OPTIONS
529 AX_BOOST_THREAD
530 AX_BOOST_CHRONO
533 if test x$use_reduce_exports = xyes; then
534   AC_MSG_CHECKING([for working boost reduced exports])
535   TEMP_CPPFLAGS="$CPPFLAGS"
536   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
537   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
538       @%:@include <boost/version.hpp>
539     ]], [[
540       #if BOOST_VERSION >= 104900
541       // Everything is okay
542       #else
543       #  error Boost version is too old
544       #endif
545     ]])],[
546       AC_MSG_RESULT(yes)
547     ],[
548     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
549   ])
550   CPPFLAGS="$TEMP_CPPFLAGS"
554 if test x$use_reduce_exports = xyes; then
555     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
556     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
559 if test x$use_tests = xyes; then
561   if test x$HEXDUMP = x; then
562     AC_MSG_ERROR(hexdump is required for tests)
563   fi
566   if test x$use_boost = xyes; then
568   AX_BOOST_UNIT_TEST_FRAMEWORK
570   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
571   AC_MSG_CHECKING([for dynamic linked boost test])
572   TEMP_LIBS="$LIBS"
573   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
574   TEMP_CPPFLAGS="$CPPFLAGS"
575   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
576   AC_LINK_IFELSE([AC_LANG_SOURCE([
577        #define BOOST_TEST_DYN_LINK
578        #define BOOST_TEST_MAIN
579         #include <boost/test/unit_test.hpp>
581        ])],
582     [AC_MSG_RESULT(yes)]
583     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
584     [AC_MSG_RESULT(no)])
585   LIBS="$TEMP_LIBS"
586   CPPFLAGS="$TEMP_CPPFLAGS"
588   fi
591 if test x$use_boost = xyes; then
593 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
595 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
596 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
597 dnl a working version is available, else fall back to sleep. sleep was removed
598 dnl after 1.56.
599 dnl If neither is available, abort.
600 dnl If sleep_for is used, boost_chrono becomes a requirement.
601 if test x$ax_cv_boost_chrono = xyes; then
602 TEMP_LIBS="$LIBS"
603 LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
604 TEMP_CPPFLAGS="$CPPFLAGS"
605 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
606 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
607   #include <boost/thread/thread.hpp>
608   #include <boost/version.hpp>
609   ]],[[
610   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
611       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
612   #else
613    choke me
614   #endif
615   ]])],
616   [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
617      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
618   [boost_sleep=no])
619 LIBS="$TEMP_LIBS"
620 CPPFLAGS="$TEMP_CPPFLAGS"
623 if test x$boost_sleep != xyes; then
624 TEMP_LIBS="$LIBS"
625 LIBS="$BOOST_LIBS $LIBS"
626 TEMP_CPPFLAGS="$CPPFLAGS"
627 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
628 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
629   #include <boost/version.hpp>
630   #include <boost/thread.hpp>
631   #include <boost/date_time/posix_time/posix_time_types.hpp>
632   ]],[[
633   #if BOOST_VERSION <= 105600
634       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
635   #else
636    choke me
637   #endif
638   ]])],
639   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
640   [boost_sleep=no])
641 LIBS="$TEMP_LIBS"
642 CPPFLAGS="$TEMP_CPPFLAGS"
645 if test x$boost_sleep != xyes; then
646   AC_MSG_ERROR(No working boost sleep implementation found.)
651 if test x$use_pkgconfig = xyes; then
653   if test x"$PKG_CONFIG" = "x"; then
654     AC_MSG_ERROR(pkg-config not found.)
655   fi
657   : #NOP
658   m4_ifdef(
659     [PKG_CHECK_MODULES],
660     [
661       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
662       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
663       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
664       if test x$use_qr != xno; then
665         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
666       fi
667     ]
668   )
669 else
670   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
671   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
673   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
674   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
676   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
677   if test x$use_qr != xno; then
678     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
679     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
680   fi
683 CFLAGS_TEMP="$CFLAGS"
684 LIBS_TEMP="$LIBS"
685 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
686 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
687 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
688 CFLAGS="$CFLAGS_TEMP"
689 LIBS="$LIBS_TEMP"
691 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
693 AC_MSG_CHECKING([whether to build bitcoind])
694 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
695 AC_MSG_RESULT($build_bitcoind)
697 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
698 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
699 AC_MSG_RESULT($build_bitcoin_utils)
701 AC_MSG_CHECKING([whether to build libraries])
702 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
703 if test x$build_bitcoin_libs = xyes; then
704   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
705   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
707 AC_MSG_RESULT($build_bitcoin_libs)
709 AC_LANG_POP
711 if test "x$use_ccache" != "xno"; then
712   AC_MSG_CHECKING(if ccache should be used)
713   if test x$CCACHE = x; then
714     if test "x$use_ccache" = "xyes"; then
715       AC_MSG_ERROR([ccache not found.]);
716     else
717       use_ccache=no
718     fi
719   else
720     use_ccache=yes
721     CC="$ac_cv_path_CCACHE $CC"
722     CXX="$ac_cv_path_CCACHE $CXX"
723   fi
724   AC_MSG_RESULT($use_ccache)
726 if test "x$use_ccache" = "xyes"; then
727     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
730 dnl enable wallet
731 AC_MSG_CHECKING([if wallet should be enabled])
732 if test x$enable_wallet != xno; then
733   AC_MSG_RESULT(yes)
734   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
736 else
737   AC_MSG_RESULT(no)
740 dnl enable upnp support
741 AC_MSG_CHECKING([whether to build with support for UPnP])
742 if test x$have_miniupnpc = xno; then
743   if test x$use_upnp = xyes; then
744      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
745   fi
746   AC_MSG_RESULT(no)
747 else
748   if test x$use_upnp != xno; then
749     AC_MSG_RESULT(yes)
750     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
751     use_upnp=yes
752     upnp_setting=0
753     if test x$use_upnp_default != xno; then
754       use_upnp_default=yes
755       upnp_setting=1
756     fi
757     AC_MSG_RESULT($use_upnp_default)
758     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
759     if test x$TARGET_OS = xwindows; then
760       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
761     fi
762   else
763     AC_MSG_RESULT(no)
764   fi
767 dnl these are only used when qt is enabled
768 if test x$bitcoin_enable_qt != xno; then
769   BUILD_QT=qt
770   dnl enable dbus support
771   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
772   if test x$bitcoin_enable_qt_dbus != xno; then
773     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
774   fi
775   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
777   dnl enable qr support
778   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
779   if test x$have_qrencode = xno; then
780     if test x$use_qr = xyes; then
781      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
782     fi
783     AC_MSG_RESULT(no)
784   else
785     if test x$use_qr != xno; then
786       AC_MSG_RESULT(yes)
787       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
788       use_qr=yes
789     else
790       AC_MSG_RESULT(no)
791     fi
792   fi
794   if test x$XGETTEXT = x; then
795     AC_MSG_WARN("xgettext is required to update qt translations")
796   fi
798   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
799   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
800     AC_MSG_RESULT([yes])
801     BUILD_TEST_QT="test"
802   else
803     AC_MSG_RESULT([no])
804   fi
807 AC_MSG_CHECKING([whether to build test_bitcoin])
808 if test x$use_tests = xyes; then
809   AC_MSG_RESULT([yes])
810   BUILD_TEST="test"
811 else
812   AC_MSG_RESULT([no])
815 AC_MSG_CHECKING([whether to reduce exports])
816 if test x$use_reduce_exports = xyes; then
817   AC_MSG_RESULT([yes])
818 else
819   AC_MSG_RESULT([no])
822 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
823   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
826 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
827 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
828 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
829 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
830 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
831 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
832 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
833 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
834 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
835 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
836 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
837 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
839 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
840 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
841 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
842 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
843 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
844 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
845 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
846 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
847 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
848 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
849 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
850 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
852 AC_SUBST(RELDFLAGS)
853 AC_SUBST(LIBTOOL_APP_LDFLAGS)
854 AC_SUBST(USE_UPNP)
855 AC_SUBST(USE_QRCODE)
856 AC_SUBST(BOOST_LIBS)
857 AC_SUBST(TESTDEFS)
858 AC_SUBST(LEVELDB_TARGET_FLAGS)
859 AC_SUBST(BUILD_TEST)
860 AC_SUBST(BUILD_QT)
861 AC_SUBST(BUILD_TEST_QT)
862 AC_SUBST(MINIUPNPC_CPPFLAGS)
863 AC_SUBST(MINIUPNPC_LIBS)
864 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
865 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
866 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
868 dnl boost's m4 checks do something really nasty: they export these vars. As a
869 dnl result, they leak into secp256k1's configure and crazy things happen.
870 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
871 CPPFLAGS_TEMP="$CPPFLAGS"
872 unset CPPFLAGS
873 CPPFLAGS="$CPPFLAGS_TEMP"
875 LDFLAGS_TEMP="$LDFLAGS"
876 unset LDFLAGS
877 LDFLAGS="$LDFLAGS_TEMP"
879 LIBS_TEMP="$LIBS"
880 unset LIBS
881 LIBS="$LIBS_TEMP"
883 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
884 unset PKG_CONFIG_PATH
885 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
887 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
888 unset PKG_CONFIG_LIBDIR
889 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
891 ac_configure_args="${ac_configure_args} --disable-shared --with-pic"
892 AC_CONFIG_SUBDIRS([src/secp256k1])
894 AC_OUTPUT
896 dnl Taken from https://wiki.debian.org/RpathIssue
897 case $host in
898    *-*-linux-gnu)
899      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
900      sed < libtool > libtool-2 \
901      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
902      mv libtool-2 libtool
903      chmod 755 libtool
904    ;;
905 esac