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