Merge #10618: Remove confusing MAX_BLOCK_BASE_SIZE.
[bitcoinplatinum.git] / configure.ac
blob6b5d891fa5498f88eefb3a4908e94247021dd3b2
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, 14)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2017)
9 define(_COPYRIGHT_HOLDERS,[The %s developers])
10 define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
11 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin],[https://bitcoincore.org/])
12 AC_CONFIG_SRCDIR([src/validation.cpp])
13 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14 AC_CONFIG_AUX_DIR([build-aux])
15 AC_CONFIG_MACRO_DIR([build-aux/m4])
17 BITCOIN_DAEMON_NAME=bitcoind
18 BITCOIN_GUI_NAME=bitcoin-qt
19 BITCOIN_CLI_NAME=bitcoin-cli
20 BITCOIN_TX_NAME=bitcoin-tx
22 AC_CANONICAL_HOST
24 AH_TOP([#ifndef BITCOIN_CONFIG_H])
25 AH_TOP([#define BITCOIN_CONFIG_H])
26 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
28 dnl faketime breaks configure and is only needed for make. Disable it here.
29 unset FAKETIME
31 dnl Automake init set-up and checks
32 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
34 dnl faketime messes with timestamps and causes configure to be re-run.
35 dnl --disable-maintainer-mode can be used to bypass this.
36 AM_MAINTAINER_MODE([enable])
38 dnl make the compilation flags quiet unless V=1 is used
39 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
41 dnl Compiler checks (here before libtool).
42 if test "x${CXXFLAGS+set}" = "xset"; then
43   CXXFLAGS_overridden=yes
44 else
45   CXXFLAGS_overridden=no
47 AC_PROG_CXX
49 dnl By default, libtool for mingw refuses to link static libs into a dll for
50 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
51 dnl we have those under control, re-enable that functionality.
52 case $host in
53   *mingw*)
54      lt_cv_deplibs_check_method="pass_all"
55   ;;
56 esac
57 dnl Require C++11 compiler (no GNU extensions)
58 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault])
59 dnl Check if -latomic is required for <std::atomic>
60 CHECK_ATOMIC
62 dnl Unless the user specified OBJCXX, force it to be the same as CXX. This ensures
63 dnl that we get the same -std flags for both.
64 m4_ifdef([AC_PROG_OBJCXX],[
65 if test "x${OBJCXX+set}" = "x"; then
66   OBJCXX="${CXX}"
68 AC_PROG_OBJCXX
71 dnl Libtool init checks.
72 LT_INIT([pic-only])
74 dnl Check/return PATH for base programs.
75 AC_PATH_TOOL(AR, ar)
76 AC_PATH_TOOL(RANLIB, ranlib)
77 AC_PATH_TOOL(STRIP, strip)
78 AC_PATH_TOOL(GCOV, gcov)
79 AC_PATH_PROG(LCOV, lcov)
80 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
81 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
82 AC_PATH_PROG(GENHTML, genhtml)
83 AC_PATH_PROG([GIT], [git])
84 AC_PATH_PROG(CCACHE,ccache)
85 AC_PATH_PROG(XGETTEXT,xgettext)
86 AC_PATH_PROG(HEXDUMP,hexdump)
87 AC_PATH_TOOL(READELF, readelf)
88 AC_PATH_TOOL(CPPFILT, c++filt)
89 AC_PATH_TOOL(OBJCOPY, objcopy)
91 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
93 # Enable wallet
94 AC_ARG_ENABLE([wallet],
95   [AS_HELP_STRING([--disable-wallet],
96   [disable wallet (enabled by default)])],
97   [enable_wallet=$enableval],
98   [enable_wallet=yes])
100 AC_ARG_WITH([miniupnpc],
101   [AS_HELP_STRING([--with-miniupnpc],
102   [enable UPNP (default is yes if libminiupnpc is found)])],
103   [use_upnp=$withval],
104   [use_upnp=auto])
106 AC_ARG_ENABLE([upnp-default],
107   [AS_HELP_STRING([--enable-upnp-default],
108   [if UPNP is enabled, turn it on at startup (default is no)])],
109   [use_upnp_default=$enableval],
110   [use_upnp_default=no])
112 AC_ARG_ENABLE(tests,
113     AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
114     [use_tests=$enableval],
115     [use_tests=yes])
117 AC_ARG_ENABLE(gui-tests,
118     AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
119     [use_gui_tests=$enableval],
120     [use_gui_tests=$use_tests])
122 AC_ARG_ENABLE(bench,
123     AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
124     [use_bench=$enableval],
125     [use_bench=yes])
127 AC_ARG_ENABLE([extended-functional-tests],
128     AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests when using lcov (default no)]),
129     [use_extended_functional_tests=$enableval],
130     [use_extended_functional_tests=no])
132 AC_ARG_WITH([qrencode],
133   [AS_HELP_STRING([--with-qrencode],
134   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
135   [use_qr=$withval],
136   [use_qr=auto])
138 AC_ARG_ENABLE([hardening],
139   [AS_HELP_STRING([--disable-hardening],
140   [do not attempt to harden the resulting executables (default is to harden)])],
141   [use_hardening=$enableval],
142   [use_hardening=yes])
144 AC_ARG_ENABLE([reduce-exports],
145   [AS_HELP_STRING([--enable-reduce-exports],
146   [attempt to reduce exported symbols in the resulting executables (default is no)])],
147   [use_reduce_exports=$enableval],
148   [use_reduce_exports=no])
150 AC_ARG_ENABLE([ccache],
151   [AS_HELP_STRING([--disable-ccache],
152   [do not use ccache for building (default is to use if found)])],
153   [use_ccache=$enableval],
154   [use_ccache=auto])
156 AC_ARG_ENABLE([lcov],
157   [AS_HELP_STRING([--enable-lcov],
158   [enable lcov testing (default is no)])],
159   [use_lcov=yes],
160   [use_lcov=no])
161   
162 AC_ARG_ENABLE([lcov-branch-coverage],
163   [AS_HELP_STRING([--enable-lcov-branch-coverage],
164   [enable lcov testing branch coverage (default is no)])],
165   [use_lcov_branch=yes],
166   [use_lcov_branch=no])
168 AC_ARG_ENABLE([glibc-back-compat],
169   [AS_HELP_STRING([--enable-glibc-back-compat],
170   [enable backwards compatibility with glibc])],
171   [use_glibc_compat=$enableval],
172   [use_glibc_compat=no])
174 AC_ARG_WITH([system-univalue],
175   [AS_HELP_STRING([--with-system-univalue],
176   [Build with system UniValue (default is no)])],
177   [system_univalue=$withval],
178   [system_univalue=no]
180 AC_ARG_ENABLE([zmq],
181   [AS_HELP_STRING([--disable-zmq],
182   [disable ZMQ notifications])],
183   [use_zmq=$enableval],
184   [use_zmq=yes])
186 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
188 AC_ARG_ENABLE(man,
189     [AS_HELP_STRING([--disable-man],
190                     [do not install man pages (default is to install)])],,
191     enable_man=yes)
192 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
194 # Enable debug
195 AC_ARG_ENABLE([debug],
196     [AS_HELP_STRING([--enable-debug],
197                     [use debug compiler flags and macros (default is no)])],
198     [enable_debug=$enableval],
199     [enable_debug=no])
201 # Turn warnings into errors
202 AC_ARG_ENABLE([werror],
203     [AS_HELP_STRING([--enable-werror],
204                     [Treat certain compiler warnings as errors (default is no)])],
205     [enable_werror=$enableval],
206     [enable_werror=no])
208 AC_LANG_PUSH([C++])
209 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
211 if test "x$enable_debug" = xyes; then
212     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
213     if test "x$GCC" = xyes; then
214         CFLAGS="$CFLAGS -g3 -O0"
215     fi
217     if test "x$GXX" = xyes; then
218         CXXFLAGS="$CXXFLAGS -g3 -O0"
219     fi
222 ERROR_CXXFLAGS=
223 if test "x$enable_werror" = "xyes"; then
224   if test "x$CXXFLAG_WERROR" = "x"; then
225     AC_MSG_ERROR("enable-werror set but -Werror is not usable")
226   fi
227   AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
230 if test "x$CXXFLAGS_overridden" = "xno"; then
231   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
232   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
233   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
234   AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
235   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
237   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
238   ## unknown options if any other warning is produced. Test the -Wfoo case, and
239   ## set the -Wno-foo case if it works.
240   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
241   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
242   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
243   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
244   AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]])
246   # Check for optional instruction set support. Enabling these does _not_ imply that all code will
247   # be compiled with them, rather that specific objects/libs may use them after checking for runtime
248   # compatibility.
249   AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
253 TEMP_CXXFLAGS="$CXXFLAGS"
254 CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
255 AC_MSG_CHECKING(for assembler crc32 support)
256 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
257     #include <stdint.h>
258     #if defined(_MSC_VER)
259     #include <intrin.h>
260     #elif defined(__GNUC__) && defined(__SSE4_2__)
261     #include <nmmintrin.h>
262     #endif
263   ]],[[
264     uint64_t l = 0;
265     l = _mm_crc32_u8(l, 0);
266     l = _mm_crc32_u32(l, 0);
267     l = _mm_crc32_u64(l, 0);
268     return l;
269   ]])],
270  [ AC_MSG_RESULT(yes); enable_hwcrc32=yes],
271  [ AC_MSG_RESULT(no)]
273 CXXFLAGS="$TEMP_CXXFLAGS"
275 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
277 AC_ARG_WITH([utils],
278   [AS_HELP_STRING([--with-utils],
279   [build bitcoin-cli bitcoin-tx (default=yes)])],
280   [build_bitcoin_utils=$withval],
281   [build_bitcoin_utils=yes])
283 AC_ARG_WITH([libs],
284   [AS_HELP_STRING([--with-libs],
285   [build libraries (default=yes)])],
286   [build_bitcoin_libs=$withval],
287   [build_bitcoin_libs=yes])
289 AC_ARG_WITH([daemon],
290   [AS_HELP_STRING([--with-daemon],
291   [build bitcoind daemon (default=yes)])],
292   [build_bitcoind=$withval],
293   [build_bitcoind=yes])
295 use_pkgconfig=yes
296 case $host in
297   *mingw*)
299      #pkgconfig does more harm than good with MinGW
300      use_pkgconfig=no
302      TARGET_OS=windows
303      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
304      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
305      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
306      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
307      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
308      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
309      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
310      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
311      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
312      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
313      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
314      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
315      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
316      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
317      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
318      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
319      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
320      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
321      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
323      # -static is interpreted by libtool, where it has a different meaning.
324      # In libtool-speak, it's -all-static.
325      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
327      AC_PATH_PROG([MAKENSIS], [makensis], none)
328      if test x$MAKENSIS = xnone; then
329        AC_MSG_WARN("makensis not found. Cannot create installer.")
330      fi
332      AC_PATH_TOOL(WINDRES, windres, none)
333      if test x$WINDRES = xnone; then
334        AC_MSG_ERROR("windres not found")
335      fi
337      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
338      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
339      if test "x$CXXFLAGS_overridden" = "xno"; then
340        CXXFLAGS="$CXXFLAGS -w"
341      fi
342      case $host in
343        i?86-*) WINDOWS_BITS=32 ;;
344        x86_64-*) WINDOWS_BITS=64 ;;
345        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
346      esac
347      AC_SUBST(WINDOWS_BITS)
349      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
350      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
351      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
352      dnl also overridden to prevent their insertion later.
353      dnl This should only affect dll's.
354      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
355      postdeps_CXX=
357      ;;
358   *darwin*)
359      TARGET_OS=darwin
360      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
361      if  test x$cross_compiling != xyes; then
362        BUILD_OS=darwin
363        AC_CHECK_PROG([PORT],port, port)
364        if test x$PORT = xport; then
365          dnl add default macports paths
366          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
367          LIBS="$LIBS -L/opt/local/lib"
368          if test -d /opt/local/include/db48; then
369            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
370            LIBS="$LIBS -L/opt/local/lib/db48"
371          fi
372        fi
374        AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
375        AC_CHECK_PROG([BREW],brew, brew)
376        if test x$BREW = xbrew; then
377          dnl These Homebrew packages may be keg-only, meaning that they won't be found
378          dnl in expected paths because they may conflict with system files. Ask
379          dnl Homebrew where each one is located, then adjust paths accordingly.
380          dnl It's safe to add these paths even if the functionality is disabled by
381          dnl the user (--without-wallet or --without-gui for example).
383          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
384          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
385          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
386          if test x$openssl_prefix != x; then
387            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
388            export PKG_CONFIG_PATH
389          fi
390          if test x$bdb_prefix != x; then
391            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
392            LIBS="$LIBS -L$bdb_prefix/lib"
393          fi
394          if test x$qt5_prefix != x; then
395            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
396            export PKG_CONFIG_PATH
397          fi
398        fi
399      else
400        case $build_os in
401          *darwin*)
402            BUILD_OS=darwin
403            ;;
404          *)
405            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
406            AC_PATH_TOOL([OTOOL], [otool], otool)
407            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
408            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
409            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
410            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
412            dnl libtool will try to strip the static lib, which is a problem for
413            dnl cross-builds because strip attempts to call a hard-coded ld,
414            dnl which may not exist in the path. Stripping the .a is not
415            dnl necessary, so just disable it.
416            old_striplib=
417            ;;
418        esac
419      fi
421      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
422      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
423      OBJCXXFLAGS="$CXXFLAGS"
424      ;;
425    *linux*)
426      TARGET_OS=linux
427      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
428      ;;
429    *freebsd*)
430      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
431      ;;
432    *openbsd*)
433      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
434      ;;
435    *)
436      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
437      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
438      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
439      ;;
440 esac
442 if test x$use_pkgconfig = xyes; then
443   m4_ifndef([PKG_PROG_PKG_CONFIG], [AC_MSG_ERROR(PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh.)])
444   m4_ifdef([PKG_PROG_PKG_CONFIG], [
445   PKG_PROG_PKG_CONFIG
446   if test x"$PKG_CONFIG" = "x"; then
447     AC_MSG_ERROR(pkg-config not found.)
448   fi
449   ])
452 if test x$use_extended_functional_tests != xno; then
453   AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
456 if test x$use_lcov = xyes; then
457   if test x$LCOV = x; then
458     AC_MSG_ERROR("lcov testing requested but lcov not found")
459   fi
460   if test x$GCOV = x; then
461     AC_MSG_ERROR("lcov testing requested but gcov not found")
462   fi
463   if test x$PYTHON = x; then
464     AC_MSG_ERROR("lcov testing requested but python not found")
465   fi
466   if test x$GENHTML = x; then
467     AC_MSG_ERROR("lcov testing requested but genhtml not found")
468   fi
469   LCOV="$LCOV --gcov-tool=$GCOV"
470   AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
471     [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
472   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
473     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
474   AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled])
475   CXXFLAGS="$CXXFLAGS -Og"
478 if test x$use_lcov_branch != xno; then
479   AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1")
482 dnl Check for endianness
483 AC_C_BIGENDIAN
485 dnl Check for pthread compile/link requirements
486 AX_PTHREAD
488 # The following macro will add the necessary defines to bitcoin-config.h, but
489 # they also need to be passed down to any subprojects. Pull the results out of
490 # the cache and add them to CPPFLAGS.
491 AC_SYS_LARGEFILE
492 # detect POSIX or GNU variant of strerror_r
493 AC_FUNC_STRERROR_R
495 if test x$ac_cv_sys_file_offset_bits != x &&
496    test x$ac_cv_sys_file_offset_bits != xno &&
497    test x$ac_cv_sys_file_offset_bits != xunknown; then
498   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
501 if test x$ac_cv_sys_large_files != x &&
502    test x$ac_cv_sys_large_files != xno &&
503    test x$ac_cv_sys_large_files != xunknown; then
504   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
507 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
509 AX_GCC_FUNC_ATTRIBUTE([visibility])
510 AX_GCC_FUNC_ATTRIBUTE([dllexport])
511 AX_GCC_FUNC_ATTRIBUTE([dllimport])
513 if test x$use_glibc_compat != xno; then
515   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
516   #in anyway for back-compat.
517   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
519   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
520   # See which one is present here.
521   AC_MSG_CHECKING(__fdelt_chk type)
522   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
523                     #undef _FORTIFY_SOURCE
524                   #endif
525                   #define _FORTIFY_SOURCE 2
526                   #include <sys/select.h>
527      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
528     [ fdelt_type="long unsigned int"],
529     [ fdelt_type="long int"])
530   AC_MSG_RESULT($fdelt_type)
531   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
532 else
533   AC_SEARCH_LIBS([clock_gettime],[rt])
536 if test x$TARGET_OS != xwindows; then
537   # All windows code is PIC, forcing it on just adds useless compile warnings
538   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
541 if test x$use_hardening != xno; then
542   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
543   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
545   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
546     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
547       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
548     ])
549     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
550   ])
552   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
553   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
554   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
555   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
556   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
558   if test x$TARGET_OS != xwindows; then
559     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
560     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
561   fi
563   case $host in
564     *mingw*)
565        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
566     ;;
567   esac
570 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
571 if test x$TARGET_OS = xdarwin; then
572   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
575 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])
577 AC_CHECK_DECLS([strnlen])
579 # Check for daemon(3), unrelated to --with-daemon (although used by it)
580 AC_CHECK_DECLS([daemon])
582 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
583                 [#if HAVE_ENDIAN_H
584                  #include <endian.h>
585                  #elif HAVE_SYS_ENDIAN_H
586                  #include <sys/endian.h>
587                  #endif])
589 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
590                 [#if HAVE_BYTESWAP_H
591                  #include <byteswap.h>
592                  #endif])
594 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
596 dnl Check for MSG_NOSIGNAL
597 AC_MSG_CHECKING(for MSG_NOSIGNAL)
598 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
599  [[ int f = MSG_NOSIGNAL; ]])],
600  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
601  [ AC_MSG_RESULT(no)]
604 dnl Check for MSG_DONTWAIT
605 AC_MSG_CHECKING(for MSG_DONTWAIT)
606 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
607  [[ int f = MSG_DONTWAIT; ]])],
608  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
609  [ AC_MSG_RESULT(no)]
612 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
613 AC_MSG_CHECKING(for getmemoryinfo)
614 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
615  [[ int f = malloc_info(0, NULL); ]])],
616  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
617  [ AC_MSG_RESULT(no)]
620 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
621 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
622 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
623  [[ mallopt(M_ARENA_MAX, 1); ]])],
624  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
625  [ AC_MSG_RESULT(no)]
628 AC_MSG_CHECKING([for visibility attribute])
629 AC_LINK_IFELSE([AC_LANG_SOURCE([
630   int foo_def( void ) __attribute__((visibility("default")));
631   int main(){}
632   ])],
633   [
634     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
635     AC_MSG_RESULT(yes)
636   ],
637   [
638     AC_MSG_RESULT(no)
639     if test x$use_reduce_exports = xyes; then
640       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
641     fi
642   ]
645 # Check for different ways of gathering OS randomness
646 AC_MSG_CHECKING(for Linux getrandom syscall)
647 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
648   #include <sys/syscall.h>
649   #include <linux/random.h>]],
650  [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
651  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
652  [ AC_MSG_RESULT(no)]
655 AC_MSG_CHECKING(for getentropy)
656 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
657  [[ getentropy(nullptr, 32) ]])],
658  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
659  [ AC_MSG_RESULT(no)]
662 AC_MSG_CHECKING(for sysctl KERN_ARND)
663 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
664   #include <sys/sysctl.h>]],
665  [[ static const int name[2] = {CTL_KERN, KERN_ARND};
666     sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
667  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
668  [ AC_MSG_RESULT(no)]
671 # Check for reduced exports
672 if test x$use_reduce_exports = xyes; then
673   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
674   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
677 LEVELDB_CPPFLAGS=
678 LIBLEVELDB=
679 LIBMEMENV=
680 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
681 AC_SUBST(LEVELDB_CPPFLAGS)
682 AC_SUBST(LIBLEVELDB)
683 AC_SUBST(LIBMEMENV)
685 if test x$enable_wallet != xno; then
686     dnl Check for libdb_cxx only if wallet enabled
687     BITCOIN_FIND_BDB48
690 dnl Check for libminiupnpc (optional)
691 if test x$use_upnp != xno; then
692   AC_CHECK_HEADERS(
693     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
694     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
695     [have_miniupnpc=no]
696   )
699 BITCOIN_QT_INIT
701 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
702 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
704 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
705     use_boost=no
706 else
707     use_boost=yes
710 if test x$use_boost = xyes; then
712 dnl Minimum required Boost version
713 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
715 dnl Check for boost libs
716 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
717 AX_BOOST_SYSTEM
718 AX_BOOST_FILESYSTEM
719 AX_BOOST_PROGRAM_OPTIONS
720 AX_BOOST_THREAD
721 AX_BOOST_CHRONO
723 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
724 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
725 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
726 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
728 if test x$use_reduce_exports = xyes; then
729   AC_MSG_CHECKING([for working boost reduced exports])
730   TEMP_CPPFLAGS="$CPPFLAGS"
731   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
732   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
733       @%:@include <boost/version.hpp>
734     ]], [[
735       #if BOOST_VERSION >= 104900
736       // Everything is okay
737       #else
738       #  error Boost version is too old
739       #endif
740     ]])],[
741       AC_MSG_RESULT(yes)
742     ],[
743     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
744   ])
745   CPPFLAGS="$TEMP_CPPFLAGS"
749 if test x$use_reduce_exports = xyes; then
750     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
751     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
754 if test x$use_tests = xyes; then
756   if test x$HEXDUMP = x; then
757     AC_MSG_ERROR(hexdump is required for tests)
758   fi
761   if test x$use_boost = xyes; then
763   AX_BOOST_UNIT_TEST_FRAMEWORK
765   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
766   AC_MSG_CHECKING([for dynamic linked boost test])
767   TEMP_LIBS="$LIBS"
768   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
769   TEMP_CPPFLAGS="$CPPFLAGS"
770   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
771   AC_LINK_IFELSE([AC_LANG_SOURCE([
772        #define BOOST_TEST_DYN_LINK
773        #define BOOST_TEST_MAIN
774         #include <boost/test/unit_test.hpp>
776        ])],
777     [AC_MSG_RESULT(yes)]
778     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
779     [AC_MSG_RESULT(no)])
780   LIBS="$TEMP_LIBS"
781   CPPFLAGS="$TEMP_CPPFLAGS"
783   fi
786 if test x$use_boost = xyes; then
788 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
791 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
792 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
793 dnl the abi. This was fixed in 1.57.
795 dnl When building against that installed version using c++11, the headers pick up
796 dnl on the native c++11 scoped enum support and enable it, however it will fail to
797 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
798 dnl fail.
799 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
801 TEMP_LIBS="$LIBS"
802 LIBS="$BOOST_LIBS $LIBS"
803 TEMP_CPPFLAGS="$CPPFLAGS"
804 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
805 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
806 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
807   #include "boost/config.hpp"
808   #include "boost/version.hpp"
809   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
810   #define BOOST_NO_SCOPED_ENUMS
811   #define BOOST_NO_CXX11_SCOPED_ENUMS
812   #define CHECK
813   #endif
814   #include "boost/filesystem.hpp"
815   ]],[[
816   #if defined(CHECK)
817     boost::filesystem::copy_file("foo", "bar");
818   #else
819     choke;
820   #endif
821   ]])],
822   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
823 LIBS="$TEMP_LIBS"
824 CPPFLAGS="$TEMP_CPPFLAGS"
826 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
827 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
828 dnl a working version is available, else fall back to sleep. sleep was removed
829 dnl after 1.56.
830 dnl If neither is available, abort.
831 TEMP_LIBS="$LIBS"
832 LIBS="$BOOST_LIBS $LIBS"
833 TEMP_CPPFLAGS="$CPPFLAGS"
834 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
835 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
836   #include <boost/thread/thread.hpp>
837   #include <boost/version.hpp>
838   ]],[[
839   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
840       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
841   #else
842    choke me
843   #endif
844   ]])],
845   [boost_sleep=yes;
846      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
847   [boost_sleep=no])
848 LIBS="$TEMP_LIBS"
849 CPPFLAGS="$TEMP_CPPFLAGS"
851 if test x$boost_sleep != xyes; then
852 TEMP_LIBS="$LIBS"
853 LIBS="$BOOST_LIBS $LIBS"
854 TEMP_CPPFLAGS="$CPPFLAGS"
855 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
856 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
857   #include <boost/version.hpp>
858   #include <boost/thread.hpp>
859   #include <boost/date_time/posix_time/posix_time_types.hpp>
860   ]],[[
861   #if BOOST_VERSION <= 105600
862       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
863   #else
864    choke me
865   #endif
866   ]])],
867   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
868   [boost_sleep=no])
869 LIBS="$TEMP_LIBS"
870 CPPFLAGS="$TEMP_CPPFLAGS"
873 if test x$boost_sleep != xyes; then
874   AC_MSG_ERROR(No working boost sleep implementation found.)
879 if test x$use_pkgconfig = xyes; then
880   : dnl
881   m4_ifdef(
882     [PKG_CHECK_MODULES],
883     [
884       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
885       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
886       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
887       if test x$use_qr != xno; then
888         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
889       fi
890       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
891         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
892         if test x$TARGET_OS != xwindows; then
893           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
894         fi
895       fi
897       if test "x$use_zmq" = "xyes"; then
898         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
899           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
900           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
901            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
902            use_zmq=no])
903       else
904           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
905       fi
906     ]
907   )
908 else
909   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
910   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
912   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
913   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
915   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
916     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
917     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
918     if test x$TARGET_OS != xwindows; then
919       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
920     fi
921   fi
923   if test "x$use_zmq" = "xyes"; then
924      AC_CHECK_HEADER([zmq.h],
925        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
926        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
927         use_zmq=no
928         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
929      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
930        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
931         use_zmq=no
932         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
933   else
934     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
935   fi
937   if test "x$use_zmq" = "xyes"; then
938     dnl Assume libzmq was built for static linking
939     case $host in
940       *mingw*)
941         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
942       ;;
943     esac
944   fi
946   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
947   if test x$use_qr != xno; then
948     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
949     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
950   fi
953 save_CXXFLAGS="${CXXFLAGS}"
954 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
955 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
956 #include <openssl/x509_vfy.h>
958 CXXFLAGS="${save_CXXFLAGS}"
960 dnl univalue check
962 need_bundled_univalue=yes
964 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
965   need_bundled_univalue=no
966 else
968 if test x$system_univalue != xno ; then
969   found_univalue=no
970   if test x$use_pkgconfig = xyes; then
971     : #NOP
972     m4_ifdef(
973       [PKG_CHECK_MODULES],
974       [
975         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
976       ]
977     )
978   else
979     AC_CHECK_HEADER([univalue.h],[
980       AC_CHECK_LIB([univalue],  [main],[
981         UNIVALUE_LIBS=-lunivalue
982         found_univalue=yes
983       ],[true])
984     ],[true])
985   fi
987   if test x$found_univalue = xyes ; then
988     system_univalue=yes
989     need_bundled_univalue=no
990   elif test x$system_univalue = xyes ; then
991     AC_MSG_ERROR([univalue not found])
992   else
993     system_univalue=no
994   fi
997 if test x$need_bundled_univalue = xyes ; then
998   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
999   UNIVALUE_LIBS='univalue/libunivalue.la'
1004 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
1005 AC_SUBST(UNIVALUE_CFLAGS)
1006 AC_SUBST(UNIVALUE_LIBS)
1008 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
1010 AC_MSG_CHECKING([whether to build bitcoind])
1011 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
1012 AC_MSG_RESULT($build_bitcoind)
1014 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
1015 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
1016 AC_MSG_RESULT($build_bitcoin_utils)
1018 AC_MSG_CHECKING([whether to build libraries])
1019 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
1020 if test x$build_bitcoin_libs = xyes; then
1021   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
1022   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
1024 AC_MSG_RESULT($build_bitcoin_libs)
1026 AC_LANG_POP
1028 if test "x$use_ccache" != "xno"; then
1029   AC_MSG_CHECKING(if ccache should be used)
1030   if test x$CCACHE = x; then
1031     if test "x$use_ccache" = "xyes"; then
1032       AC_MSG_ERROR([ccache not found.]);
1033     else
1034       use_ccache=no
1035     fi
1036   else
1037     use_ccache=yes
1038     CC="$ac_cv_path_CCACHE $CC"
1039     CXX="$ac_cv_path_CCACHE $CXX"
1040   fi
1041   AC_MSG_RESULT($use_ccache)
1043 if test "x$use_ccache" = "xyes"; then
1044     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1047 dnl enable wallet
1048 AC_MSG_CHECKING([if wallet should be enabled])
1049 if test x$enable_wallet != xno; then
1050   AC_MSG_RESULT(yes)
1051   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1053 else
1054   AC_MSG_RESULT(no)
1057 dnl enable upnp support
1058 AC_MSG_CHECKING([whether to build with support for UPnP])
1059 if test x$have_miniupnpc = xno; then
1060   if test x$use_upnp = xyes; then
1061      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1062   fi
1063   AC_MSG_RESULT(no)
1064 else
1065   if test x$use_upnp != xno; then
1066     AC_MSG_RESULT(yes)
1067     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1068     use_upnp=yes
1069     upnp_setting=0
1070     if test x$use_upnp_default != xno; then
1071       use_upnp_default=yes
1072       upnp_setting=1
1073     fi
1074     AC_MSG_RESULT($use_upnp_default)
1075     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1076     if test x$TARGET_OS = xwindows; then
1077       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1078     fi
1079   else
1080     AC_MSG_RESULT(no)
1081   fi
1084 dnl these are only used when qt is enabled
1085 BUILD_TEST_QT=""
1086 if test x$bitcoin_enable_qt != xno; then
1087   dnl enable dbus support
1088   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1089   if test x$bitcoin_enable_qt_dbus != xno; then
1090     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1091   fi
1092   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1094   dnl enable qr support
1095   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1096   if test x$have_qrencode = xno; then
1097     if test x$use_qr = xyes; then
1098      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1099     fi
1100     AC_MSG_RESULT(no)
1101   else
1102     if test x$use_qr != xno; then
1103       AC_MSG_RESULT(yes)
1104       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1105       use_qr=yes
1106     else
1107       AC_MSG_RESULT(no)
1108     fi
1109   fi
1111   if test x$XGETTEXT = x; then
1112     AC_MSG_WARN("xgettext is required to update qt translations")
1113   fi
1115   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1116   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1117     AC_MSG_RESULT([yes])
1118     BUILD_TEST_QT="yes"
1119   else
1120     AC_MSG_RESULT([no])
1121   fi
1124 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1126 AC_MSG_CHECKING([whether to build test_bitcoin])
1127 if test x$use_tests = xyes; then
1128   AC_MSG_RESULT([yes])
1129   BUILD_TEST="yes"
1130 else
1131   AC_MSG_RESULT([no])
1132   BUILD_TEST=""
1135 AC_MSG_CHECKING([whether to reduce exports])
1136 if test x$use_reduce_exports = xyes; then
1137   AC_MSG_RESULT([yes])
1138 else
1139   AC_MSG_RESULT([no])
1142 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1143   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1146 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1147 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1148 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1149 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1150 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1151 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1152 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1153 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1154 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1155 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1156 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1157 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1158 AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
1160 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1161 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1162 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1163 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1164 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1165 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1166 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1167 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1168 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1169 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1170 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1171 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1172 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1173 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1174 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1175 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1176 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1177 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1178 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1179 AC_SUBST(BITCOIN_DAEMON_NAME)
1180 AC_SUBST(BITCOIN_GUI_NAME)
1181 AC_SUBST(BITCOIN_CLI_NAME)
1182 AC_SUBST(BITCOIN_TX_NAME)
1184 AC_SUBST(RELDFLAGS)
1185 AC_SUBST(ERROR_CXXFLAGS)
1186 AC_SUBST(HARDENED_CXXFLAGS)
1187 AC_SUBST(HARDENED_CPPFLAGS)
1188 AC_SUBST(HARDENED_LDFLAGS)
1189 AC_SUBST(PIC_FLAGS)
1190 AC_SUBST(PIE_FLAGS)
1191 AC_SUBST(SSE42_CXXFLAGS)
1192 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1193 AC_SUBST(USE_UPNP)
1194 AC_SUBST(USE_QRCODE)
1195 AC_SUBST(BOOST_LIBS)
1196 AC_SUBST(TESTDEFS)
1197 AC_SUBST(LEVELDB_TARGET_FLAGS)
1198 AC_SUBST(MINIUPNPC_CPPFLAGS)
1199 AC_SUBST(MINIUPNPC_LIBS)
1200 AC_SUBST(CRYPTO_LIBS)
1201 AC_SUBST(SSL_LIBS)
1202 AC_SUBST(EVENT_LIBS)
1203 AC_SUBST(EVENT_PTHREADS_LIBS)
1204 AC_SUBST(ZMQ_LIBS)
1205 AC_SUBST(PROTOBUF_LIBS)
1206 AC_SUBST(QR_LIBS)
1207 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
1208 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1209 AC_CONFIG_FILES([doc/Doxyfile])
1210 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1211 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1213 dnl boost's m4 checks do something really nasty: they export these vars. As a
1214 dnl result, they leak into secp256k1's configure and crazy things happen.
1215 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1216 CPPFLAGS_TEMP="$CPPFLAGS"
1217 unset CPPFLAGS
1218 CPPFLAGS="$CPPFLAGS_TEMP"
1220 LDFLAGS_TEMP="$LDFLAGS"
1221 unset LDFLAGS
1222 LDFLAGS="$LDFLAGS_TEMP"
1224 LIBS_TEMP="$LIBS"
1225 unset LIBS
1226 LIBS="$LIBS_TEMP"
1228 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1229 unset PKG_CONFIG_PATH
1230 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1232 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1233 unset PKG_CONFIG_LIBDIR
1234 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1236 if test x$need_bundled_univalue = xyes; then
1237   AC_CONFIG_SUBDIRS([src/univalue])
1240 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1241 AC_CONFIG_SUBDIRS([src/secp256k1])
1243 AC_OUTPUT
1245 dnl Taken from https://wiki.debian.org/RpathIssue
1246 case $host in
1247    *-*-linux-gnu)
1248      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1249      sed < libtool > libtool-2 \
1250      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1251      mv libtool-2 libtool
1252      chmod 755 libtool
1253    ;;
1254 esac
1256 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1257 case ${OS} in
1258    *Windows*)
1259      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  test/config.ini > test/config-2.ini
1260      mv test/config-2.ini test/config.ini
1261    ;;
1262 esac
1264 echo 
1265 echo "Options used to compile and link:"
1266 echo "  with wallet   = $enable_wallet"
1267 echo "  with gui / qt = $bitcoin_enable_qt"
1268 if test x$bitcoin_enable_qt != xno; then
1269     echo "    qt version  = $bitcoin_qt_got_major_vers"
1270     echo "    with qr     = $use_qr"
1272 echo "  with zmq      = $use_zmq"
1273 echo "  with test     = $use_tests"
1274 echo "  with bench    = $use_bench"
1275 echo "  with upnp     = $use_upnp"
1276 echo "  debug enabled = $enable_debug"
1277 echo "  werror        = $enable_werror"
1278 echo 
1279 echo "  target os     = $TARGET_OS"
1280 echo "  build os      = $BUILD_OS"
1281 echo
1282 echo "  CC            = $CC"
1283 echo "  CFLAGS        = $CFLAGS"
1284 echo "  CPPFLAGS      = $CPPFLAGS"
1285 echo "  CXX           = $CXX"
1286 echo "  CXXFLAGS      = $CXXFLAGS"
1287 echo "  LDFLAGS       = $LDFLAGS"
1288 echo