1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 14)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2017)
9 define(_COPYRIGHT_HOLDERS,[The %s developers])
10 define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
11 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin],[https://bitcoincore.org/])
12 AC_CONFIG_SRCDIR([src/validation.cpp])
13 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14 AC_CONFIG_AUX_DIR([build-aux])
15 AC_CONFIG_MACRO_DIR([build-aux/m4])
17 BITCOIN_DAEMON_NAME=bitcoind
18 BITCOIN_GUI_NAME=bitcoin-qt
19 BITCOIN_CLI_NAME=bitcoin-cli
20 BITCOIN_TX_NAME=bitcoin-tx
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.
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
45 CXXFLAGS_overridden=no
49 dnl By default, libtool for mingw refuses to link static libs into a dll for
50 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
51 dnl we have those under control, re-enable that functionality.
54 lt_cv_deplibs_check_method="pass_all"
57 dnl Require C++11 compiler (no GNU extensions)
58 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault])
59 dnl Check if -latomic is required for <std::atomic>
62 dnl Unless the user specified OBJCXX, force it to be the same as CXX. This ensures
63 dnl that we get the same -std flags for both.
64 m4_ifdef([AC_PROG_OBJCXX],[
65 if test "x${OBJCXX+set}" = "x"; then
71 dnl Libtool init checks.
74 dnl Check/return PATH for base programs.
76 AC_PATH_TOOL(RANLIB, ranlib)
77 AC_PATH_TOOL(STRIP, strip)
78 AC_PATH_TOOL(GCOV, gcov)
79 AC_PATH_PROG(LCOV, lcov)
80 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
81 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
82 AC_PATH_PROG(GENHTML, genhtml)
83 AC_PATH_PROG([GIT], [git])
84 AC_PATH_PROG(CCACHE,ccache)
85 AC_PATH_PROG(XGETTEXT,xgettext)
86 AC_PATH_PROG(HEXDUMP,hexdump)
87 AC_PATH_TOOL(READELF, readelf)
88 AC_PATH_TOOL(CPPFILT, c++filt)
89 AC_PATH_TOOL(OBJCOPY, objcopy)
91 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
94 AC_ARG_ENABLE([wallet],
95 [AS_HELP_STRING([--disable-wallet],
96 [disable wallet (enabled by default)])],
97 [enable_wallet=$enableval],
100 AC_ARG_WITH([miniupnpc],
101 [AS_HELP_STRING([--with-miniupnpc],
102 [enable UPNP (default is yes if libminiupnpc is found)])],
106 AC_ARG_ENABLE([upnp-default],
107 [AS_HELP_STRING([--enable-upnp-default],
108 [if UPNP is enabled, turn it on at startup (default is no)])],
109 [use_upnp_default=$enableval],
110 [use_upnp_default=no])
113 AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
114 [use_tests=$enableval],
117 AC_ARG_ENABLE(gui-tests,
118 AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
119 [use_gui_tests=$enableval],
120 [use_gui_tests=$use_tests])
123 AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
124 [use_bench=$enableval],
127 AC_ARG_ENABLE([extended-functional-tests],
128 AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests when using lcov (default no)]),
129 [use_extended_functional_tests=$enableval],
130 [use_extended_functional_tests=no])
132 AC_ARG_WITH([qrencode],
133 [AS_HELP_STRING([--with-qrencode],
134 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
138 AC_ARG_ENABLE([hardening],
139 [AS_HELP_STRING([--disable-hardening],
140 [do not attempt to harden the resulting executables (default is to harden)])],
141 [use_hardening=$enableval],
144 AC_ARG_ENABLE([reduce-exports],
145 [AS_HELP_STRING([--enable-reduce-exports],
146 [attempt to reduce exported symbols in the resulting executables (default is no)])],
147 [use_reduce_exports=$enableval],
148 [use_reduce_exports=no])
150 AC_ARG_ENABLE([ccache],
151 [AS_HELP_STRING([--disable-ccache],
152 [do not use ccache for building (default is to use if found)])],
153 [use_ccache=$enableval],
156 AC_ARG_ENABLE([lcov],
157 [AS_HELP_STRING([--enable-lcov],
158 [enable lcov testing (default is no)])],
162 AC_ARG_ENABLE([glibc-back-compat],
163 [AS_HELP_STRING([--enable-glibc-back-compat],
164 [enable backwards compatibility with glibc])],
165 [use_glibc_compat=$enableval],
166 [use_glibc_compat=no])
168 AC_ARG_WITH([system-univalue],
169 [AS_HELP_STRING([--with-system-univalue],
170 [Build with system UniValue (default is no)])],
171 [system_univalue=$withval],
175 [AS_HELP_STRING([--disable-zmq],
176 [disable ZMQ notifications])],
177 [use_zmq=$enableval],
180 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
183 [AS_HELP_STRING([--disable-man],
184 [do not install man pages (default is to install)])],,
186 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
189 AC_ARG_ENABLE([debug],
190 [AS_HELP_STRING([--enable-debug],
191 [use debug compiler flags and macros (default is no)])],
192 [enable_debug=$enableval],
195 # Turn warnings into errors
196 AC_ARG_ENABLE([werror],
197 [AS_HELP_STRING([--enable-werror],
198 [Treat certain compiler warnings as errors (default is no)])],
199 [enable_werror=$enableval],
203 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
205 if test "x$enable_debug" = xyes; then
206 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
207 if test "x$GCC" = xyes; then
208 CFLAGS="$CFLAGS -g3 -O0"
211 if test "x$GXX" = xyes; then
212 CXXFLAGS="$CXXFLAGS -g3 -O0"
217 if test "x$enable_werror" = "xyes"; then
218 if test "x$CXXFLAG_WERROR" = "x"; then
219 AC_MSG_ERROR("enable-werror set but -Werror is not usable")
221 AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
224 if test "x$CXXFLAGS_overridden" = "xno"; then
225 AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
226 AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
227 AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
228 AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
229 AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
231 ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
232 ## unknown options if any other warning is produced. Test the -Wfoo case, and
233 ## set the -Wno-foo case if it works.
234 AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
235 AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
236 AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
237 AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
239 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
242 [AS_HELP_STRING([--with-utils],
243 [build bitcoin-cli bitcoin-tx (default=yes)])],
244 [build_bitcoin_utils=$withval],
245 [build_bitcoin_utils=yes])
248 [AS_HELP_STRING([--with-libs],
249 [build libraries (default=yes)])],
250 [build_bitcoin_libs=$withval],
251 [build_bitcoin_libs=yes])
253 AC_ARG_WITH([daemon],
254 [AS_HELP_STRING([--with-daemon],
255 [build bitcoind daemon (default=yes)])],
256 [build_bitcoind=$withval],
257 [build_bitcoind=yes])
263 #pkgconfig does more harm than good with MinGW
267 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
268 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
269 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
270 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
271 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
272 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
273 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
274 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
275 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
276 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
277 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
278 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
279 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
280 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
281 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
282 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
283 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
284 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
285 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
287 # -static is interpreted by libtool, where it has a different meaning.
288 # In libtool-speak, it's -all-static.
289 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
291 AC_PATH_PROG([MAKENSIS], [makensis], none)
292 if test x$MAKENSIS = xnone; then
293 AC_MSG_WARN("makensis not found. Cannot create installer.")
296 AC_PATH_TOOL(WINDRES, windres, none)
297 if test x$WINDRES = xnone; then
298 AC_MSG_ERROR("windres not found")
301 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
302 LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
303 if test "x$CXXFLAGS_overridden" = "xno"; then
304 CXXFLAGS="$CXXFLAGS -w"
307 i?86-*) WINDOWS_BITS=32 ;;
308 x86_64-*) WINDOWS_BITS=64 ;;
309 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
311 AC_SUBST(WINDOWS_BITS)
313 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
314 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
315 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
316 dnl also overridden to prevent their insertion later.
317 dnl This should only affect dll's.
318 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
324 LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
325 if test x$cross_compiling != xyes; then
327 AC_CHECK_PROG([PORT],port, port)
328 if test x$PORT = xport; then
329 dnl add default macports paths
330 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
331 LIBS="$LIBS -L/opt/local/lib"
332 if test -d /opt/local/include/db48; then
333 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
334 LIBS="$LIBS -L/opt/local/lib/db48"
338 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
339 AC_CHECK_PROG([BREW],brew, brew)
340 if test x$BREW = xbrew; then
341 dnl These Homebrew packages may be keg-only, meaning that they won't be found
342 dnl in expected paths because they may conflict with system files. Ask
343 dnl Homebrew where each one is located, then adjust paths accordingly.
344 dnl It's safe to add these paths even if the functionality is disabled by
345 dnl the user (--without-wallet or --without-gui for example).
347 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
348 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
349 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
350 if test x$openssl_prefix != x; then
351 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
352 export PKG_CONFIG_PATH
354 if test x$bdb_prefix != x; then
355 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
356 LIBS="$LIBS -L$bdb_prefix/lib"
358 if test x$qt5_prefix != x; then
359 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
360 export PKG_CONFIG_PATH
369 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
370 AC_PATH_TOOL([OTOOL], [otool], otool)
371 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
372 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
373 AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
374 AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
376 dnl libtool will try to strip the static lib, which is a problem for
377 dnl cross-builds because strip attempts to call a hard-coded ld,
378 dnl which may not exist in the path. Stripping the .a is not
379 dnl necessary, so just disable it.
385 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
386 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
387 OBJCXXFLAGS="$CXXFLAGS"
391 LEVELDB_TARGET_FLAGS="-DOS_LINUX"
394 LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
397 LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
400 OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
401 AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
402 LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
406 if test x$use_pkgconfig = xyes; then
407 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.)])
408 m4_ifdef([PKG_PROG_PKG_CONFIG], [
410 if test x"$PKG_CONFIG" = "x"; then
411 AC_MSG_ERROR(pkg-config not found.)
416 if test x$use_extended_functional_tests != xno; then
417 AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
420 if test x$use_lcov = xyes; then
421 if test x$LCOV = x; then
422 AC_MSG_ERROR("lcov testing requested but lcov not found")
424 if test x$GCOV = x; then
425 AC_MSG_ERROR("lcov testing requested but gcov not found")
427 if test x$PYTHON = x; then
428 AC_MSG_ERROR("lcov testing requested but python not found")
430 if test x$GENHTML = x; then
431 AC_MSG_ERROR("lcov testing requested but genhtml not found")
433 LCOV="$LCOV --gcov-tool=$GCOV"
434 AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
435 [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
436 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
437 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
440 dnl Check for endianness
443 dnl Check for pthread compile/link requirements
446 # The following macro will add the necessary defines to bitcoin-config.h, but
447 # they also need to be passed down to any subprojects. Pull the results out of
448 # the cache and add them to CPPFLAGS.
450 # detect POSIX or GNU variant of strerror_r
453 if test x$ac_cv_sys_file_offset_bits != x &&
454 test x$ac_cv_sys_file_offset_bits != xno &&
455 test x$ac_cv_sys_file_offset_bits != xunknown; then
456 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
459 if test x$ac_cv_sys_large_files != x &&
460 test x$ac_cv_sys_large_files != xno &&
461 test x$ac_cv_sys_large_files != xunknown; then
462 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
465 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
467 AX_GCC_FUNC_ATTRIBUTE([visibility])
468 AX_GCC_FUNC_ATTRIBUTE([dllexport])
469 AX_GCC_FUNC_ATTRIBUTE([dllimport])
471 if test x$use_glibc_compat != xno; then
473 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
474 #in anyway for back-compat.
475 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
477 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
478 # See which one is present here.
479 AC_MSG_CHECKING(__fdelt_chk type)
480 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
481 #undef _FORTIFY_SOURCE
483 #define _FORTIFY_SOURCE 2
484 #include <sys/select.h>
485 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
486 [ fdelt_type="long unsigned int"],
487 [ fdelt_type="long int"])
488 AC_MSG_RESULT($fdelt_type)
489 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
491 AC_SEARCH_LIBS([clock_gettime],[rt])
494 if test x$TARGET_OS != xwindows; then
495 # All windows code is PIC, forcing it on just adds useless compile warnings
496 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
499 if test x$use_hardening != xno; then
500 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
501 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
503 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
504 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
505 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
507 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
510 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
511 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
512 AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
513 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
514 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
516 if test x$TARGET_OS != xwindows; then
517 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
518 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
523 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
528 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
529 if test x$TARGET_OS = xdarwin; then
530 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
533 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])
535 AC_CHECK_DECLS([strnlen])
537 # Check for daemon(3), unrelated to --with-daemon (although used by it)
538 AC_CHECK_DECLS([daemon])
540 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
543 #elif HAVE_SYS_ENDIAN_H
544 #include <sys/endian.h>
547 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
549 #include <byteswap.h>
552 dnl Check for MSG_NOSIGNAL
553 AC_MSG_CHECKING(for MSG_NOSIGNAL)
554 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
555 [[ int f = MSG_NOSIGNAL; ]])],
556 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
560 dnl Check for MSG_DONTWAIT
561 AC_MSG_CHECKING(for MSG_DONTWAIT)
562 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
563 [[ int f = MSG_DONTWAIT; ]])],
564 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
568 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
569 AC_MSG_CHECKING(for getmemoryinfo)
570 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
571 [[ int f = malloc_info(0, NULL); ]])],
572 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
576 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
577 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
578 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
579 [[ mallopt(M_ARENA_MAX, 1); ]])],
580 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
584 AC_MSG_CHECKING([for visibility attribute])
585 AC_LINK_IFELSE([AC_LANG_SOURCE([
586 int foo_def( void ) __attribute__((visibility("default")));
590 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
595 if test x$use_reduce_exports = xyes; then
596 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
601 # Check for different ways of gathering OS randomness
602 AC_MSG_CHECKING(for Linux getrandom syscall)
603 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
604 #include <sys/syscall.h>
605 #include <linux/random.h>]],
606 [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
607 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
611 AC_MSG_CHECKING(for getentropy)
612 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
613 [[ getentropy(nullptr, 32) ]])],
614 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
618 AC_MSG_CHECKING(for sysctl KERN_ARND)
619 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
620 #include <sys/sysctl.h>]],
621 [[ static const int name[2] = {CTL_KERN, KERN_ARND};
622 sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
623 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
627 # Check for reduced exports
628 if test x$use_reduce_exports = xyes; then
629 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
630 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
636 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
637 AC_SUBST(LEVELDB_CPPFLAGS)
641 if test x$enable_wallet != xno; then
642 dnl Check for libdb_cxx only if wallet enabled
646 dnl Check for libminiupnpc (optional)
647 if test x$use_upnp != xno; then
649 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
650 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
657 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
658 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
660 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
666 if test x$use_boost = xyes; then
668 dnl Minimum required Boost version
669 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
671 dnl Check for boost libs
672 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
675 AX_BOOST_PROGRAM_OPTIONS
679 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
680 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
681 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
682 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
684 if test x$use_reduce_exports = xyes; then
685 AC_MSG_CHECKING([for working boost reduced exports])
686 TEMP_CPPFLAGS="$CPPFLAGS"
687 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
688 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
689 @%:@include <boost/version.hpp>
691 #if BOOST_VERSION >= 104900
692 // Everything is okay
694 # error Boost version is too old
699 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
701 CPPFLAGS="$TEMP_CPPFLAGS"
705 if test x$use_reduce_exports = xyes; then
706 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
707 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
710 if test x$use_tests = xyes; then
712 if test x$HEXDUMP = x; then
713 AC_MSG_ERROR(hexdump is required for tests)
717 if test x$use_boost = xyes; then
719 AX_BOOST_UNIT_TEST_FRAMEWORK
721 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
722 AC_MSG_CHECKING([for dynamic linked boost test])
724 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
725 TEMP_CPPFLAGS="$CPPFLAGS"
726 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
727 AC_LINK_IFELSE([AC_LANG_SOURCE([
728 #define BOOST_TEST_DYN_LINK
729 #define BOOST_TEST_MAIN
730 #include <boost/test/unit_test.hpp>
734 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
737 CPPFLAGS="$TEMP_CPPFLAGS"
742 if test x$use_boost = xyes; then
744 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
747 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
748 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
749 dnl the abi. This was fixed in 1.57.
751 dnl When building against that installed version using c++11, the headers pick up
752 dnl on the native c++11 scoped enum support and enable it, however it will fail to
753 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
755 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
758 LIBS="$BOOST_LIBS $LIBS"
759 TEMP_CPPFLAGS="$CPPFLAGS"
760 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
761 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
762 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
763 #include "boost/config.hpp"
764 #include "boost/version.hpp"
765 #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
766 #define BOOST_NO_SCOPED_ENUMS
767 #define BOOST_NO_CXX11_SCOPED_ENUMS
770 #include "boost/filesystem.hpp"
773 boost::filesystem::copy_file("foo", "bar");
778 [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
780 CPPFLAGS="$TEMP_CPPFLAGS"
782 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
783 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
784 dnl a working version is available, else fall back to sleep. sleep was removed
786 dnl If neither is available, abort.
788 LIBS="$BOOST_LIBS $LIBS"
789 TEMP_CPPFLAGS="$CPPFLAGS"
790 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
791 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
792 #include <boost/thread/thread.hpp>
793 #include <boost/version.hpp>
795 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
796 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
802 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
805 CPPFLAGS="$TEMP_CPPFLAGS"
807 if test x$boost_sleep != xyes; then
809 LIBS="$BOOST_LIBS $LIBS"
810 TEMP_CPPFLAGS="$CPPFLAGS"
811 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
812 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
813 #include <boost/version.hpp>
814 #include <boost/thread.hpp>
815 #include <boost/date_time/posix_time/posix_time_types.hpp>
817 #if BOOST_VERSION <= 105600
818 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
823 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
826 CPPFLAGS="$TEMP_CPPFLAGS"
829 if test x$boost_sleep != xyes; then
830 AC_MSG_ERROR(No working boost sleep implementation found.)
835 if test x$use_pkgconfig = xyes; then
840 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
841 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
842 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
843 if test x$use_qr != xno; then
844 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
846 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
847 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
848 if test x$TARGET_OS != xwindows; then
849 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
853 if test "x$use_zmq" = "xyes"; then
854 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
855 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
856 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
857 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
860 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
865 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
866 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
868 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
869 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
871 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
872 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
873 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
874 if test x$TARGET_OS != xwindows; then
875 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
879 if test "x$use_zmq" = "xyes"; then
880 AC_CHECK_HEADER([zmq.h],
881 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
882 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
884 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
885 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
886 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
888 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
890 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
893 if test "x$use_zmq" = "xyes"; then
894 dnl Assume libzmq was built for static linking
897 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
902 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
903 if test x$use_qr != xno; then
904 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
905 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
909 save_CXXFLAGS="${CXXFLAGS}"
910 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
911 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
912 #include <openssl/x509_vfy.h>
914 CXXFLAGS="${save_CXXFLAGS}"
918 need_bundled_univalue=yes
920 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
921 need_bundled_univalue=no
924 if test x$system_univalue != xno ; then
926 if test x$use_pkgconfig = xyes; then
931 PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
935 AC_CHECK_HEADER([univalue.h],[
936 AC_CHECK_LIB([univalue], [main],[
937 UNIVALUE_LIBS=-lunivalue
943 if test x$found_univalue = xyes ; then
945 need_bundled_univalue=no
946 elif test x$system_univalue = xyes ; then
947 AC_MSG_ERROR([univalue not found])
953 if test x$need_bundled_univalue = xyes ; then
954 UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
955 UNIVALUE_LIBS='univalue/libunivalue.la'
960 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
961 AC_SUBST(UNIVALUE_CFLAGS)
962 AC_SUBST(UNIVALUE_LIBS)
964 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
966 AC_MSG_CHECKING([whether to build bitcoind])
967 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
968 AC_MSG_RESULT($build_bitcoind)
970 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
971 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
972 AC_MSG_RESULT($build_bitcoin_utils)
974 AC_MSG_CHECKING([whether to build libraries])
975 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
976 if test x$build_bitcoin_libs = xyes; then
977 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
978 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
980 AC_MSG_RESULT($build_bitcoin_libs)
984 if test "x$use_ccache" != "xno"; then
985 AC_MSG_CHECKING(if ccache should be used)
986 if test x$CCACHE = x; then
987 if test "x$use_ccache" = "xyes"; then
988 AC_MSG_ERROR([ccache not found.]);
994 CC="$ac_cv_path_CCACHE $CC"
995 CXX="$ac_cv_path_CCACHE $CXX"
997 AC_MSG_RESULT($use_ccache)
999 if test "x$use_ccache" = "xyes"; then
1000 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1004 AC_MSG_CHECKING([if wallet should be enabled])
1005 if test x$enable_wallet != xno; then
1007 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1013 dnl enable upnp support
1014 AC_MSG_CHECKING([whether to build with support for UPnP])
1015 if test x$have_miniupnpc = xno; then
1016 if test x$use_upnp = xyes; then
1017 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1021 if test x$use_upnp != xno; then
1023 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1026 if test x$use_upnp_default != xno; then
1027 use_upnp_default=yes
1030 AC_MSG_RESULT($use_upnp_default)
1031 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1032 if test x$TARGET_OS = xwindows; then
1033 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1040 dnl these are only used when qt is enabled
1042 if test x$bitcoin_enable_qt != xno; then
1043 dnl enable dbus support
1044 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1045 if test x$bitcoin_enable_qt_dbus != xno; then
1046 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1048 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1050 dnl enable qr support
1051 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1052 if test x$have_qrencode = xno; then
1053 if test x$use_qr = xyes; then
1054 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1058 if test x$use_qr != xno; then
1060 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1067 if test x$XGETTEXT = x; then
1068 AC_MSG_WARN("xgettext is required to update qt translations")
1071 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1072 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1073 AC_MSG_RESULT([yes])
1080 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1082 AC_MSG_CHECKING([whether to build test_bitcoin])
1083 if test x$use_tests = xyes; then
1084 AC_MSG_RESULT([yes])
1091 AC_MSG_CHECKING([whether to reduce exports])
1092 if test x$use_reduce_exports = xyes; then
1093 AC_MSG_RESULT([yes])
1098 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1099 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1102 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1103 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1104 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1105 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1106 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1107 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1108 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1109 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1110 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1111 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1112 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1113 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1115 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1116 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1117 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1118 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1119 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1120 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1121 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1122 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1123 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1124 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1125 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1126 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1127 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1128 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1129 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1130 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1131 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1132 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1133 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1134 AC_SUBST(BITCOIN_DAEMON_NAME)
1135 AC_SUBST(BITCOIN_GUI_NAME)
1136 AC_SUBST(BITCOIN_CLI_NAME)
1137 AC_SUBST(BITCOIN_TX_NAME)
1140 AC_SUBST(ERROR_CXXFLAGS)
1141 AC_SUBST(HARDENED_CXXFLAGS)
1142 AC_SUBST(HARDENED_CPPFLAGS)
1143 AC_SUBST(HARDENED_LDFLAGS)
1146 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1148 AC_SUBST(USE_QRCODE)
1149 AC_SUBST(BOOST_LIBS)
1151 AC_SUBST(LEVELDB_TARGET_FLAGS)
1152 AC_SUBST(MINIUPNPC_CPPFLAGS)
1153 AC_SUBST(MINIUPNPC_LIBS)
1154 AC_SUBST(CRYPTO_LIBS)
1156 AC_SUBST(EVENT_LIBS)
1157 AC_SUBST(EVENT_PTHREADS_LIBS)
1159 AC_SUBST(PROTOBUF_LIBS)
1161 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/functional/config.ini])
1162 AC_CONFIG_FILES([test/util/buildenv.py],[chmod +x test/util/buildenv.py])
1163 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1164 AC_CONFIG_FILES([doc/Doxyfile])
1165 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1166 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1167 AC_CONFIG_LINKS([test/util/bctest.py:test/util/bctest.py])
1169 dnl boost's m4 checks do something really nasty: they export these vars. As a
1170 dnl result, they leak into secp256k1's configure and crazy things happen.
1171 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1172 CPPFLAGS_TEMP="$CPPFLAGS"
1174 CPPFLAGS="$CPPFLAGS_TEMP"
1176 LDFLAGS_TEMP="$LDFLAGS"
1178 LDFLAGS="$LDFLAGS_TEMP"
1184 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1185 unset PKG_CONFIG_PATH
1186 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1188 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1189 unset PKG_CONFIG_LIBDIR
1190 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1192 if test x$need_bundled_univalue = xyes; then
1193 AC_CONFIG_SUBDIRS([src/univalue])
1196 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1197 AC_CONFIG_SUBDIRS([src/secp256k1])
1201 dnl Taken from https://wiki.debian.org/RpathIssue
1204 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1205 sed < libtool > libtool-2 \
1206 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1207 mv libtool-2 libtool
1212 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1215 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' test/functional/config.ini > test/functional/config-2.ini
1216 mv test/functional/config-2.ini test/functional/config.ini
1221 echo "Options used to compile and link:"
1222 echo " with wallet = $enable_wallet"
1223 echo " with gui / qt = $bitcoin_enable_qt"
1224 if test x$bitcoin_enable_qt != xno; then
1225 echo " qt version = $bitcoin_qt_got_major_vers"
1226 echo " with qr = $use_qr"
1228 echo " with zmq = $use_zmq"
1229 echo " with test = $use_tests"
1230 echo " with bench = $use_bench"
1231 echo " with upnp = $use_upnp"
1232 echo " debug enabled = $enable_debug"
1233 echo " werror = $enable_werror"
1235 echo " target os = $TARGET_OS"
1236 echo " build os = $BUILD_OS"
1239 echo " CFLAGS = $CFLAGS"
1240 echo " CPPFLAGS = $CPPFLAGS"
1242 echo " CXXFLAGS = $CXXFLAGS"
1243 echo " LDFLAGS = $LDFLAGS"