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