[Wallet] Bugfix: FRT: don't terminate when keypool is empty
[bitcoinplatinum.git] / configure.ac
blob7357e4ec9fb973aad3bf88882b0353ea0b29892c
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, 13)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2016)
9 define(_COPYRIGHT_HOLDERS,[The %s developers])
10 define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
11 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin],[https://bitcoincore.org/])
12 AC_CONFIG_SRCDIR([src/validation.cpp])
13 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14 AC_CONFIG_AUX_DIR([build-aux])
15 AC_CONFIG_MACRO_DIR([build-aux/m4])
17 BITCOIN_DAEMON_NAME=bitcoind
18 BITCOIN_GUI_NAME=bitcoin-qt
19 BITCOIN_CLI_NAME=bitcoin-cli
20 BITCOIN_TX_NAME=bitcoin-tx
22 AC_CANONICAL_HOST
24 AH_TOP([#ifndef BITCOIN_CONFIG_H])
25 AH_TOP([#define BITCOIN_CONFIG_H])
26 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
28 dnl faketime breaks configure and is only needed for make. Disable it here.
29 unset FAKETIME
31 dnl Automake init set-up and checks
32 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
34 dnl faketime messes with timestamps and causes configure to be re-run.
35 dnl --disable-maintainer-mode can be used to bypass this.
36 AM_MAINTAINER_MODE([enable])
38 dnl make the compilation flags quiet unless V=1 is used
39 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
41 dnl Compiler checks (here before libtool).
42 if test "x${CXXFLAGS+set}" = "xset"; then
43   CXXFLAGS_overridden=yes
44 else
45   CXXFLAGS_overridden=no
47 AC_PROG_CXX
49 dnl By default, libtool for mingw refuses to link static libs into a dll for
50 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
51 dnl we have those under control, re-enable that functionality.
52 case $host in
53   *mingw*)
54      lt_cv_deplibs_check_method="pass_all"
55   ;;
56 esac
57 dnl Require C++11 compiler (no GNU extensions)
58 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
59 dnl Check if -latomic is required for <std::atomic>
60 CHECK_ATOMIC
62 dnl Unless the user specified OBJCXX, force it to be the same as CXX. This ensures
63 dnl that we get the same -std flags for both.
64 m4_ifdef([AC_PROG_OBJCXX],[
65 if test "x${OBJCXX+set}" = "x"; then
66   OBJCXX="${CXX}"
68 AC_PROG_OBJCXX
71 dnl Libtool init checks.
72 LT_INIT([pic-only])
74 dnl Check/return PATH for base programs.
75 AC_PATH_TOOL(AR, ar)
76 AC_PATH_TOOL(RANLIB, ranlib)
77 AC_PATH_TOOL(STRIP, strip)
78 AC_PATH_TOOL(GCOV, gcov)
79 AC_PATH_PROG(LCOV, lcov)
80 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
81 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
82 AC_PATH_PROG(GENHTML, genhtml)
83 AC_PATH_PROG([GIT], [git])
84 AC_PATH_PROG(CCACHE,ccache)
85 AC_PATH_PROG(XGETTEXT,xgettext)
86 AC_PATH_PROG(HEXDUMP,hexdump)
87 AC_PATH_TOOL(READELF, readelf)
88 AC_PATH_TOOL(CPPFILT, c++filt)
89 AC_PATH_TOOL(OBJCOPY, objcopy)
91 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
93 # Enable wallet
94 AC_ARG_ENABLE([wallet],
95   [AS_HELP_STRING([--disable-wallet],
96   [disable wallet (enabled by default)])],
97   [enable_wallet=$enableval],
98   [enable_wallet=yes])
100 AC_ARG_WITH([miniupnpc],
101   [AS_HELP_STRING([--with-miniupnpc],
102   [enable UPNP (default is yes if libminiupnpc is found)])],
103   [use_upnp=$withval],
104   [use_upnp=auto])
106 AC_ARG_ENABLE([upnp-default],
107   [AS_HELP_STRING([--enable-upnp-default],
108   [if UPNP is enabled, turn it on at startup (default is no)])],
109   [use_upnp_default=$enableval],
110   [use_upnp_default=no])
112 AC_ARG_ENABLE(tests,
113     AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
114     [use_tests=$enableval],
115     [use_tests=yes])
117 AC_ARG_ENABLE(gui-tests,
118     AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
119     [use_gui_tests=$enableval],
120     [use_gui_tests=$use_tests])
122 AC_ARG_ENABLE(bench,
123     AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
124     [use_bench=$enableval],
125     [use_bench=yes])
127 AC_ARG_ENABLE([extended-rpc-tests],
128     AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
129     [use_extended_rpc_tests=$enableval],
130     [use_extended_rpc_tests=no])
132 AC_ARG_WITH([qrencode],
133   [AS_HELP_STRING([--with-qrencode],
134   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
135   [use_qr=$withval],
136   [use_qr=auto])
138 AC_ARG_ENABLE([hardening],
139   [AS_HELP_STRING([--disable-hardening],
140   [do not attempt to harden the resulting executables (default is to harden)])],
141   [use_hardening=$enableval],
142   [use_hardening=yes])
144 AC_ARG_ENABLE([reduce-exports],
145   [AS_HELP_STRING([--enable-reduce-exports],
146   [attempt to reduce exported symbols in the resulting executables (default is no)])],
147   [use_reduce_exports=$enableval],
148   [use_reduce_exports=no])
150 AC_ARG_ENABLE([ccache],
151   [AS_HELP_STRING([--disable-ccache],
152   [do not use ccache for building (default is to use if found)])],
153   [use_ccache=$enableval],
154   [use_ccache=auto])
156 AC_ARG_ENABLE([lcov],
157   [AS_HELP_STRING([--enable-lcov],
158   [enable lcov testing (default is no)])],
159   [use_lcov=yes],
160   [use_lcov=no])
162 AC_ARG_ENABLE([glibc-back-compat],
163   [AS_HELP_STRING([--enable-glibc-back-compat],
164   [enable backwards compatibility with glibc])],
165   [use_glibc_compat=$enableval],
166   [use_glibc_compat=no])
168 AC_ARG_WITH([system-univalue],
169   [AS_HELP_STRING([--with-system-univalue],
170   [Build with system UniValue (default is no)])],
171   [system_univalue=$withval],
172   [system_univalue=no]
174 AC_ARG_ENABLE([zmq],
175   [AS_HELP_STRING([--disable-zmq],
176   [disable ZMQ notifications])],
177   [use_zmq=$enableval],
178   [use_zmq=yes])
180 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
182 AC_ARG_ENABLE(man,
183     [AS_HELP_STRING([--disable-man],
184                     [do not install man pages (default is to install)])],,
185     enable_man=yes)
186 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
188 # Enable debug
189 AC_ARG_ENABLE([debug],
190     [AS_HELP_STRING([--enable-debug],
191                     [use debug compiler flags and macros (default is no)])],
192     [enable_debug=$enableval],
193     [enable_debug=no])
195 AC_LANG_PUSH([C++])
196 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
198 if test "x$enable_debug" = xyes; then
199     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
200     if test "x$GCC" = xyes; then
201         CFLAGS="$CFLAGS -g3 -O0"
202     fi
204     if test "x$GXX" = xyes; then
205         CXXFLAGS="$CXXFLAGS -g3 -O0"
206     fi
209 if test "x$CXXFLAGS_overridden" = "xno"; then
210   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
211   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
212   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
213   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
215   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
216   ## unknown options if any other warning is produced. Test the -Wfoo case, and
217   ## set the -Wno-foo case if it works.
218   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
219   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
220   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
221   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
223 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
225 AC_ARG_WITH([utils],
226   [AS_HELP_STRING([--with-utils],
227   [build bitcoin-cli bitcoin-tx (default=yes)])],
228   [build_bitcoin_utils=$withval],
229   [build_bitcoin_utils=yes])
231 AC_ARG_WITH([libs],
232   [AS_HELP_STRING([--with-libs],
233   [build libraries (default=yes)])],
234   [build_bitcoin_libs=$withval],
235   [build_bitcoin_libs=yes])
237 AC_ARG_WITH([daemon],
238   [AS_HELP_STRING([--with-daemon],
239   [build bitcoind daemon (default=yes)])],
240   [build_bitcoind=$withval],
241   [build_bitcoind=yes])
243 use_pkgconfig=yes
244 case $host in
245   *mingw*)
247      #pkgconfig does more harm than good with MinGW
248      use_pkgconfig=no
250      TARGET_OS=windows
251      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
252      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
253      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
254      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
255      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
256      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
257      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
258      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
259      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
260      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
261      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
262      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
263      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
264      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
265      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
266      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
267      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
268      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
269      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
271      # -static is interpreted by libtool, where it has a different meaning.
272      # In libtool-speak, it's -all-static.
273      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
275      AC_PATH_PROG([MAKENSIS], [makensis], none)
276      if test x$MAKENSIS = xnone; then
277        AC_MSG_WARN("makensis not found. Cannot create installer.")
278      fi
280      AC_PATH_TOOL(WINDRES, windres, none)
281      if test x$WINDRES = xnone; then
282        AC_MSG_ERROR("windres not found")
283      fi
285      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
286      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
287      if test "x$CXXFLAGS_overridden" = "xno"; then
288        CXXFLAGS="$CXXFLAGS -w"
289      fi
290      case $host in
291        i?86-*) WINDOWS_BITS=32 ;;
292        x86_64-*) WINDOWS_BITS=64 ;;
293        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
294      esac
295      AC_SUBST(WINDOWS_BITS)
297      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
298      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
299      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
300      dnl also overridden to prevent their insertion later.
301      dnl This should only affect dll's.
302      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
303      postdeps_CXX=
305      ;;
306   *darwin*)
307      TARGET_OS=darwin
308      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
309      if  test x$cross_compiling != xyes; then
310        BUILD_OS=darwin
311        AC_CHECK_PROG([PORT],port, port)
312        if test x$PORT = xport; then
313          dnl add default macports paths
314          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
315          LIBS="$LIBS -L/opt/local/lib"
316          if test -d /opt/local/include/db48; then
317            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
318            LIBS="$LIBS -L/opt/local/lib/db48"
319          fi
320        fi
322        AC_CHECK_PROG([BREW],brew, brew)
323        if test x$BREW = xbrew; then
324          dnl These Homebrew packages may be keg-only, meaning that they won't be found
325          dnl in expected paths because they may conflict with system files. Ask
326          dnl Homebrew where each one is located, then adjust paths accordingly.
327          dnl It's safe to add these paths even if the functionality is disabled by
328          dnl the user (--without-wallet or --without-gui for example).
330          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
331          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
332          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
333          if test x$openssl_prefix != x; then
334            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
335            export PKG_CONFIG_PATH
336          fi
337          if test x$bdb_prefix != x; then
338            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
339            LIBS="$LIBS -L$bdb_prefix/lib"
340          fi
341          if test x$qt5_prefix != x; then
342            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
343            export PKG_CONFIG_PATH
344          fi
345        fi
346      else
347        case $build_os in
348          *darwin*)
349            BUILD_OS=darwin
350            ;;
351          *)
352            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
353            AC_PATH_TOOL([OTOOL], [otool], otool)
354            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
355            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
356            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
357            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
359            dnl libtool will try to strip the static lib, which is a problem for
360            dnl cross-builds because strip attempts to call a hard-coded ld,
361            dnl which may not exist in the path. Stripping the .a is not
362            dnl necessary, so just disable it.
363            old_striplib=
364            ;;
365        esac
366      fi
368      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
369      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
370      OBJCXXFLAGS="$CXXFLAGS"
371      ;;
372    *linux*)
373      TARGET_OS=linux
374      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
375      ;;
376    *freebsd*)
377      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
378      ;;
379    *openbsd*)
380      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
381      ;;
382    *)
383      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
384      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
385      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
386      ;;
387 esac
389 if test x$use_pkgconfig = xyes; then
390   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.)])
391   m4_ifdef([PKG_PROG_PKG_CONFIG], [
392   PKG_PROG_PKG_CONFIG
393   if test x"$PKG_CONFIG" = "x"; then
394     AC_MSG_ERROR(pkg-config not found.)
395   fi
396   ])
399 if test x$use_extended_rpc_tests != xno; then
400   AC_SUBST(EXTENDED_RPC_TESTS, -extended)
403 if test x$use_lcov = xyes; then
404   if test x$LCOV = x; then
405     AC_MSG_ERROR("lcov testing requested but lcov not found")
406   fi
407   if test x$GCOV = x; then
408     AC_MSG_ERROR("lcov testing requested but gcov not found")
409   fi
410   if test x$PYTHON = x; then
411     AC_MSG_ERROR("lcov testing requested but python not found")
412   fi
413   if test x$GENHTML = x; then
414     AC_MSG_ERROR("lcov testing requested but genhtml not found")
415   fi
416   LCOV="$LCOV --gcov-tool=$GCOV"
417   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
418     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
421 dnl Check for endianness
422 AC_C_BIGENDIAN
424 dnl Check for pthread compile/link requirements
425 AX_PTHREAD
427 # The following macro will add the necessary defines to bitcoin-config.h, but
428 # they also need to be passed down to any subprojects. Pull the results out of
429 # the cache and add them to CPPFLAGS.
430 AC_SYS_LARGEFILE
431 # detect POSIX or GNU variant of strerror_r
432 AC_FUNC_STRERROR_R
434 if test x$ac_cv_sys_file_offset_bits != x &&
435    test x$ac_cv_sys_file_offset_bits != xno &&
436    test x$ac_cv_sys_file_offset_bits != xunknown; then
437   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
440 if test x$ac_cv_sys_large_files != x &&
441    test x$ac_cv_sys_large_files != xno &&
442    test x$ac_cv_sys_large_files != xunknown; then
443   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
446 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
448 AX_GCC_FUNC_ATTRIBUTE([visibility])
449 AX_GCC_FUNC_ATTRIBUTE([dllexport])
450 AX_GCC_FUNC_ATTRIBUTE([dllimport])
452 if test x$use_glibc_compat != xno; then
454   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
455   #in anyway for back-compat.
456   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
458   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
459   # See which one is present here.
460   AC_MSG_CHECKING(__fdelt_chk type)
461   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
462                     #undef _FORTIFY_SOURCE
463                   #endif
464                   #define _FORTIFY_SOURCE 2
465                   #include <sys/select.h>
466      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
467     [ fdelt_type="long unsigned int"],
468     [ fdelt_type="long int"])
469   AC_MSG_RESULT($fdelt_type)
470   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
471 else
472   AC_SEARCH_LIBS([clock_gettime],[rt])
475 if test x$TARGET_OS != xwindows; then
476   # All windows code is PIC, forcing it on just adds useless compile warnings
477   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
480 if test x$use_hardening != xno; then
481   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
482   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
484   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
485     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
486       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
487     ])
488     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
489   ])
491   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
492   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
493   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
494   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
495   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
497   if test x$TARGET_OS != xwindows; then
498     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
499     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
500   fi
502   case $host in
503     *mingw*)
504        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
505     ;;
506   esac
509 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
510 if test x$TARGET_OS = xdarwin; then
511   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
514 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])
516 AC_CHECK_DECLS([strnlen])
518 # Check for daemon(3), unrelated to --with-daemon (although used by it)
519 AC_CHECK_DECLS([daemon])
521 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
522                 [#if HAVE_ENDIAN_H
523                  #include <endian.h>
524                  #elif HAVE_SYS_ENDIAN_H
525                  #include <sys/endian.h>
526                  #endif])
528 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
529                 [#if HAVE_BYTESWAP_H
530                  #include <byteswap.h>
531                  #endif])
533 dnl Check for MSG_NOSIGNAL
534 AC_MSG_CHECKING(for MSG_NOSIGNAL)
535 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
536  [[ int f = MSG_NOSIGNAL; ]])],
537  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
538  [ AC_MSG_RESULT(no)]
541 AC_MSG_CHECKING([for visibility attribute])
542 AC_LINK_IFELSE([AC_LANG_SOURCE([
543   int foo_def( void ) __attribute__((visibility("default")));
544   int main(){}
545   ])],
546   [
547     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
548     AC_MSG_RESULT(yes)
549   ],
550   [
551     AC_MSG_RESULT(no)
552     if test x$use_reduce_exports = xyes; then
553       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
554     fi
555   ]
558 if test x$use_reduce_exports = xyes; then
559   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
560   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
563 LEVELDB_CPPFLAGS=
564 LIBLEVELDB=
565 LIBMEMENV=
566 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
567 AC_SUBST(LEVELDB_CPPFLAGS)
568 AC_SUBST(LIBLEVELDB)
569 AC_SUBST(LIBMEMENV)
571 if test x$enable_wallet != xno; then
572     dnl Check for libdb_cxx only if wallet enabled
573     BITCOIN_FIND_BDB48
576 dnl Check for libminiupnpc (optional)
577 if test x$use_upnp != xno; then
578   AC_CHECK_HEADERS(
579     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
580     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
581     [have_miniupnpc=no]
582   )
585 BITCOIN_QT_INIT
587 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
588 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
590 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
591     use_boost=no
592 else
593     use_boost=yes
596 if test x$use_boost = xyes; then
598 dnl Minimum required Boost version
599 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
601 dnl Check for boost libs
602 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
603 AX_BOOST_SYSTEM
604 AX_BOOST_FILESYSTEM
605 AX_BOOST_PROGRAM_OPTIONS
606 AX_BOOST_THREAD
607 AX_BOOST_CHRONO
610 if test x$use_reduce_exports = xyes; then
611   AC_MSG_CHECKING([for working boost reduced exports])
612   TEMP_CPPFLAGS="$CPPFLAGS"
613   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
614   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
615       @%:@include <boost/version.hpp>
616     ]], [[
617       #if BOOST_VERSION >= 104900
618       // Everything is okay
619       #else
620       #  error Boost version is too old
621       #endif
622     ]])],[
623       AC_MSG_RESULT(yes)
624     ],[
625     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
626   ])
627   CPPFLAGS="$TEMP_CPPFLAGS"
631 if test x$use_reduce_exports = xyes; then
632     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
633     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
636 if test x$use_tests = xyes; then
638   if test x$HEXDUMP = x; then
639     AC_MSG_ERROR(hexdump is required for tests)
640   fi
643   if test x$use_boost = xyes; then
645   AX_BOOST_UNIT_TEST_FRAMEWORK
647   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
648   AC_MSG_CHECKING([for dynamic linked boost test])
649   TEMP_LIBS="$LIBS"
650   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
651   TEMP_CPPFLAGS="$CPPFLAGS"
652   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
653   AC_LINK_IFELSE([AC_LANG_SOURCE([
654        #define BOOST_TEST_DYN_LINK
655        #define BOOST_TEST_MAIN
656         #include <boost/test/unit_test.hpp>
658        ])],
659     [AC_MSG_RESULT(yes)]
660     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
661     [AC_MSG_RESULT(no)])
662   LIBS="$TEMP_LIBS"
663   CPPFLAGS="$TEMP_CPPFLAGS"
665   fi
668 if test x$use_boost = xyes; then
670 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
673 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
674 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
675 dnl the abi. This was fixed in 1.57.
677 dnl When building against that installed version using c++11, the headers pick up
678 dnl on the native c++11 scoped enum support and enable it, however it will fail to
679 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
680 dnl fail.
681 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
683 TEMP_LIBS="$LIBS"
684 LIBS="$BOOST_LIBS $LIBS"
685 TEMP_CPPFLAGS="$CPPFLAGS"
686 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
687 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
688 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
689   #include "boost/config.hpp"
690   #include "boost/version.hpp"
691   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
692   #define BOOST_NO_SCOPED_ENUMS
693   #define BOOST_NO_CXX11_SCOPED_ENUMS
694   #define CHECK
695   #endif
696   #include "boost/filesystem.hpp"
697   ]],[[
698   #if defined(CHECK)
699     boost::filesystem::copy_file("foo", "bar");
700   #else
701     choke;
702   #endif
703   ]])],
704   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
705 LIBS="$TEMP_LIBS"
706 CPPFLAGS="$TEMP_CPPFLAGS"
708 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
709 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
710 dnl a working version is available, else fall back to sleep. sleep was removed
711 dnl after 1.56.
712 dnl If neither is available, abort.
713 TEMP_LIBS="$LIBS"
714 LIBS="$BOOST_LIBS $LIBS"
715 TEMP_CPPFLAGS="$CPPFLAGS"
716 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
717 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
718   #include <boost/thread/thread.hpp>
719   #include <boost/version.hpp>
720   ]],[[
721   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
722       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
723   #else
724    choke me
725   #endif
726   ]])],
727   [boost_sleep=yes;
728      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
729   [boost_sleep=no])
730 LIBS="$TEMP_LIBS"
731 CPPFLAGS="$TEMP_CPPFLAGS"
733 if test x$boost_sleep != xyes; then
734 TEMP_LIBS="$LIBS"
735 LIBS="$BOOST_LIBS $LIBS"
736 TEMP_CPPFLAGS="$CPPFLAGS"
737 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
738 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
739   #include <boost/version.hpp>
740   #include <boost/thread.hpp>
741   #include <boost/date_time/posix_time/posix_time_types.hpp>
742   ]],[[
743   #if BOOST_VERSION <= 105600
744       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
745   #else
746    choke me
747   #endif
748   ]])],
749   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
750   [boost_sleep=no])
751 LIBS="$TEMP_LIBS"
752 CPPFLAGS="$TEMP_CPPFLAGS"
755 if test x$boost_sleep != xyes; then
756   AC_MSG_ERROR(No working boost sleep implementation found.)
761 if test x$use_pkgconfig = xyes; then
762   : dnl
763   m4_ifdef(
764     [PKG_CHECK_MODULES],
765     [
766       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
767       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
768       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
769       if test x$use_qr != xno; then
770         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
771       fi
772       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
773         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
774         if test x$TARGET_OS != xwindows; then
775           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
776         fi
777       fi
779       if test "x$use_zmq" = "xyes"; then
780         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
781           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
782           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
783            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
784            use_zmq=no])
785       else
786           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
787       fi
788     ]
789   )
790 else
791   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
792   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
794   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
795   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
797   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
798     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
799     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
800     if test x$TARGET_OS != xwindows; then
801       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
802     fi
803   fi
805   if test "x$use_zmq" = "xyes"; then
806      AC_CHECK_HEADER([zmq.h],
807        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
808        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
809         use_zmq=no
810         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
811      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
812        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
813         use_zmq=no
814         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
815   else
816     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
817   fi
819   if test "x$use_zmq" = "xyes"; then
820     dnl Assume libzmq was built for static linking
821     case $host in
822       *mingw*)
823         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
824       ;;
825     esac
826   fi
828   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
829   if test x$use_qr != xno; then
830     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
831     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
832   fi
835 dnl univalue check
837 need_bundled_univalue=yes
839 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
840   need_bundled_univalue=no
841 else
843 if test x$system_univalue != xno ; then
844   found_univalue=no
845   if test x$use_pkgconfig = xyes; then
846     : #NOP
847     m4_ifdef(
848       [PKG_CHECK_MODULES],
849       [
850         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
851       ]
852     )
853   else
854     AC_CHECK_HEADER([univalue.h],[
855       AC_CHECK_LIB([univalue],  [main],[
856         UNIVALUE_LIBS=-lunivalue
857         found_univalue=yes
858       ],[true])
859     ],[true])
860   fi
862   if test x$found_univalue = xyes ; then
863     system_univalue=yes
864     need_bundled_univalue=no
865   elif test x$system_univalue = xyes ; then
866     AC_MSG_ERROR([univalue not found])
867   else
868     system_univalue=no
869   fi
872 if test x$need_bundled_univalue = xyes ; then
873   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
874   UNIVALUE_LIBS='univalue/libunivalue.la'
879 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
880 AC_SUBST(UNIVALUE_CFLAGS)
881 AC_SUBST(UNIVALUE_LIBS)
883 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
885 AC_MSG_CHECKING([whether to build bitcoind])
886 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
887 AC_MSG_RESULT($build_bitcoind)
889 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
890 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
891 AC_MSG_RESULT($build_bitcoin_utils)
893 AC_MSG_CHECKING([whether to build libraries])
894 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
895 if test x$build_bitcoin_libs = xyes; then
896   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
897   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
899 AC_MSG_RESULT($build_bitcoin_libs)
901 AC_LANG_POP
903 if test "x$use_ccache" != "xno"; then
904   AC_MSG_CHECKING(if ccache should be used)
905   if test x$CCACHE = x; then
906     if test "x$use_ccache" = "xyes"; then
907       AC_MSG_ERROR([ccache not found.]);
908     else
909       use_ccache=no
910     fi
911   else
912     use_ccache=yes
913     CC="$ac_cv_path_CCACHE $CC"
914     CXX="$ac_cv_path_CCACHE $CXX"
915   fi
916   AC_MSG_RESULT($use_ccache)
918 if test "x$use_ccache" = "xyes"; then
919     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
922 dnl enable wallet
923 AC_MSG_CHECKING([if wallet should be enabled])
924 if test x$enable_wallet != xno; then
925   AC_MSG_RESULT(yes)
926   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
928 else
929   AC_MSG_RESULT(no)
932 dnl enable upnp support
933 AC_MSG_CHECKING([whether to build with support for UPnP])
934 if test x$have_miniupnpc = xno; then
935   if test x$use_upnp = xyes; then
936      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
937   fi
938   AC_MSG_RESULT(no)
939 else
940   if test x$use_upnp != xno; then
941     AC_MSG_RESULT(yes)
942     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
943     use_upnp=yes
944     upnp_setting=0
945     if test x$use_upnp_default != xno; then
946       use_upnp_default=yes
947       upnp_setting=1
948     fi
949     AC_MSG_RESULT($use_upnp_default)
950     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
951     if test x$TARGET_OS = xwindows; then
952       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
953     fi
954   else
955     AC_MSG_RESULT(no)
956   fi
959 dnl these are only used when qt is enabled
960 BUILD_TEST_QT=""
961 if test x$bitcoin_enable_qt != xno; then
962   dnl enable dbus support
963   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
964   if test x$bitcoin_enable_qt_dbus != xno; then
965     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
966   fi
967   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
969   dnl enable qr support
970   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
971   if test x$have_qrencode = xno; then
972     if test x$use_qr = xyes; then
973      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
974     fi
975     AC_MSG_RESULT(no)
976   else
977     if test x$use_qr != xno; then
978       AC_MSG_RESULT(yes)
979       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
980       use_qr=yes
981     else
982       AC_MSG_RESULT(no)
983     fi
984   fi
986   if test x$XGETTEXT = x; then
987     AC_MSG_WARN("xgettext is required to update qt translations")
988   fi
990   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
991   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
992     AC_MSG_RESULT([yes])
993     BUILD_TEST_QT="yes"
994   else
995     AC_MSG_RESULT([no])
996   fi
999 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1001 AC_MSG_CHECKING([whether to build test_bitcoin])
1002 if test x$use_tests = xyes; then
1003   AC_MSG_RESULT([yes])
1004   BUILD_TEST="yes"
1005 else
1006   AC_MSG_RESULT([no])
1007   BUILD_TEST=""
1010 AC_MSG_CHECKING([whether to reduce exports])
1011 if test x$use_reduce_exports = xyes; then
1012   AC_MSG_RESULT([yes])
1013 else
1014   AC_MSG_RESULT([no])
1017 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1018   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1021 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1022 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1023 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1024 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1025 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1026 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1027 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1028 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1029 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1030 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1031 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1032 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1034 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1035 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1036 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1037 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1038 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1039 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1040 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1041 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1042 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1043 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1044 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1045 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1046 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1047 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1048 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1049 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1050 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1051 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1052 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1053 AC_SUBST(BITCOIN_DAEMON_NAME)
1054 AC_SUBST(BITCOIN_GUI_NAME)
1055 AC_SUBST(BITCOIN_CLI_NAME)
1056 AC_SUBST(BITCOIN_TX_NAME)
1058 AC_SUBST(RELDFLAGS)
1059 AC_SUBST(HARDENED_CXXFLAGS)
1060 AC_SUBST(HARDENED_CPPFLAGS)
1061 AC_SUBST(HARDENED_LDFLAGS)
1062 AC_SUBST(PIC_FLAGS)
1063 AC_SUBST(PIE_FLAGS)
1064 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1065 AC_SUBST(USE_UPNP)
1066 AC_SUBST(USE_QRCODE)
1067 AC_SUBST(BOOST_LIBS)
1068 AC_SUBST(TESTDEFS)
1069 AC_SUBST(LEVELDB_TARGET_FLAGS)
1070 AC_SUBST(MINIUPNPC_CPPFLAGS)
1071 AC_SUBST(MINIUPNPC_LIBS)
1072 AC_SUBST(CRYPTO_LIBS)
1073 AC_SUBST(SSL_LIBS)
1074 AC_SUBST(EVENT_LIBS)
1075 AC_SUBST(EVENT_PTHREADS_LIBS)
1076 AC_SUBST(ZMQ_LIBS)
1077 AC_SUBST(PROTOBUF_LIBS)
1078 AC_SUBST(QR_LIBS)
1079 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1080 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1081 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1082 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1083 AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py])
1085 dnl boost's m4 checks do something really nasty: they export these vars. As a
1086 dnl result, they leak into secp256k1's configure and crazy things happen.
1087 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1088 CPPFLAGS_TEMP="$CPPFLAGS"
1089 unset CPPFLAGS
1090 CPPFLAGS="$CPPFLAGS_TEMP"
1092 LDFLAGS_TEMP="$LDFLAGS"
1093 unset LDFLAGS
1094 LDFLAGS="$LDFLAGS_TEMP"
1096 LIBS_TEMP="$LIBS"
1097 unset LIBS
1098 LIBS="$LIBS_TEMP"
1100 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1101 unset PKG_CONFIG_PATH
1102 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1104 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1105 unset PKG_CONFIG_LIBDIR
1106 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1108 if test x$need_bundled_univalue = xyes; then
1109   AC_CONFIG_SUBDIRS([src/univalue])
1112 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1113 AC_CONFIG_SUBDIRS([src/secp256k1])
1115 AC_OUTPUT
1117 dnl Taken from https://wiki.debian.org/RpathIssue
1118 case $host in
1119    *-*-linux-gnu)
1120      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1121      sed < libtool > libtool-2 \
1122      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1123      mv libtool-2 libtool
1124      chmod 755 libtool
1125    ;;
1126 esac
1128 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1129 case ${OS} in
1130    *Windows*)
1131      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1132      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
1133    ;;
1134 esac
1136 echo 
1137 echo "Options used to compile and link:"
1138 echo "  with wallet   = $enable_wallet"
1139 echo "  with gui / qt = $bitcoin_enable_qt"
1140 if test x$bitcoin_enable_qt != xno; then
1141     echo "    qt version  = $bitcoin_qt_got_major_vers"
1142     echo "    with qr     = $use_qr"
1144 echo "  with zmq      = $use_zmq"
1145 echo "  with test     = $use_tests"
1146 echo "  with bench    = $use_bench"
1147 echo "  with upnp     = $use_upnp"
1148 echo "  debug enabled = $enable_debug"
1149 echo 
1150 echo "  target os     = $TARGET_OS"
1151 echo "  build os      = $BUILD_OS"
1152 echo
1153 echo "  CC            = $CC"
1154 echo "  CFLAGS        = $CFLAGS"
1155 echo "  CPPFLAGS      = $CPPFLAGS"
1156 echo "  CXX           = $CXX"
1157 echo "  CXXFLAGS      = $CXXFLAGS"
1158 echo "  LDFLAGS       = $LDFLAGS"
1159 echo