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
22 dnl Unless the user specified ARFLAGS, force it to be cr
23 AC_ARG_VAR(ARFLAGS, [Flags for the archiver, defaults to <cr> if not set])
24 if test "x${ARFLAGS+set}" != "xset"; then
30 AH_TOP([#ifndef BITCOIN_CONFIG_H])
31 AH_TOP([#define BITCOIN_CONFIG_H])
32 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
34 dnl faketime breaks configure and is only needed for make. Disable it here.
37 dnl Automake init set-up and checks
38 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
40 dnl faketime messes with timestamps and causes configure to be re-run.
41 dnl --disable-maintainer-mode can be used to bypass this.
42 AM_MAINTAINER_MODE([enable])
44 dnl make the compilation flags quiet unless V=1 is used
45 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
47 dnl Compiler checks (here before libtool).
48 if test "x${CXXFLAGS+set}" = "xset"; then
49 CXXFLAGS_overridden=yes
51 CXXFLAGS_overridden=no
55 dnl By default, libtool for mingw refuses to link static libs into a dll for
56 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
57 dnl we have those under control, re-enable that functionality.
60 lt_cv_deplibs_check_method="pass_all"
63 dnl Require C++11 compiler (no GNU extensions)
64 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault])
65 dnl Check if -latomic is required for <std::atomic>
68 dnl Unless the user specified OBJCXX, force it to be the same as CXX. This ensures
69 dnl that we get the same -std flags for both.
70 m4_ifdef([AC_PROG_OBJCXX],[
71 if test "x${OBJCXX+set}" = "x"; then
77 dnl Libtool init checks.
80 dnl Check/return PATH for base programs.
82 AC_PATH_TOOL(RANLIB, ranlib)
83 AC_PATH_TOOL(STRIP, strip)
84 AC_PATH_TOOL(GCOV, gcov)
85 AC_PATH_PROG(LCOV, lcov)
86 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
87 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
88 AC_PATH_PROG(GENHTML, genhtml)
89 AC_PATH_PROG([GIT], [git])
90 AC_PATH_PROG(CCACHE,ccache)
91 AC_PATH_PROG(XGETTEXT,xgettext)
92 AC_PATH_PROG(HEXDUMP,hexdump)
93 AC_PATH_TOOL(READELF, readelf)
94 AC_PATH_TOOL(CPPFILT, c++filt)
95 AC_PATH_TOOL(OBJCOPY, objcopy)
97 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
100 AC_ARG_ENABLE([wallet],
101 [AS_HELP_STRING([--disable-wallet],
102 [disable wallet (enabled by default)])],
103 [enable_wallet=$enableval],
106 AC_ARG_WITH([miniupnpc],
107 [AS_HELP_STRING([--with-miniupnpc],
108 [enable UPNP (default is yes if libminiupnpc is found)])],
112 AC_ARG_ENABLE([upnp-default],
113 [AS_HELP_STRING([--enable-upnp-default],
114 [if UPNP is enabled, turn it on at startup (default is no)])],
115 [use_upnp_default=$enableval],
116 [use_upnp_default=no])
119 AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
120 [use_tests=$enableval],
123 AC_ARG_ENABLE(gui-tests,
124 AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
125 [use_gui_tests=$enableval],
126 [use_gui_tests=$use_tests])
129 AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
130 [use_bench=$enableval],
133 AC_ARG_ENABLE([extended-functional-tests],
134 AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests when using lcov (default no)]),
135 [use_extended_functional_tests=$enableval],
136 [use_extended_functional_tests=no])
138 AC_ARG_WITH([qrencode],
139 [AS_HELP_STRING([--with-qrencode],
140 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
144 AC_ARG_ENABLE([hardening],
145 [AS_HELP_STRING([--disable-hardening],
146 [do not attempt to harden the resulting executables (default is to harden)])],
147 [use_hardening=$enableval],
150 AC_ARG_ENABLE([reduce-exports],
151 [AS_HELP_STRING([--enable-reduce-exports],
152 [attempt to reduce exported symbols in the resulting executables (default is no)])],
153 [use_reduce_exports=$enableval],
154 [use_reduce_exports=no])
156 AC_ARG_ENABLE([ccache],
157 [AS_HELP_STRING([--disable-ccache],
158 [do not use ccache for building (default is to use if found)])],
159 [use_ccache=$enableval],
162 AC_ARG_ENABLE([lcov],
163 [AS_HELP_STRING([--enable-lcov],
164 [enable lcov testing (default is no)])],
168 AC_ARG_ENABLE([lcov-branch-coverage],
169 [AS_HELP_STRING([--enable-lcov-branch-coverage],
170 [enable lcov testing branch coverage (default is no)])],
171 [use_lcov_branch=yes],
172 [use_lcov_branch=no])
174 AC_ARG_ENABLE([glibc-back-compat],
175 [AS_HELP_STRING([--enable-glibc-back-compat],
176 [enable backwards compatibility with glibc])],
177 [use_glibc_compat=$enableval],
178 [use_glibc_compat=no])
180 AC_ARG_WITH([system-univalue],
181 [AS_HELP_STRING([--with-system-univalue],
182 [Build with system UniValue (default is no)])],
183 [system_univalue=$withval],
187 [AS_HELP_STRING([--disable-zmq],
188 [disable ZMQ notifications])],
189 [use_zmq=$enableval],
192 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
195 [AS_HELP_STRING([--disable-man],
196 [do not install man pages (default is to install)])],,
198 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
201 AC_ARG_ENABLE([debug],
202 [AS_HELP_STRING([--enable-debug],
203 [use debug compiler flags and macros (default is no)])],
204 [enable_debug=$enableval],
207 # Turn warnings into errors
208 AC_ARG_ENABLE([werror],
209 [AS_HELP_STRING([--enable-werror],
210 [Treat certain compiler warnings as errors (default is no)])],
211 [enable_werror=$enableval],
215 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
217 if test "x$enable_debug" = xyes; then
218 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
219 if test "x$GCC" = xyes; then
220 CFLAGS="$CFLAGS -g3 -O0"
223 if test "x$GXX" = xyes; then
224 CXXFLAGS="$CXXFLAGS -g3 -O0"
229 if test "x$enable_werror" = "xyes"; then
230 if test "x$CXXFLAG_WERROR" = "x"; then
231 AC_MSG_ERROR("enable-werror set but -Werror is not usable")
233 AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
236 if test "x$CXXFLAGS_overridden" = "xno"; then
237 AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
238 AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
239 AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
240 AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
241 AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
243 ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
244 ## unknown options if any other warning is produced. Test the -Wfoo case, and
245 ## set the -Wno-foo case if it works.
246 AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
247 AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
248 AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
249 AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
250 AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]])
252 # Check for optional instruction set support. Enabling these does _not_ imply that all code will
253 # be compiled with them, rather that specific objects/libs may use them after checking for runtime
255 AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
259 TEMP_CXXFLAGS="$CXXFLAGS"
260 CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
261 AC_MSG_CHECKING(for assembler crc32 support)
262 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
264 #if defined(_MSC_VER)
266 #elif defined(__GNUC__) && defined(__SSE4_2__)
267 #include <nmmintrin.h>
271 l = _mm_crc32_u8(l, 0);
272 l = _mm_crc32_u32(l, 0);
273 l = _mm_crc32_u64(l, 0);
276 [ AC_MSG_RESULT(yes); enable_hwcrc32=yes],
279 CXXFLAGS="$TEMP_CXXFLAGS"
281 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
284 [AS_HELP_STRING([--with-utils],
285 [build bitcoin-cli bitcoin-tx (default=yes)])],
286 [build_bitcoin_utils=$withval],
287 [build_bitcoin_utils=yes])
290 [AS_HELP_STRING([--with-libs],
291 [build libraries (default=yes)])],
292 [build_bitcoin_libs=$withval],
293 [build_bitcoin_libs=yes])
295 AC_ARG_WITH([daemon],
296 [AS_HELP_STRING([--with-daemon],
297 [build bitcoind daemon (default=yes)])],
298 [build_bitcoind=$withval],
299 [build_bitcoind=yes])
305 #pkgconfig does more harm than good with MinGW
309 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
310 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
311 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
312 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
313 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
314 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
315 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
316 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
317 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
318 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
319 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
320 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
321 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
322 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
323 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
324 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
325 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
326 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
327 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
329 # -static is interpreted by libtool, where it has a different meaning.
330 # In libtool-speak, it's -all-static.
331 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
333 AC_PATH_PROG([MAKENSIS], [makensis], none)
334 if test x$MAKENSIS = xnone; then
335 AC_MSG_WARN("makensis not found. Cannot create installer.")
338 AC_PATH_TOOL(WINDRES, windres, none)
339 if test x$WINDRES = xnone; then
340 AC_MSG_ERROR("windres not found")
343 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
344 LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
345 if test "x$CXXFLAGS_overridden" = "xno"; then
346 CXXFLAGS="$CXXFLAGS -w"
349 i?86-*) WINDOWS_BITS=32 ;;
350 x86_64-*) WINDOWS_BITS=64 ;;
351 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
353 AC_SUBST(WINDOWS_BITS)
355 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
356 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
357 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
358 dnl also overridden to prevent their insertion later.
359 dnl This should only affect dll's.
360 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
366 LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
367 if test x$cross_compiling != xyes; then
369 AC_CHECK_PROG([PORT],port, port)
370 if test x$PORT = xport; then
371 dnl add default macports paths
372 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
373 LIBS="$LIBS -L/opt/local/lib"
374 if test -d /opt/local/include/db48; then
375 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
376 LIBS="$LIBS -L/opt/local/lib/db48"
380 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
381 AC_CHECK_PROG([BREW],brew, brew)
382 if test x$BREW = xbrew; then
383 dnl These Homebrew packages may be keg-only, meaning that they won't be found
384 dnl in expected paths because they may conflict with system files. Ask
385 dnl Homebrew where each one is located, then adjust paths accordingly.
386 dnl It's safe to add these paths even if the functionality is disabled by
387 dnl the user (--without-wallet or --without-gui for example).
389 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
390 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
391 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
392 if test x$openssl_prefix != x; then
393 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
394 export PKG_CONFIG_PATH
396 if test x$bdb_prefix != x; then
397 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
398 LIBS="$LIBS -L$bdb_prefix/lib"
400 if test x$qt5_prefix != x; then
401 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
402 export PKG_CONFIG_PATH
411 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
412 AC_PATH_TOOL([OTOOL], [otool], otool)
413 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
414 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
415 AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
416 AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
418 dnl libtool will try to strip the static lib, which is a problem for
419 dnl cross-builds because strip attempts to call a hard-coded ld,
420 dnl which may not exist in the path. Stripping the .a is not
421 dnl necessary, so just disable it.
427 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
428 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
429 OBJCXXFLAGS="$CXXFLAGS"
433 LEVELDB_TARGET_FLAGS="-DOS_LINUX"
436 LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
439 LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
442 OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
443 AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
444 LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
448 if test x$use_pkgconfig = xyes; then
449 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.)])
450 m4_ifdef([PKG_PROG_PKG_CONFIG], [
452 if test x"$PKG_CONFIG" = "x"; then
453 AC_MSG_ERROR(pkg-config not found.)
458 if test x$use_extended_functional_tests != xno; then
459 AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
462 if test x$use_lcov = xyes; then
463 if test x$LCOV = x; then
464 AC_MSG_ERROR("lcov testing requested but lcov not found")
466 if test x$GCOV = x; then
467 AC_MSG_ERROR("lcov testing requested but gcov not found")
469 if test x$PYTHON = x; then
470 AC_MSG_ERROR("lcov testing requested but python not found")
472 if test x$GENHTML = x; then
473 AC_MSG_ERROR("lcov testing requested but genhtml not found")
475 LCOV="$LCOV --gcov-tool=$GCOV"
476 AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
477 [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
478 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
479 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
480 AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled])
481 CXXFLAGS="$CXXFLAGS -Og"
484 if test x$use_lcov_branch != xno; then
485 AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1")
488 dnl Check for endianness
491 dnl Check for pthread compile/link requirements
494 # The following macro will add the necessary defines to bitcoin-config.h, but
495 # they also need to be passed down to any subprojects. Pull the results out of
496 # the cache and add them to CPPFLAGS.
498 # detect POSIX or GNU variant of strerror_r
501 if test x$ac_cv_sys_file_offset_bits != x &&
502 test x$ac_cv_sys_file_offset_bits != xno &&
503 test x$ac_cv_sys_file_offset_bits != xunknown; then
504 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
507 if test x$ac_cv_sys_large_files != x &&
508 test x$ac_cv_sys_large_files != xno &&
509 test x$ac_cv_sys_large_files != xunknown; then
510 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
513 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
515 AX_GCC_FUNC_ATTRIBUTE([visibility])
516 AX_GCC_FUNC_ATTRIBUTE([dllexport])
517 AX_GCC_FUNC_ATTRIBUTE([dllimport])
519 if test x$use_glibc_compat != xno; then
521 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
522 #in anyway for back-compat.
523 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
525 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
526 # See which one is present here.
527 AC_MSG_CHECKING(__fdelt_chk type)
528 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
529 #undef _FORTIFY_SOURCE
531 #define _FORTIFY_SOURCE 2
532 #include <sys/select.h>
533 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
534 [ fdelt_type="long unsigned int"],
535 [ fdelt_type="long int"])
536 AC_MSG_RESULT($fdelt_type)
537 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
539 AC_SEARCH_LIBS([clock_gettime],[rt])
542 if test x$TARGET_OS != xwindows; then
543 # All windows code is PIC, forcing it on just adds useless compile warnings
544 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
547 if test x$use_hardening != xno; then
548 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
549 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
551 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
552 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
553 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
555 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
558 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
559 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
560 AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
561 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
562 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
564 if test x$TARGET_OS != xwindows; then
565 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
566 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
571 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
576 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
577 if test x$TARGET_OS = xdarwin; then
578 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
581 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])
583 AC_CHECK_DECLS([strnlen])
585 # Check for daemon(3), unrelated to --with-daemon (although used by it)
586 AC_CHECK_DECLS([daemon])
588 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
591 #elif HAVE_SYS_ENDIAN_H
592 #include <sys/endian.h>
595 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
597 #include <byteswap.h>
600 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
602 dnl Check for MSG_NOSIGNAL
603 AC_MSG_CHECKING(for MSG_NOSIGNAL)
604 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
605 [[ int f = MSG_NOSIGNAL; ]])],
606 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
610 dnl Check for MSG_DONTWAIT
611 AC_MSG_CHECKING(for MSG_DONTWAIT)
612 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
613 [[ int f = MSG_DONTWAIT; ]])],
614 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
618 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
619 AC_MSG_CHECKING(for getmemoryinfo)
620 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
621 [[ int f = malloc_info(0, NULL); ]])],
622 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
626 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
627 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
628 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
629 [[ mallopt(M_ARENA_MAX, 1); ]])],
630 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
634 AC_MSG_CHECKING([for visibility attribute])
635 AC_LINK_IFELSE([AC_LANG_SOURCE([
636 int foo_def( void ) __attribute__((visibility("default")));
640 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
645 if test x$use_reduce_exports = xyes; then
646 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
651 # Check for different ways of gathering OS randomness
652 AC_MSG_CHECKING(for Linux getrandom syscall)
653 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
654 #include <sys/syscall.h>
655 #include <linux/random.h>]],
656 [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
657 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
661 AC_MSG_CHECKING(for getentropy)
662 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
663 [[ getentropy(nullptr, 32) ]])],
664 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
668 AC_MSG_CHECKING(for sysctl KERN_ARND)
669 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
670 #include <sys/sysctl.h>]],
671 [[ static const int name[2] = {CTL_KERN, KERN_ARND};
672 sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
673 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
677 # Check for reduced exports
678 if test x$use_reduce_exports = xyes; then
679 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
680 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
686 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
687 AC_SUBST(LEVELDB_CPPFLAGS)
691 if test x$enable_wallet != xno; then
692 dnl Check for libdb_cxx only if wallet enabled
696 dnl Check for libminiupnpc (optional)
697 if test x$use_upnp != xno; then
699 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
700 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
707 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
708 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
710 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
716 if test x$use_boost = xyes; then
718 dnl Minimum required Boost version
719 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
721 dnl Check for boost libs
722 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
725 AX_BOOST_PROGRAM_OPTIONS
729 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
730 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
731 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
732 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
734 if test x$use_reduce_exports = xyes; then
735 AC_MSG_CHECKING([for working boost reduced exports])
736 TEMP_CPPFLAGS="$CPPFLAGS"
737 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
738 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
739 @%:@include <boost/version.hpp>
741 #if BOOST_VERSION >= 104900
742 // Everything is okay
744 # error Boost version is too old
749 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
751 CPPFLAGS="$TEMP_CPPFLAGS"
755 if test x$use_reduce_exports = xyes; then
756 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
757 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
760 if test x$use_tests = xyes; then
762 if test x$HEXDUMP = x; then
763 AC_MSG_ERROR(hexdump is required for tests)
767 if test x$use_boost = xyes; then
769 AX_BOOST_UNIT_TEST_FRAMEWORK
771 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
772 AC_MSG_CHECKING([for dynamic linked boost test])
774 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
775 TEMP_CPPFLAGS="$CPPFLAGS"
776 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
777 AC_LINK_IFELSE([AC_LANG_SOURCE([
778 #define BOOST_TEST_DYN_LINK
779 #define BOOST_TEST_MAIN
780 #include <boost/test/unit_test.hpp>
784 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
787 CPPFLAGS="$TEMP_CPPFLAGS"
792 if test x$use_boost = xyes; then
794 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
797 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
798 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
799 dnl the abi. This was fixed in 1.57.
801 dnl When building against that installed version using c++11, the headers pick up
802 dnl on the native c++11 scoped enum support and enable it, however it will fail to
803 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
805 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
808 LIBS="$BOOST_LIBS $LIBS"
809 TEMP_CPPFLAGS="$CPPFLAGS"
810 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
811 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
812 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
813 #include "boost/config.hpp"
814 #include "boost/version.hpp"
815 #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
816 #define BOOST_NO_SCOPED_ENUMS
817 #define BOOST_NO_CXX11_SCOPED_ENUMS
820 #include "boost/filesystem.hpp"
823 boost::filesystem::copy_file("foo", "bar");
828 [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
830 CPPFLAGS="$TEMP_CPPFLAGS"
832 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
833 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
834 dnl a working version is available, else fall back to sleep. sleep was removed
836 dnl If neither is available, abort.
838 LIBS="$BOOST_LIBS $LIBS"
839 TEMP_CPPFLAGS="$CPPFLAGS"
840 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
841 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
842 #include <boost/thread/thread.hpp>
843 #include <boost/version.hpp>
845 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
846 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
852 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
855 CPPFLAGS="$TEMP_CPPFLAGS"
857 if test x$boost_sleep != xyes; then
859 LIBS="$BOOST_LIBS $LIBS"
860 TEMP_CPPFLAGS="$CPPFLAGS"
861 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
862 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
863 #include <boost/version.hpp>
864 #include <boost/thread.hpp>
865 #include <boost/date_time/posix_time/posix_time_types.hpp>
867 #if BOOST_VERSION <= 105600
868 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
873 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
876 CPPFLAGS="$TEMP_CPPFLAGS"
879 if test x$boost_sleep != xyes; then
880 AC_MSG_ERROR(No working boost sleep implementation found.)
885 if test x$use_pkgconfig = xyes; then
890 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
891 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
892 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
893 if test x$use_qr != xno; then
894 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
896 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
897 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
898 if test x$TARGET_OS != xwindows; then
899 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
903 if test "x$use_zmq" = "xyes"; then
904 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
905 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
906 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
907 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
910 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
915 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
916 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
918 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
919 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
921 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
922 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
923 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
924 if test x$TARGET_OS != xwindows; then
925 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
929 if test "x$use_zmq" = "xyes"; then
930 AC_CHECK_HEADER([zmq.h],
931 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
932 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
934 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
935 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
936 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
938 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
940 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
943 if test "x$use_zmq" = "xyes"; then
944 dnl Assume libzmq was built for static linking
947 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
952 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
953 if test x$use_qr != xno; then
954 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
955 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
959 save_CXXFLAGS="${CXXFLAGS}"
960 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
961 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
962 #include <openssl/x509_vfy.h>
964 CXXFLAGS="${save_CXXFLAGS}"
968 need_bundled_univalue=yes
970 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
971 need_bundled_univalue=no
974 if test x$system_univalue != xno ; then
976 if test x$use_pkgconfig = xyes; then
981 PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
985 AC_CHECK_HEADER([univalue.h],[
986 AC_CHECK_LIB([univalue], [main],[
987 UNIVALUE_LIBS=-lunivalue
993 if test x$found_univalue = xyes ; then
995 need_bundled_univalue=no
996 elif test x$system_univalue = xyes ; then
997 AC_MSG_ERROR([univalue not found])
1003 if test x$need_bundled_univalue = xyes ; then
1004 UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
1005 UNIVALUE_LIBS='univalue/libunivalue.la'
1010 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
1011 AC_SUBST(UNIVALUE_CFLAGS)
1012 AC_SUBST(UNIVALUE_LIBS)
1014 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
1016 AC_MSG_CHECKING([whether to build bitcoind])
1017 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
1018 AC_MSG_RESULT($build_bitcoind)
1020 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
1021 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
1022 AC_MSG_RESULT($build_bitcoin_utils)
1024 AC_MSG_CHECKING([whether to build libraries])
1025 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
1026 if test x$build_bitcoin_libs = xyes; then
1027 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
1028 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
1030 AC_MSG_RESULT($build_bitcoin_libs)
1034 if test "x$use_ccache" != "xno"; then
1035 AC_MSG_CHECKING(if ccache should be used)
1036 if test x$CCACHE = x; then
1037 if test "x$use_ccache" = "xyes"; then
1038 AC_MSG_ERROR([ccache not found.]);
1044 CC="$ac_cv_path_CCACHE $CC"
1045 CXX="$ac_cv_path_CCACHE $CXX"
1047 AC_MSG_RESULT($use_ccache)
1049 if test "x$use_ccache" = "xyes"; then
1050 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1054 AC_MSG_CHECKING([if wallet should be enabled])
1055 if test x$enable_wallet != xno; then
1057 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1063 dnl enable upnp support
1064 AC_MSG_CHECKING([whether to build with support for UPnP])
1065 if test x$have_miniupnpc = xno; then
1066 if test x$use_upnp = xyes; then
1067 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1071 if test x$use_upnp != xno; then
1073 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1076 if test x$use_upnp_default != xno; then
1077 use_upnp_default=yes
1080 AC_MSG_RESULT($use_upnp_default)
1081 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1082 if test x$TARGET_OS = xwindows; then
1083 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1090 dnl these are only used when qt is enabled
1092 if test x$bitcoin_enable_qt != xno; then
1093 dnl enable dbus support
1094 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1095 if test x$bitcoin_enable_qt_dbus != xno; then
1096 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1098 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1100 dnl enable qr support
1101 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1102 if test x$have_qrencode = xno; then
1103 if test x$use_qr = xyes; then
1104 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1108 if test x$use_qr != xno; then
1110 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1117 if test x$XGETTEXT = x; then
1118 AC_MSG_WARN("xgettext is required to update qt translations")
1121 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1122 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1123 AC_MSG_RESULT([yes])
1130 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1132 AC_MSG_CHECKING([whether to build test_bitcoin])
1133 if test x$use_tests = xyes; then
1134 AC_MSG_RESULT([yes])
1141 AC_MSG_CHECKING([whether to reduce exports])
1142 if test x$use_reduce_exports = xyes; then
1143 AC_MSG_RESULT([yes])
1148 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1149 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1152 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1153 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1154 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1155 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1156 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1157 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1158 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1159 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1160 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1161 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1162 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1163 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1164 AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
1166 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1167 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1168 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1169 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1170 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1171 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1172 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1173 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1174 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1175 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1176 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1177 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1178 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1179 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1180 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1181 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1182 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1183 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1184 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1185 AC_SUBST(BITCOIN_DAEMON_NAME)
1186 AC_SUBST(BITCOIN_GUI_NAME)
1187 AC_SUBST(BITCOIN_CLI_NAME)
1188 AC_SUBST(BITCOIN_TX_NAME)
1191 AC_SUBST(ERROR_CXXFLAGS)
1192 AC_SUBST(HARDENED_CXXFLAGS)
1193 AC_SUBST(HARDENED_CPPFLAGS)
1194 AC_SUBST(HARDENED_LDFLAGS)
1197 AC_SUBST(SSE42_CXXFLAGS)
1198 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1200 AC_SUBST(USE_QRCODE)
1201 AC_SUBST(BOOST_LIBS)
1203 AC_SUBST(LEVELDB_TARGET_FLAGS)
1204 AC_SUBST(MINIUPNPC_CPPFLAGS)
1205 AC_SUBST(MINIUPNPC_LIBS)
1206 AC_SUBST(CRYPTO_LIBS)
1208 AC_SUBST(EVENT_LIBS)
1209 AC_SUBST(EVENT_PTHREADS_LIBS)
1211 AC_SUBST(PROTOBUF_LIBS)
1213 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
1214 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1215 AC_CONFIG_FILES([doc/Doxyfile])
1216 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1217 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1219 dnl boost's m4 checks do something really nasty: they export these vars. As a
1220 dnl result, they leak into secp256k1's configure and crazy things happen.
1221 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1222 CPPFLAGS_TEMP="$CPPFLAGS"
1224 CPPFLAGS="$CPPFLAGS_TEMP"
1226 LDFLAGS_TEMP="$LDFLAGS"
1228 LDFLAGS="$LDFLAGS_TEMP"
1234 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1235 unset PKG_CONFIG_PATH
1236 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1238 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1239 unset PKG_CONFIG_LIBDIR
1240 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1242 if test x$need_bundled_univalue = xyes; then
1243 AC_CONFIG_SUBDIRS([src/univalue])
1246 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1247 AC_CONFIG_SUBDIRS([src/secp256k1])
1251 dnl Taken from https://wiki.debian.org/RpathIssue
1254 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1255 sed < libtool > libtool-2 \
1256 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1257 mv libtool-2 libtool
1262 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1265 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' test/config.ini > test/config-2.ini
1266 mv test/config-2.ini test/config.ini
1271 echo "Options used to compile and link:"
1272 echo " with wallet = $enable_wallet"
1273 echo " with gui / qt = $bitcoin_enable_qt"
1274 if test x$bitcoin_enable_qt != xno; then
1275 echo " qt version = $bitcoin_qt_got_major_vers"
1276 echo " with qr = $use_qr"
1278 echo " with zmq = $use_zmq"
1279 echo " with test = $use_tests"
1280 echo " with bench = $use_bench"
1281 echo " with upnp = $use_upnp"
1282 echo " debug enabled = $enable_debug"
1283 echo " werror = $enable_werror"
1285 echo " target os = $TARGET_OS"
1286 echo " build os = $BUILD_OS"
1289 echo " CFLAGS = $CFLAGS"
1290 echo " CPPFLAGS = $CPPFLAGS"
1292 echo " CXXFLAGS = $CXXFLAGS"
1293 echo " LDFLAGS = $LDFLAGS"
1294 echo " ARFLAGS = $ARFLAGS"