Make clang-format use C++11 features (e.g. A<A<int>> instead of A<A<int> >)
[bitcoinplatinum.git] / configure.ac
blob5ad01d44e8a31b52d5217d2d3bd7883765b1352d
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]])
238   AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]])
240   # Check for optional instruction set support. Enabling these does _not_ imply that all code will
241   # be compiled with them, rather that specific objects/libs may use them after checking for runtime
242   # compatibility.
243   AX_CHECK_COMPILE_FLAG([-msse4.2],[[enable_sse42=yes; SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
246 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
248 AC_ARG_WITH([utils],
249   [AS_HELP_STRING([--with-utils],
250   [build bitcoin-cli bitcoin-tx (default=yes)])],
251   [build_bitcoin_utils=$withval],
252   [build_bitcoin_utils=yes])
254 AC_ARG_WITH([libs],
255   [AS_HELP_STRING([--with-libs],
256   [build libraries (default=yes)])],
257   [build_bitcoin_libs=$withval],
258   [build_bitcoin_libs=yes])
260 AC_ARG_WITH([daemon],
261   [AS_HELP_STRING([--with-daemon],
262   [build bitcoind daemon (default=yes)])],
263   [build_bitcoind=$withval],
264   [build_bitcoind=yes])
266 use_pkgconfig=yes
267 case $host in
268   *mingw*)
270      #pkgconfig does more harm than good with MinGW
271      use_pkgconfig=no
273      TARGET_OS=windows
274      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
275      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
276      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
277      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
278      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
279      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
280      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
281      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
282      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
283      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
284      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
285      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
286      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
287      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
288      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
289      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
290      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
291      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
292      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
294      # -static is interpreted by libtool, where it has a different meaning.
295      # In libtool-speak, it's -all-static.
296      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
298      AC_PATH_PROG([MAKENSIS], [makensis], none)
299      if test x$MAKENSIS = xnone; then
300        AC_MSG_WARN("makensis not found. Cannot create installer.")
301      fi
303      AC_PATH_TOOL(WINDRES, windres, none)
304      if test x$WINDRES = xnone; then
305        AC_MSG_ERROR("windres not found")
306      fi
308      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
309      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
310      if test "x$CXXFLAGS_overridden" = "xno"; then
311        CXXFLAGS="$CXXFLAGS -w"
312      fi
313      case $host in
314        i?86-*) WINDOWS_BITS=32 ;;
315        x86_64-*) WINDOWS_BITS=64 ;;
316        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
317      esac
318      AC_SUBST(WINDOWS_BITS)
320      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
321      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
322      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
323      dnl also overridden to prevent their insertion later.
324      dnl This should only affect dll's.
325      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
326      postdeps_CXX=
328      ;;
329   *darwin*)
330      TARGET_OS=darwin
331      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
332      if  test x$cross_compiling != xyes; then
333        BUILD_OS=darwin
334        AC_CHECK_PROG([PORT],port, port)
335        if test x$PORT = xport; then
336          dnl add default macports paths
337          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
338          LIBS="$LIBS -L/opt/local/lib"
339          if test -d /opt/local/include/db48; then
340            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
341            LIBS="$LIBS -L/opt/local/lib/db48"
342          fi
343        fi
345        AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
346        AC_CHECK_PROG([BREW],brew, brew)
347        if test x$BREW = xbrew; then
348          dnl These Homebrew packages may be keg-only, meaning that they won't be found
349          dnl in expected paths because they may conflict with system files. Ask
350          dnl Homebrew where each one is located, then adjust paths accordingly.
351          dnl It's safe to add these paths even if the functionality is disabled by
352          dnl the user (--without-wallet or --without-gui for example).
354          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
355          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
356          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
357          if test x$openssl_prefix != x; then
358            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
359            export PKG_CONFIG_PATH
360          fi
361          if test x$bdb_prefix != x; then
362            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
363            LIBS="$LIBS -L$bdb_prefix/lib"
364          fi
365          if test x$qt5_prefix != x; then
366            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
367            export PKG_CONFIG_PATH
368          fi
369        fi
370      else
371        case $build_os in
372          *darwin*)
373            BUILD_OS=darwin
374            ;;
375          *)
376            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
377            AC_PATH_TOOL([OTOOL], [otool], otool)
378            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
379            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
380            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
381            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
383            dnl libtool will try to strip the static lib, which is a problem for
384            dnl cross-builds because strip attempts to call a hard-coded ld,
385            dnl which may not exist in the path. Stripping the .a is not
386            dnl necessary, so just disable it.
387            old_striplib=
388            ;;
389        esac
390      fi
392      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
393      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
394      OBJCXXFLAGS="$CXXFLAGS"
395      ;;
396    *linux*)
397      TARGET_OS=linux
398      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
399      ;;
400    *freebsd*)
401      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
402      ;;
403    *openbsd*)
404      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
405      ;;
406    *)
407      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
408      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
409      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
410      ;;
411 esac
413 if test x$use_pkgconfig = xyes; then
414   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.)])
415   m4_ifdef([PKG_PROG_PKG_CONFIG], [
416   PKG_PROG_PKG_CONFIG
417   if test x"$PKG_CONFIG" = "x"; then
418     AC_MSG_ERROR(pkg-config not found.)
419   fi
420   ])
423 if test x$use_extended_functional_tests != xno; then
424   AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
427 if test x$use_lcov = xyes; then
428   if test x$LCOV = x; then
429     AC_MSG_ERROR("lcov testing requested but lcov not found")
430   fi
431   if test x$GCOV = x; then
432     AC_MSG_ERROR("lcov testing requested but gcov not found")
433   fi
434   if test x$PYTHON = x; then
435     AC_MSG_ERROR("lcov testing requested but python not found")
436   fi
437   if test x$GENHTML = x; then
438     AC_MSG_ERROR("lcov testing requested but genhtml not found")
439   fi
440   LCOV="$LCOV --gcov-tool=$GCOV"
441   AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
442     [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
443   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
444     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
447 dnl Check for endianness
448 AC_C_BIGENDIAN
450 dnl Check for pthread compile/link requirements
451 AX_PTHREAD
453 # The following macro will add the necessary defines to bitcoin-config.h, but
454 # they also need to be passed down to any subprojects. Pull the results out of
455 # the cache and add them to CPPFLAGS.
456 AC_SYS_LARGEFILE
457 # detect POSIX or GNU variant of strerror_r
458 AC_FUNC_STRERROR_R
460 if test x$ac_cv_sys_file_offset_bits != x &&
461    test x$ac_cv_sys_file_offset_bits != xno &&
462    test x$ac_cv_sys_file_offset_bits != xunknown; then
463   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
466 if test x$ac_cv_sys_large_files != x &&
467    test x$ac_cv_sys_large_files != xno &&
468    test x$ac_cv_sys_large_files != xunknown; then
469   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
472 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
474 AX_GCC_FUNC_ATTRIBUTE([visibility])
475 AX_GCC_FUNC_ATTRIBUTE([dllexport])
476 AX_GCC_FUNC_ATTRIBUTE([dllimport])
478 if test x$use_glibc_compat != xno; then
480   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
481   #in anyway for back-compat.
482   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
484   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
485   # See which one is present here.
486   AC_MSG_CHECKING(__fdelt_chk type)
487   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
488                     #undef _FORTIFY_SOURCE
489                   #endif
490                   #define _FORTIFY_SOURCE 2
491                   #include <sys/select.h>
492      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
493     [ fdelt_type="long unsigned int"],
494     [ fdelt_type="long int"])
495   AC_MSG_RESULT($fdelt_type)
496   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
497 else
498   AC_SEARCH_LIBS([clock_gettime],[rt])
501 if test x$TARGET_OS != xwindows; then
502   # All windows code is PIC, forcing it on just adds useless compile warnings
503   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
506 if test x$use_hardening != xno; then
507   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
508   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
510   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
511     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
512       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
513     ])
514     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
515   ])
517   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
518   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
519   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
520   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
521   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
523   if test x$TARGET_OS != xwindows; then
524     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
525     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
526   fi
528   case $host in
529     *mingw*)
530        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
531     ;;
532   esac
535 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
536 if test x$TARGET_OS = xdarwin; then
537   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
540 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])
542 AC_CHECK_DECLS([strnlen])
544 # Check for daemon(3), unrelated to --with-daemon (although used by it)
545 AC_CHECK_DECLS([daemon])
547 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
548                 [#if HAVE_ENDIAN_H
549                  #include <endian.h>
550                  #elif HAVE_SYS_ENDIAN_H
551                  #include <sys/endian.h>
552                  #endif])
554 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
555                 [#if HAVE_BYTESWAP_H
556                  #include <byteswap.h>
557                  #endif])
559 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
561 dnl Check for MSG_NOSIGNAL
562 AC_MSG_CHECKING(for MSG_NOSIGNAL)
563 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
564  [[ int f = MSG_NOSIGNAL; ]])],
565  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
566  [ AC_MSG_RESULT(no)]
569 dnl Check for MSG_DONTWAIT
570 AC_MSG_CHECKING(for MSG_DONTWAIT)
571 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
572  [[ int f = MSG_DONTWAIT; ]])],
573  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
574  [ AC_MSG_RESULT(no)]
577 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
578 AC_MSG_CHECKING(for getmemoryinfo)
579 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
580  [[ int f = malloc_info(0, NULL); ]])],
581  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
582  [ AC_MSG_RESULT(no)]
585 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
586 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
587 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
588  [[ mallopt(M_ARENA_MAX, 1); ]])],
589  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
590  [ AC_MSG_RESULT(no)]
593 AC_MSG_CHECKING([for visibility attribute])
594 AC_LINK_IFELSE([AC_LANG_SOURCE([
595   int foo_def( void ) __attribute__((visibility("default")));
596   int main(){}
597   ])],
598   [
599     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
600     AC_MSG_RESULT(yes)
601   ],
602   [
603     AC_MSG_RESULT(no)
604     if test x$use_reduce_exports = xyes; then
605       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
606     fi
607   ]
610 # Check for different ways of gathering OS randomness
611 AC_MSG_CHECKING(for Linux getrandom syscall)
612 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
613   #include <sys/syscall.h>
614   #include <linux/random.h>]],
615  [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
616  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
617  [ AC_MSG_RESULT(no)]
620 AC_MSG_CHECKING(for getentropy)
621 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
622  [[ getentropy(nullptr, 32) ]])],
623  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
624  [ AC_MSG_RESULT(no)]
627 AC_MSG_CHECKING(for sysctl KERN_ARND)
628 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
629   #include <sys/sysctl.h>]],
630  [[ static const int name[2] = {CTL_KERN, KERN_ARND};
631     sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
632  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
633  [ AC_MSG_RESULT(no)]
636 # Check for reduced exports
637 if test x$use_reduce_exports = xyes; then
638   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
639   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
642 LEVELDB_CPPFLAGS=
643 LIBLEVELDB=
644 LIBMEMENV=
645 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
646 AC_SUBST(LEVELDB_CPPFLAGS)
647 AC_SUBST(LIBLEVELDB)
648 AC_SUBST(LIBMEMENV)
650 if test x$enable_wallet != xno; then
651     dnl Check for libdb_cxx only if wallet enabled
652     BITCOIN_FIND_BDB48
655 dnl Check for libminiupnpc (optional)
656 if test x$use_upnp != xno; then
657   AC_CHECK_HEADERS(
658     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
659     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
660     [have_miniupnpc=no]
661   )
664 BITCOIN_QT_INIT
666 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
667 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
669 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
670     use_boost=no
671 else
672     use_boost=yes
675 if test x$use_boost = xyes; then
677 dnl Minimum required Boost version
678 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
680 dnl Check for boost libs
681 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
682 AX_BOOST_SYSTEM
683 AX_BOOST_FILESYSTEM
684 AX_BOOST_PROGRAM_OPTIONS
685 AX_BOOST_THREAD
686 AX_BOOST_CHRONO
688 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
689 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
690 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
691 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
693 if test x$use_reduce_exports = xyes; then
694   AC_MSG_CHECKING([for working boost reduced exports])
695   TEMP_CPPFLAGS="$CPPFLAGS"
696   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
697   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
698       @%:@include <boost/version.hpp>
699     ]], [[
700       #if BOOST_VERSION >= 104900
701       // Everything is okay
702       #else
703       #  error Boost version is too old
704       #endif
705     ]])],[
706       AC_MSG_RESULT(yes)
707     ],[
708     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
709   ])
710   CPPFLAGS="$TEMP_CPPFLAGS"
714 if test x$use_reduce_exports = xyes; then
715     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
716     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
719 if test x$use_tests = xyes; then
721   if test x$HEXDUMP = x; then
722     AC_MSG_ERROR(hexdump is required for tests)
723   fi
726   if test x$use_boost = xyes; then
728   AX_BOOST_UNIT_TEST_FRAMEWORK
730   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
731   AC_MSG_CHECKING([for dynamic linked boost test])
732   TEMP_LIBS="$LIBS"
733   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
734   TEMP_CPPFLAGS="$CPPFLAGS"
735   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
736   AC_LINK_IFELSE([AC_LANG_SOURCE([
737        #define BOOST_TEST_DYN_LINK
738        #define BOOST_TEST_MAIN
739         #include <boost/test/unit_test.hpp>
741        ])],
742     [AC_MSG_RESULT(yes)]
743     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
744     [AC_MSG_RESULT(no)])
745   LIBS="$TEMP_LIBS"
746   CPPFLAGS="$TEMP_CPPFLAGS"
748   fi
751 if test x$use_boost = xyes; then
753 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
756 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
757 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
758 dnl the abi. This was fixed in 1.57.
760 dnl When building against that installed version using c++11, the headers pick up
761 dnl on the native c++11 scoped enum support and enable it, however it will fail to
762 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
763 dnl fail.
764 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
766 TEMP_LIBS="$LIBS"
767 LIBS="$BOOST_LIBS $LIBS"
768 TEMP_CPPFLAGS="$CPPFLAGS"
769 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
770 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
771 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
772   #include "boost/config.hpp"
773   #include "boost/version.hpp"
774   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
775   #define BOOST_NO_SCOPED_ENUMS
776   #define BOOST_NO_CXX11_SCOPED_ENUMS
777   #define CHECK
778   #endif
779   #include "boost/filesystem.hpp"
780   ]],[[
781   #if defined(CHECK)
782     boost::filesystem::copy_file("foo", "bar");
783   #else
784     choke;
785   #endif
786   ]])],
787   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
788 LIBS="$TEMP_LIBS"
789 CPPFLAGS="$TEMP_CPPFLAGS"
791 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
792 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
793 dnl a working version is available, else fall back to sleep. sleep was removed
794 dnl after 1.56.
795 dnl If neither is available, abort.
796 TEMP_LIBS="$LIBS"
797 LIBS="$BOOST_LIBS $LIBS"
798 TEMP_CPPFLAGS="$CPPFLAGS"
799 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
800 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
801   #include <boost/thread/thread.hpp>
802   #include <boost/version.hpp>
803   ]],[[
804   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
805       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
806   #else
807    choke me
808   #endif
809   ]])],
810   [boost_sleep=yes;
811      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
812   [boost_sleep=no])
813 LIBS="$TEMP_LIBS"
814 CPPFLAGS="$TEMP_CPPFLAGS"
816 if test x$boost_sleep != xyes; then
817 TEMP_LIBS="$LIBS"
818 LIBS="$BOOST_LIBS $LIBS"
819 TEMP_CPPFLAGS="$CPPFLAGS"
820 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
821 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
822   #include <boost/version.hpp>
823   #include <boost/thread.hpp>
824   #include <boost/date_time/posix_time/posix_time_types.hpp>
825   ]],[[
826   #if BOOST_VERSION <= 105600
827       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
828   #else
829    choke me
830   #endif
831   ]])],
832   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
833   [boost_sleep=no])
834 LIBS="$TEMP_LIBS"
835 CPPFLAGS="$TEMP_CPPFLAGS"
838 if test x$boost_sleep != xyes; then
839   AC_MSG_ERROR(No working boost sleep implementation found.)
844 if test x$use_pkgconfig = xyes; then
845   : dnl
846   m4_ifdef(
847     [PKG_CHECK_MODULES],
848     [
849       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
850       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
851       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
852       if test x$use_qr != xno; then
853         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
854       fi
855       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
856         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
857         if test x$TARGET_OS != xwindows; then
858           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
859         fi
860       fi
862       if test "x$use_zmq" = "xyes"; then
863         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
864           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
865           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
866            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
867            use_zmq=no])
868       else
869           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
870       fi
871     ]
872   )
873 else
874   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
875   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
877   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
878   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
880   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
881     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
882     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
883     if test x$TARGET_OS != xwindows; then
884       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
885     fi
886   fi
888   if test "x$use_zmq" = "xyes"; then
889      AC_CHECK_HEADER([zmq.h],
890        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
891        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
892         use_zmq=no
893         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
894      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
895        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
896         use_zmq=no
897         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
898   else
899     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
900   fi
902   if test "x$use_zmq" = "xyes"; then
903     dnl Assume libzmq was built for static linking
904     case $host in
905       *mingw*)
906         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
907       ;;
908     esac
909   fi
911   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
912   if test x$use_qr != xno; then
913     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
914     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
915   fi
918 save_CXXFLAGS="${CXXFLAGS}"
919 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
920 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
921 #include <openssl/x509_vfy.h>
923 CXXFLAGS="${save_CXXFLAGS}"
925 dnl univalue check
927 need_bundled_univalue=yes
929 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
930   need_bundled_univalue=no
931 else
933 if test x$system_univalue != xno ; then
934   found_univalue=no
935   if test x$use_pkgconfig = xyes; then
936     : #NOP
937     m4_ifdef(
938       [PKG_CHECK_MODULES],
939       [
940         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
941       ]
942     )
943   else
944     AC_CHECK_HEADER([univalue.h],[
945       AC_CHECK_LIB([univalue],  [main],[
946         UNIVALUE_LIBS=-lunivalue
947         found_univalue=yes
948       ],[true])
949     ],[true])
950   fi
952   if test x$found_univalue = xyes ; then
953     system_univalue=yes
954     need_bundled_univalue=no
955   elif test x$system_univalue = xyes ; then
956     AC_MSG_ERROR([univalue not found])
957   else
958     system_univalue=no
959   fi
962 if test x$need_bundled_univalue = xyes ; then
963   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
964   UNIVALUE_LIBS='univalue/libunivalue.la'
969 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
970 AC_SUBST(UNIVALUE_CFLAGS)
971 AC_SUBST(UNIVALUE_LIBS)
973 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
975 AC_MSG_CHECKING([whether to build bitcoind])
976 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
977 AC_MSG_RESULT($build_bitcoind)
979 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
980 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
981 AC_MSG_RESULT($build_bitcoin_utils)
983 AC_MSG_CHECKING([whether to build libraries])
984 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
985 if test x$build_bitcoin_libs = xyes; then
986   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
987   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
989 AC_MSG_RESULT($build_bitcoin_libs)
991 AC_LANG_POP
993 if test "x$use_ccache" != "xno"; then
994   AC_MSG_CHECKING(if ccache should be used)
995   if test x$CCACHE = x; then
996     if test "x$use_ccache" = "xyes"; then
997       AC_MSG_ERROR([ccache not found.]);
998     else
999       use_ccache=no
1000     fi
1001   else
1002     use_ccache=yes
1003     CC="$ac_cv_path_CCACHE $CC"
1004     CXX="$ac_cv_path_CCACHE $CXX"
1005   fi
1006   AC_MSG_RESULT($use_ccache)
1008 if test "x$use_ccache" = "xyes"; then
1009     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1012 dnl enable wallet
1013 AC_MSG_CHECKING([if wallet should be enabled])
1014 if test x$enable_wallet != xno; then
1015   AC_MSG_RESULT(yes)
1016   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1018 else
1019   AC_MSG_RESULT(no)
1022 dnl enable upnp support
1023 AC_MSG_CHECKING([whether to build with support for UPnP])
1024 if test x$have_miniupnpc = xno; then
1025   if test x$use_upnp = xyes; then
1026      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1027   fi
1028   AC_MSG_RESULT(no)
1029 else
1030   if test x$use_upnp != xno; then
1031     AC_MSG_RESULT(yes)
1032     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1033     use_upnp=yes
1034     upnp_setting=0
1035     if test x$use_upnp_default != xno; then
1036       use_upnp_default=yes
1037       upnp_setting=1
1038     fi
1039     AC_MSG_RESULT($use_upnp_default)
1040     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1041     if test x$TARGET_OS = xwindows; then
1042       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1043     fi
1044   else
1045     AC_MSG_RESULT(no)
1046   fi
1049 dnl these are only used when qt is enabled
1050 BUILD_TEST_QT=""
1051 if test x$bitcoin_enable_qt != xno; then
1052   dnl enable dbus support
1053   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1054   if test x$bitcoin_enable_qt_dbus != xno; then
1055     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1056   fi
1057   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1059   dnl enable qr support
1060   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1061   if test x$have_qrencode = xno; then
1062     if test x$use_qr = xyes; then
1063      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1064     fi
1065     AC_MSG_RESULT(no)
1066   else
1067     if test x$use_qr != xno; then
1068       AC_MSG_RESULT(yes)
1069       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1070       use_qr=yes
1071     else
1072       AC_MSG_RESULT(no)
1073     fi
1074   fi
1076   if test x$XGETTEXT = x; then
1077     AC_MSG_WARN("xgettext is required to update qt translations")
1078   fi
1080   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1081   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1082     AC_MSG_RESULT([yes])
1083     BUILD_TEST_QT="yes"
1084   else
1085     AC_MSG_RESULT([no])
1086   fi
1089 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1091 AC_MSG_CHECKING([whether to build test_bitcoin])
1092 if test x$use_tests = xyes; then
1093   AC_MSG_RESULT([yes])
1094   BUILD_TEST="yes"
1095 else
1096   AC_MSG_RESULT([no])
1097   BUILD_TEST=""
1100 AC_MSG_CHECKING([whether to reduce exports])
1101 if test x$use_reduce_exports = xyes; then
1102   AC_MSG_RESULT([yes])
1103 else
1104   AC_MSG_RESULT([no])
1107 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1108   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1111 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1112 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1113 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1114 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1115 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1116 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1117 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1118 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1119 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1120 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1121 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1122 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1123 AM_CONDITIONAL([ENABLE_SSE42],[test x$enable_sse42 = xyes])
1125 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1126 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1127 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1128 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1129 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1130 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1131 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1132 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1133 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1134 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1135 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1136 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1137 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1138 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1139 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1140 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1141 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1142 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1143 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1144 AC_SUBST(BITCOIN_DAEMON_NAME)
1145 AC_SUBST(BITCOIN_GUI_NAME)
1146 AC_SUBST(BITCOIN_CLI_NAME)
1147 AC_SUBST(BITCOIN_TX_NAME)
1149 AC_SUBST(RELDFLAGS)
1150 AC_SUBST(ERROR_CXXFLAGS)
1151 AC_SUBST(HARDENED_CXXFLAGS)
1152 AC_SUBST(HARDENED_CPPFLAGS)
1153 AC_SUBST(HARDENED_LDFLAGS)
1154 AC_SUBST(PIC_FLAGS)
1155 AC_SUBST(PIE_FLAGS)
1156 AC_SUBST(SSE42_CXXFLAGS)
1157 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1158 AC_SUBST(USE_UPNP)
1159 AC_SUBST(USE_QRCODE)
1160 AC_SUBST(BOOST_LIBS)
1161 AC_SUBST(TESTDEFS)
1162 AC_SUBST(LEVELDB_TARGET_FLAGS)
1163 AC_SUBST(MINIUPNPC_CPPFLAGS)
1164 AC_SUBST(MINIUPNPC_LIBS)
1165 AC_SUBST(CRYPTO_LIBS)
1166 AC_SUBST(SSL_LIBS)
1167 AC_SUBST(EVENT_LIBS)
1168 AC_SUBST(EVENT_PTHREADS_LIBS)
1169 AC_SUBST(ZMQ_LIBS)
1170 AC_SUBST(PROTOBUF_LIBS)
1171 AC_SUBST(QR_LIBS)
1172 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
1173 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1174 AC_CONFIG_FILES([doc/Doxyfile])
1175 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1176 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1178 dnl boost's m4 checks do something really nasty: they export these vars. As a
1179 dnl result, they leak into secp256k1's configure and crazy things happen.
1180 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1181 CPPFLAGS_TEMP="$CPPFLAGS"
1182 unset CPPFLAGS
1183 CPPFLAGS="$CPPFLAGS_TEMP"
1185 LDFLAGS_TEMP="$LDFLAGS"
1186 unset LDFLAGS
1187 LDFLAGS="$LDFLAGS_TEMP"
1189 LIBS_TEMP="$LIBS"
1190 unset LIBS
1191 LIBS="$LIBS_TEMP"
1193 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1194 unset PKG_CONFIG_PATH
1195 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1197 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1198 unset PKG_CONFIG_LIBDIR
1199 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1201 if test x$need_bundled_univalue = xyes; then
1202   AC_CONFIG_SUBDIRS([src/univalue])
1205 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1206 AC_CONFIG_SUBDIRS([src/secp256k1])
1208 AC_OUTPUT
1210 dnl Taken from https://wiki.debian.org/RpathIssue
1211 case $host in
1212    *-*-linux-gnu)
1213      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1214      sed < libtool > libtool-2 \
1215      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1216      mv libtool-2 libtool
1217      chmod 755 libtool
1218    ;;
1219 esac
1221 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1222 case ${OS} in
1223    *Windows*)
1224      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  test/config.ini > test/config-2.ini
1225      mv test/config-2.ini test/config.ini
1226    ;;
1227 esac
1229 echo 
1230 echo "Options used to compile and link:"
1231 echo "  with wallet   = $enable_wallet"
1232 echo "  with gui / qt = $bitcoin_enable_qt"
1233 if test x$bitcoin_enable_qt != xno; then
1234     echo "    qt version  = $bitcoin_qt_got_major_vers"
1235     echo "    with qr     = $use_qr"
1237 echo "  with zmq      = $use_zmq"
1238 echo "  with test     = $use_tests"
1239 echo "  with bench    = $use_bench"
1240 echo "  with upnp     = $use_upnp"
1241 echo "  debug enabled = $enable_debug"
1242 echo "  werror        = $enable_werror"
1243 echo 
1244 echo "  target os     = $TARGET_OS"
1245 echo "  build os      = $BUILD_OS"
1246 echo
1247 echo "  CC            = $CC"
1248 echo "  CFLAGS        = $CFLAGS"
1249 echo "  CPPFLAGS      = $CPPFLAGS"
1250 echo "  CXX           = $CXX"
1251 echo "  CXXFLAGS      = $CXXFLAGS"
1252 echo "  LDFLAGS       = $LDFLAGS"
1253 echo