[depends] ccache 3.3.1
[bitcoinplatinum.git] / configure.ac
blob25b828f18c6fde83def07d9537aa850d1c770ced
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,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
486   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
488   if test x$TARGET_OS != xwindows; then
489     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
490     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
491   fi
493   case $host in
494     *mingw*)
495        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
496     ;;
497   esac
500 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
501 if test x$TARGET_OS = xdarwin; then
502   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
505 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])
506 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
507 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
509 AC_CHECK_DECLS([strnlen])
511 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
512                 [#if HAVE_ENDIAN_H
513                  #include <endian.h>
514                  #elif HAVE_SYS_ENDIAN_H
515                  #include <sys/endian.h>
516                  #endif])
518 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
519                 [#if HAVE_BYTESWAP_H
520                  #include <byteswap.h>
521                  #endif])
523 dnl Check for MSG_NOSIGNAL
524 AC_MSG_CHECKING(for MSG_NOSIGNAL)
525 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
526  [[ int f = MSG_NOSIGNAL; ]])],
527  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
528  [ AC_MSG_RESULT(no)]
531 AC_MSG_CHECKING([for visibility attribute])
532 AC_LINK_IFELSE([AC_LANG_SOURCE([
533   int foo_def( void ) __attribute__((visibility("default")));
534   int main(){}
535   ])],
536   [
537     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
538     AC_MSG_RESULT(yes)
539   ],
540   [
541     AC_MSG_RESULT(no)
542     if test x$use_reduce_exports = xyes; then
543       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
544     fi
545   ]
548 if test x$use_reduce_exports = xyes; then
549   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
550   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
553 LEVELDB_CPPFLAGS=
554 LIBLEVELDB=
555 LIBMEMENV=
556 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
557 AC_SUBST(LEVELDB_CPPFLAGS)
558 AC_SUBST(LIBLEVELDB)
559 AC_SUBST(LIBMEMENV)
561 if test x$enable_wallet != xno; then
562     dnl Check for libdb_cxx only if wallet enabled
563     BITCOIN_FIND_BDB48
566 dnl Check for libminiupnpc (optional)
567 if test x$use_upnp != xno; then
568   AC_CHECK_HEADERS(
569     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
570     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
571     [have_miniupnpc=no]
572   )
575 BITCOIN_QT_INIT
577 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
578 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
580 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
581     use_boost=no
582 else
583     use_boost=yes
586 if test x$use_boost = xyes; then
588 dnl Check for boost libs
589 AX_BOOST_BASE
590 AX_BOOST_SYSTEM
591 AX_BOOST_FILESYSTEM
592 AX_BOOST_PROGRAM_OPTIONS
593 AX_BOOST_THREAD
594 AX_BOOST_CHRONO
597 if test x$use_reduce_exports = xyes; then
598   AC_MSG_CHECKING([for working boost reduced exports])
599   TEMP_CPPFLAGS="$CPPFLAGS"
600   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
601   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
602       @%:@include <boost/version.hpp>
603     ]], [[
604       #if BOOST_VERSION >= 104900
605       // Everything is okay
606       #else
607       #  error Boost version is too old
608       #endif
609     ]])],[
610       AC_MSG_RESULT(yes)
611     ],[
612     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
613   ])
614   CPPFLAGS="$TEMP_CPPFLAGS"
618 if test x$use_reduce_exports = xyes; then
619     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
620     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
623 if test x$use_tests = xyes; then
625   if test x$HEXDUMP = x; then
626     AC_MSG_ERROR(hexdump is required for tests)
627   fi
630   if test x$use_boost = xyes; then
632   AX_BOOST_UNIT_TEST_FRAMEWORK
634   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
635   AC_MSG_CHECKING([for dynamic linked boost test])
636   TEMP_LIBS="$LIBS"
637   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
638   TEMP_CPPFLAGS="$CPPFLAGS"
639   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
640   AC_LINK_IFELSE([AC_LANG_SOURCE([
641        #define BOOST_TEST_DYN_LINK
642        #define BOOST_TEST_MAIN
643         #include <boost/test/unit_test.hpp>
645        ])],
646     [AC_MSG_RESULT(yes)]
647     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
648     [AC_MSG_RESULT(no)])
649   LIBS="$TEMP_LIBS"
650   CPPFLAGS="$TEMP_CPPFLAGS"
652   fi
655 if test x$use_boost = xyes; then
657 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
660 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
661 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
662 dnl the abi. This was fixed in 1.57.
664 dnl When building against that installed version using c++11, the headers pick up
665 dnl on the native c++11 scoped enum support and enable it, however it will fail to
666 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
667 dnl fail.
668 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
670 TEMP_LIBS="$LIBS"
671 LIBS="$BOOST_LIBS $LIBS"
672 TEMP_CPPFLAGS="$CPPFLAGS"
673 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
674 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
675 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
676   #include "boost/config.hpp"
677   #include "boost/version.hpp"
678   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
679   #define BOOST_NO_SCOPED_ENUMS
680   #define BOOST_NO_CXX11_SCOPED_ENUMS
681   #define CHECK
682   #endif
683   #include "boost/filesystem.hpp"
684   ]],[[
685   #if defined(CHECK)
686     boost::filesystem::copy_file("foo", "bar");
687   #else
688     choke;
689   #endif
690   ]])],
691   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
692 LIBS="$TEMP_LIBS"
693 CPPFLAGS="$TEMP_CPPFLAGS"
695 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
696 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
697 dnl a working version is available, else fall back to sleep. sleep was removed
698 dnl after 1.56.
699 dnl If neither is available, abort.
700 TEMP_LIBS="$LIBS"
701 LIBS="$BOOST_LIBS $LIBS"
702 TEMP_CPPFLAGS="$CPPFLAGS"
703 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
704 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
705   #include <boost/thread/thread.hpp>
706   #include <boost/version.hpp>
707   ]],[[
708   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
709       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
710   #else
711    choke me
712   #endif
713   ]])],
714   [boost_sleep=yes;
715      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
716   [boost_sleep=no])
717 LIBS="$TEMP_LIBS"
718 CPPFLAGS="$TEMP_CPPFLAGS"
720 if test x$boost_sleep != xyes; then
721 TEMP_LIBS="$LIBS"
722 LIBS="$BOOST_LIBS $LIBS"
723 TEMP_CPPFLAGS="$CPPFLAGS"
724 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
725 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
726   #include <boost/version.hpp>
727   #include <boost/thread.hpp>
728   #include <boost/date_time/posix_time/posix_time_types.hpp>
729   ]],[[
730   #if BOOST_VERSION <= 105600
731       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
732   #else
733    choke me
734   #endif
735   ]])],
736   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
737   [boost_sleep=no])
738 LIBS="$TEMP_LIBS"
739 CPPFLAGS="$TEMP_CPPFLAGS"
742 if test x$boost_sleep != xyes; then
743   AC_MSG_ERROR(No working boost sleep implementation found.)
748 if test x$use_pkgconfig = xyes; then
749   : dnl
750   m4_ifdef(
751     [PKG_CHECK_MODULES],
752     [
753       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
754       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
755       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
756       if test x$use_qr != xno; then
757         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
758       fi
759       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
760         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
761         if test x$TARGET_OS != xwindows; then
762           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
763         fi
764       fi
766       if test "x$use_zmq" = "xyes"; then
767         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
768           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
769           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
770            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
771            use_zmq=no])
772       else
773           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
774       fi
775     ]
776   )
777 else
778   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
779   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
781   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
782   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
784   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
785     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
786     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
787     if test x$TARGET_OS != xwindows; then
788       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
789     fi
790   fi
792   if test "x$use_zmq" = "xyes"; then
793      AC_CHECK_HEADER([zmq.h],
794        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
795        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
796         use_zmq=no
797         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
798      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
799        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
800         use_zmq=no
801         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
802   else
803     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
804   fi
806   if test "x$use_zmq" = "xyes"; then
807     dnl Assume libzmq was built for static linking
808     case $host in
809       *mingw*)
810         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
811       ;;
812     esac
813   fi
815   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
816   if test x$use_qr != xno; then
817     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
818     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
819   fi
822 dnl univalue check
824 need_bundled_univalue=yes
826 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
827   need_bundled_univalue=no
828 else
830 if test x$system_univalue != xno ; then
831   found_univalue=no
832   if test x$use_pkgconfig = xyes; then
833     : #NOP
834     m4_ifdef(
835       [PKG_CHECK_MODULES],
836       [
837         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
838       ]
839     )
840   else
841     AC_CHECK_HEADER([univalue.h],[
842       AC_CHECK_LIB([univalue],  [main],[
843         UNIVALUE_LIBS=-lunivalue
844         found_univalue=yes
845       ],[true])
846     ],[true])
847   fi
849   if test x$found_univalue = xyes ; then
850     system_univalue=yes
851     need_bundled_univalue=no
852   elif test x$system_univalue = xyes ; then
853     AC_MSG_ERROR([univalue not found])
854   else
855     system_univalue=no
856   fi
859 if test x$need_bundled_univalue = xyes ; then
860   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
861   UNIVALUE_LIBS='univalue/libunivalue.la'
866 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
867 AC_SUBST(UNIVALUE_CFLAGS)
868 AC_SUBST(UNIVALUE_LIBS)
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_bench$use_tests = xnononononono; then
1005   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench 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([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1019 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1021 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1022 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1023 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1024 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1025 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1026 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1027 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1028 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1029 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1030 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1031 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1032 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1033 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1034 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1035 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1036 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1037 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1038 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1039 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1040 AC_SUBST(BITCOIN_DAEMON_NAME)
1041 AC_SUBST(BITCOIN_GUI_NAME)
1042 AC_SUBST(BITCOIN_CLI_NAME)
1043 AC_SUBST(BITCOIN_TX_NAME)
1045 AC_SUBST(RELDFLAGS)
1046 AC_SUBST(HARDENED_CXXFLAGS)
1047 AC_SUBST(HARDENED_CPPFLAGS)
1048 AC_SUBST(HARDENED_LDFLAGS)
1049 AC_SUBST(PIC_FLAGS)
1050 AC_SUBST(PIE_FLAGS)
1051 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1052 AC_SUBST(USE_UPNP)
1053 AC_SUBST(USE_QRCODE)
1054 AC_SUBST(BOOST_LIBS)
1055 AC_SUBST(TESTDEFS)
1056 AC_SUBST(LEVELDB_TARGET_FLAGS)
1057 AC_SUBST(MINIUPNPC_CPPFLAGS)
1058 AC_SUBST(MINIUPNPC_LIBS)
1059 AC_SUBST(CRYPTO_LIBS)
1060 AC_SUBST(SSL_LIBS)
1061 AC_SUBST(EVENT_LIBS)
1062 AC_SUBST(EVENT_PTHREADS_LIBS)
1063 AC_SUBST(ZMQ_LIBS)
1064 AC_SUBST(PROTOBUF_LIBS)
1065 AC_SUBST(QR_LIBS)
1066 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1067 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1068 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1069 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1070 AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py])
1072 dnl boost's m4 checks do something really nasty: they export these vars. As a
1073 dnl result, they leak into secp256k1's configure and crazy things happen.
1074 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1075 CPPFLAGS_TEMP="$CPPFLAGS"
1076 unset CPPFLAGS
1077 CPPFLAGS="$CPPFLAGS_TEMP"
1079 LDFLAGS_TEMP="$LDFLAGS"
1080 unset LDFLAGS
1081 LDFLAGS="$LDFLAGS_TEMP"
1083 LIBS_TEMP="$LIBS"
1084 unset LIBS
1085 LIBS="$LIBS_TEMP"
1087 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1088 unset PKG_CONFIG_PATH
1089 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1091 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1092 unset PKG_CONFIG_LIBDIR
1093 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1095 if test x$need_bundled_univalue = xyes; then
1096   AC_CONFIG_SUBDIRS([src/univalue])
1099 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1100 AC_CONFIG_SUBDIRS([src/secp256k1])
1102 AC_OUTPUT
1104 dnl Taken from https://wiki.debian.org/RpathIssue
1105 case $host in
1106    *-*-linux-gnu)
1107      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1108      sed < libtool > libtool-2 \
1109      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1110      mv libtool-2 libtool
1111      chmod 755 libtool
1112    ;;
1113 esac
1115 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1116 case ${OS} in
1117    *Windows*)
1118      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1119      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
1120    ;;
1121 esac