Use compile-time constants instead of unnamed enumerations (remove "enum hack")
[bitcoinplatinum.git] / configure.ac
blobaea5d7160c77b3385da0f41f4723e2b957829b47
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_ENABLE([experimental-asm],
181   [AS_HELP_STRING([--enable-experimental-asm],
182   [Enable experimental assembly routines (default is no)])],
183   [experimental_asm=$enableval],
184   [experimental_asm=no])
186 if test "x$experimental_asm" = xyes; then
187   AC_DEFINE(EXPERIMENTAL_ASM, 1, [Define this symbol to build in experimental assembly routines])
190 AC_ARG_WITH([system-univalue],
191   [AS_HELP_STRING([--with-system-univalue],
192   [Build with system UniValue (default is no)])],
193   [system_univalue=$withval],
194   [system_univalue=no]
196 AC_ARG_ENABLE([zmq],
197   [AS_HELP_STRING([--disable-zmq],
198   [disable ZMQ notifications])],
199   [use_zmq=$enableval],
200   [use_zmq=yes])
202 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
204 AC_ARG_ENABLE(man,
205     [AS_HELP_STRING([--disable-man],
206                     [do not install man pages (default is to install)])],,
207     enable_man=yes)
208 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
210 # Enable debug
211 AC_ARG_ENABLE([debug],
212     [AS_HELP_STRING([--enable-debug],
213                     [use debug compiler flags and macros (default is no)])],
214     [enable_debug=$enableval],
215     [enable_debug=no])
217 # Turn warnings into errors
218 AC_ARG_ENABLE([werror],
219     [AS_HELP_STRING([--enable-werror],
220                     [Treat certain compiler warnings as errors (default is no)])],
221     [enable_werror=$enableval],
222     [enable_werror=no])
224 AC_LANG_PUSH([C++])
225 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
227 if test "x$enable_debug" = xyes; then
228     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
229     if test "x$GCC" = xyes; then
230         CFLAGS="$CFLAGS -g3 -O0"
231     fi
233     if test "x$GXX" = xyes; then
234         CXXFLAGS="$CXXFLAGS -g3 -O0"
235     fi
238 ERROR_CXXFLAGS=
239 if test "x$enable_werror" = "xyes"; then
240   if test "x$CXXFLAG_WERROR" = "x"; then
241     AC_MSG_ERROR("enable-werror set but -Werror is not usable")
242   fi
243   AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
246 if test "x$CXXFLAGS_overridden" = "xno"; then
247   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
248   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
249   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
250   AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
251   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
253   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
254   ## unknown options if any other warning is produced. Test the -Wfoo case, and
255   ## set the -Wno-foo case if it works.
256   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
257   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
258   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
259   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
260   AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]])
262   # Check for optional instruction set support. Enabling these does _not_ imply that all code will
263   # be compiled with them, rather that specific objects/libs may use them after checking for runtime
264   # compatibility.
265   AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
269 TEMP_CXXFLAGS="$CXXFLAGS"
270 CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
271 AC_MSG_CHECKING(for assembler crc32 support)
272 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
273     #include <stdint.h>
274     #if defined(_MSC_VER)
275     #include <intrin.h>
276     #elif defined(__GNUC__) && defined(__SSE4_2__)
277     #include <nmmintrin.h>
278     #endif
279   ]],[[
280     uint64_t l = 0;
281     l = _mm_crc32_u8(l, 0);
282     l = _mm_crc32_u32(l, 0);
283     l = _mm_crc32_u64(l, 0);
284     return l;
285   ]])],
286  [ AC_MSG_RESULT(yes); enable_hwcrc32=yes],
287  [ AC_MSG_RESULT(no)]
289 CXXFLAGS="$TEMP_CXXFLAGS"
291 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
293 AC_ARG_WITH([utils],
294   [AS_HELP_STRING([--with-utils],
295   [build bitcoin-cli bitcoin-tx (default=yes)])],
296   [build_bitcoin_utils=$withval],
297   [build_bitcoin_utils=yes])
299 AC_ARG_WITH([libs],
300   [AS_HELP_STRING([--with-libs],
301   [build libraries (default=yes)])],
302   [build_bitcoin_libs=$withval],
303   [build_bitcoin_libs=yes])
305 AC_ARG_WITH([daemon],
306   [AS_HELP_STRING([--with-daemon],
307   [build bitcoind daemon (default=yes)])],
308   [build_bitcoind=$withval],
309   [build_bitcoind=yes])
311 use_pkgconfig=yes
312 case $host in
313   *mingw*)
315      #pkgconfig does more harm than good with MinGW
316      use_pkgconfig=no
318      TARGET_OS=windows
319      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
320      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
321      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
322      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
323      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
324      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
325      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
326      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
327      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
328      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
329      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
330      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
331      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
332      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
333      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
334      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
335      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
336      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
337      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
339      # -static is interpreted by libtool, where it has a different meaning.
340      # In libtool-speak, it's -all-static.
341      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
343      AC_PATH_PROG([MAKENSIS], [makensis], none)
344      if test x$MAKENSIS = xnone; then
345        AC_MSG_WARN("makensis not found. Cannot create installer.")
346      fi
348      AC_PATH_TOOL(WINDRES, windres, none)
349      if test x$WINDRES = xnone; then
350        AC_MSG_ERROR("windres not found")
351      fi
353      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
354      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
355      if test "x$CXXFLAGS_overridden" = "xno"; then
356        CXXFLAGS="$CXXFLAGS -w"
357      fi
358      case $host in
359        i?86-*) WINDOWS_BITS=32 ;;
360        x86_64-*) WINDOWS_BITS=64 ;;
361        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
362      esac
363      AC_SUBST(WINDOWS_BITS)
365      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
366      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
367      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
368      dnl also overridden to prevent their insertion later.
369      dnl This should only affect dll's.
370      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
371      postdeps_CXX=
373      ;;
374   *darwin*)
375      TARGET_OS=darwin
376      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
377      if  test x$cross_compiling != xyes; then
378        BUILD_OS=darwin
379        AC_CHECK_PROG([PORT],port, port)
380        if test x$PORT = xport; then
381          dnl add default macports paths
382          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
383          LIBS="$LIBS -L/opt/local/lib"
384          if test -d /opt/local/include/db48; then
385            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
386            LIBS="$LIBS -L/opt/local/lib/db48"
387          fi
388        fi
390        AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
391        AC_CHECK_PROG([BREW],brew, brew)
392        if test x$BREW = xbrew; then
393          dnl These Homebrew packages may be keg-only, meaning that they won't be found
394          dnl in expected paths because they may conflict with system files. Ask
395          dnl Homebrew where each one is located, then adjust paths accordingly.
396          dnl It's safe to add these paths even if the functionality is disabled by
397          dnl the user (--without-wallet or --without-gui for example).
399          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
400          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
401          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
402          if test x$openssl_prefix != x; then
403            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
404            export PKG_CONFIG_PATH
405          fi
406          if test x$bdb_prefix != x; then
407            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
408            LIBS="$LIBS -L$bdb_prefix/lib"
409          fi
410          if test x$qt5_prefix != x; then
411            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
412            export PKG_CONFIG_PATH
413          fi
414        fi
415      else
416        case $build_os in
417          *darwin*)
418            BUILD_OS=darwin
419            ;;
420          *)
421            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
422            AC_PATH_TOOL([OTOOL], [otool], otool)
423            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
424            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
425            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
426            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
428            dnl libtool will try to strip the static lib, which is a problem for
429            dnl cross-builds because strip attempts to call a hard-coded ld,
430            dnl which may not exist in the path. Stripping the .a is not
431            dnl necessary, so just disable it.
432            old_striplib=
433            ;;
434        esac
435      fi
437      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
438      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
439      OBJCXXFLAGS="$CXXFLAGS"
440      ;;
441    *linux*)
442      TARGET_OS=linux
443      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
444      ;;
445    *freebsd*)
446      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
447      ;;
448    *openbsd*)
449      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
450      ;;
451    *)
452      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
453      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
454      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
455      ;;
456 esac
458 if test x$use_pkgconfig = xyes; then
459   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.)])
460   m4_ifdef([PKG_PROG_PKG_CONFIG], [
461   PKG_PROG_PKG_CONFIG
462   if test x"$PKG_CONFIG" = "x"; then
463     AC_MSG_ERROR(pkg-config not found.)
464   fi
465   ])
468 if test x$use_extended_functional_tests != xno; then
469   AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
472 if test x$use_lcov = xyes; then
473   if test x$LCOV = x; then
474     AC_MSG_ERROR("lcov testing requested but lcov not found")
475   fi
476   if test x$GCOV = x; then
477     AC_MSG_ERROR("lcov testing requested but gcov not found")
478   fi
479   if test x$PYTHON = x; then
480     AC_MSG_ERROR("lcov testing requested but python not found")
481   fi
482   if test x$GENHTML = x; then
483     AC_MSG_ERROR("lcov testing requested but genhtml not found")
484   fi
485   LCOV="$LCOV --gcov-tool=$GCOV"
486   AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
487     [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
488   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
489     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
490   AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled])
491   CXXFLAGS="$CXXFLAGS -Og"
494 if test x$use_lcov_branch != xno; then
495   AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1")
498 dnl Check for endianness
499 AC_C_BIGENDIAN
501 dnl Check for pthread compile/link requirements
502 AX_PTHREAD
504 # The following macro will add the necessary defines to bitcoin-config.h, but
505 # they also need to be passed down to any subprojects. Pull the results out of
506 # the cache and add them to CPPFLAGS.
507 AC_SYS_LARGEFILE
508 # detect POSIX or GNU variant of strerror_r
509 AC_FUNC_STRERROR_R
511 if test x$ac_cv_sys_file_offset_bits != x &&
512    test x$ac_cv_sys_file_offset_bits != xno &&
513    test x$ac_cv_sys_file_offset_bits != xunknown; then
514   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
517 if test x$ac_cv_sys_large_files != x &&
518    test x$ac_cv_sys_large_files != xno &&
519    test x$ac_cv_sys_large_files != xunknown; then
520   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
523 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
525 AX_GCC_FUNC_ATTRIBUTE([visibility])
526 AX_GCC_FUNC_ATTRIBUTE([dllexport])
527 AX_GCC_FUNC_ATTRIBUTE([dllimport])
529 if test x$use_glibc_compat != xno; then
531   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
532   #in anyway for back-compat.
533   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
535   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
536   # See which one is present here.
537   AC_MSG_CHECKING(__fdelt_chk type)
538   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
539                     #undef _FORTIFY_SOURCE
540                   #endif
541                   #define _FORTIFY_SOURCE 2
542                   #include <sys/select.h>
543      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
544     [ fdelt_type="long unsigned int"],
545     [ fdelt_type="long int"])
546   AC_MSG_RESULT($fdelt_type)
547   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
548 else
549   AC_SEARCH_LIBS([clock_gettime],[rt])
552 if test x$TARGET_OS != xwindows; then
553   # All windows code is PIC, forcing it on just adds useless compile warnings
554   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
557 if test x$use_hardening != xno; then
558   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
559   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
561   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
562     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
563       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
564     ])
565     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
566   ])
568   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
569   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
570   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
571   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
572   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
574   if test x$TARGET_OS != xwindows; then
575     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
576     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
577   fi
579   case $host in
580     *mingw*)
581        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
582     ;;
583   esac
586 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
587 if test x$TARGET_OS = xdarwin; then
588   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
591 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])
593 AC_CHECK_DECLS([strnlen])
595 # Check for daemon(3), unrelated to --with-daemon (although used by it)
596 AC_CHECK_DECLS([daemon])
598 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
599                 [#if HAVE_ENDIAN_H
600                  #include <endian.h>
601                  #elif HAVE_SYS_ENDIAN_H
602                  #include <sys/endian.h>
603                  #endif])
605 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
606                 [#if HAVE_BYTESWAP_H
607                  #include <byteswap.h>
608                  #endif])
610 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
612 dnl Check for MSG_NOSIGNAL
613 AC_MSG_CHECKING(for MSG_NOSIGNAL)
614 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
615  [[ int f = MSG_NOSIGNAL; ]])],
616  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
617  [ AC_MSG_RESULT(no)]
620 dnl Check for MSG_DONTWAIT
621 AC_MSG_CHECKING(for MSG_DONTWAIT)
622 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
623  [[ int f = MSG_DONTWAIT; ]])],
624  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
625  [ AC_MSG_RESULT(no)]
628 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
629 AC_MSG_CHECKING(for getmemoryinfo)
630 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
631  [[ int f = malloc_info(0, NULL); ]])],
632  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
633  [ AC_MSG_RESULT(no)]
636 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
637 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
638 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
639  [[ mallopt(M_ARENA_MAX, 1); ]])],
640  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
641  [ AC_MSG_RESULT(no)]
644 AC_MSG_CHECKING([for visibility attribute])
645 AC_LINK_IFELSE([AC_LANG_SOURCE([
646   int foo_def( void ) __attribute__((visibility("default")));
647   int main(){}
648   ])],
649   [
650     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
651     AC_MSG_RESULT(yes)
652   ],
653   [
654     AC_MSG_RESULT(no)
655     if test x$use_reduce_exports = xyes; then
656       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
657     fi
658   ]
661 # Check for different ways of gathering OS randomness
662 AC_MSG_CHECKING(for Linux getrandom syscall)
663 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
664   #include <sys/syscall.h>
665   #include <linux/random.h>]],
666  [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
667  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
668  [ AC_MSG_RESULT(no)]
671 AC_MSG_CHECKING(for getentropy)
672 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
673  [[ getentropy(nullptr, 32) ]])],
674  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
675  [ AC_MSG_RESULT(no)]
678 AC_MSG_CHECKING(for sysctl KERN_ARND)
679 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
680   #include <sys/sysctl.h>]],
681  [[ static const int name[2] = {CTL_KERN, KERN_ARND};
682     sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
683  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
684  [ AC_MSG_RESULT(no)]
687 # Check for reduced exports
688 if test x$use_reduce_exports = xyes; then
689   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
690   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
693 LEVELDB_CPPFLAGS=
694 LIBLEVELDB=
695 LIBMEMENV=
696 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
697 AC_SUBST(LEVELDB_CPPFLAGS)
698 AC_SUBST(LIBLEVELDB)
699 AC_SUBST(LIBMEMENV)
701 if test x$enable_wallet != xno; then
702     dnl Check for libdb_cxx only if wallet enabled
703     BITCOIN_FIND_BDB48
706 dnl Check for libminiupnpc (optional)
707 if test x$use_upnp != xno; then
708   AC_CHECK_HEADERS(
709     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
710     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
711     [have_miniupnpc=no]
712   )
715 BITCOIN_QT_INIT
717 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
718 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
720 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
721     use_boost=no
722 else
723     use_boost=yes
726 if test x$use_boost = xyes; then
728 dnl Minimum required Boost version
729 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
731 dnl Check for boost libs
732 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
733 AX_BOOST_SYSTEM
734 AX_BOOST_FILESYSTEM
735 AX_BOOST_PROGRAM_OPTIONS
736 AX_BOOST_THREAD
737 AX_BOOST_CHRONO
739 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
740 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
741 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
742 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
744 if test x$use_reduce_exports = xyes; then
745   AC_MSG_CHECKING([for working boost reduced exports])
746   TEMP_CPPFLAGS="$CPPFLAGS"
747   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
748   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
749       @%:@include <boost/version.hpp>
750     ]], [[
751       #if BOOST_VERSION >= 104900
752       // Everything is okay
753       #else
754       #  error Boost version is too old
755       #endif
756     ]])],[
757       AC_MSG_RESULT(yes)
758     ],[
759     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
760   ])
761   CPPFLAGS="$TEMP_CPPFLAGS"
765 if test x$use_reduce_exports = xyes; then
766     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
767     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
770 if test x$use_tests = xyes; then
772   if test x$HEXDUMP = x; then
773     AC_MSG_ERROR(hexdump is required for tests)
774   fi
777   if test x$use_boost = xyes; then
779   AX_BOOST_UNIT_TEST_FRAMEWORK
781   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
782   AC_MSG_CHECKING([for dynamic linked boost test])
783   TEMP_LIBS="$LIBS"
784   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
785   TEMP_CPPFLAGS="$CPPFLAGS"
786   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
787   AC_LINK_IFELSE([AC_LANG_SOURCE([
788        #define BOOST_TEST_DYN_LINK
789        #define BOOST_TEST_MAIN
790         #include <boost/test/unit_test.hpp>
792        ])],
793     [AC_MSG_RESULT(yes)]
794     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
795     [AC_MSG_RESULT(no)])
796   LIBS="$TEMP_LIBS"
797   CPPFLAGS="$TEMP_CPPFLAGS"
799   fi
802 if test x$use_boost = xyes; then
804 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
807 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
808 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
809 dnl the abi. This was fixed in 1.57.
811 dnl When building against that installed version using c++11, the headers pick up
812 dnl on the native c++11 scoped enum support and enable it, however it will fail to
813 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
814 dnl fail.
815 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
817 TEMP_LIBS="$LIBS"
818 LIBS="$BOOST_LIBS $LIBS"
819 TEMP_CPPFLAGS="$CPPFLAGS"
820 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
821 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
822 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
823   #include "boost/config.hpp"
824   #include "boost/version.hpp"
825   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
826   #define BOOST_NO_SCOPED_ENUMS
827   #define BOOST_NO_CXX11_SCOPED_ENUMS
828   #define CHECK
829   #endif
830   #include "boost/filesystem.hpp"
831   ]],[[
832   #if defined(CHECK)
833     boost::filesystem::copy_file("foo", "bar");
834   #else
835     choke;
836   #endif
837   ]])],
838   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
839 LIBS="$TEMP_LIBS"
840 CPPFLAGS="$TEMP_CPPFLAGS"
842 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
843 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
844 dnl a working version is available, else fall back to sleep. sleep was removed
845 dnl after 1.56.
846 dnl If neither is available, abort.
847 TEMP_LIBS="$LIBS"
848 LIBS="$BOOST_LIBS $LIBS"
849 TEMP_CPPFLAGS="$CPPFLAGS"
850 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
851 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
852   #include <boost/thread/thread.hpp>
853   #include <boost/version.hpp>
854   ]],[[
855   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
856       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
857   #else
858    choke me
859   #endif
860   ]])],
861   [boost_sleep=yes;
862      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
863   [boost_sleep=no])
864 LIBS="$TEMP_LIBS"
865 CPPFLAGS="$TEMP_CPPFLAGS"
867 if test x$boost_sleep != xyes; then
868 TEMP_LIBS="$LIBS"
869 LIBS="$BOOST_LIBS $LIBS"
870 TEMP_CPPFLAGS="$CPPFLAGS"
871 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
872 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
873   #include <boost/version.hpp>
874   #include <boost/thread.hpp>
875   #include <boost/date_time/posix_time/posix_time_types.hpp>
876   ]],[[
877   #if BOOST_VERSION <= 105600
878       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
879   #else
880    choke me
881   #endif
882   ]])],
883   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
884   [boost_sleep=no])
885 LIBS="$TEMP_LIBS"
886 CPPFLAGS="$TEMP_CPPFLAGS"
889 if test x$boost_sleep != xyes; then
890   AC_MSG_ERROR(No working boost sleep implementation found.)
895 if test x$use_pkgconfig = xyes; then
896   : dnl
897   m4_ifdef(
898     [PKG_CHECK_MODULES],
899     [
900       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
901       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
902       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
903       if test x$use_qr != xno; then
904         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
905       fi
906       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
907         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
908         if test x$TARGET_OS != xwindows; then
909           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
910         fi
911       fi
913       if test "x$use_zmq" = "xyes"; then
914         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
915           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
916           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
917            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
918            use_zmq=no])
919       else
920           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
921       fi
922     ]
923   )
924 else
925   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
926   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
928   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
929   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
931   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
932     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
933     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
934     if test x$TARGET_OS != xwindows; then
935       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
936     fi
937   fi
939   if test "x$use_zmq" = "xyes"; then
940      AC_CHECK_HEADER([zmq.h],
941        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
942        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
943         use_zmq=no
944         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
945      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
946        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
947         use_zmq=no
948         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
949   else
950     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
951   fi
953   if test "x$use_zmq" = "xyes"; then
954     dnl Assume libzmq was built for static linking
955     case $host in
956       *mingw*)
957         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
958       ;;
959     esac
960   fi
962   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
963   if test x$use_qr != xno; then
964     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
965     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
966   fi
969 save_CXXFLAGS="${CXXFLAGS}"
970 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
971 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
972 #include <openssl/x509_vfy.h>
974 CXXFLAGS="${save_CXXFLAGS}"
976 dnl univalue check
978 need_bundled_univalue=yes
980 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
981   need_bundled_univalue=no
982 else
984 if test x$system_univalue != xno ; then
985   found_univalue=no
986   if test x$use_pkgconfig = xyes; then
987     : #NOP
988     m4_ifdef(
989       [PKG_CHECK_MODULES],
990       [
991         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
992       ]
993     )
994   else
995     AC_CHECK_HEADER([univalue.h],[
996       AC_CHECK_LIB([univalue],  [main],[
997         UNIVALUE_LIBS=-lunivalue
998         found_univalue=yes
999       ],[true])
1000     ],[true])
1001   fi
1003   if test x$found_univalue = xyes ; then
1004     system_univalue=yes
1005     need_bundled_univalue=no
1006   elif test x$system_univalue = xyes ; then
1007     AC_MSG_ERROR([univalue not found])
1008   else
1009     system_univalue=no
1010   fi
1013 if test x$need_bundled_univalue = xyes ; then
1014   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
1015   UNIVALUE_LIBS='univalue/libunivalue.la'
1020 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
1021 AC_SUBST(UNIVALUE_CFLAGS)
1022 AC_SUBST(UNIVALUE_LIBS)
1024 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
1026 AC_MSG_CHECKING([whether to build bitcoind])
1027 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
1028 AC_MSG_RESULT($build_bitcoind)
1030 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
1031 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
1032 AC_MSG_RESULT($build_bitcoin_utils)
1034 AC_MSG_CHECKING([whether to build libraries])
1035 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
1036 if test x$build_bitcoin_libs = xyes; then
1037   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
1038   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
1040 AC_MSG_RESULT($build_bitcoin_libs)
1042 AC_LANG_POP
1044 if test "x$use_ccache" != "xno"; then
1045   AC_MSG_CHECKING(if ccache should be used)
1046   if test x$CCACHE = x; then
1047     if test "x$use_ccache" = "xyes"; then
1048       AC_MSG_ERROR([ccache not found.]);
1049     else
1050       use_ccache=no
1051     fi
1052   else
1053     use_ccache=yes
1054     CC="$ac_cv_path_CCACHE $CC"
1055     CXX="$ac_cv_path_CCACHE $CXX"
1056   fi
1057   AC_MSG_RESULT($use_ccache)
1059 if test "x$use_ccache" = "xyes"; then
1060     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1063 dnl enable wallet
1064 AC_MSG_CHECKING([if wallet should be enabled])
1065 if test x$enable_wallet != xno; then
1066   AC_MSG_RESULT(yes)
1067   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1069 else
1070   AC_MSG_RESULT(no)
1073 dnl enable upnp support
1074 AC_MSG_CHECKING([whether to build with support for UPnP])
1075 if test x$have_miniupnpc = xno; then
1076   if test x$use_upnp = xyes; then
1077      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1078   fi
1079   AC_MSG_RESULT(no)
1080 else
1081   if test x$use_upnp != xno; then
1082     AC_MSG_RESULT(yes)
1083     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1084     use_upnp=yes
1085     upnp_setting=0
1086     if test x$use_upnp_default != xno; then
1087       use_upnp_default=yes
1088       upnp_setting=1
1089     fi
1090     AC_MSG_RESULT($use_upnp_default)
1091     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1092     if test x$TARGET_OS = xwindows; then
1093       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1094     fi
1095   else
1096     AC_MSG_RESULT(no)
1097   fi
1100 dnl these are only used when qt is enabled
1101 BUILD_TEST_QT=""
1102 if test x$bitcoin_enable_qt != xno; then
1103   dnl enable dbus support
1104   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1105   if test x$bitcoin_enable_qt_dbus != xno; then
1106     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1107   fi
1108   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1110   dnl enable qr support
1111   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1112   if test x$have_qrencode = xno; then
1113     if test x$use_qr = xyes; then
1114      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1115     fi
1116     AC_MSG_RESULT(no)
1117   else
1118     if test x$use_qr != xno; then
1119       AC_MSG_RESULT(yes)
1120       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1121       use_qr=yes
1122     else
1123       AC_MSG_RESULT(no)
1124     fi
1125   fi
1127   if test x$XGETTEXT = x; then
1128     AC_MSG_WARN("xgettext is required to update qt translations")
1129   fi
1131   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1132   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1133     AC_MSG_RESULT([yes])
1134     BUILD_TEST_QT="yes"
1135   else
1136     AC_MSG_RESULT([no])
1137   fi
1140 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1142 AC_MSG_CHECKING([whether to build test_bitcoin])
1143 if test x$use_tests = xyes; then
1144   AC_MSG_RESULT([yes])
1145   BUILD_TEST="yes"
1146 else
1147   AC_MSG_RESULT([no])
1148   BUILD_TEST=""
1151 AC_MSG_CHECKING([whether to reduce exports])
1152 if test x$use_reduce_exports = xyes; then
1153   AC_MSG_RESULT([yes])
1154 else
1155   AC_MSG_RESULT([no])
1158 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1159   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1162 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1163 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1164 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1165 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1166 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1167 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1168 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1169 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1170 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1171 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1172 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1173 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1174 AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
1175 AM_CONDITIONAL([EXPERIMENTAL_ASM],[test x$experimental_asm = xyes])
1177 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1178 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1179 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1180 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1181 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1182 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1183 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1184 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1185 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1186 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1187 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1188 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1189 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1190 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1191 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1192 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1193 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1194 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1195 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1196 AC_SUBST(BITCOIN_DAEMON_NAME)
1197 AC_SUBST(BITCOIN_GUI_NAME)
1198 AC_SUBST(BITCOIN_CLI_NAME)
1199 AC_SUBST(BITCOIN_TX_NAME)
1201 AC_SUBST(RELDFLAGS)
1202 AC_SUBST(ERROR_CXXFLAGS)
1203 AC_SUBST(HARDENED_CXXFLAGS)
1204 AC_SUBST(HARDENED_CPPFLAGS)
1205 AC_SUBST(HARDENED_LDFLAGS)
1206 AC_SUBST(PIC_FLAGS)
1207 AC_SUBST(PIE_FLAGS)
1208 AC_SUBST(SSE42_CXXFLAGS)
1209 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1210 AC_SUBST(USE_UPNP)
1211 AC_SUBST(USE_QRCODE)
1212 AC_SUBST(BOOST_LIBS)
1213 AC_SUBST(TESTDEFS)
1214 AC_SUBST(LEVELDB_TARGET_FLAGS)
1215 AC_SUBST(MINIUPNPC_CPPFLAGS)
1216 AC_SUBST(MINIUPNPC_LIBS)
1217 AC_SUBST(CRYPTO_LIBS)
1218 AC_SUBST(SSL_LIBS)
1219 AC_SUBST(EVENT_LIBS)
1220 AC_SUBST(EVENT_PTHREADS_LIBS)
1221 AC_SUBST(ZMQ_LIBS)
1222 AC_SUBST(PROTOBUF_LIBS)
1223 AC_SUBST(QR_LIBS)
1224 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
1225 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1226 AC_CONFIG_FILES([doc/Doxyfile])
1227 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1228 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1230 dnl boost's m4 checks do something really nasty: they export these vars. As a
1231 dnl result, they leak into secp256k1's configure and crazy things happen.
1232 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1233 CPPFLAGS_TEMP="$CPPFLAGS"
1234 unset CPPFLAGS
1235 CPPFLAGS="$CPPFLAGS_TEMP"
1237 LDFLAGS_TEMP="$LDFLAGS"
1238 unset LDFLAGS
1239 LDFLAGS="$LDFLAGS_TEMP"
1241 LIBS_TEMP="$LIBS"
1242 unset LIBS
1243 LIBS="$LIBS_TEMP"
1245 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1246 unset PKG_CONFIG_PATH
1247 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1249 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1250 unset PKG_CONFIG_LIBDIR
1251 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1253 if test x$need_bundled_univalue = xyes; then
1254   AC_CONFIG_SUBDIRS([src/univalue])
1257 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1258 AC_CONFIG_SUBDIRS([src/secp256k1])
1260 AC_OUTPUT
1262 dnl Taken from https://wiki.debian.org/RpathIssue
1263 case $host in
1264    *-*-linux-gnu)
1265      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1266      sed < libtool > libtool-2 \
1267      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1268      mv libtool-2 libtool
1269      chmod 755 libtool
1270    ;;
1271 esac
1273 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1274 case ${OS} in
1275    *Windows*)
1276      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  test/config.ini > test/config-2.ini
1277      mv test/config-2.ini test/config.ini
1278    ;;
1279 esac
1281 echo 
1282 echo "Options used to compile and link:"
1283 echo "  with wallet   = $enable_wallet"
1284 echo "  with gui / qt = $bitcoin_enable_qt"
1285 if test x$bitcoin_enable_qt != xno; then
1286     echo "    qt version  = $bitcoin_qt_got_major_vers"
1287     echo "    with qr     = $use_qr"
1289 echo "  with zmq      = $use_zmq"
1290 echo "  with test     = $use_tests"
1291 echo "  with bench    = $use_bench"
1292 echo "  with upnp     = $use_upnp"
1293 echo "  debug enabled = $enable_debug"
1294 echo "  werror        = $enable_werror"
1295 echo 
1296 echo "  target os     = $TARGET_OS"
1297 echo "  build os      = $BUILD_OS"
1298 echo
1299 echo "  CC            = $CC"
1300 echo "  CFLAGS        = $CFLAGS"
1301 echo "  CPPFLAGS      = $CPPFLAGS"
1302 echo "  CXX           = $CXX"
1303 echo "  CXXFLAGS      = $CXXFLAGS"
1304 echo "  LDFLAGS       = $LDFLAGS"
1305 echo "  ARFLAGS       = $ARFLAGS"
1306 echo