Perform member initialization in initialization lists where possible
[bitcoinplatinum.git] / configure.ac
blob36727004887ba1d72bd790429993602ca5ff1fe3
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, 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 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
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.
52 case $host in
53   *mingw*)
54      lt_cv_deplibs_check_method="pass_all"
55   ;;
56 esac
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>
60 CHECK_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
66   OBJCXX="${CXX}"
68 AC_PROG_OBJCXX
71 dnl Libtool init checks.
72 LT_INIT([pic-only])
74 dnl Check/return PATH for base programs.
75 AC_PATH_TOOL(AR, ar)
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)
93 # Enable wallet
94 AC_ARG_ENABLE([wallet],
95   [AS_HELP_STRING([--disable-wallet],
96   [disable wallet (enabled by default)])],
97   [enable_wallet=$enableval],
98   [enable_wallet=yes])
100 AC_ARG_WITH([miniupnpc],
101   [AS_HELP_STRING([--with-miniupnpc],
102   [enable UPNP (default is yes if libminiupnpc is found)])],
103   [use_upnp=$withval],
104   [use_upnp=auto])
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])
112 AC_ARG_ENABLE(tests,
113     AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
114     [use_tests=$enableval],
115     [use_tests=yes])
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])
122 AC_ARG_ENABLE(bench,
123     AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
124     [use_bench=$enableval],
125     [use_bench=yes])
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)])],
135   [use_qr=$withval],
136   [use_qr=auto])
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],
142   [use_hardening=yes])
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],
154   [use_ccache=auto])
156 AC_ARG_ENABLE([lcov],
157   [AS_HELP_STRING([--enable-lcov],
158   [enable lcov testing (default is no)])],
159   [use_lcov=yes],
160   [use_lcov=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],
172   [system_univalue=no]
174 AC_ARG_ENABLE([zmq],
175   [AS_HELP_STRING([--disable-zmq],
176   [disable ZMQ notifications])],
177   [use_zmq=$enableval],
178   [use_zmq=yes])
180 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
182 AC_ARG_ENABLE(man,
183     [AS_HELP_STRING([--disable-man],
184                     [do not install man pages (default is to install)])],,
185     enable_man=yes)
186 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
188 # Enable debug
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],
193     [enable_debug=no])
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],
200     [enable_werror=no])
202 AC_LANG_PUSH([C++])
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"
209     fi
211     if test "x$GXX" = xyes; then
212         CXXFLAGS="$CXXFLAGS -g3 -O0"
213     fi
216 ERROR_CXXFLAGS=
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")
220   fi
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"
241 AC_ARG_WITH([utils],
242   [AS_HELP_STRING([--with-utils],
243   [build bitcoin-cli bitcoin-tx (default=yes)])],
244   [build_bitcoin_utils=$withval],
245   [build_bitcoin_utils=yes])
247 AC_ARG_WITH([libs],
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])
259 use_pkgconfig=yes
260 case $host in
261   *mingw*)
263      #pkgconfig does more harm than good with MinGW
264      use_pkgconfig=no
266      TARGET_OS=windows
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.")
294      fi
296      AC_PATH_TOOL(WINDRES, windres, none)
297      if test x$WINDRES = xnone; then
298        AC_MSG_ERROR("windres not found")
299      fi
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"
305      fi
306      case $host in
307        i?86-*) WINDOWS_BITS=32 ;;
308        x86_64-*) WINDOWS_BITS=64 ;;
309        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
310      esac
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"
319      postdeps_CXX=
321      ;;
322   *darwin*)
323      TARGET_OS=darwin
324      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
325      if  test x$cross_compiling != xyes; then
326        BUILD_OS=darwin
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"
335          fi
336        fi
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
353          fi
354          if test x$bdb_prefix != x; then
355            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
356            LIBS="$LIBS -L$bdb_prefix/lib"
357          fi
358          if test x$qt5_prefix != x; then
359            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
360            export PKG_CONFIG_PATH
361          fi
362        fi
363      else
364        case $build_os in
365          *darwin*)
366            BUILD_OS=darwin
367            ;;
368          *)
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.
380            old_striplib=
381            ;;
382        esac
383      fi
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"
388      ;;
389    *linux*)
390      TARGET_OS=linux
391      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
392      ;;
393    *freebsd*)
394      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
395      ;;
396    *openbsd*)
397      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
398      ;;
399    *)
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}"
403      ;;
404 esac
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], [
409   PKG_PROG_PKG_CONFIG
410   if test x"$PKG_CONFIG" = "x"; then
411     AC_MSG_ERROR(pkg-config not found.)
412   fi
413   ])
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")
423   fi
424   if test x$GCOV = x; then
425     AC_MSG_ERROR("lcov testing requested but gcov not found")
426   fi
427   if test x$PYTHON = x; then
428     AC_MSG_ERROR("lcov testing requested but python not found")
429   fi
430   if test x$GENHTML = x; then
431     AC_MSG_ERROR("lcov testing requested but genhtml not found")
432   fi
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
441 AC_C_BIGENDIAN
443 dnl Check for pthread compile/link requirements
444 AX_PTHREAD
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.
449 AC_SYS_LARGEFILE
450 # detect POSIX or GNU variant of strerror_r
451 AC_FUNC_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
482                   #endif
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])
490 else
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"
506     ])
507     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
508   ])
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"])
519   fi
521   case $host in
522     *mingw*)
523        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
524     ;;
525   esac
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],,,
541                 [#if HAVE_ENDIAN_H
542                  #include <endian.h>
543                  #elif HAVE_SYS_ENDIAN_H
544                  #include <sys/endian.h>
545                  #endif])
547 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
548                 [#if HAVE_BYTESWAP_H
549                  #include <byteswap.h>
550                  #endif])
552 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
554 dnl Check for MSG_NOSIGNAL
555 AC_MSG_CHECKING(for MSG_NOSIGNAL)
556 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
557  [[ int f = MSG_NOSIGNAL; ]])],
558  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
559  [ AC_MSG_RESULT(no)]
562 dnl Check for MSG_DONTWAIT
563 AC_MSG_CHECKING(for MSG_DONTWAIT)
564 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
565  [[ int f = MSG_DONTWAIT; ]])],
566  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
567  [ AC_MSG_RESULT(no)]
570 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
571 AC_MSG_CHECKING(for getmemoryinfo)
572 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
573  [[ int f = malloc_info(0, NULL); ]])],
574  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
575  [ AC_MSG_RESULT(no)]
578 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
579 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
580 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
581  [[ mallopt(M_ARENA_MAX, 1); ]])],
582  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
583  [ AC_MSG_RESULT(no)]
586 AC_MSG_CHECKING([for visibility attribute])
587 AC_LINK_IFELSE([AC_LANG_SOURCE([
588   int foo_def( void ) __attribute__((visibility("default")));
589   int main(){}
590   ])],
591   [
592     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
593     AC_MSG_RESULT(yes)
594   ],
595   [
596     AC_MSG_RESULT(no)
597     if test x$use_reduce_exports = xyes; then
598       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
599     fi
600   ]
603 # Check for different ways of gathering OS randomness
604 AC_MSG_CHECKING(for Linux getrandom syscall)
605 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
606   #include <sys/syscall.h>
607   #include <linux/random.h>]],
608  [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
609  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
610  [ AC_MSG_RESULT(no)]
613 AC_MSG_CHECKING(for getentropy)
614 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
615  [[ getentropy(nullptr, 32) ]])],
616  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
617  [ AC_MSG_RESULT(no)]
620 AC_MSG_CHECKING(for sysctl KERN_ARND)
621 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
622   #include <sys/sysctl.h>]],
623  [[ static const int name[2] = {CTL_KERN, KERN_ARND};
624     sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
625  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
626  [ AC_MSG_RESULT(no)]
629 # Check for reduced exports
630 if test x$use_reduce_exports = xyes; then
631   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
632   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
635 LEVELDB_CPPFLAGS=
636 LIBLEVELDB=
637 LIBMEMENV=
638 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
639 AC_SUBST(LEVELDB_CPPFLAGS)
640 AC_SUBST(LIBLEVELDB)
641 AC_SUBST(LIBMEMENV)
643 if test x$enable_wallet != xno; then
644     dnl Check for libdb_cxx only if wallet enabled
645     BITCOIN_FIND_BDB48
648 dnl Check for libminiupnpc (optional)
649 if test x$use_upnp != xno; then
650   AC_CHECK_HEADERS(
651     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
652     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
653     [have_miniupnpc=no]
654   )
657 BITCOIN_QT_INIT
659 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
660 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
662 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
663     use_boost=no
664 else
665     use_boost=yes
668 if test x$use_boost = xyes; then
670 dnl Minimum required Boost version
671 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
673 dnl Check for boost libs
674 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
675 AX_BOOST_SYSTEM
676 AX_BOOST_FILESYSTEM
677 AX_BOOST_PROGRAM_OPTIONS
678 AX_BOOST_THREAD
679 AX_BOOST_CHRONO
681 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
682 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
683 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
684 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
686 if test x$use_reduce_exports = xyes; then
687   AC_MSG_CHECKING([for working boost reduced exports])
688   TEMP_CPPFLAGS="$CPPFLAGS"
689   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
690   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
691       @%:@include <boost/version.hpp>
692     ]], [[
693       #if BOOST_VERSION >= 104900
694       // Everything is okay
695       #else
696       #  error Boost version is too old
697       #endif
698     ]])],[
699       AC_MSG_RESULT(yes)
700     ],[
701     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
702   ])
703   CPPFLAGS="$TEMP_CPPFLAGS"
707 if test x$use_reduce_exports = xyes; then
708     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
709     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
712 if test x$use_tests = xyes; then
714   if test x$HEXDUMP = x; then
715     AC_MSG_ERROR(hexdump is required for tests)
716   fi
719   if test x$use_boost = xyes; then
721   AX_BOOST_UNIT_TEST_FRAMEWORK
723   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
724   AC_MSG_CHECKING([for dynamic linked boost test])
725   TEMP_LIBS="$LIBS"
726   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
727   TEMP_CPPFLAGS="$CPPFLAGS"
728   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
729   AC_LINK_IFELSE([AC_LANG_SOURCE([
730        #define BOOST_TEST_DYN_LINK
731        #define BOOST_TEST_MAIN
732         #include <boost/test/unit_test.hpp>
734        ])],
735     [AC_MSG_RESULT(yes)]
736     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
737     [AC_MSG_RESULT(no)])
738   LIBS="$TEMP_LIBS"
739   CPPFLAGS="$TEMP_CPPFLAGS"
741   fi
744 if test x$use_boost = xyes; then
746 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
749 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
750 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
751 dnl the abi. This was fixed in 1.57.
753 dnl When building against that installed version using c++11, the headers pick up
754 dnl on the native c++11 scoped enum support and enable it, however it will fail to
755 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
756 dnl fail.
757 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
759 TEMP_LIBS="$LIBS"
760 LIBS="$BOOST_LIBS $LIBS"
761 TEMP_CPPFLAGS="$CPPFLAGS"
762 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
763 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
764 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
765   #include "boost/config.hpp"
766   #include "boost/version.hpp"
767   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
768   #define BOOST_NO_SCOPED_ENUMS
769   #define BOOST_NO_CXX11_SCOPED_ENUMS
770   #define CHECK
771   #endif
772   #include "boost/filesystem.hpp"
773   ]],[[
774   #if defined(CHECK)
775     boost::filesystem::copy_file("foo", "bar");
776   #else
777     choke;
778   #endif
779   ]])],
780   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
781 LIBS="$TEMP_LIBS"
782 CPPFLAGS="$TEMP_CPPFLAGS"
784 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
785 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
786 dnl a working version is available, else fall back to sleep. sleep was removed
787 dnl after 1.56.
788 dnl If neither is available, abort.
789 TEMP_LIBS="$LIBS"
790 LIBS="$BOOST_LIBS $LIBS"
791 TEMP_CPPFLAGS="$CPPFLAGS"
792 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
793 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
794   #include <boost/thread/thread.hpp>
795   #include <boost/version.hpp>
796   ]],[[
797   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
798       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
799   #else
800    choke me
801   #endif
802   ]])],
803   [boost_sleep=yes;
804      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
805   [boost_sleep=no])
806 LIBS="$TEMP_LIBS"
807 CPPFLAGS="$TEMP_CPPFLAGS"
809 if test x$boost_sleep != xyes; then
810 TEMP_LIBS="$LIBS"
811 LIBS="$BOOST_LIBS $LIBS"
812 TEMP_CPPFLAGS="$CPPFLAGS"
813 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
814 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
815   #include <boost/version.hpp>
816   #include <boost/thread.hpp>
817   #include <boost/date_time/posix_time/posix_time_types.hpp>
818   ]],[[
819   #if BOOST_VERSION <= 105600
820       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
821   #else
822    choke me
823   #endif
824   ]])],
825   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
826   [boost_sleep=no])
827 LIBS="$TEMP_LIBS"
828 CPPFLAGS="$TEMP_CPPFLAGS"
831 if test x$boost_sleep != xyes; then
832   AC_MSG_ERROR(No working boost sleep implementation found.)
837 if test x$use_pkgconfig = xyes; then
838   : dnl
839   m4_ifdef(
840     [PKG_CHECK_MODULES],
841     [
842       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
843       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
844       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
845       if test x$use_qr != xno; then
846         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
847       fi
848       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
849         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
850         if test x$TARGET_OS != xwindows; then
851           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
852         fi
853       fi
855       if test "x$use_zmq" = "xyes"; then
856         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
857           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
858           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
859            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
860            use_zmq=no])
861       else
862           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
863       fi
864     ]
865   )
866 else
867   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
868   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
870   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
871   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
873   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
874     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
875     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
876     if test x$TARGET_OS != xwindows; then
877       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
878     fi
879   fi
881   if test "x$use_zmq" = "xyes"; then
882      AC_CHECK_HEADER([zmq.h],
883        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
884        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
885         use_zmq=no
886         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
887      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
888        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
889         use_zmq=no
890         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
891   else
892     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
893   fi
895   if test "x$use_zmq" = "xyes"; then
896     dnl Assume libzmq was built for static linking
897     case $host in
898       *mingw*)
899         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
900       ;;
901     esac
902   fi
904   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
905   if test x$use_qr != xno; then
906     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
907     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
908   fi
911 save_CXXFLAGS="${CXXFLAGS}"
912 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
913 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
914 #include <openssl/x509_vfy.h>
916 CXXFLAGS="${save_CXXFLAGS}"
918 dnl univalue check
920 need_bundled_univalue=yes
922 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
923   need_bundled_univalue=no
924 else
926 if test x$system_univalue != xno ; then
927   found_univalue=no
928   if test x$use_pkgconfig = xyes; then
929     : #NOP
930     m4_ifdef(
931       [PKG_CHECK_MODULES],
932       [
933         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
934       ]
935     )
936   else
937     AC_CHECK_HEADER([univalue.h],[
938       AC_CHECK_LIB([univalue],  [main],[
939         UNIVALUE_LIBS=-lunivalue
940         found_univalue=yes
941       ],[true])
942     ],[true])
943   fi
945   if test x$found_univalue = xyes ; then
946     system_univalue=yes
947     need_bundled_univalue=no
948   elif test x$system_univalue = xyes ; then
949     AC_MSG_ERROR([univalue not found])
950   else
951     system_univalue=no
952   fi
955 if test x$need_bundled_univalue = xyes ; then
956   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
957   UNIVALUE_LIBS='univalue/libunivalue.la'
962 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
963 AC_SUBST(UNIVALUE_CFLAGS)
964 AC_SUBST(UNIVALUE_LIBS)
966 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
968 AC_MSG_CHECKING([whether to build bitcoind])
969 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
970 AC_MSG_RESULT($build_bitcoind)
972 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
973 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
974 AC_MSG_RESULT($build_bitcoin_utils)
976 AC_MSG_CHECKING([whether to build libraries])
977 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
978 if test x$build_bitcoin_libs = xyes; then
979   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
980   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
982 AC_MSG_RESULT($build_bitcoin_libs)
984 AC_LANG_POP
986 if test "x$use_ccache" != "xno"; then
987   AC_MSG_CHECKING(if ccache should be used)
988   if test x$CCACHE = x; then
989     if test "x$use_ccache" = "xyes"; then
990       AC_MSG_ERROR([ccache not found.]);
991     else
992       use_ccache=no
993     fi
994   else
995     use_ccache=yes
996     CC="$ac_cv_path_CCACHE $CC"
997     CXX="$ac_cv_path_CCACHE $CXX"
998   fi
999   AC_MSG_RESULT($use_ccache)
1001 if test "x$use_ccache" = "xyes"; then
1002     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1005 dnl enable wallet
1006 AC_MSG_CHECKING([if wallet should be enabled])
1007 if test x$enable_wallet != xno; then
1008   AC_MSG_RESULT(yes)
1009   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1011 else
1012   AC_MSG_RESULT(no)
1015 dnl enable upnp support
1016 AC_MSG_CHECKING([whether to build with support for UPnP])
1017 if test x$have_miniupnpc = xno; then
1018   if test x$use_upnp = xyes; then
1019      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1020   fi
1021   AC_MSG_RESULT(no)
1022 else
1023   if test x$use_upnp != xno; then
1024     AC_MSG_RESULT(yes)
1025     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1026     use_upnp=yes
1027     upnp_setting=0
1028     if test x$use_upnp_default != xno; then
1029       use_upnp_default=yes
1030       upnp_setting=1
1031     fi
1032     AC_MSG_RESULT($use_upnp_default)
1033     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1034     if test x$TARGET_OS = xwindows; then
1035       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1036     fi
1037   else
1038     AC_MSG_RESULT(no)
1039   fi
1042 dnl these are only used when qt is enabled
1043 BUILD_TEST_QT=""
1044 if test x$bitcoin_enable_qt != xno; then
1045   dnl enable dbus support
1046   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1047   if test x$bitcoin_enable_qt_dbus != xno; then
1048     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1049   fi
1050   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1052   dnl enable qr support
1053   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1054   if test x$have_qrencode = xno; then
1055     if test x$use_qr = xyes; then
1056      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1057     fi
1058     AC_MSG_RESULT(no)
1059   else
1060     if test x$use_qr != xno; then
1061       AC_MSG_RESULT(yes)
1062       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1063       use_qr=yes
1064     else
1065       AC_MSG_RESULT(no)
1066     fi
1067   fi
1069   if test x$XGETTEXT = x; then
1070     AC_MSG_WARN("xgettext is required to update qt translations")
1071   fi
1073   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1074   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1075     AC_MSG_RESULT([yes])
1076     BUILD_TEST_QT="yes"
1077   else
1078     AC_MSG_RESULT([no])
1079   fi
1082 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1084 AC_MSG_CHECKING([whether to build test_bitcoin])
1085 if test x$use_tests = xyes; then
1086   AC_MSG_RESULT([yes])
1087   BUILD_TEST="yes"
1088 else
1089   AC_MSG_RESULT([no])
1090   BUILD_TEST=""
1093 AC_MSG_CHECKING([whether to reduce exports])
1094 if test x$use_reduce_exports = xyes; then
1095   AC_MSG_RESULT([yes])
1096 else
1097   AC_MSG_RESULT([no])
1100 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1101   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1104 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1105 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1106 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1107 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1108 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1109 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1110 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1111 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1112 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1113 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1114 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1115 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1117 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1118 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1119 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1120 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1121 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1122 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1123 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1124 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1125 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1126 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1127 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1128 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1129 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1130 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1131 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1132 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1133 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1134 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1135 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1136 AC_SUBST(BITCOIN_DAEMON_NAME)
1137 AC_SUBST(BITCOIN_GUI_NAME)
1138 AC_SUBST(BITCOIN_CLI_NAME)
1139 AC_SUBST(BITCOIN_TX_NAME)
1141 AC_SUBST(RELDFLAGS)
1142 AC_SUBST(ERROR_CXXFLAGS)
1143 AC_SUBST(HARDENED_CXXFLAGS)
1144 AC_SUBST(HARDENED_CPPFLAGS)
1145 AC_SUBST(HARDENED_LDFLAGS)
1146 AC_SUBST(PIC_FLAGS)
1147 AC_SUBST(PIE_FLAGS)
1148 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1149 AC_SUBST(USE_UPNP)
1150 AC_SUBST(USE_QRCODE)
1151 AC_SUBST(BOOST_LIBS)
1152 AC_SUBST(TESTDEFS)
1153 AC_SUBST(LEVELDB_TARGET_FLAGS)
1154 AC_SUBST(MINIUPNPC_CPPFLAGS)
1155 AC_SUBST(MINIUPNPC_LIBS)
1156 AC_SUBST(CRYPTO_LIBS)
1157 AC_SUBST(SSL_LIBS)
1158 AC_SUBST(EVENT_LIBS)
1159 AC_SUBST(EVENT_PTHREADS_LIBS)
1160 AC_SUBST(ZMQ_LIBS)
1161 AC_SUBST(PROTOBUF_LIBS)
1162 AC_SUBST(QR_LIBS)
1163 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/functional/config.ini])
1164 AC_CONFIG_FILES([test/util/buildenv.py],[chmod +x test/util/buildenv.py])
1165 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1166 AC_CONFIG_FILES([doc/Doxyfile])
1167 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1168 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1169 AC_CONFIG_LINKS([test/util/bctest.py:test/util/bctest.py])
1171 dnl boost's m4 checks do something really nasty: they export these vars. As a
1172 dnl result, they leak into secp256k1's configure and crazy things happen.
1173 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1174 CPPFLAGS_TEMP="$CPPFLAGS"
1175 unset CPPFLAGS
1176 CPPFLAGS="$CPPFLAGS_TEMP"
1178 LDFLAGS_TEMP="$LDFLAGS"
1179 unset LDFLAGS
1180 LDFLAGS="$LDFLAGS_TEMP"
1182 LIBS_TEMP="$LIBS"
1183 unset LIBS
1184 LIBS="$LIBS_TEMP"
1186 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1187 unset PKG_CONFIG_PATH
1188 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1190 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1191 unset PKG_CONFIG_LIBDIR
1192 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1194 if test x$need_bundled_univalue = xyes; then
1195   AC_CONFIG_SUBDIRS([src/univalue])
1198 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1199 AC_CONFIG_SUBDIRS([src/secp256k1])
1201 AC_OUTPUT
1203 dnl Taken from https://wiki.debian.org/RpathIssue
1204 case $host in
1205    *-*-linux-gnu)
1206      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1207      sed < libtool > libtool-2 \
1208      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1209      mv libtool-2 libtool
1210      chmod 755 libtool
1211    ;;
1212 esac
1214 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1215 case ${OS} in
1216    *Windows*)
1217      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  test/functional/config.ini > test/functional/config-2.ini
1218      mv test/functional/config-2.ini test/functional/config.ini
1219    ;;
1220 esac
1222 echo 
1223 echo "Options used to compile and link:"
1224 echo "  with wallet   = $enable_wallet"
1225 echo "  with gui / qt = $bitcoin_enable_qt"
1226 if test x$bitcoin_enable_qt != xno; then
1227     echo "    qt version  = $bitcoin_qt_got_major_vers"
1228     echo "    with qr     = $use_qr"
1230 echo "  with zmq      = $use_zmq"
1231 echo "  with test     = $use_tests"
1232 echo "  with bench    = $use_bench"
1233 echo "  with upnp     = $use_upnp"
1234 echo "  debug enabled = $enable_debug"
1235 echo "  werror        = $enable_werror"
1236 echo 
1237 echo "  target os     = $TARGET_OS"
1238 echo "  build os      = $BUILD_OS"
1239 echo
1240 echo "  CC            = $CC"
1241 echo "  CFLAGS        = $CFLAGS"
1242 echo "  CPPFLAGS      = $CPPFLAGS"
1243 echo "  CXX           = $CXX"
1244 echo "  CXXFLAGS      = $CXXFLAGS"
1245 echo "  LDFLAGS       = $LDFLAGS"
1246 echo