Use pindexBestHeader instead of setBlockIndexCandidates for NotifyHeaderTip()
[bitcoinplatinum.git] / configure.ac
blob705327e816d94c437251acda2848f4470b7e5b12
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 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
73 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
74 AC_PATH_PROG(GENHTML, genhtml)
75 AC_PATH_PROG([GIT], [git])
76 AC_PATH_PROG(CCACHE,ccache)
77 AC_PATH_PROG(XGETTEXT,xgettext)
78 AC_PATH_PROG(HEXDUMP,hexdump)
79 AC_PATH_TOOL(READELF, readelf)
80 AC_PATH_TOOL(CPPFILT, c++filt)
81 AC_PATH_TOOL(OBJCOPY, objcopy)
83 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
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_ENABLE([extended-rpc-tests],
120     AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
121     [use_extended_rpc_tests=$enableval],
122     [use_extended_rpc_tests=no])
124 AC_ARG_WITH([qrencode],
125   [AS_HELP_STRING([--with-qrencode],
126   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
127   [use_qr=$withval],
128   [use_qr=auto])
130 AC_ARG_ENABLE([hardening],
131   [AS_HELP_STRING([--disable-hardening],
132   [do not attempt to harden the resulting executables (default is to harden)])],
133   [use_hardening=$enableval],
134   [use_hardening=yes])
136 AC_ARG_ENABLE([reduce-exports],
137   [AS_HELP_STRING([--enable-reduce-exports],
138   [attempt to reduce exported symbols in the resulting executables (default is no)])],
139   [use_reduce_exports=$enableval],
140   [use_reduce_exports=no])
142 AC_ARG_ENABLE([ccache],
143   [AS_HELP_STRING([--disable-ccache],
144   [do not use ccache for building (default is to use if found)])],
145   [use_ccache=$enableval],
146   [use_ccache=auto])
148 AC_ARG_ENABLE([lcov],
149   [AS_HELP_STRING([--enable-lcov],
150   [enable lcov testing (default is no)])],
151   [use_lcov=yes],
152   [use_lcov=no])
154 AC_ARG_ENABLE([glibc-back-compat],
155   [AS_HELP_STRING([--enable-glibc-back-compat],
156   [enable backwards compatibility with glibc])],
157   [use_glibc_compat=$enableval],
158   [use_glibc_compat=no])
160 AC_ARG_WITH([system-univalue],
161   [AS_HELP_STRING([--with-system-univalue],
162   [Build with system UniValue (default is no)])],
163   [system_univalue=$withval],
164   [system_univalue=no]
166 AC_ARG_ENABLE([zmq],
167   [AS_HELP_STRING([--disable-zmq],
168   [disable ZMQ notifications])],
169   [use_zmq=$enableval],
170   [use_zmq=yes])
172 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
174 AC_ARG_ENABLE(man,
175     [AS_HELP_STRING([--disable-man],
176                     [do not install man pages (default is to install)])],,
177     enable_man=yes)
178 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
180 # Enable debug
181 AC_ARG_ENABLE([debug],
182     [AS_HELP_STRING([--enable-debug],
183                     [use debug compiler flags and macros (default is no)])],
184     [enable_debug=$enableval],
185     [enable_debug=no])
187 AC_LANG_PUSH([C++])
188 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
190 if test "x$enable_debug" = xyes; then
191     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
192     if test "x$GCC" = xyes; then
193         CFLAGS="$CFLAGS -g3 -O0"
194     fi
196     if test "x$GXX" = xyes; then
197         CXXFLAGS="$CXXFLAGS -g3 -O0"
198     fi
201 if test "x$CXXFLAGS_overridden" = "xno"; then
202   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
203   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
204   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
205   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
207   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
208   ## unknown options if any other warning is produced. Test the -Wfoo case, and
209   ## set the -Wno-foo case if it works.
210   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
211   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
212   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
213   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
215 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
217 AC_ARG_WITH([utils],
218   [AS_HELP_STRING([--with-utils],
219   [build bitcoin-cli bitcoin-tx (default=yes)])],
220   [build_bitcoin_utils=$withval],
221   [build_bitcoin_utils=yes])
223 AC_ARG_WITH([libs],
224   [AS_HELP_STRING([--with-libs],
225   [build libraries (default=yes)])],
226   [build_bitcoin_libs=$withval],
227   [build_bitcoin_libs=yes])
229 AC_ARG_WITH([daemon],
230   [AS_HELP_STRING([--with-daemon],
231   [build bitcoind daemon (default=yes)])],
232   [build_bitcoind=$withval],
233   [build_bitcoind=yes])
235 use_pkgconfig=yes
236 case $host in
237   *mingw*)
239      #pkgconfig does more harm than good with MinGW
240      use_pkgconfig=no
242      TARGET_OS=windows
243      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
244      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
245      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
246      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
247      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
248      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
249      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
250      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
251      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
252      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
253      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
254      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
255      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
256      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
257      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
258      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
259      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
260      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
261      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
263      # -static is interpreted by libtool, where it has a different meaning.
264      # In libtool-speak, it's -all-static.
265      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
267      AC_PATH_PROG([MAKENSIS], [makensis], none)
268      if test x$MAKENSIS = xnone; then
269        AC_MSG_WARN("makensis not found. Cannot create installer.")
270      fi
272      AC_PATH_TOOL(WINDRES, windres, none)
273      if test x$WINDRES = xnone; then
274        AC_MSG_ERROR("windres not found")
275      fi
277      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
278      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
279      if test "x$CXXFLAGS_overridden" = "xno"; then
280        CXXFLAGS="$CXXFLAGS -w"
281      fi
282      case $host in
283        i?86-*) WINDOWS_BITS=32 ;;
284        x86_64-*) WINDOWS_BITS=64 ;;
285        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
286      esac
287      AC_SUBST(WINDOWS_BITS)
289      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
290      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
291      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
292      dnl also overridden to prevent their insertion later.
293      dnl This should only affect dll's.
294      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
295      postdeps_CXX=
297      ;;
298   *darwin*)
299      TARGET_OS=darwin
300      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
301      if  test x$cross_compiling != xyes; then
302        BUILD_OS=darwin
303        AC_CHECK_PROG([PORT],port, port)
304        if test x$PORT = xport; then
305          dnl add default macports paths
306          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
307          LIBS="$LIBS -L/opt/local/lib"
308          if test -d /opt/local/include/db48; then
309            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
310            LIBS="$LIBS -L/opt/local/lib/db48"
311          fi
312        fi
314        AC_CHECK_PROG([BREW],brew, brew)
315        if test x$BREW = xbrew; then
316          dnl These Homebrew packages may be keg-only, meaning that they won't be found
317          dnl in expected paths because they may conflict with system files. Ask
318          dnl Homebrew where each one is located, then adjust paths accordingly.
319          dnl It's safe to add these paths even if the functionality is disabled by
320          dnl the user (--without-wallet or --without-gui for example).
322          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
323          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
324          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
325          if test x$openssl_prefix != x; then
326            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
327            export PKG_CONFIG_PATH
328          fi
329          if test x$bdb_prefix != x; then
330            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
331            LIBS="$LIBS -L$bdb_prefix/lib"
332          fi
333          if test x$qt5_prefix != x; then
334            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
335            export PKG_CONFIG_PATH
336          fi
337        fi
338      else
339        case $build_os in
340          *darwin*)
341            BUILD_OS=darwin
342            ;;
343          *)
344            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
345            AC_PATH_TOOL([OTOOL], [otool], otool)
346            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
347            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
348            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
349            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
351            dnl libtool will try to strip the static lib, which is a problem for
352            dnl cross-builds because strip attempts to call a hard-coded ld,
353            dnl which may not exist in the path. Stripping the .a is not
354            dnl necessary, so just disable it.
355            old_striplib=
356            ;;
357        esac
358      fi
360      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
361      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
362      OBJCXXFLAGS="$CXXFLAGS"
363      ;;
364    *linux*)
365      TARGET_OS=linux
366      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
367      ;;
368    *freebsd*)
369      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
370      ;;
371    *openbsd*)
372      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
373      ;;
374    *)
375      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
376      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
377      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
378      ;;
379 esac
381 if test x$use_pkgconfig = xyes; then
382   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.)])
383   m4_ifdef([PKG_PROG_PKG_CONFIG], [
384   PKG_PROG_PKG_CONFIG
385   if test x"$PKG_CONFIG" = "x"; then
386     AC_MSG_ERROR(pkg-config not found.)
387   fi
388   ])
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$PYTHON = x; then
403     AC_MSG_ERROR("lcov testing requested but python not found")
404   fi
405   if test x$GENHTML = x; then
406     AC_MSG_ERROR("lcov testing requested but genhtml not found")
407   fi
408   LCOV="$LCOV --gcov-tool=$GCOV"
409   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
410     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
413 dnl Check for endianness
414 AC_C_BIGENDIAN
416 dnl Check for pthread compile/link requirements
417 AX_PTHREAD
419 # The following macro will add the necessary defines to bitcoin-config.h, but
420 # they also need to be passed down to any subprojects. Pull the results out of
421 # the cache and add them to CPPFLAGS.
422 AC_SYS_LARGEFILE
423 # detect POSIX or GNU variant of strerror_r
424 AC_FUNC_STRERROR_R
426 if test x$ac_cv_sys_file_offset_bits != x &&
427    test x$ac_cv_sys_file_offset_bits != xno &&
428    test x$ac_cv_sys_file_offset_bits != xunknown; then
429   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
432 if test x$ac_cv_sys_large_files != x &&
433    test x$ac_cv_sys_large_files != xno &&
434    test x$ac_cv_sys_large_files != xunknown; then
435   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
438 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
440 AX_GCC_FUNC_ATTRIBUTE([visibility])
441 AX_GCC_FUNC_ATTRIBUTE([dllexport])
442 AX_GCC_FUNC_ATTRIBUTE([dllimport])
444 if test x$use_glibc_compat != xno; then
446   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
447   #in anyway for back-compat.
448   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
450   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
451   # See which one is present here.
452   AC_MSG_CHECKING(__fdelt_chk type)
453   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
454                     #undef _FORTIFY_SOURCE
455                   #endif
456                   #define _FORTIFY_SOURCE 2
457                   #include <sys/select.h>
458      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
459     [ fdelt_type="long unsigned int"],
460     [ fdelt_type="long int"])
461   AC_MSG_RESULT($fdelt_type)
462   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
463 else
464   AC_SEARCH_LIBS([clock_gettime],[rt])
467 if test x$TARGET_OS != xwindows; then
468   # All windows code is PIC, forcing it on just adds useless compile warnings
469   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
472 if test x$use_hardening != xno; then
473   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
474   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
476   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
477     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
478       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
479     ])
480     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
481   ])
483   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
484   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
485   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
486   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
487   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
489   if test x$TARGET_OS != xwindows; then
490     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
491     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
492   fi
494   case $host in
495     *mingw*)
496        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
497     ;;
498   esac
501 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
502 if test x$TARGET_OS = xdarwin; then
503   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
506 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])
507 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
508 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
510 AC_CHECK_DECLS([strnlen])
512 # Check for daemon(3), unrelated to --with-daemon (although used by it)
513 AC_CHECK_DECLS([daemon])
515 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
516                 [#if HAVE_ENDIAN_H
517                  #include <endian.h>
518                  #elif HAVE_SYS_ENDIAN_H
519                  #include <sys/endian.h>
520                  #endif])
522 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
523                 [#if HAVE_BYTESWAP_H
524                  #include <byteswap.h>
525                  #endif])
527 dnl Check for MSG_NOSIGNAL
528 AC_MSG_CHECKING(for MSG_NOSIGNAL)
529 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
530  [[ int f = MSG_NOSIGNAL; ]])],
531  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
532  [ AC_MSG_RESULT(no)]
535 AC_MSG_CHECKING([for visibility attribute])
536 AC_LINK_IFELSE([AC_LANG_SOURCE([
537   int foo_def( void ) __attribute__((visibility("default")));
538   int main(){}
539   ])],
540   [
541     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
542     AC_MSG_RESULT(yes)
543   ],
544   [
545     AC_MSG_RESULT(no)
546     if test x$use_reduce_exports = xyes; then
547       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
548     fi
549   ]
552 if test x$use_reduce_exports = xyes; then
553   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
554   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
557 LEVELDB_CPPFLAGS=
558 LIBLEVELDB=
559 LIBMEMENV=
560 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
561 AC_SUBST(LEVELDB_CPPFLAGS)
562 AC_SUBST(LIBLEVELDB)
563 AC_SUBST(LIBMEMENV)
565 if test x$enable_wallet != xno; then
566     dnl Check for libdb_cxx only if wallet enabled
567     BITCOIN_FIND_BDB48
570 dnl Check for libminiupnpc (optional)
571 if test x$use_upnp != xno; then
572   AC_CHECK_HEADERS(
573     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
574     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
575     [have_miniupnpc=no]
576   )
579 BITCOIN_QT_INIT
581 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
582 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
584 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
585     use_boost=no
586 else
587     use_boost=yes
590 if test x$use_boost = xyes; then
592 dnl Minimum required Boost version
593 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
595 dnl Check for boost libs
596 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
597 AX_BOOST_SYSTEM
598 AX_BOOST_FILESYSTEM
599 AX_BOOST_PROGRAM_OPTIONS
600 AX_BOOST_THREAD
601 AX_BOOST_CHRONO
604 if test x$use_reduce_exports = xyes; then
605   AC_MSG_CHECKING([for working boost reduced exports])
606   TEMP_CPPFLAGS="$CPPFLAGS"
607   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
608   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
609       @%:@include <boost/version.hpp>
610     ]], [[
611       #if BOOST_VERSION >= 104900
612       // Everything is okay
613       #else
614       #  error Boost version is too old
615       #endif
616     ]])],[
617       AC_MSG_RESULT(yes)
618     ],[
619     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
620   ])
621   CPPFLAGS="$TEMP_CPPFLAGS"
625 if test x$use_reduce_exports = xyes; then
626     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
627     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
630 if test x$use_tests = xyes; then
632   if test x$HEXDUMP = x; then
633     AC_MSG_ERROR(hexdump is required for tests)
634   fi
637   if test x$use_boost = xyes; then
639   AX_BOOST_UNIT_TEST_FRAMEWORK
641   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
642   AC_MSG_CHECKING([for dynamic linked boost test])
643   TEMP_LIBS="$LIBS"
644   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
645   TEMP_CPPFLAGS="$CPPFLAGS"
646   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
647   AC_LINK_IFELSE([AC_LANG_SOURCE([
648        #define BOOST_TEST_DYN_LINK
649        #define BOOST_TEST_MAIN
650         #include <boost/test/unit_test.hpp>
652        ])],
653     [AC_MSG_RESULT(yes)]
654     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
655     [AC_MSG_RESULT(no)])
656   LIBS="$TEMP_LIBS"
657   CPPFLAGS="$TEMP_CPPFLAGS"
659   fi
662 if test x$use_boost = xyes; then
664 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
667 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
668 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
669 dnl the abi. This was fixed in 1.57.
671 dnl When building against that installed version using c++11, the headers pick up
672 dnl on the native c++11 scoped enum support and enable it, however it will fail to
673 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
674 dnl fail.
675 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
677 TEMP_LIBS="$LIBS"
678 LIBS="$BOOST_LIBS $LIBS"
679 TEMP_CPPFLAGS="$CPPFLAGS"
680 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
681 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
682 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
683   #include "boost/config.hpp"
684   #include "boost/version.hpp"
685   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
686   #define BOOST_NO_SCOPED_ENUMS
687   #define BOOST_NO_CXX11_SCOPED_ENUMS
688   #define CHECK
689   #endif
690   #include "boost/filesystem.hpp"
691   ]],[[
692   #if defined(CHECK)
693     boost::filesystem::copy_file("foo", "bar");
694   #else
695     choke;
696   #endif
697   ]])],
698   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
699 LIBS="$TEMP_LIBS"
700 CPPFLAGS="$TEMP_CPPFLAGS"
702 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
703 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
704 dnl a working version is available, else fall back to sleep. sleep was removed
705 dnl after 1.56.
706 dnl If neither is available, abort.
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/thread/thread.hpp>
713   #include <boost/version.hpp>
714   ]],[[
715   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
716       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
717   #else
718    choke me
719   #endif
720   ]])],
721   [boost_sleep=yes;
722      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
723   [boost_sleep=no])
724 LIBS="$TEMP_LIBS"
725 CPPFLAGS="$TEMP_CPPFLAGS"
727 if test x$boost_sleep != xyes; then
728 TEMP_LIBS="$LIBS"
729 LIBS="$BOOST_LIBS $LIBS"
730 TEMP_CPPFLAGS="$CPPFLAGS"
731 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
732 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
733   #include <boost/version.hpp>
734   #include <boost/thread.hpp>
735   #include <boost/date_time/posix_time/posix_time_types.hpp>
736   ]],[[
737   #if BOOST_VERSION <= 105600
738       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
739   #else
740    choke me
741   #endif
742   ]])],
743   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
744   [boost_sleep=no])
745 LIBS="$TEMP_LIBS"
746 CPPFLAGS="$TEMP_CPPFLAGS"
749 if test x$boost_sleep != xyes; then
750   AC_MSG_ERROR(No working boost sleep implementation found.)
755 if test x$use_pkgconfig = xyes; then
756   : dnl
757   m4_ifdef(
758     [PKG_CHECK_MODULES],
759     [
760       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
761       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
762       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
763       if test x$use_qr != xno; then
764         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
765       fi
766       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
767         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
768         if test x$TARGET_OS != xwindows; then
769           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
770         fi
771       fi
773       if test "x$use_zmq" = "xyes"; then
774         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
775           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
776           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
777            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
778            use_zmq=no])
779       else
780           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
781       fi
782     ]
783   )
784 else
785   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
786   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
788   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
789   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
791   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
792     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
793     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
794     if test x$TARGET_OS != xwindows; then
795       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
796     fi
797   fi
799   if test "x$use_zmq" = "xyes"; then
800      AC_CHECK_HEADER([zmq.h],
801        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
802        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
803         use_zmq=no
804         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
805      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
806        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
807         use_zmq=no
808         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
809   else
810     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
811   fi
813   if test "x$use_zmq" = "xyes"; then
814     dnl Assume libzmq was built for static linking
815     case $host in
816       *mingw*)
817         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
818       ;;
819     esac
820   fi
822   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
823   if test x$use_qr != xno; then
824     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
825     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
826   fi
829 dnl univalue check
831 need_bundled_univalue=yes
833 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
834   need_bundled_univalue=no
835 else
837 if test x$system_univalue != xno ; then
838   found_univalue=no
839   if test x$use_pkgconfig = xyes; then
840     : #NOP
841     m4_ifdef(
842       [PKG_CHECK_MODULES],
843       [
844         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
845       ]
846     )
847   else
848     AC_CHECK_HEADER([univalue.h],[
849       AC_CHECK_LIB([univalue],  [main],[
850         UNIVALUE_LIBS=-lunivalue
851         found_univalue=yes
852       ],[true])
853     ],[true])
854   fi
856   if test x$found_univalue = xyes ; then
857     system_univalue=yes
858     need_bundled_univalue=no
859   elif test x$system_univalue = xyes ; then
860     AC_MSG_ERROR([univalue not found])
861   else
862     system_univalue=no
863   fi
866 if test x$need_bundled_univalue = xyes ; then
867   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
868   UNIVALUE_LIBS='univalue/libunivalue.la'
873 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
874 AC_SUBST(UNIVALUE_CFLAGS)
875 AC_SUBST(UNIVALUE_LIBS)
877 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
879 AC_MSG_CHECKING([whether to build bitcoind])
880 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
881 AC_MSG_RESULT($build_bitcoind)
883 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
884 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
885 AC_MSG_RESULT($build_bitcoin_utils)
887 AC_MSG_CHECKING([whether to build libraries])
888 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
889 if test x$build_bitcoin_libs = xyes; then
890   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
891   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
893 AC_MSG_RESULT($build_bitcoin_libs)
895 AC_LANG_POP
897 if test "x$use_ccache" != "xno"; then
898   AC_MSG_CHECKING(if ccache should be used)
899   if test x$CCACHE = x; then
900     if test "x$use_ccache" = "xyes"; then
901       AC_MSG_ERROR([ccache not found.]);
902     else
903       use_ccache=no
904     fi
905   else
906     use_ccache=yes
907     CC="$ac_cv_path_CCACHE $CC"
908     CXX="$ac_cv_path_CCACHE $CXX"
909   fi
910   AC_MSG_RESULT($use_ccache)
912 if test "x$use_ccache" = "xyes"; then
913     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
916 dnl enable wallet
917 AC_MSG_CHECKING([if wallet should be enabled])
918 if test x$enable_wallet != xno; then
919   AC_MSG_RESULT(yes)
920   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
922 else
923   AC_MSG_RESULT(no)
926 dnl enable upnp support
927 AC_MSG_CHECKING([whether to build with support for UPnP])
928 if test x$have_miniupnpc = xno; then
929   if test x$use_upnp = xyes; then
930      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
931   fi
932   AC_MSG_RESULT(no)
933 else
934   if test x$use_upnp != xno; then
935     AC_MSG_RESULT(yes)
936     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
937     use_upnp=yes
938     upnp_setting=0
939     if test x$use_upnp_default != xno; then
940       use_upnp_default=yes
941       upnp_setting=1
942     fi
943     AC_MSG_RESULT($use_upnp_default)
944     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
945     if test x$TARGET_OS = xwindows; then
946       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
947     fi
948   else
949     AC_MSG_RESULT(no)
950   fi
953 dnl these are only used when qt is enabled
954 BUILD_TEST_QT=""
955 if test x$bitcoin_enable_qt != xno; then
956   dnl enable dbus support
957   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
958   if test x$bitcoin_enable_qt_dbus != xno; then
959     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
960   fi
961   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
963   dnl enable qr support
964   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
965   if test x$have_qrencode = xno; then
966     if test x$use_qr = xyes; then
967      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
968     fi
969     AC_MSG_RESULT(no)
970   else
971     if test x$use_qr != xno; then
972       AC_MSG_RESULT(yes)
973       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
974       use_qr=yes
975     else
976       AC_MSG_RESULT(no)
977     fi
978   fi
980   if test x$XGETTEXT = x; then
981     AC_MSG_WARN("xgettext is required to update qt translations")
982   fi
984   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
985   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
986     AC_MSG_RESULT([yes])
987     BUILD_TEST_QT="yes"
988   else
989     AC_MSG_RESULT([no])
990   fi
993 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
995 AC_MSG_CHECKING([whether to build test_bitcoin])
996 if test x$use_tests = xyes; then
997   AC_MSG_RESULT([yes])
998   BUILD_TEST="yes"
999 else
1000   AC_MSG_RESULT([no])
1001   BUILD_TEST=""
1004 AC_MSG_CHECKING([whether to reduce exports])
1005 if test x$use_reduce_exports = xyes; then
1006   AC_MSG_RESULT([yes])
1007 else
1008   AC_MSG_RESULT([no])
1011 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1012   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1015 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1016 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1017 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1018 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1019 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1020 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1021 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1022 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1023 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1024 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1025 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1026 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1028 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1029 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1030 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1031 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1032 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1033 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1034 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1035 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1036 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1037 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1038 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1039 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1040 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1041 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1042 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1043 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1044 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1045 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1046 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1047 AC_SUBST(BITCOIN_DAEMON_NAME)
1048 AC_SUBST(BITCOIN_GUI_NAME)
1049 AC_SUBST(BITCOIN_CLI_NAME)
1050 AC_SUBST(BITCOIN_TX_NAME)
1052 AC_SUBST(RELDFLAGS)
1053 AC_SUBST(HARDENED_CXXFLAGS)
1054 AC_SUBST(HARDENED_CPPFLAGS)
1055 AC_SUBST(HARDENED_LDFLAGS)
1056 AC_SUBST(PIC_FLAGS)
1057 AC_SUBST(PIE_FLAGS)
1058 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1059 AC_SUBST(USE_UPNP)
1060 AC_SUBST(USE_QRCODE)
1061 AC_SUBST(BOOST_LIBS)
1062 AC_SUBST(TESTDEFS)
1063 AC_SUBST(LEVELDB_TARGET_FLAGS)
1064 AC_SUBST(MINIUPNPC_CPPFLAGS)
1065 AC_SUBST(MINIUPNPC_LIBS)
1066 AC_SUBST(CRYPTO_LIBS)
1067 AC_SUBST(SSL_LIBS)
1068 AC_SUBST(EVENT_LIBS)
1069 AC_SUBST(EVENT_PTHREADS_LIBS)
1070 AC_SUBST(ZMQ_LIBS)
1071 AC_SUBST(PROTOBUF_LIBS)
1072 AC_SUBST(QR_LIBS)
1073 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1074 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1075 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1076 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1077 AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py])
1079 dnl boost's m4 checks do something really nasty: they export these vars. As a
1080 dnl result, they leak into secp256k1's configure and crazy things happen.
1081 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1082 CPPFLAGS_TEMP="$CPPFLAGS"
1083 unset CPPFLAGS
1084 CPPFLAGS="$CPPFLAGS_TEMP"
1086 LDFLAGS_TEMP="$LDFLAGS"
1087 unset LDFLAGS
1088 LDFLAGS="$LDFLAGS_TEMP"
1090 LIBS_TEMP="$LIBS"
1091 unset LIBS
1092 LIBS="$LIBS_TEMP"
1094 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1095 unset PKG_CONFIG_PATH
1096 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1098 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1099 unset PKG_CONFIG_LIBDIR
1100 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1102 if test x$need_bundled_univalue = xyes; then
1103   AC_CONFIG_SUBDIRS([src/univalue])
1106 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1107 AC_CONFIG_SUBDIRS([src/secp256k1])
1109 AC_OUTPUT
1111 dnl Taken from https://wiki.debian.org/RpathIssue
1112 case $host in
1113    *-*-linux-gnu)
1114      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1115      sed < libtool > libtool-2 \
1116      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1117      mv libtool-2 libtool
1118      chmod 755 libtool
1119    ;;
1120 esac
1122 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1123 case ${OS} in
1124    *Windows*)
1125      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1126      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
1127    ;;
1128 esac