Add some blockencodings tests
[bitcoinplatinum.git] / configure.ac
blob97af58bd7cd851eaa597361ac44b0f014a9ea8ed
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, 12)
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/main.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
48 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
50 dnl By default, libtool for mingw refuses to link static libs into a dll for
51 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
52 dnl we have those under control, re-enable that functionality.
53 case $host in
54   *mingw*)
55      lt_cv_deplibs_check_method="pass_all"
56   ;;
57 esac
58 dnl Require C++11 compiler (no GNU extensions)
59 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
60 dnl Libtool init checks.
61 LT_INIT([pic-only])
63 dnl Check/return PATH for base programs.
64 AC_PATH_TOOL(AR, ar)
65 AC_PATH_TOOL(RANLIB, ranlib)
66 AC_PATH_TOOL(STRIP, strip)
67 AC_PATH_TOOL(GCOV, gcov)
68 AC_PATH_PROG(LCOV, lcov)
69 AC_PATH_PROG(JAVA, java)
70 AC_PATH_PROGS([PYTHON], [python3 python2.7 python2 python])
71 AC_PATH_PROG(GENHTML, genhtml)
72 AC_PATH_PROG([GIT], [git])
73 AC_PATH_PROG(CCACHE,ccache)
74 AC_PATH_PROG(XGETTEXT,xgettext)
75 AC_PATH_PROG(HEXDUMP,hexdump)
76 AC_PATH_TOOL(READELF, readelf)
77 AC_PATH_TOOL(CPPFILT, c++filt)
78 AC_PATH_TOOL(OBJCOPY, objcopy)
80 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
82 dnl pkg-config check.
83 PKG_PROG_PKG_CONFIG
85 # Enable wallet
86 AC_ARG_ENABLE([wallet],
87   [AS_HELP_STRING([--disable-wallet],
88   [disable wallet (enabled by default)])],
89   [enable_wallet=$enableval],
90   [enable_wallet=yes])
92 AC_ARG_WITH([miniupnpc],
93   [AS_HELP_STRING([--with-miniupnpc],
94   [enable UPNP (default is yes if libminiupnpc is found)])],
95   [use_upnp=$withval],
96   [use_upnp=auto])
98 AC_ARG_ENABLE([upnp-default],
99   [AS_HELP_STRING([--enable-upnp-default],
100   [if UPNP is enabled, turn it on at startup (default is no)])],
101   [use_upnp_default=$enableval],
102   [use_upnp_default=no])
104 AC_ARG_ENABLE(tests,
105     AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
106     [use_tests=$enableval],
107     [use_tests=yes])
109 AC_ARG_ENABLE(gui-tests,
110     AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
111     [use_gui_tests=$enableval],
112     [use_gui_tests=$use_tests])
114 AC_ARG_ENABLE(bench,
115     AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
116     [use_bench=$enableval],
117     [use_bench=yes])
119 AC_ARG_WITH([comparison-tool],
120     AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
121     [use_comparison_tool=$withval],
122     [use_comparison_tool=no])
124 AC_ARG_ENABLE([comparison-tool-reorg-tests],
125     AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
126     [use_comparison_tool_reorg_tests=$enableval],
127     [use_comparison_tool_reorg_tests=no])
129 AC_ARG_ENABLE([extended-rpc-tests],
130     AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
131     [use_extended_rpc_tests=$enableval],
132     [use_extended_rpc_tests=no])
134 AC_ARG_WITH([qrencode],
135   [AS_HELP_STRING([--with-qrencode],
136   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
137   [use_qr=$withval],
138   [use_qr=auto])
140 AC_ARG_ENABLE([hardening],
141   [AS_HELP_STRING([--disable-hardening],
142   [do not attempt to harden the resulting executables (default is to harden)])],
143   [use_hardening=$enableval],
144   [use_hardening=yes])
146 AC_ARG_ENABLE([reduce-exports],
147   [AS_HELP_STRING([--enable-reduce-exports],
148   [attempt to reduce exported symbols in the resulting executables (default is no)])],
149   [use_reduce_exports=$enableval],
150   [use_reduce_exports=no])
152 AC_ARG_ENABLE([ccache],
153   [AS_HELP_STRING([--disable-ccache],
154   [do not use ccache for building (default is to use if found)])],
155   [use_ccache=$enableval],
156   [use_ccache=auto])
158 AC_ARG_ENABLE([lcov],
159   [AS_HELP_STRING([--enable-lcov],
160   [enable lcov testing (default is no)])],
161   [use_lcov=yes],
162   [use_lcov=no])
164 AC_ARG_ENABLE([glibc-back-compat],
165   [AS_HELP_STRING([--enable-glibc-back-compat],
166   [enable backwards compatibility with glibc])],
167   [use_glibc_compat=$enableval],
168   [use_glibc_compat=no])
170 AC_ARG_WITH([system-univalue],
171   [AS_HELP_STRING([--with-system-univalue],
172   [Build with system UniValue (default is no)])],
173   [system_univalue=$withval],
174   [system_univalue=no]
176 AC_ARG_ENABLE([zmq],
177   [AS_HELP_STRING([--disable-zmq],
178   [disable ZMQ notifications])],
179   [use_zmq=$enableval],
180   [use_zmq=yes])
182 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
184 # Enable debug
185 AC_ARG_ENABLE([debug],
186     [AS_HELP_STRING([--enable-debug],
187                     [use debug compiler flags and macros (default is no)])],
188     [enable_debug=$enableval],
189     [enable_debug=no])
191 AC_LANG_PUSH([C++])
192 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
194 if test "x$enable_debug" = xyes; then
195     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
196     if test "x$GCC" = xyes; then
197         CFLAGS="$CFLAGS -g3 -O0"
198     fi
200     if test "x$GXX" = xyes; then
201         CXXFLAGS="$CXXFLAGS -g3 -O0"
202     fi
205 if test "x$CXXFLAGS_overridden" = "xno"; then
206   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
207   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
208   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
209   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
211   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
212   ## unknown options if any other warning is produced. Test the -Wfoo case, and
213   ## set the -Wno-foo case if it works.
214   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
215   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
216   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
217   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
219 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
221 AC_ARG_WITH([utils],
222   [AS_HELP_STRING([--with-utils],
223   [build bitcoin-cli bitcoin-tx (default=yes)])],
224   [build_bitcoin_utils=$withval],
225   [build_bitcoin_utils=yes])
227 AC_ARG_WITH([libs],
228   [AS_HELP_STRING([--with-libs],
229   [build libraries (default=yes)])],
230   [build_bitcoin_libs=$withval],
231   [build_bitcoin_libs=yes])
233 AC_ARG_WITH([daemon],
234   [AS_HELP_STRING([--with-daemon],
235   [build bitcoind daemon (default=yes)])],
236   [build_bitcoind=$withval],
237   [build_bitcoind=yes])
239 use_pkgconfig=yes
240 case $host in
241   *mingw*)
243      #pkgconfig does more harm than good with MinGW
244      use_pkgconfig=no
246      TARGET_OS=windows
247      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
248      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
249      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
250      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
251      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
252      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
253      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
254      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
255      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
256      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
257      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
258      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
259      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
260      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
261      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
262      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
263      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
264      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
265      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
267      # -static is interpreted by libtool, where it has a different meaning.
268      # In libtool-speak, it's -all-static.
269      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
271      AC_PATH_PROG([MAKENSIS], [makensis], none)
272      if test x$MAKENSIS = xnone; then
273        AC_MSG_WARN("makensis not found. Cannot create installer.")
274      fi
276      AC_PATH_TOOL(WINDRES, windres, none)
277      if test x$WINDRES = xnone; then
278        AC_MSG_ERROR("windres not found")
279      fi
281      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
282      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
283      if test "x$CXXFLAGS_overridden" = "xno"; then
284        CXXFLAGS="$CXXFLAGS -w"
285      fi
286      case $host in
287        i?86-*) WINDOWS_BITS=32 ;;
288        x86_64-*) WINDOWS_BITS=64 ;;
289        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
290      esac
291      AC_SUBST(WINDOWS_BITS)
293      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
294      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
295      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
296      dnl also overridden to prevent their insertion later.
297      dnl This should only affect dll's.
298      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
299      postdeps_CXX=
301      ;;
302   *darwin*)
303      TARGET_OS=darwin
304      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
305      if  test x$cross_compiling != xyes; then
306        BUILD_OS=darwin
307        AC_CHECK_PROG([PORT],port, port)
308        if test x$PORT = xport; then
309          dnl add default macports paths
310          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
311          LIBS="$LIBS -L/opt/local/lib"
312          if test -d /opt/local/include/db48; then
313            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
314            LIBS="$LIBS -L/opt/local/lib/db48"
315          fi
316        fi
318        AC_CHECK_PROG([BREW],brew, brew)
319        if test x$BREW = xbrew; then
320          dnl These Homebrew packages may be keg-only, meaning that they won't be found
321          dnl in expected paths because they may conflict with system files. Ask
322          dnl Homebrew where each one is located, then adjust paths accordingly.
323          dnl It's safe to add these paths even if the functionality is disabled by
324          dnl the user (--without-wallet or --without-gui for example).
326          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
327          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
328          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
329          if test x$openssl_prefix != x; then
330            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
331            export PKG_CONFIG_PATH
332          fi
333          if test x$bdb_prefix != x; then
334            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
335            LIBS="$LIBS -L$bdb_prefix/lib"
336          fi
337          if test x$qt5_prefix != x; then
338            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
339            export PKG_CONFIG_PATH
340          fi
341        fi
342      else
343        case $build_os in
344          *darwin*)
345            BUILD_OS=darwin
346            ;;
347          *)
348            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
349            AC_PATH_TOOL([OTOOL], [otool], otool)
350            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
351            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
352            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
353            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
355            dnl libtool will try to strip the static lib, which is a problem for
356            dnl cross-builds because strip attempts to call a hard-coded ld,
357            dnl which may not exist in the path. Stripping the .a is not
358            dnl necessary, so just disable it.
359            old_striplib=
360            ;;
361        esac
362      fi
364      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
365      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
366      OBJCXXFLAGS="$CXXFLAGS"
367      ;;
368    *linux*)
369      TARGET_OS=linux
370      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
371      ;;
372    *)
373      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
374      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
375      ;;
376 esac
378 if test x$use_comparison_tool != xno; then
379   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
382 if test x$use_comparison_tool_reorg_tests != xno; then
383   if test x$use_comparison_tool = x; then
384     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
385   fi
386   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
387 else
388   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
391 if test x$use_extended_rpc_tests != xno; then
392   AC_SUBST(EXTENDED_RPC_TESTS, -extended)
395 if test x$use_lcov = xyes; then
396   if test x$LCOV = x; then
397     AC_MSG_ERROR("lcov testing requested but lcov not found")
398   fi
399   if test x$GCOV = x; then
400     AC_MSG_ERROR("lcov testing requested but gcov not found")
401   fi
402   if test x$JAVA = x; then
403     AC_MSG_ERROR("lcov testing requested but java not found")
404   fi
405   if test x$PYTHON = x; then
406     AC_MSG_ERROR("lcov testing requested but python not found")
407   fi
408   if test x$GENHTML = x; then
409     AC_MSG_ERROR("lcov testing requested but genhtml not found")
410   fi
411   if test x$use_comparison_tool = x; then
412     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
413   fi
414   LCOV="$LCOV --gcov-tool=$GCOV"
415   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
416     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
419 dnl Check for endianness
420 AC_C_BIGENDIAN
422 dnl Check for pthread compile/link requirements
423 AX_PTHREAD
425 # The following macro will add the necessary defines to bitcoin-config.h, but
426 # they also need to be passed down to any subprojects. Pull the results out of
427 # the cache and add them to CPPFLAGS.
428 AC_SYS_LARGEFILE
429 # detect POSIX or GNU variant of strerror_r
430 AC_FUNC_STRERROR_R
432 if test x$ac_cv_sys_file_offset_bits != x &&
433    test x$ac_cv_sys_file_offset_bits != xno &&
434    test x$ac_cv_sys_file_offset_bits != xunknown; then
435   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
438 if test x$ac_cv_sys_large_files != x &&
439    test x$ac_cv_sys_large_files != xno &&
440    test x$ac_cv_sys_large_files != xunknown; then
441   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
444 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
446 AX_GCC_FUNC_ATTRIBUTE([visibility])
447 AX_GCC_FUNC_ATTRIBUTE([dllexport])
448 AX_GCC_FUNC_ATTRIBUTE([dllimport])
450 if test x$use_glibc_compat != xno; then
452   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
453   #in anyway for back-compat.
454   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
456   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
457   # See which one is present here.
458   AC_MSG_CHECKING(__fdelt_chk type)
459   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
460                     #undef _FORTIFY_SOURCE
461                   #endif
462                   #define _FORTIFY_SOURCE 2
463                   #include <sys/select.h>
464      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
465     [ fdelt_type="long unsigned int"],
466     [ fdelt_type="long int"])
467   AC_MSG_RESULT($fdelt_type)
468   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
469 else
470   AC_SEARCH_LIBS([clock_gettime],[rt])
473 if test x$TARGET_OS != xwindows; then
474   # All windows code is PIC, forcing it on just adds useless compile warnings
475   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
478 if test x$use_hardening != xno; then
479   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
480   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
482   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
483     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
484       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
485     ])
486     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
487   ])
489   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
490   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
491   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
492   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
494   if test x$TARGET_OS != xwindows; then
495     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
496     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
497   fi
499   case $host in
500     *mingw*)
501        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
502     ;;
503   esac
506 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
507 if test x$TARGET_OS = xdarwin; then
508   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
511 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])
512 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
513 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
515 AC_CHECK_DECLS([strnlen])
517 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
518                 [#if HAVE_ENDIAN_H
519                  #include <endian.h>
520                  #elif HAVE_SYS_ENDIAN_H
521                  #include <sys/endian.h>
522                  #endif])
524 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
525                 [#if HAVE_BYTESWAP_H
526                  #include <byteswap.h>
527                  #endif])
529 dnl Check for MSG_NOSIGNAL
530 AC_MSG_CHECKING(for MSG_NOSIGNAL)
531 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
532  [[ int f = MSG_NOSIGNAL; ]])],
533  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
534  [ AC_MSG_RESULT(no)]
537 AC_MSG_CHECKING([for visibility attribute])
538 AC_LINK_IFELSE([AC_LANG_SOURCE([
539   int foo_def( void ) __attribute__((visibility("default")));
540   int main(){}
541   ])],
542   [
543     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
544     AC_MSG_RESULT(yes)
545   ],
546   [
547     AC_MSG_RESULT(no)
548     if test x$use_reduce_exports = xyes; then
549       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
550     fi
551   ]
554 if test x$use_reduce_exports = xyes; then
555   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
556   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
559 LEVELDB_CPPFLAGS=
560 LIBLEVELDB=
561 LIBMEMENV=
562 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
563 AC_SUBST(LEVELDB_CPPFLAGS)
564 AC_SUBST(LIBLEVELDB)
565 AC_SUBST(LIBMEMENV)
567 if test x$enable_wallet != xno; then
568     dnl Check for libdb_cxx only if wallet enabled
569     BITCOIN_FIND_BDB48
572 dnl Check for libminiupnpc (optional)
573 if test x$use_upnp != xno; then
574   AC_CHECK_HEADERS(
575     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
576     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
577     [have_miniupnpc=no]
578   )
581 BITCOIN_QT_INIT
583 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
584 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
586 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
587     use_boost=no
588 else
589     use_boost=yes
592 if test x$use_boost = xyes; then
594 dnl Check for boost libs
595 AX_BOOST_BASE
596 AX_BOOST_SYSTEM
597 AX_BOOST_FILESYSTEM
598 AX_BOOST_PROGRAM_OPTIONS
599 AX_BOOST_THREAD
600 AX_BOOST_CHRONO
603 if test x$use_reduce_exports = xyes; then
604   AC_MSG_CHECKING([for working boost reduced exports])
605   TEMP_CPPFLAGS="$CPPFLAGS"
606   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
607   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
608       @%:@include <boost/version.hpp>
609     ]], [[
610       #if BOOST_VERSION >= 104900
611       // Everything is okay
612       #else
613       #  error Boost version is too old
614       #endif
615     ]])],[
616       AC_MSG_RESULT(yes)
617     ],[
618     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
619   ])
620   CPPFLAGS="$TEMP_CPPFLAGS"
624 if test x$use_reduce_exports = xyes; then
625     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
626     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
629 if test x$use_tests = xyes; then
631   if test x$HEXDUMP = x; then
632     AC_MSG_ERROR(hexdump is required for tests)
633   fi
636   if test x$use_boost = xyes; then
638   AX_BOOST_UNIT_TEST_FRAMEWORK
640   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
641   AC_MSG_CHECKING([for dynamic linked boost test])
642   TEMP_LIBS="$LIBS"
643   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
644   TEMP_CPPFLAGS="$CPPFLAGS"
645   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
646   AC_LINK_IFELSE([AC_LANG_SOURCE([
647        #define BOOST_TEST_DYN_LINK
648        #define BOOST_TEST_MAIN
649         #include <boost/test/unit_test.hpp>
651        ])],
652     [AC_MSG_RESULT(yes)]
653     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
654     [AC_MSG_RESULT(no)])
655   LIBS="$TEMP_LIBS"
656   CPPFLAGS="$TEMP_CPPFLAGS"
658   fi
661 if test x$use_boost = xyes; then
663 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
666 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
667 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
668 dnl the abi. This was fixed in 1.57.
670 dnl When building against that installed version using c++11, the headers pick up
671 dnl on the native c++11 scoped enum support and enable it, however it will fail to
672 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
673 dnl fail.
674 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
676 TEMP_LIBS="$LIBS"
677 LIBS="$BOOST_LIBS $LIBS"
678 TEMP_CPPFLAGS="$CPPFLAGS"
679 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
680 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
681 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
682   #include "boost/config.hpp"
683   #include "boost/version.hpp"
684   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
685   #define BOOST_NO_SCOPED_ENUMS
686   #define BOOST_NO_CXX11_SCOPED_ENUMS
687   #define CHECK
688   #endif
689   #include "boost/filesystem.hpp"
690   ]],[[
691   #if defined(CHECK)
692     boost::filesystem::copy_file("foo", "bar");
693   #else
694     choke;
695   #endif
696   ]])],
697   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
698 LIBS="$TEMP_LIBS"
699 CPPFLAGS="$TEMP_CPPFLAGS"
701 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
702 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
703 dnl a working version is available, else fall back to sleep. sleep was removed
704 dnl after 1.56.
705 dnl If neither is available, abort.
706 TEMP_LIBS="$LIBS"
707 LIBS="$BOOST_LIBS $LIBS"
708 TEMP_CPPFLAGS="$CPPFLAGS"
709 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
710 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
711   #include <boost/thread/thread.hpp>
712   #include <boost/version.hpp>
713   ]],[[
714   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
715       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
716   #else
717    choke me
718   #endif
719   ]])],
720   [boost_sleep=yes;
721      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
722   [boost_sleep=no])
723 LIBS="$TEMP_LIBS"
724 CPPFLAGS="$TEMP_CPPFLAGS"
726 if test x$boost_sleep != xyes; then
727 TEMP_LIBS="$LIBS"
728 LIBS="$BOOST_LIBS $LIBS"
729 TEMP_CPPFLAGS="$CPPFLAGS"
730 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
731 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
732   #include <boost/version.hpp>
733   #include <boost/thread.hpp>
734   #include <boost/date_time/posix_time/posix_time_types.hpp>
735   ]],[[
736   #if BOOST_VERSION <= 105600
737       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
738   #else
739    choke me
740   #endif
741   ]])],
742   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
743   [boost_sleep=no])
744 LIBS="$TEMP_LIBS"
745 CPPFLAGS="$TEMP_CPPFLAGS"
748 if test x$boost_sleep != xyes; then
749   AC_MSG_ERROR(No working boost sleep implementation found.)
754 if test x$use_pkgconfig = xyes; then
756   if test x"$PKG_CONFIG" = "x"; then
757     AC_MSG_ERROR(pkg-config not found.)
758   fi
760   : #NOP
761   m4_ifdef(
762     [PKG_CHECK_MODULES],
763     [
764       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
765       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
766       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
767       if test x$use_qr != xno; then
768         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
769       fi
770       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
771         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
772         if test x$TARGET_OS != xwindows; then
773           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
774         fi
775       fi
777       if test "x$use_zmq" = "xyes"; then
778         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
779           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
780           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
781            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
782            use_zmq=no])
783       else
784           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
785       fi
786     ]
787   )
788 else
789   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
790   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
792   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
793   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
795   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
796     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
797     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
798     if test x$TARGET_OS != xwindows; then
799       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
800     fi
801   fi
803   if test "x$use_zmq" = "xyes"; then
804      AC_CHECK_HEADER([zmq.h],
805        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
806        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
807         use_zmq=no
808         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
809      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
810        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
811         use_zmq=no
812         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
813   else
814     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
815   fi
817   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
818   if test x$use_qr != xno; then
819     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
820     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
821   fi
824 dnl univalue check
826 if test x$system_univalue != xno ; then
827   found_univalue=no
828   if test x$use_pkgconfig = xyes; then
829     : #NOP
830     m4_ifdef(
831       [PKG_CHECK_MODULES],
832       [
833         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
834       ]
835     )
836   else
837     AC_CHECK_HEADER([univalue.h],[
838       AC_CHECK_LIB([univalue],  [main],[
839         UNIVALUE_LIBS=-lunivalue
840         found_univalue=yes
841       ],[true])
842     ],[true])
843   fi
845   if test x$found_univalue = xyes ; then
846     system_univalue=yes
847   elif test x$system_univalue = xyes ; then
848     AC_MSG_ERROR([univalue not found])
849   else
850     system_univalue=no
851   fi
854 if test x$system_univalue = xno ; then
855   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
856   UNIVALUE_LIBS='univalue/libunivalue.la'
858 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$system_univalue = xno])
859 AC_SUBST(UNIVALUE_CFLAGS)
860 AC_SUBST(UNIVALUE_LIBS)
862 CXXFLAGS_TEMP="$CXXFLAGS"
863 LIBS_TEMP="$LIBS"
864 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
865 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
866 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
867 CXXFLAGS="$CXXFLAGS_TEMP"
868 LIBS="$LIBS_TEMP"
870 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
872 AC_MSG_CHECKING([whether to build bitcoind])
873 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
874 AC_MSG_RESULT($build_bitcoind)
876 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
877 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
878 AC_MSG_RESULT($build_bitcoin_utils)
880 AC_MSG_CHECKING([whether to build libraries])
881 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
882 if test x$build_bitcoin_libs = xyes; then
883   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
884   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
886 AC_MSG_RESULT($build_bitcoin_libs)
888 AC_LANG_POP
890 if test "x$use_ccache" != "xno"; then
891   AC_MSG_CHECKING(if ccache should be used)
892   if test x$CCACHE = x; then
893     if test "x$use_ccache" = "xyes"; then
894       AC_MSG_ERROR([ccache not found.]);
895     else
896       use_ccache=no
897     fi
898   else
899     use_ccache=yes
900     CC="$ac_cv_path_CCACHE $CC"
901     CXX="$ac_cv_path_CCACHE $CXX"
902   fi
903   AC_MSG_RESULT($use_ccache)
905 if test "x$use_ccache" = "xyes"; then
906     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
909 dnl enable wallet
910 AC_MSG_CHECKING([if wallet should be enabled])
911 if test x$enable_wallet != xno; then
912   AC_MSG_RESULT(yes)
913   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
915 else
916   AC_MSG_RESULT(no)
919 dnl enable upnp support
920 AC_MSG_CHECKING([whether to build with support for UPnP])
921 if test x$have_miniupnpc = xno; then
922   if test x$use_upnp = xyes; then
923      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
924   fi
925   AC_MSG_RESULT(no)
926 else
927   if test x$use_upnp != xno; then
928     AC_MSG_RESULT(yes)
929     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
930     use_upnp=yes
931     upnp_setting=0
932     if test x$use_upnp_default != xno; then
933       use_upnp_default=yes
934       upnp_setting=1
935     fi
936     AC_MSG_RESULT($use_upnp_default)
937     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
938     if test x$TARGET_OS = xwindows; then
939       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
940     fi
941   else
942     AC_MSG_RESULT(no)
943   fi
946 dnl these are only used when qt is enabled
947 BUILD_TEST_QT=""
948 if test x$bitcoin_enable_qt != xno; then
949   dnl enable dbus support
950   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
951   if test x$bitcoin_enable_qt_dbus != xno; then
952     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
953   fi
954   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
956   dnl enable qr support
957   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
958   if test x$have_qrencode = xno; then
959     if test x$use_qr = xyes; then
960      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
961     fi
962     AC_MSG_RESULT(no)
963   else
964     if test x$use_qr != xno; then
965       AC_MSG_RESULT(yes)
966       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
967       use_qr=yes
968     else
969       AC_MSG_RESULT(no)
970     fi
971   fi
973   if test x$XGETTEXT = x; then
974     AC_MSG_WARN("xgettext is required to update qt translations")
975   fi
977   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
978   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
979     AC_MSG_RESULT([yes])
980     BUILD_TEST_QT="yes"
981   else
982     AC_MSG_RESULT([no])
983   fi
986 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
988 AC_MSG_CHECKING([whether to build test_bitcoin])
989 if test x$use_tests = xyes; then
990   AC_MSG_RESULT([yes])
991   BUILD_TEST="yes"
992 else
993   AC_MSG_RESULT([no])
994   BUILD_TEST=""
997 AC_MSG_CHECKING([whether to reduce exports])
998 if test x$use_reduce_exports = xyes; then
999   AC_MSG_RESULT([yes])
1000 else
1001   AC_MSG_RESULT([no])
1004 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
1005   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
1008 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1009 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1010 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1011 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1012 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1013 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1014 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1015 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1016 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1017 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1018 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
1019 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
1020 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1021 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1023 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1024 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1025 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1026 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1027 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1028 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1029 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1030 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1031 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1032 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1033 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1034 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1035 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1036 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1037 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1038 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1039 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1040 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1041 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1042 AC_SUBST(BITCOIN_DAEMON_NAME)
1043 AC_SUBST(BITCOIN_GUI_NAME)
1044 AC_SUBST(BITCOIN_CLI_NAME)
1045 AC_SUBST(BITCOIN_TX_NAME)
1047 AC_SUBST(RELDFLAGS)
1048 AC_SUBST(HARDENED_CXXFLAGS)
1049 AC_SUBST(HARDENED_CPPFLAGS)
1050 AC_SUBST(HARDENED_LDFLAGS)
1051 AC_SUBST(PIC_FLAGS)
1052 AC_SUBST(PIE_FLAGS)
1053 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1054 AC_SUBST(USE_UPNP)
1055 AC_SUBST(USE_QRCODE)
1056 AC_SUBST(BOOST_LIBS)
1057 AC_SUBST(TESTDEFS)
1058 AC_SUBST(LEVELDB_TARGET_FLAGS)
1059 AC_SUBST(MINIUPNPC_CPPFLAGS)
1060 AC_SUBST(MINIUPNPC_LIBS)
1061 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1062 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1063 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1064 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1065 AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py])
1067 dnl boost's m4 checks do something really nasty: they export these vars. As a
1068 dnl result, they leak into secp256k1's configure and crazy things happen.
1069 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1070 CPPFLAGS_TEMP="$CPPFLAGS"
1071 unset CPPFLAGS
1072 CPPFLAGS="$CPPFLAGS_TEMP"
1074 LDFLAGS_TEMP="$LDFLAGS"
1075 unset LDFLAGS
1076 LDFLAGS="$LDFLAGS_TEMP"
1078 LIBS_TEMP="$LIBS"
1079 unset LIBS
1080 LIBS="$LIBS_TEMP"
1082 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1083 unset PKG_CONFIG_PATH
1084 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1086 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1087 unset PKG_CONFIG_LIBDIR
1088 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1090 if test x$system_univalue = xno; then
1091   AC_CONFIG_SUBDIRS([src/univalue])
1094 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1095 AC_CONFIG_SUBDIRS([src/secp256k1])
1097 AC_OUTPUT
1099 dnl Taken from https://wiki.debian.org/RpathIssue
1100 case $host in
1101    *-*-linux-gnu)
1102      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1103      sed < libtool > libtool-2 \
1104      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1105      mv libtool-2 libtool
1106      chmod 755 libtool
1107    ;;
1108 esac
1110 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1111 case ${OS} in
1112    *Windows*)
1113      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1114      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
1115    ;;
1116 esac