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