net: move max/max-outbound to CConnman
[bitcoinplatinum.git] / configure.ac
blobadd8d217817ca98974f88b60956ab11f0ec98d8a
1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
2 AC_PREREQ([2.60])
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 13)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2016)
9 define(_COPYRIGHT_HOLDERS,[The %s developers])
10 define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
11 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin],[https://bitcoincore.org/])
12 AC_CONFIG_SRCDIR([src/main.cpp])
13 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14 AC_CONFIG_AUX_DIR([build-aux])
15 AC_CONFIG_MACRO_DIR([build-aux/m4])
17 BITCOIN_DAEMON_NAME=bitcoind
18 BITCOIN_GUI_NAME=bitcoin-qt
19 BITCOIN_CLI_NAME=bitcoin-cli
20 BITCOIN_TX_NAME=bitcoin-tx
22 AC_CANONICAL_HOST
24 AH_TOP([#ifndef BITCOIN_CONFIG_H])
25 AH_TOP([#define BITCOIN_CONFIG_H])
26 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
28 dnl faketime breaks configure and is only needed for make. Disable it here.
29 unset FAKETIME
31 dnl Automake init set-up and checks
32 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
34 dnl faketime messes with timestamps and causes configure to be re-run.
35 dnl --disable-maintainer-mode can be used to bypass this.
36 AM_MAINTAINER_MODE([enable])
38 dnl make the compilation flags quiet unless V=1 is used
39 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
41 dnl Compiler checks (here before libtool).
42 if test "x${CXXFLAGS+set}" = "xset"; then
43   CXXFLAGS_overridden=yes
44 else
45   CXXFLAGS_overridden=no
47 AC_PROG_CXX
48 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
50 dnl By default, libtool for mingw refuses to link static libs into a dll for
51 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
52 dnl we have those under control, re-enable that functionality.
53 case $host in
54   *mingw*)
55      lt_cv_deplibs_check_method="pass_all"
56   ;;
57 esac
58 dnl Require C++11 compiler (no GNU extensions)
59 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
60 dnl Libtool init checks.
61 LT_INIT([pic-only])
63 dnl Check/return PATH for base programs.
64 AC_PATH_TOOL(AR, ar)
65 AC_PATH_TOOL(RANLIB, ranlib)
66 AC_PATH_TOOL(STRIP, strip)
67 AC_PATH_TOOL(GCOV, gcov)
68 AC_PATH_PROG(LCOV, lcov)
69 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
70 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
71 AC_PATH_PROG(GENHTML, genhtml)
72 AC_PATH_PROG([GIT], [git])
73 AC_PATH_PROG(CCACHE,ccache)
74 AC_PATH_PROG(XGETTEXT,xgettext)
75 AC_PATH_PROG(HEXDUMP,hexdump)
76 AC_PATH_TOOL(READELF, readelf)
77 AC_PATH_TOOL(CPPFILT, c++filt)
78 AC_PATH_TOOL(OBJCOPY, objcopy)
80 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
82 # Enable wallet
83 AC_ARG_ENABLE([wallet],
84   [AS_HELP_STRING([--disable-wallet],
85   [disable wallet (enabled by default)])],
86   [enable_wallet=$enableval],
87   [enable_wallet=yes])
89 AC_ARG_WITH([miniupnpc],
90   [AS_HELP_STRING([--with-miniupnpc],
91   [enable UPNP (default is yes if libminiupnpc is found)])],
92   [use_upnp=$withval],
93   [use_upnp=auto])
95 AC_ARG_ENABLE([upnp-default],
96   [AS_HELP_STRING([--enable-upnp-default],
97   [if UPNP is enabled, turn it on at startup (default is no)])],
98   [use_upnp_default=$enableval],
99   [use_upnp_default=no])
101 AC_ARG_ENABLE(tests,
102     AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
103     [use_tests=$enableval],
104     [use_tests=yes])
106 AC_ARG_ENABLE(gui-tests,
107     AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
108     [use_gui_tests=$enableval],
109     [use_gui_tests=$use_tests])
111 AC_ARG_ENABLE(bench,
112     AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
113     [use_bench=$enableval],
114     [use_bench=yes])
116 AC_ARG_ENABLE([extended-rpc-tests],
117     AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
118     [use_extended_rpc_tests=$enableval],
119     [use_extended_rpc_tests=no])
121 AC_ARG_WITH([qrencode],
122   [AS_HELP_STRING([--with-qrencode],
123   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
124   [use_qr=$withval],
125   [use_qr=auto])
127 AC_ARG_ENABLE([hardening],
128   [AS_HELP_STRING([--disable-hardening],
129   [do not attempt to harden the resulting executables (default is to harden)])],
130   [use_hardening=$enableval],
131   [use_hardening=yes])
133 AC_ARG_ENABLE([reduce-exports],
134   [AS_HELP_STRING([--enable-reduce-exports],
135   [attempt to reduce exported symbols in the resulting executables (default is no)])],
136   [use_reduce_exports=$enableval],
137   [use_reduce_exports=no])
139 AC_ARG_ENABLE([ccache],
140   [AS_HELP_STRING([--disable-ccache],
141   [do not use ccache for building (default is to use if found)])],
142   [use_ccache=$enableval],
143   [use_ccache=auto])
145 AC_ARG_ENABLE([lcov],
146   [AS_HELP_STRING([--enable-lcov],
147   [enable lcov testing (default is no)])],
148   [use_lcov=yes],
149   [use_lcov=no])
151 AC_ARG_ENABLE([glibc-back-compat],
152   [AS_HELP_STRING([--enable-glibc-back-compat],
153   [enable backwards compatibility with glibc])],
154   [use_glibc_compat=$enableval],
155   [use_glibc_compat=no])
157 AC_ARG_WITH([system-univalue],
158   [AS_HELP_STRING([--with-system-univalue],
159   [Build with system UniValue (default is no)])],
160   [system_univalue=$withval],
161   [system_univalue=no]
163 AC_ARG_ENABLE([zmq],
164   [AS_HELP_STRING([--disable-zmq],
165   [disable ZMQ notifications])],
166   [use_zmq=$enableval],
167   [use_zmq=yes])
169 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
171 # Enable debug
172 AC_ARG_ENABLE([debug],
173     [AS_HELP_STRING([--enable-debug],
174                     [use debug compiler flags and macros (default is no)])],
175     [enable_debug=$enableval],
176     [enable_debug=no])
178 AC_LANG_PUSH([C++])
179 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
181 if test "x$enable_debug" = xyes; then
182     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
183     if test "x$GCC" = xyes; then
184         CFLAGS="$CFLAGS -g3 -O0"
185     fi
187     if test "x$GXX" = xyes; then
188         CXXFLAGS="$CXXFLAGS -g3 -O0"
189     fi
192 if test "x$CXXFLAGS_overridden" = "xno"; then
193   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
194   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
195   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
196   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
198   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
199   ## unknown options if any other warning is produced. Test the -Wfoo case, and
200   ## set the -Wno-foo case if it works.
201   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
202   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
203   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
204   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
206 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
208 AC_ARG_WITH([utils],
209   [AS_HELP_STRING([--with-utils],
210   [build bitcoin-cli bitcoin-tx (default=yes)])],
211   [build_bitcoin_utils=$withval],
212   [build_bitcoin_utils=yes])
214 AC_ARG_WITH([libs],
215   [AS_HELP_STRING([--with-libs],
216   [build libraries (default=yes)])],
217   [build_bitcoin_libs=$withval],
218   [build_bitcoin_libs=yes])
220 AC_ARG_WITH([daemon],
221   [AS_HELP_STRING([--with-daemon],
222   [build bitcoind daemon (default=yes)])],
223   [build_bitcoind=$withval],
224   [build_bitcoind=yes])
226 use_pkgconfig=yes
227 case $host in
228   *mingw*)
230      #pkgconfig does more harm than good with MinGW
231      use_pkgconfig=no
233      TARGET_OS=windows
234      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
235      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
236      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
237      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
238      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
239      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
240      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
241      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
242      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
243      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
244      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
245      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
246      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
247      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
248      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
249      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
250      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
251      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
252      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
254      # -static is interpreted by libtool, where it has a different meaning.
255      # In libtool-speak, it's -all-static.
256      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
258      AC_PATH_PROG([MAKENSIS], [makensis], none)
259      if test x$MAKENSIS = xnone; then
260        AC_MSG_WARN("makensis not found. Cannot create installer.")
261      fi
263      AC_PATH_TOOL(WINDRES, windres, none)
264      if test x$WINDRES = xnone; then
265        AC_MSG_ERROR("windres not found")
266      fi
268      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
269      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
270      if test "x$CXXFLAGS_overridden" = "xno"; then
271        CXXFLAGS="$CXXFLAGS -w"
272      fi
273      case $host in
274        i?86-*) WINDOWS_BITS=32 ;;
275        x86_64-*) WINDOWS_BITS=64 ;;
276        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
277      esac
278      AC_SUBST(WINDOWS_BITS)
280      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
281      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
282      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
283      dnl also overridden to prevent their insertion later.
284      dnl This should only affect dll's.
285      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
286      postdeps_CXX=
288      ;;
289   *darwin*)
290      TARGET_OS=darwin
291      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
292      if  test x$cross_compiling != xyes; then
293        BUILD_OS=darwin
294        AC_CHECK_PROG([PORT],port, port)
295        if test x$PORT = xport; then
296          dnl add default macports paths
297          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
298          LIBS="$LIBS -L/opt/local/lib"
299          if test -d /opt/local/include/db48; then
300            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
301            LIBS="$LIBS -L/opt/local/lib/db48"
302          fi
303        fi
305        AC_CHECK_PROG([BREW],brew, brew)
306        if test x$BREW = xbrew; then
307          dnl These Homebrew packages may be keg-only, meaning that they won't be found
308          dnl in expected paths because they may conflict with system files. Ask
309          dnl Homebrew where each one is located, then adjust paths accordingly.
310          dnl It's safe to add these paths even if the functionality is disabled by
311          dnl the user (--without-wallet or --without-gui for example).
313          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
314          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
315          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
316          if test x$openssl_prefix != x; then
317            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
318            export PKG_CONFIG_PATH
319          fi
320          if test x$bdb_prefix != x; then
321            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
322            LIBS="$LIBS -L$bdb_prefix/lib"
323          fi
324          if test x$qt5_prefix != x; then
325            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
326            export PKG_CONFIG_PATH
327          fi
328        fi
329      else
330        case $build_os in
331          *darwin*)
332            BUILD_OS=darwin
333            ;;
334          *)
335            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
336            AC_PATH_TOOL([OTOOL], [otool], otool)
337            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
338            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
339            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
340            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
342            dnl libtool will try to strip the static lib, which is a problem for
343            dnl cross-builds because strip attempts to call a hard-coded ld,
344            dnl which may not exist in the path. Stripping the .a is not
345            dnl necessary, so just disable it.
346            old_striplib=
347            ;;
348        esac
349      fi
351      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
352      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
353      OBJCXXFLAGS="$CXXFLAGS"
354      ;;
355    *linux*)
356      TARGET_OS=linux
357      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
358      ;;
359    *freebsd*)
360      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
361      ;;
362    *openbsd*)
363      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
364      ;;
365    *)
366      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
367      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
368      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
369      ;;
370 esac
372 if test x$use_pkgconfig = xyes; then
373   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.)])
374   m4_ifdef([PKG_PROG_PKG_CONFIG], [
375   PKG_PROG_PKG_CONFIG
376   if test x"$PKG_CONFIG" = "x"; then
377     AC_MSG_ERROR(pkg-config not found.)
378   fi
379   ])
382 if test x$use_extended_rpc_tests != xno; then
383   AC_SUBST(EXTENDED_RPC_TESTS, -extended)
386 if test x$use_lcov = xyes; then
387   if test x$LCOV = x; then
388     AC_MSG_ERROR("lcov testing requested but lcov not found")
389   fi
390   if test x$GCOV = x; then
391     AC_MSG_ERROR("lcov testing requested but gcov not found")
392   fi
393   if test x$PYTHON = x; then
394     AC_MSG_ERROR("lcov testing requested but python not found")
395   fi
396   if test x$GENHTML = x; then
397     AC_MSG_ERROR("lcov testing requested but genhtml not found")
398   fi
399   LCOV="$LCOV --gcov-tool=$GCOV"
400   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
401     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
404 dnl Check for endianness
405 AC_C_BIGENDIAN
407 dnl Check for pthread compile/link requirements
408 AX_PTHREAD
410 # The following macro will add the necessary defines to bitcoin-config.h, but
411 # they also need to be passed down to any subprojects. Pull the results out of
412 # the cache and add them to CPPFLAGS.
413 AC_SYS_LARGEFILE
414 # detect POSIX or GNU variant of strerror_r
415 AC_FUNC_STRERROR_R
417 if test x$ac_cv_sys_file_offset_bits != x &&
418    test x$ac_cv_sys_file_offset_bits != xno &&
419    test x$ac_cv_sys_file_offset_bits != xunknown; then
420   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
423 if test x$ac_cv_sys_large_files != x &&
424    test x$ac_cv_sys_large_files != xno &&
425    test x$ac_cv_sys_large_files != xunknown; then
426   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
429 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
431 AX_GCC_FUNC_ATTRIBUTE([visibility])
432 AX_GCC_FUNC_ATTRIBUTE([dllexport])
433 AX_GCC_FUNC_ATTRIBUTE([dllimport])
435 if test x$use_glibc_compat != xno; then
437   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
438   #in anyway for back-compat.
439   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
441   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
442   # See which one is present here.
443   AC_MSG_CHECKING(__fdelt_chk type)
444   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
445                     #undef _FORTIFY_SOURCE
446                   #endif
447                   #define _FORTIFY_SOURCE 2
448                   #include <sys/select.h>
449      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
450     [ fdelt_type="long unsigned int"],
451     [ fdelt_type="long int"])
452   AC_MSG_RESULT($fdelt_type)
453   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
454 else
455   AC_SEARCH_LIBS([clock_gettime],[rt])
458 if test x$TARGET_OS != xwindows; then
459   # All windows code is PIC, forcing it on just adds useless compile warnings
460   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
463 if test x$use_hardening != xno; then
464   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
465   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
467   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
468     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
469       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
470     ])
471     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
472   ])
474   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
475   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
476   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
477   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
479   if test x$TARGET_OS != xwindows; then
480     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
481     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
482   fi
484   case $host in
485     *mingw*)
486        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
487     ;;
488   esac
491 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
492 if test x$TARGET_OS = xdarwin; then
493   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
496 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])
497 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
498 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
500 AC_CHECK_DECLS([strnlen])
502 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
503                 [#if HAVE_ENDIAN_H
504                  #include <endian.h>
505                  #elif HAVE_SYS_ENDIAN_H
506                  #include <sys/endian.h>
507                  #endif])
509 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
510                 [#if HAVE_BYTESWAP_H
511                  #include <byteswap.h>
512                  #endif])
514 dnl Check for MSG_NOSIGNAL
515 AC_MSG_CHECKING(for MSG_NOSIGNAL)
516 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
517  [[ int f = MSG_NOSIGNAL; ]])],
518  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
519  [ AC_MSG_RESULT(no)]
522 AC_MSG_CHECKING([for visibility attribute])
523 AC_LINK_IFELSE([AC_LANG_SOURCE([
524   int foo_def( void ) __attribute__((visibility("default")));
525   int main(){}
526   ])],
527   [
528     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
529     AC_MSG_RESULT(yes)
530   ],
531   [
532     AC_MSG_RESULT(no)
533     if test x$use_reduce_exports = xyes; then
534       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
535     fi
536   ]
539 if test x$use_reduce_exports = xyes; then
540   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
541   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
544 LEVELDB_CPPFLAGS=
545 LIBLEVELDB=
546 LIBMEMENV=
547 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
548 AC_SUBST(LEVELDB_CPPFLAGS)
549 AC_SUBST(LIBLEVELDB)
550 AC_SUBST(LIBMEMENV)
552 if test x$enable_wallet != xno; then
553     dnl Check for libdb_cxx only if wallet enabled
554     BITCOIN_FIND_BDB48
557 dnl Check for libminiupnpc (optional)
558 if test x$use_upnp != xno; then
559   AC_CHECK_HEADERS(
560     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
561     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
562     [have_miniupnpc=no]
563   )
566 BITCOIN_QT_INIT
568 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
569 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
571 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
572     use_boost=no
573 else
574     use_boost=yes
577 if test x$use_boost = xyes; then
579 dnl Check for boost libs
580 AX_BOOST_BASE
581 AX_BOOST_SYSTEM
582 AX_BOOST_FILESYSTEM
583 AX_BOOST_PROGRAM_OPTIONS
584 AX_BOOST_THREAD
585 AX_BOOST_CHRONO
588 if test x$use_reduce_exports = xyes; then
589   AC_MSG_CHECKING([for working boost reduced exports])
590   TEMP_CPPFLAGS="$CPPFLAGS"
591   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
592   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
593       @%:@include <boost/version.hpp>
594     ]], [[
595       #if BOOST_VERSION >= 104900
596       // Everything is okay
597       #else
598       #  error Boost version is too old
599       #endif
600     ]])],[
601       AC_MSG_RESULT(yes)
602     ],[
603     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
604   ])
605   CPPFLAGS="$TEMP_CPPFLAGS"
609 if test x$use_reduce_exports = xyes; then
610     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
611     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
614 if test x$use_tests = xyes; then
616   if test x$HEXDUMP = x; then
617     AC_MSG_ERROR(hexdump is required for tests)
618   fi
621   if test x$use_boost = xyes; then
623   AX_BOOST_UNIT_TEST_FRAMEWORK
625   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
626   AC_MSG_CHECKING([for dynamic linked boost test])
627   TEMP_LIBS="$LIBS"
628   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
629   TEMP_CPPFLAGS="$CPPFLAGS"
630   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
631   AC_LINK_IFELSE([AC_LANG_SOURCE([
632        #define BOOST_TEST_DYN_LINK
633        #define BOOST_TEST_MAIN
634         #include <boost/test/unit_test.hpp>
636        ])],
637     [AC_MSG_RESULT(yes)]
638     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
639     [AC_MSG_RESULT(no)])
640   LIBS="$TEMP_LIBS"
641   CPPFLAGS="$TEMP_CPPFLAGS"
643   fi
646 if test x$use_boost = xyes; then
648 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
651 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
652 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
653 dnl the abi. This was fixed in 1.57.
655 dnl When building against that installed version using c++11, the headers pick up
656 dnl on the native c++11 scoped enum support and enable it, however it will fail to
657 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
658 dnl fail.
659 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
661 TEMP_LIBS="$LIBS"
662 LIBS="$BOOST_LIBS $LIBS"
663 TEMP_CPPFLAGS="$CPPFLAGS"
664 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
665 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
666 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
667   #include "boost/config.hpp"
668   #include "boost/version.hpp"
669   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
670   #define BOOST_NO_SCOPED_ENUMS
671   #define BOOST_NO_CXX11_SCOPED_ENUMS
672   #define CHECK
673   #endif
674   #include "boost/filesystem.hpp"
675   ]],[[
676   #if defined(CHECK)
677     boost::filesystem::copy_file("foo", "bar");
678   #else
679     choke;
680   #endif
681   ]])],
682   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
683 LIBS="$TEMP_LIBS"
684 CPPFLAGS="$TEMP_CPPFLAGS"
686 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
687 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
688 dnl a working version is available, else fall back to sleep. sleep was removed
689 dnl after 1.56.
690 dnl If neither is available, abort.
691 TEMP_LIBS="$LIBS"
692 LIBS="$BOOST_LIBS $LIBS"
693 TEMP_CPPFLAGS="$CPPFLAGS"
694 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
695 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
696   #include <boost/thread/thread.hpp>
697   #include <boost/version.hpp>
698   ]],[[
699   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
700       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
701   #else
702    choke me
703   #endif
704   ]])],
705   [boost_sleep=yes;
706      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
707   [boost_sleep=no])
708 LIBS="$TEMP_LIBS"
709 CPPFLAGS="$TEMP_CPPFLAGS"
711 if test x$boost_sleep != xyes; then
712 TEMP_LIBS="$LIBS"
713 LIBS="$BOOST_LIBS $LIBS"
714 TEMP_CPPFLAGS="$CPPFLAGS"
715 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
716 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
717   #include <boost/version.hpp>
718   #include <boost/thread.hpp>
719   #include <boost/date_time/posix_time/posix_time_types.hpp>
720   ]],[[
721   #if BOOST_VERSION <= 105600
722       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
723   #else
724    choke me
725   #endif
726   ]])],
727   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
728   [boost_sleep=no])
729 LIBS="$TEMP_LIBS"
730 CPPFLAGS="$TEMP_CPPFLAGS"
733 if test x$boost_sleep != xyes; then
734   AC_MSG_ERROR(No working boost sleep implementation found.)
739 if test x$use_pkgconfig = xyes; then
740   : dnl
741   m4_ifdef(
742     [PKG_CHECK_MODULES],
743     [
744       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
745       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
746       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
747       if test x$use_qr != xno; then
748         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
749       fi
750       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
751         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
752         if test x$TARGET_OS != xwindows; then
753           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
754         fi
755       fi
757       if test "x$use_zmq" = "xyes"; then
758         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
759           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
760           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
761            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
762            use_zmq=no])
763       else
764           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
765       fi
766     ]
767   )
768 else
769   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
770   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
772   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
773   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
775   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
776     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
777     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
778     if test x$TARGET_OS != xwindows; then
779       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
780     fi
781   fi
783   if test "x$use_zmq" = "xyes"; then
784      AC_CHECK_HEADER([zmq.h],
785        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
786        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
787         use_zmq=no
788         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
789      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
790        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
791         use_zmq=no
792         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
793   else
794     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
795   fi
797   if test "x$use_zmq" = "xyes"; then
798     dnl Assume libzmq was built for static linking
799     case $host in
800       *mingw*)
801         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
802       ;;
803     esac
804   fi
806   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
807   if test x$use_qr != xno; then
808     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
809     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
810   fi
813 dnl univalue check
815 need_bundled_univalue=yes
817 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
818   need_bundled_univalue=no
819 else
821 if test x$system_univalue != xno ; then
822   found_univalue=no
823   if test x$use_pkgconfig = xyes; then
824     : #NOP
825     m4_ifdef(
826       [PKG_CHECK_MODULES],
827       [
828         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
829       ]
830     )
831   else
832     AC_CHECK_HEADER([univalue.h],[
833       AC_CHECK_LIB([univalue],  [main],[
834         UNIVALUE_LIBS=-lunivalue
835         found_univalue=yes
836       ],[true])
837     ],[true])
838   fi
840   if test x$found_univalue = xyes ; then
841     system_univalue=yes
842     need_bundled_univalue=no
843   elif test x$system_univalue = xyes ; then
844     AC_MSG_ERROR([univalue not found])
845   else
846     system_univalue=no
847   fi
850 if test x$need_bundled_univalue = xyes ; then
851   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
852   UNIVALUE_LIBS='univalue/libunivalue.la'
857 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
858 AC_SUBST(UNIVALUE_CFLAGS)
859 AC_SUBST(UNIVALUE_LIBS)
861 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
863 AC_MSG_CHECKING([whether to build bitcoind])
864 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
865 AC_MSG_RESULT($build_bitcoind)
867 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
868 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
869 AC_MSG_RESULT($build_bitcoin_utils)
871 AC_MSG_CHECKING([whether to build libraries])
872 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
873 if test x$build_bitcoin_libs = xyes; then
874   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
875   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
877 AC_MSG_RESULT($build_bitcoin_libs)
879 AC_LANG_POP
881 if test "x$use_ccache" != "xno"; then
882   AC_MSG_CHECKING(if ccache should be used)
883   if test x$CCACHE = x; then
884     if test "x$use_ccache" = "xyes"; then
885       AC_MSG_ERROR([ccache not found.]);
886     else
887       use_ccache=no
888     fi
889   else
890     use_ccache=yes
891     CC="$ac_cv_path_CCACHE $CC"
892     CXX="$ac_cv_path_CCACHE $CXX"
893   fi
894   AC_MSG_RESULT($use_ccache)
896 if test "x$use_ccache" = "xyes"; then
897     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
900 dnl enable wallet
901 AC_MSG_CHECKING([if wallet should be enabled])
902 if test x$enable_wallet != xno; then
903   AC_MSG_RESULT(yes)
904   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
906 else
907   AC_MSG_RESULT(no)
910 dnl enable upnp support
911 AC_MSG_CHECKING([whether to build with support for UPnP])
912 if test x$have_miniupnpc = xno; then
913   if test x$use_upnp = xyes; then
914      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
915   fi
916   AC_MSG_RESULT(no)
917 else
918   if test x$use_upnp != xno; then
919     AC_MSG_RESULT(yes)
920     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
921     use_upnp=yes
922     upnp_setting=0
923     if test x$use_upnp_default != xno; then
924       use_upnp_default=yes
925       upnp_setting=1
926     fi
927     AC_MSG_RESULT($use_upnp_default)
928     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
929     if test x$TARGET_OS = xwindows; then
930       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
931     fi
932   else
933     AC_MSG_RESULT(no)
934   fi
937 dnl these are only used when qt is enabled
938 BUILD_TEST_QT=""
939 if test x$bitcoin_enable_qt != xno; then
940   dnl enable dbus support
941   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
942   if test x$bitcoin_enable_qt_dbus != xno; then
943     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
944   fi
945   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
947   dnl enable qr support
948   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
949   if test x$have_qrencode = xno; then
950     if test x$use_qr = xyes; then
951      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
952     fi
953     AC_MSG_RESULT(no)
954   else
955     if test x$use_qr != xno; then
956       AC_MSG_RESULT(yes)
957       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
958       use_qr=yes
959     else
960       AC_MSG_RESULT(no)
961     fi
962   fi
964   if test x$XGETTEXT = x; then
965     AC_MSG_WARN("xgettext is required to update qt translations")
966   fi
968   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
969   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
970     AC_MSG_RESULT([yes])
971     BUILD_TEST_QT="yes"
972   else
973     AC_MSG_RESULT([no])
974   fi
977 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
979 AC_MSG_CHECKING([whether to build test_bitcoin])
980 if test x$use_tests = xyes; then
981   AC_MSG_RESULT([yes])
982   BUILD_TEST="yes"
983 else
984   AC_MSG_RESULT([no])
985   BUILD_TEST=""
988 AC_MSG_CHECKING([whether to reduce exports])
989 if test x$use_reduce_exports = xyes; then
990   AC_MSG_RESULT([yes])
991 else
992   AC_MSG_RESULT([no])
995 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
996   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
999 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1000 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1001 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1002 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1003 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1004 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1005 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1006 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1007 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1008 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1009 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1010 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1012 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1013 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1014 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1015 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1016 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1017 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1018 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1019 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1020 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1021 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1022 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1023 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1024 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1025 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1026 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1027 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1028 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1029 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1030 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1031 AC_SUBST(BITCOIN_DAEMON_NAME)
1032 AC_SUBST(BITCOIN_GUI_NAME)
1033 AC_SUBST(BITCOIN_CLI_NAME)
1034 AC_SUBST(BITCOIN_TX_NAME)
1036 AC_SUBST(RELDFLAGS)
1037 AC_SUBST(HARDENED_CXXFLAGS)
1038 AC_SUBST(HARDENED_CPPFLAGS)
1039 AC_SUBST(HARDENED_LDFLAGS)
1040 AC_SUBST(PIC_FLAGS)
1041 AC_SUBST(PIE_FLAGS)
1042 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1043 AC_SUBST(USE_UPNP)
1044 AC_SUBST(USE_QRCODE)
1045 AC_SUBST(BOOST_LIBS)
1046 AC_SUBST(TESTDEFS)
1047 AC_SUBST(LEVELDB_TARGET_FLAGS)
1048 AC_SUBST(MINIUPNPC_CPPFLAGS)
1049 AC_SUBST(MINIUPNPC_LIBS)
1050 AC_SUBST(CRYPTO_LIBS)
1051 AC_SUBST(SSL_LIBS)
1052 AC_SUBST(EVENT_LIBS)
1053 AC_SUBST(EVENT_PTHREADS_LIBS)
1054 AC_SUBST(ZMQ_LIBS)
1055 AC_SUBST(PROTOBUF_LIBS)
1056 AC_SUBST(QR_LIBS)
1057 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1058 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1059 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1060 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1061 AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py])
1063 dnl boost's m4 checks do something really nasty: they export these vars. As a
1064 dnl result, they leak into secp256k1's configure and crazy things happen.
1065 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1066 CPPFLAGS_TEMP="$CPPFLAGS"
1067 unset CPPFLAGS
1068 CPPFLAGS="$CPPFLAGS_TEMP"
1070 LDFLAGS_TEMP="$LDFLAGS"
1071 unset LDFLAGS
1072 LDFLAGS="$LDFLAGS_TEMP"
1074 LIBS_TEMP="$LIBS"
1075 unset LIBS
1076 LIBS="$LIBS_TEMP"
1078 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1079 unset PKG_CONFIG_PATH
1080 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1082 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1083 unset PKG_CONFIG_LIBDIR
1084 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1086 if test x$need_bundled_univalue = xyes; then
1087   AC_CONFIG_SUBDIRS([src/univalue])
1090 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1091 AC_CONFIG_SUBDIRS([src/secp256k1])
1093 AC_OUTPUT
1095 dnl Taken from https://wiki.debian.org/RpathIssue
1096 case $host in
1097    *-*-linux-gnu)
1098      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1099      sed < libtool > libtool-2 \
1100      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1101      mv libtool-2 libtool
1102      chmod 755 libtool
1103    ;;
1104 esac
1106 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1107 case ${OS} in
1108    *Windows*)
1109      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1110      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
1111    ;;
1112 esac