Add ZeroMQ support. Notify blocks and transactions via ZeroMQ
[bitcoinplatinum.git] / configure.ac
blob9955ab9bf786c69befce67a5243374888ebe9d8b
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, 11)
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],[https://github.com/bitcoin/bitcoin/issues],[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_ENABLE([zmq],
141   [AC_HELP_STRING([--disable-zmq],
142   [Disable ZMQ notifications])],
143   [use_zmq=$enableval],
144   [use_zmq=yes])
146 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
148 # Enable debug 
149 AC_ARG_ENABLE([debug],
150     [AS_HELP_STRING([--enable-debug],
151                     [use debug compiler flags and macros (default is no)])],
152     [enable_debug=$enableval],
153     [enable_debug=no])
155 if test "x$enable_debug" = xyes; then
156     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
157     if test "x$GCC" = xyes; then
158         CFLAGS="$CFLAGS -g3 -O0"
159     fi
160     
161     if test "x$GXX" = xyes; then
162         CXXFLAGS="$CXXFLAGS -g3 -O0"
163     fi
164 fi 
166 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
167 ##       compatibility with the legacy buildsystem.
169 if test "x$CXXFLAGS_overridden" = "xno"; then
170   CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
172 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
174 AC_ARG_WITH([utils],
175   [AS_HELP_STRING([--with-utils],
176   [build bitcoin-cli bitcoin-tx (default=yes)])],
177   [build_bitcoin_utils=$withval],
178   [build_bitcoin_utils=yes])
180 AC_ARG_WITH([libs],
181   [AS_HELP_STRING([--with-libs],
182   [build libraries (default=yes)])],
183   [build_bitcoin_libs=$withval],
184   [build_bitcoin_libs=yes])
186 AC_ARG_WITH([daemon],
187   [AS_HELP_STRING([--with-daemon],
188   [build bitcoind daemon (default=yes)])],
189   [build_bitcoind=$withval],
190   [build_bitcoind=yes])
192 AC_LANG_PUSH([C++])
194 use_pkgconfig=yes
195 case $host in
196   *mingw*)
198      #pkgconfig does more harm than good with MinGW
199      use_pkgconfig=no
201      TARGET_OS=windows
202      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
203      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
204      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
205      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
206      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
207      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
208      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
209      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
210      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
211      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
212      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
213      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
214      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
215      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
216      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
217      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
218      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
219      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
220      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
222      # -static is interpreted by libtool, where it has a different meaning.
223      # In libtool-speak, it's -all-static.
224      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
226      AC_PATH_PROG([MAKENSIS], [makensis], none)
227      if test x$MAKENSIS = xnone; then
228        AC_MSG_WARN("makensis not found. Cannot create installer.")
229      fi
231      AC_PATH_TOOL(WINDRES, windres, none)
232      if test x$WINDRES = xnone; then
233        AC_MSG_ERROR("windres not found")
234      fi
236      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
237      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
238      if test "x$CXXFLAGS_overridden" = "xno"; then
239        CXXFLAGS="$CXXFLAGS -w"
240      fi
241      case $host in
242        i?86-*) WINDOWS_BITS=32 ;;
243        x86_64-*) WINDOWS_BITS=64 ;;
244        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
245      esac
246      AC_SUBST(WINDOWS_BITS)
248      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
249      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
250      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
251      dnl also overridden to prevent their insertion later.
252      dnl This should only affect dll's.
253      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
254      postdeps_CXX=
256      ;;
257   *darwin*)
258      TARGET_OS=darwin
259      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
260      if  test x$cross_compiling != xyes; then
261        BUILD_OS=darwin
262        AC_CHECK_PROG([PORT],port, port)
263        if test x$PORT = xport; then
264          dnl add default macports paths
265          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
266          LIBS="$LIBS -L/opt/local/lib"
267          if test -d /opt/local/include/db48; then
268            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
269            LIBS="$LIBS -L/opt/local/lib/db48"
270          fi
271        fi
273        AC_CHECK_PROG([BREW],brew, brew)
274        if test x$BREW = xbrew; then
275          dnl These Homebrew packages may be keg-only, meaning that they won't be found
276          dnl in expected paths because they may conflict with system files. Ask
277          dnl Homebrew where each one is located, then adjust paths accordingly.
278          dnl It's safe to add these paths even if the functionality is disabled by
279          dnl the user (--without-wallet or --without-gui for example).
281          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
282          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
283          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
284          if test x$openssl_prefix != x; then
285            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
286            export PKG_CONFIG_PATH
287          fi
288          if test x$bdb_prefix != x; then
289            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
290            LIBS="$LIBS -L$bdb_prefix/lib"
291          fi
292          if test x$qt5_prefix != x; then
293            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
294            export PKG_CONFIG_PATH
295          fi
296        fi
297      else
298        case $build_os in
299          *darwin*)
300            BUILD_OS=darwin
301            ;;
302          *)
303            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
304            AC_PATH_TOOL([OTOOL], [otool], otool)
305            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
307            dnl libtool will try to strip the static lib, which is a problem for
308            dnl cross-builds because strip attempts to call a hard-coded ld,
309            dnl which may not exist in the path. Stripping the .a is not
310            dnl necessary, so just disable it.
311            old_striplib=
312            ;;
313        esac
314      fi
316      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
317      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
318      ;;
319    *linux*)
320      TARGET_OS=linux
321      ;;
322    *)
323      ;;
324 esac
326 if test x$use_comparison_tool != xno; then
327   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
330 if test x$use_comparison_tool_reorg_tests != xno; then
331   if test x$use_comparison_tool = x; then
332     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
333   fi
334   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
335 else
336   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
339 if test x$use_lcov = xyes; then
340   if test x$LCOV = x; then
341     AC_MSG_ERROR("lcov testing requested but lcov not found")
342   fi
343   if test x$GCOV = x; then
344     AC_MSG_ERROR("lcov testing requested but gcov not found")
345   fi
346   if test x$JAVA = x; then
347     AC_MSG_ERROR("lcov testing requested but java not found")
348   fi
349   if test x$GENHTML = x; then
350     AC_MSG_ERROR("lcov testing requested but genhtml not found")
351   fi
352   if test x$use_comparison_tool = x; then
353     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
354   fi
355   LCOV="$LCOV --gcov-tool=$GCOV"
356   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
357     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
360 dnl Check for endianness
361 AC_C_BIGENDIAN
363 dnl Check for pthread compile/link requirements
364 AX_PTHREAD
366 # The following macro will add the necessary defines to bitcoin-config.h, but
367 # they also need to be passed down to any subprojects. Pull the results out of
368 # the cache and add them to CPPFLAGS.
369 AC_SYS_LARGEFILE
370 # detect POSIX or GNU variant of strerror_r
371 AC_FUNC_STRERROR_R
373 if test x$ac_cv_sys_file_offset_bits != x &&
374    test x$ac_cv_sys_file_offset_bits != xno &&
375    test x$ac_cv_sys_file_offset_bits != xunknown; then
376   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
379 if test x$ac_cv_sys_large_files != x &&
380    test x$ac_cv_sys_large_files != xno &&
381    test x$ac_cv_sys_large_files != xunknown; then
382   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
385 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
387 AX_GCC_FUNC_ATTRIBUTE([visibility])
388 AX_GCC_FUNC_ATTRIBUTE([dllexport])
389 AX_GCC_FUNC_ATTRIBUTE([dllimport])
391 if test x$use_glibc_compat != xno; then
393   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
394   # See which one is present here.
395   AC_MSG_CHECKING(__fdelt_chk type)
396   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
397                     #undef _FORTIFY_SOURCE
398                   #endif
399                   #define _FORTIFY_SOURCE 2
400                   #include <sys/select.h>
401      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
402     [ fdelt_type="long unsigned int"],
403     [ fdelt_type="long int"])
404   AC_MSG_RESULT($fdelt_type)
405   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
409 if test x$use_hardening != xno; then
410   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
411   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
413   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
414     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
415       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
416     ])
417     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
418   ])
420   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
421   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
422   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
423   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
425   if test x$TARGET_OS != xwindows; then
426     # All windows code is PIC, forcing it on just adds useless compile warnings
427     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
428     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
429   fi
431   case $host in
432     *mingw*)
433        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
434     ;;
435   esac
437   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
438   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
439   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
440   OBJCXXFLAGS="$CXXFLAGS"
443 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
444 if test x$TARGET_OS = xdarwin; then
445   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
448 AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
449 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
450 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
452 AC_CHECK_DECLS([strnlen])
454 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
455                 [#if HAVE_ENDIAN_H
456                  #include <endian.h>
457                  #elif HAVE_SYS_ENDIAN_H
458                  #include <sys/endian.h>
459                  #endif])
461 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
462                 [#if HAVE_BYTESWAP_H
463                  #include <byteswap.h>
464                  #endif])
466 dnl Check for MSG_NOSIGNAL
467 AC_MSG_CHECKING(for MSG_NOSIGNAL)
468 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
469  [[ int f = MSG_NOSIGNAL; ]])],
470  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
471  [ AC_MSG_RESULT(no)]
474 AC_SEARCH_LIBS([clock_gettime],[rt])
476 AC_MSG_CHECKING([for visibility attribute])
477 AC_LINK_IFELSE([AC_LANG_SOURCE([
478   int foo_def( void ) __attribute__((visibility("default")));
479   int main(){}
480   ])],
481   [
482     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
483     AC_MSG_RESULT(yes)
484   ],
485   [
486     AC_MSG_RESULT(no)
487     if test x$use_reduce_exports = xyes; then
488       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
489     fi
490   ]
493 if test x$use_reduce_exports = xyes; then
494   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
495   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
498 LEVELDB_CPPFLAGS=
499 LIBLEVELDB=
500 LIBMEMENV=
501 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
502 AC_SUBST(LEVELDB_CPPFLAGS)
503 AC_SUBST(LIBLEVELDB)
504 AC_SUBST(LIBMEMENV)
506 if test x$enable_wallet != xno; then
507     dnl Check for libdb_cxx only if wallet enabled
508     BITCOIN_FIND_BDB48
511 dnl Check for libminiupnpc (optional)
512 if test x$use_upnp != xno; then
513   AC_CHECK_HEADERS(
514     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
515     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
516     [have_miniupnpc=no]
517   )
520 BITCOIN_QT_INIT
522 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
523 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
525 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
526     use_boost=no
527 else
528     use_boost=yes
531 if test x$use_boost = xyes; then
533 dnl Check for boost libs
534 AX_BOOST_BASE
535 AX_BOOST_SYSTEM
536 AX_BOOST_FILESYSTEM
537 AX_BOOST_PROGRAM_OPTIONS
538 AX_BOOST_THREAD
539 AX_BOOST_CHRONO
542 if test x$use_reduce_exports = xyes; then
543   AC_MSG_CHECKING([for working boost reduced exports])
544   TEMP_CPPFLAGS="$CPPFLAGS"
545   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
546   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
547       @%:@include <boost/version.hpp>
548     ]], [[
549       #if BOOST_VERSION >= 104900
550       // Everything is okay
551       #else
552       #  error Boost version is too old
553       #endif
554     ]])],[
555       AC_MSG_RESULT(yes)
556     ],[
557     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
558   ])
559   CPPFLAGS="$TEMP_CPPFLAGS"
563 if test x$use_reduce_exports = xyes; then
564     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
565     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
568 if test x$use_tests = xyes; then
570   if test x$HEXDUMP = x; then
571     AC_MSG_ERROR(hexdump is required for tests)
572   fi
575   if test x$use_boost = xyes; then
577   AX_BOOST_UNIT_TEST_FRAMEWORK
579   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
580   AC_MSG_CHECKING([for dynamic linked boost test])
581   TEMP_LIBS="$LIBS"
582   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
583   TEMP_CPPFLAGS="$CPPFLAGS"
584   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
585   AC_LINK_IFELSE([AC_LANG_SOURCE([
586        #define BOOST_TEST_DYN_LINK
587        #define BOOST_TEST_MAIN
588         #include <boost/test/unit_test.hpp>
590        ])],
591     [AC_MSG_RESULT(yes)]
592     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
593     [AC_MSG_RESULT(no)])
594   LIBS="$TEMP_LIBS"
595   CPPFLAGS="$TEMP_CPPFLAGS"
597   fi
600 if test x$use_boost = xyes; then
602 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
604 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
605 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
606 dnl a working version is available, else fall back to sleep. sleep was removed
607 dnl after 1.56.
608 dnl If neither is available, abort.
609 TEMP_LIBS="$LIBS"
610 LIBS="$BOOST_LIBS $LIBS"
611 TEMP_CPPFLAGS="$CPPFLAGS"
612 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
613 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
614   #include <boost/thread/thread.hpp>
615   #include <boost/version.hpp>
616   ]],[[
617   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
618       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
619   #else
620    choke me
621   #endif
622   ]])],
623   [boost_sleep=yes;
624      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
625   [boost_sleep=no])
626 LIBS="$TEMP_LIBS"
627 CPPFLAGS="$TEMP_CPPFLAGS"
629 if test x$boost_sleep != xyes; then
630 TEMP_LIBS="$LIBS"
631 LIBS="$BOOST_LIBS $LIBS"
632 TEMP_CPPFLAGS="$CPPFLAGS"
633 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
634 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
635   #include <boost/version.hpp>
636   #include <boost/thread.hpp>
637   #include <boost/date_time/posix_time/posix_time_types.hpp>
638   ]],[[
639   #if BOOST_VERSION <= 105600
640       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
641   #else
642    choke me
643   #endif
644   ]])],
645   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
646   [boost_sleep=no])
647 LIBS="$TEMP_LIBS"
648 CPPFLAGS="$TEMP_CPPFLAGS"
651 if test x$boost_sleep != xyes; then
652   AC_MSG_ERROR(No working boost sleep implementation found.)
657 if test x$use_pkgconfig = xyes; then
659   if test x"$PKG_CONFIG" = "x"; then
660     AC_MSG_ERROR(pkg-config not found.)
661   fi
663   : #NOP
664   m4_ifdef(
665     [PKG_CHECK_MODULES],
666     [
667       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
668       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
669       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
670       if test x$use_qr != xno; then
671         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
672       fi
673       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
674         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
675         if test x$TARGET_OS != xwindows; then
676           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
677         fi
678       fi
679     ]
680   )
681 else
682   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
683   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
685   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
686   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
688   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
689     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
690     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
691     if test x$TARGET_OS != xwindows; then
692       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
693     fi
694   fi
696   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
697   if test x$use_qr != xno; then
698     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
699     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
700   fi
703 CFLAGS_TEMP="$CFLAGS"
704 LIBS_TEMP="$LIBS"
705 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
706 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
707 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
709 AC_MSG_CHECKING(for a supported OpenSSL version)
710 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
711   #include <openssl/rand.h>
712   ]],
713   [[RAND_egd(NULL);]])],
714   [AC_MSG_RESULT(yes)],
715   [
716     AC_ARG_WITH([libressl],
717     [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
718     [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
719     [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
720     )]
723 CFLAGS="$CFLAGS_TEMP"
724 LIBS="$LIBS_TEMP"
726 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
728 AC_MSG_CHECKING([whether to build bitcoind])
729 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
730 AC_MSG_RESULT($build_bitcoind)
732 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
733 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
734 AC_MSG_RESULT($build_bitcoin_utils)
736 AC_MSG_CHECKING([whether to build libraries])
737 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
738 if test x$build_bitcoin_libs = xyes; then
739   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
740   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
742 AC_MSG_RESULT($build_bitcoin_libs)
744 AC_LANG_POP
746 if test "x$use_ccache" != "xno"; then
747   AC_MSG_CHECKING(if ccache should be used)
748   if test x$CCACHE = x; then
749     if test "x$use_ccache" = "xyes"; then
750       AC_MSG_ERROR([ccache not found.]);
751     else
752       use_ccache=no
753     fi
754   else
755     use_ccache=yes
756     CC="$ac_cv_path_CCACHE $CC"
757     CXX="$ac_cv_path_CCACHE $CXX"
758   fi
759   AC_MSG_RESULT($use_ccache)
761 if test "x$use_ccache" = "xyes"; then
762     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
765 dnl enable wallet
766 AC_MSG_CHECKING([if wallet should be enabled])
767 if test x$enable_wallet != xno; then
768   AC_MSG_RESULT(yes)
769   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
771 else
772   AC_MSG_RESULT(no)
775 dnl enable upnp support
776 AC_MSG_CHECKING([whether to build with support for UPnP])
777 if test x$have_miniupnpc = xno; then
778   if test x$use_upnp = xyes; then
779      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
780   fi
781   AC_MSG_RESULT(no)
782 else
783   if test x$use_upnp != xno; then
784     AC_MSG_RESULT(yes)
785     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
786     use_upnp=yes
787     upnp_setting=0
788     if test x$use_upnp_default != xno; then
789       use_upnp_default=yes
790       upnp_setting=1
791     fi
792     AC_MSG_RESULT($use_upnp_default)
793     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
794     if test x$TARGET_OS = xwindows; then
795       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
796     fi
797   else
798     AC_MSG_RESULT(no)
799   fi
802 dnl these are only used when qt is enabled
803 if test x$bitcoin_enable_qt != xno; then
804   BUILD_QT=qt
805   dnl enable dbus support
806   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
807   if test x$bitcoin_enable_qt_dbus != xno; then
808     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
809   fi
810   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
812   dnl enable qr support
813   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
814   if test x$have_qrencode = xno; then
815     if test x$use_qr = xyes; then
816      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
817     fi
818     AC_MSG_RESULT(no)
819   else
820     if test x$use_qr != xno; then
821       AC_MSG_RESULT(yes)
822       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
823       use_qr=yes
824     else
825       AC_MSG_RESULT(no)
826     fi
827   fi
829   if test x$XGETTEXT = x; then
830     AC_MSG_WARN("xgettext is required to update qt translations")
831   fi
833   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
834   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
835     AC_MSG_RESULT([yes])
836     BUILD_TEST_QT="test"
837   else
838     AC_MSG_RESULT([no])
839   fi
842 # conditional search for and use libzmq
843 AC_MSG_CHECKING([whether to build ZMQ support])
844 if test "x$use_zmq" = "xyes"; then
845   AC_MSG_RESULT([yes])
846   PKG_CHECK_MODULES([ZMQ],[libzmq],
847     [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
848     [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
849      AC_MSG_WARN([libzmq not found, disabling])
850      use_zmq=no])
851 else
852   AC_MSG_RESULT([no, --disable-zmq used])
853   AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
856 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
858 AC_MSG_CHECKING([whether to build test_bitcoin])
859 if test x$use_tests = xyes; then
860   AC_MSG_RESULT([yes])
861   BUILD_TEST="test"
862 else
863   AC_MSG_RESULT([no])
866 AC_MSG_CHECKING([whether to reduce exports])
867 if test x$use_reduce_exports = xyes; then
868   AC_MSG_RESULT([yes])
869 else
870   AC_MSG_RESULT([no])
873 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
874   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
877 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
878 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
879 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
880 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
881 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
882 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
883 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
884 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
885 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
886 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
887 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
888 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
890 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
891 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
892 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
893 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
894 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
895 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
896 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
897 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
898 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
899 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
900 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
901 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
903 AC_SUBST(RELDFLAGS)
904 AC_SUBST(LIBTOOL_APP_LDFLAGS)
905 AC_SUBST(USE_UPNP)
906 AC_SUBST(USE_QRCODE)
907 AC_SUBST(BOOST_LIBS)
908 AC_SUBST(TESTDEFS)
909 AC_SUBST(LEVELDB_TARGET_FLAGS)
910 AC_SUBST(BUILD_TEST)
911 AC_SUBST(BUILD_QT)
912 AC_SUBST(BUILD_TEST_QT)
913 AC_SUBST(MINIUPNPC_CPPFLAGS)
914 AC_SUBST(MINIUPNPC_LIBS)
915 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
916 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
917 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
919 dnl boost's m4 checks do something really nasty: they export these vars. As a
920 dnl result, they leak into secp256k1's configure and crazy things happen.
921 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
922 CPPFLAGS_TEMP="$CPPFLAGS"
923 unset CPPFLAGS
924 CPPFLAGS="$CPPFLAGS_TEMP"
926 LDFLAGS_TEMP="$LDFLAGS"
927 unset LDFLAGS
928 LDFLAGS="$LDFLAGS_TEMP"
930 LIBS_TEMP="$LIBS"
931 unset LIBS
932 LIBS="$LIBS_TEMP"
934 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
935 unset PKG_CONFIG_PATH
936 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
938 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
939 unset PKG_CONFIG_LIBDIR
940 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
942 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
943 AC_CONFIG_SUBDIRS([src/secp256k1])
945 AC_OUTPUT
947 dnl Taken from https://wiki.debian.org/RpathIssue
948 case $host in
949    *-*-linux-gnu)
950      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
951      sed < libtool > libtool-2 \
952      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
953      mv libtool-2 libtool
954      chmod 755 libtool
955    ;;
956 esac