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