rpc: Generate auth cookie in hex instead of base64
[bitcoinplatinum.git] / configure.ac
blob9ce10b745497c78c626226e70fc624eb5cbabb27
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 Check if -latomic is required for <std::atomic>
61 CHECK_ATOMIC
63 dnl Libtool init checks.
64 LT_INIT([pic-only])
66 dnl Check/return PATH for base programs.
67 AC_PATH_TOOL(AR, ar)
68 AC_PATH_TOOL(RANLIB, ranlib)
69 AC_PATH_TOOL(STRIP, strip)
70 AC_PATH_TOOL(GCOV, gcov)
71 AC_PATH_PROG(LCOV, lcov)
72 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
73 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
74 AC_PATH_PROG(GENHTML, genhtml)
75 AC_PATH_PROG([GIT], [git])
76 AC_PATH_PROG(CCACHE,ccache)
77 AC_PATH_PROG(XGETTEXT,xgettext)
78 AC_PATH_PROG(HEXDUMP,hexdump)
79 AC_PATH_TOOL(READELF, readelf)
80 AC_PATH_TOOL(CPPFILT, c++filt)
81 AC_PATH_TOOL(OBJCOPY, objcopy)
83 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
85 # Enable wallet
86 AC_ARG_ENABLE([wallet],
87   [AS_HELP_STRING([--disable-wallet],
88   [disable wallet (enabled by default)])],
89   [enable_wallet=$enableval],
90   [enable_wallet=yes])
92 AC_ARG_WITH([miniupnpc],
93   [AS_HELP_STRING([--with-miniupnpc],
94   [enable UPNP (default is yes if libminiupnpc is found)])],
95   [use_upnp=$withval],
96   [use_upnp=auto])
98 AC_ARG_ENABLE([upnp-default],
99   [AS_HELP_STRING([--enable-upnp-default],
100   [if UPNP is enabled, turn it on at startup (default is no)])],
101   [use_upnp_default=$enableval],
102   [use_upnp_default=no])
104 AC_ARG_ENABLE(tests,
105     AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
106     [use_tests=$enableval],
107     [use_tests=yes])
109 AC_ARG_ENABLE(gui-tests,
110     AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
111     [use_gui_tests=$enableval],
112     [use_gui_tests=$use_tests])
114 AC_ARG_ENABLE(bench,
115     AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
116     [use_bench=$enableval],
117     [use_bench=yes])
119 AC_ARG_ENABLE([extended-rpc-tests],
120     AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
121     [use_extended_rpc_tests=$enableval],
122     [use_extended_rpc_tests=no])
124 AC_ARG_WITH([qrencode],
125   [AS_HELP_STRING([--with-qrencode],
126   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
127   [use_qr=$withval],
128   [use_qr=auto])
130 AC_ARG_ENABLE([hardening],
131   [AS_HELP_STRING([--disable-hardening],
132   [do not attempt to harden the resulting executables (default is to harden)])],
133   [use_hardening=$enableval],
134   [use_hardening=yes])
136 AC_ARG_ENABLE([reduce-exports],
137   [AS_HELP_STRING([--enable-reduce-exports],
138   [attempt to reduce exported symbols in the resulting executables (default is no)])],
139   [use_reduce_exports=$enableval],
140   [use_reduce_exports=no])
142 AC_ARG_ENABLE([ccache],
143   [AS_HELP_STRING([--disable-ccache],
144   [do not use ccache for building (default is to use if found)])],
145   [use_ccache=$enableval],
146   [use_ccache=auto])
148 AC_ARG_ENABLE([lcov],
149   [AS_HELP_STRING([--enable-lcov],
150   [enable lcov testing (default is no)])],
151   [use_lcov=yes],
152   [use_lcov=no])
154 AC_ARG_ENABLE([glibc-back-compat],
155   [AS_HELP_STRING([--enable-glibc-back-compat],
156   [enable backwards compatibility with glibc])],
157   [use_glibc_compat=$enableval],
158   [use_glibc_compat=no])
160 AC_ARG_WITH([system-univalue],
161   [AS_HELP_STRING([--with-system-univalue],
162   [Build with system UniValue (default is no)])],
163   [system_univalue=$withval],
164   [system_univalue=no]
166 AC_ARG_ENABLE([zmq],
167   [AS_HELP_STRING([--disable-zmq],
168   [disable ZMQ notifications])],
169   [use_zmq=$enableval],
170   [use_zmq=yes])
172 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
174 AC_ARG_ENABLE(man,
175     [AS_HELP_STRING([--disable-man],
176                     [do not install man pages (default is to install)])],,
177     enable_man=yes)
178 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
180 # Enable debug
181 AC_ARG_ENABLE([debug],
182     [AS_HELP_STRING([--enable-debug],
183                     [use debug compiler flags and macros (default is no)])],
184     [enable_debug=$enableval],
185     [enable_debug=no])
187 AC_LANG_PUSH([C++])
188 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
190 if test "x$enable_debug" = xyes; then
191     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
192     if test "x$GCC" = xyes; then
193         CFLAGS="$CFLAGS -g3 -O0"
194     fi
196     if test "x$GXX" = xyes; then
197         CXXFLAGS="$CXXFLAGS -g3 -O0"
198     fi
201 if test "x$CXXFLAGS_overridden" = "xno"; then
202   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
203   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
204   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
205   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
207   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
208   ## unknown options if any other warning is produced. Test the -Wfoo case, and
209   ## set the -Wno-foo case if it works.
210   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
211   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
212   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
213   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
215 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
217 AC_ARG_WITH([utils],
218   [AS_HELP_STRING([--with-utils],
219   [build bitcoin-cli bitcoin-tx (default=yes)])],
220   [build_bitcoin_utils=$withval],
221   [build_bitcoin_utils=yes])
223 AC_ARG_WITH([libs],
224   [AS_HELP_STRING([--with-libs],
225   [build libraries (default=yes)])],
226   [build_bitcoin_libs=$withval],
227   [build_bitcoin_libs=yes])
229 AC_ARG_WITH([daemon],
230   [AS_HELP_STRING([--with-daemon],
231   [build bitcoind daemon (default=yes)])],
232   [build_bitcoind=$withval],
233   [build_bitcoind=yes])
235 use_pkgconfig=yes
236 case $host in
237   *mingw*)
239      #pkgconfig does more harm than good with MinGW
240      use_pkgconfig=no
242      TARGET_OS=windows
243      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
244      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
245      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
246      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
247      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
248      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
249      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
250      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
251      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
252      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
253      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
254      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
255      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
256      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
257      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
258      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
259      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
260      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
261      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
263      # -static is interpreted by libtool, where it has a different meaning.
264      # In libtool-speak, it's -all-static.
265      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
267      AC_PATH_PROG([MAKENSIS], [makensis], none)
268      if test x$MAKENSIS = xnone; then
269        AC_MSG_WARN("makensis not found. Cannot create installer.")
270      fi
272      AC_PATH_TOOL(WINDRES, windres, none)
273      if test x$WINDRES = xnone; then
274        AC_MSG_ERROR("windres not found")
275      fi
277      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
278      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
279      if test "x$CXXFLAGS_overridden" = "xno"; then
280        CXXFLAGS="$CXXFLAGS -w"
281      fi
282      case $host in
283        i?86-*) WINDOWS_BITS=32 ;;
284        x86_64-*) WINDOWS_BITS=64 ;;
285        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
286      esac
287      AC_SUBST(WINDOWS_BITS)
289      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
290      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
291      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
292      dnl also overridden to prevent their insertion later.
293      dnl This should only affect dll's.
294      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
295      postdeps_CXX=
297      ;;
298   *darwin*)
299      TARGET_OS=darwin
300      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
301      if  test x$cross_compiling != xyes; then
302        BUILD_OS=darwin
303        AC_CHECK_PROG([PORT],port, port)
304        if test x$PORT = xport; then
305          dnl add default macports paths
306          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
307          LIBS="$LIBS -L/opt/local/lib"
308          if test -d /opt/local/include/db48; then
309            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
310            LIBS="$LIBS -L/opt/local/lib/db48"
311          fi
312        fi
314        AC_CHECK_PROG([BREW],brew, brew)
315        if test x$BREW = xbrew; then
316          dnl These Homebrew packages may be keg-only, meaning that they won't be found
317          dnl in expected paths because they may conflict with system files. Ask
318          dnl Homebrew where each one is located, then adjust paths accordingly.
319          dnl It's safe to add these paths even if the functionality is disabled by
320          dnl the user (--without-wallet or --without-gui for example).
322          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
323          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
324          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
325          if test x$openssl_prefix != x; then
326            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
327            export PKG_CONFIG_PATH
328          fi
329          if test x$bdb_prefix != x; then
330            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
331            LIBS="$LIBS -L$bdb_prefix/lib"
332          fi
333          if test x$qt5_prefix != x; then
334            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
335            export PKG_CONFIG_PATH
336          fi
337        fi
338      else
339        case $build_os in
340          *darwin*)
341            BUILD_OS=darwin
342            ;;
343          *)
344            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
345            AC_PATH_TOOL([OTOOL], [otool], otool)
346            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
347            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
348            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
349            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
351            dnl libtool will try to strip the static lib, which is a problem for
352            dnl cross-builds because strip attempts to call a hard-coded ld,
353            dnl which may not exist in the path. Stripping the .a is not
354            dnl necessary, so just disable it.
355            old_striplib=
356            ;;
357        esac
358      fi
360      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
361      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
362      OBJCXXFLAGS="$CXXFLAGS"
363      ;;
364    *linux*)
365      TARGET_OS=linux
366      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
367      ;;
368    *freebsd*)
369      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
370      ;;
371    *openbsd*)
372      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
373      ;;
374    *)
375      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
376      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
377      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
378      ;;
379 esac
381 if test x$use_pkgconfig = xyes; then
382   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.)])
383   m4_ifdef([PKG_PROG_PKG_CONFIG], [
384   PKG_PROG_PKG_CONFIG
385   if test x"$PKG_CONFIG" = "x"; then
386     AC_MSG_ERROR(pkg-config not found.)
387   fi
388   ])
391 if test x$use_extended_rpc_tests != xno; then
392   AC_SUBST(EXTENDED_RPC_TESTS, -extended)
395 if test x$use_lcov = xyes; then
396   if test x$LCOV = x; then
397     AC_MSG_ERROR("lcov testing requested but lcov not found")
398   fi
399   if test x$GCOV = x; then
400     AC_MSG_ERROR("lcov testing requested but gcov not found")
401   fi
402   if test x$PYTHON = x; then
403     AC_MSG_ERROR("lcov testing requested but python not found")
404   fi
405   if test x$GENHTML = x; then
406     AC_MSG_ERROR("lcov testing requested but genhtml not found")
407   fi
408   LCOV="$LCOV --gcov-tool=$GCOV"
409   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
410     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
413 dnl Check for endianness
414 AC_C_BIGENDIAN
416 dnl Check for pthread compile/link requirements
417 AX_PTHREAD
419 # The following macro will add the necessary defines to bitcoin-config.h, but
420 # they also need to be passed down to any subprojects. Pull the results out of
421 # the cache and add them to CPPFLAGS.
422 AC_SYS_LARGEFILE
423 # detect POSIX or GNU variant of strerror_r
424 AC_FUNC_STRERROR_R
426 if test x$ac_cv_sys_file_offset_bits != x &&
427    test x$ac_cv_sys_file_offset_bits != xno &&
428    test x$ac_cv_sys_file_offset_bits != xunknown; then
429   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
432 if test x$ac_cv_sys_large_files != x &&
433    test x$ac_cv_sys_large_files != xno &&
434    test x$ac_cv_sys_large_files != xunknown; then
435   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
438 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
440 AX_GCC_FUNC_ATTRIBUTE([visibility])
441 AX_GCC_FUNC_ATTRIBUTE([dllexport])
442 AX_GCC_FUNC_ATTRIBUTE([dllimport])
444 if test x$use_glibc_compat != xno; then
446   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
447   #in anyway for back-compat.
448   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
450   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
451   # See which one is present here.
452   AC_MSG_CHECKING(__fdelt_chk type)
453   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
454                     #undef _FORTIFY_SOURCE
455                   #endif
456                   #define _FORTIFY_SOURCE 2
457                   #include <sys/select.h>
458      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
459     [ fdelt_type="long unsigned int"],
460     [ fdelt_type="long int"])
461   AC_MSG_RESULT($fdelt_type)
462   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
463 else
464   AC_SEARCH_LIBS([clock_gettime],[rt])
467 if test x$TARGET_OS != xwindows; then
468   # All windows code is PIC, forcing it on just adds useless compile warnings
469   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
472 if test x$use_hardening != xno; then
473   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
474   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
476   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
477     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
478       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
479     ])
480     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
481   ])
483   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
484   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
485   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
486   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
487   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
489   if test x$TARGET_OS != xwindows; then
490     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
491     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
492   fi
494   case $host in
495     *mingw*)
496        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
497     ;;
498   esac
501 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
502 if test x$TARGET_OS = xdarwin; then
503   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
506 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])
507 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
508 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
510 AC_CHECK_DECLS([strnlen])
512 # Check for daemon(3), unrelated to --with-daemon (although used by it)
513 AC_CHECK_DECLS([daemon])
515 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
516                 [#if HAVE_ENDIAN_H
517                  #include <endian.h>
518                  #elif HAVE_SYS_ENDIAN_H
519                  #include <sys/endian.h>
520                  #endif])
522 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
523                 [#if HAVE_BYTESWAP_H
524                  #include <byteswap.h>
525                  #endif])
527 dnl Check for MSG_NOSIGNAL
528 AC_MSG_CHECKING(for MSG_NOSIGNAL)
529 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
530  [[ int f = MSG_NOSIGNAL; ]])],
531  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
532  [ AC_MSG_RESULT(no)]
535 AC_MSG_CHECKING([for visibility attribute])
536 AC_LINK_IFELSE([AC_LANG_SOURCE([
537   int foo_def( void ) __attribute__((visibility("default")));
538   int main(){}
539   ])],
540   [
541     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
542     AC_MSG_RESULT(yes)
543   ],
544   [
545     AC_MSG_RESULT(no)
546     if test x$use_reduce_exports = xyes; then
547       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
548     fi
549   ]
552 if test x$use_reduce_exports = xyes; then
553   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
554   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
557 LEVELDB_CPPFLAGS=
558 LIBLEVELDB=
559 LIBMEMENV=
560 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
561 AC_SUBST(LEVELDB_CPPFLAGS)
562 AC_SUBST(LIBLEVELDB)
563 AC_SUBST(LIBMEMENV)
565 if test x$enable_wallet != xno; then
566     dnl Check for libdb_cxx only if wallet enabled
567     BITCOIN_FIND_BDB48
570 dnl Check for libminiupnpc (optional)
571 if test x$use_upnp != xno; then
572   AC_CHECK_HEADERS(
573     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
574     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
575     [have_miniupnpc=no]
576   )
579 BITCOIN_QT_INIT
581 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
582 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
584 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
585     use_boost=no
586 else
587     use_boost=yes
590 if test x$use_boost = xyes; then
592 dnl Check for boost libs
593 AX_BOOST_BASE
594 AX_BOOST_SYSTEM
595 AX_BOOST_FILESYSTEM
596 AX_BOOST_PROGRAM_OPTIONS
597 AX_BOOST_THREAD
598 AX_BOOST_CHRONO
601 if test x$use_reduce_exports = xyes; then
602   AC_MSG_CHECKING([for working boost reduced exports])
603   TEMP_CPPFLAGS="$CPPFLAGS"
604   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
605   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
606       @%:@include <boost/version.hpp>
607     ]], [[
608       #if BOOST_VERSION >= 104900
609       // Everything is okay
610       #else
611       #  error Boost version is too old
612       #endif
613     ]])],[
614       AC_MSG_RESULT(yes)
615     ],[
616     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
617   ])
618   CPPFLAGS="$TEMP_CPPFLAGS"
622 if test x$use_reduce_exports = xyes; then
623     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
624     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
627 if test x$use_tests = xyes; then
629   if test x$HEXDUMP = x; then
630     AC_MSG_ERROR(hexdump is required for tests)
631   fi
634   if test x$use_boost = xyes; then
636   AX_BOOST_UNIT_TEST_FRAMEWORK
638   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
639   AC_MSG_CHECKING([for dynamic linked boost test])
640   TEMP_LIBS="$LIBS"
641   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
642   TEMP_CPPFLAGS="$CPPFLAGS"
643   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
644   AC_LINK_IFELSE([AC_LANG_SOURCE([
645        #define BOOST_TEST_DYN_LINK
646        #define BOOST_TEST_MAIN
647         #include <boost/test/unit_test.hpp>
649        ])],
650     [AC_MSG_RESULT(yes)]
651     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
652     [AC_MSG_RESULT(no)])
653   LIBS="$TEMP_LIBS"
654   CPPFLAGS="$TEMP_CPPFLAGS"
656   fi
659 if test x$use_boost = xyes; then
661 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
664 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
665 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
666 dnl the abi. This was fixed in 1.57.
668 dnl When building against that installed version using c++11, the headers pick up
669 dnl on the native c++11 scoped enum support and enable it, however it will fail to
670 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
671 dnl fail.
672 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
674 TEMP_LIBS="$LIBS"
675 LIBS="$BOOST_LIBS $LIBS"
676 TEMP_CPPFLAGS="$CPPFLAGS"
677 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
678 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
679 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
680   #include "boost/config.hpp"
681   #include "boost/version.hpp"
682   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
683   #define BOOST_NO_SCOPED_ENUMS
684   #define BOOST_NO_CXX11_SCOPED_ENUMS
685   #define CHECK
686   #endif
687   #include "boost/filesystem.hpp"
688   ]],[[
689   #if defined(CHECK)
690     boost::filesystem::copy_file("foo", "bar");
691   #else
692     choke;
693   #endif
694   ]])],
695   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
696 LIBS="$TEMP_LIBS"
697 CPPFLAGS="$TEMP_CPPFLAGS"
699 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
700 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
701 dnl a working version is available, else fall back to sleep. sleep was removed
702 dnl after 1.56.
703 dnl If neither is available, abort.
704 TEMP_LIBS="$LIBS"
705 LIBS="$BOOST_LIBS $LIBS"
706 TEMP_CPPFLAGS="$CPPFLAGS"
707 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
708 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
709   #include <boost/thread/thread.hpp>
710   #include <boost/version.hpp>
711   ]],[[
712   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
713       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
714   #else
715    choke me
716   #endif
717   ]])],
718   [boost_sleep=yes;
719      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
720   [boost_sleep=no])
721 LIBS="$TEMP_LIBS"
722 CPPFLAGS="$TEMP_CPPFLAGS"
724 if test x$boost_sleep != xyes; then
725 TEMP_LIBS="$LIBS"
726 LIBS="$BOOST_LIBS $LIBS"
727 TEMP_CPPFLAGS="$CPPFLAGS"
728 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
729 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
730   #include <boost/version.hpp>
731   #include <boost/thread.hpp>
732   #include <boost/date_time/posix_time/posix_time_types.hpp>
733   ]],[[
734   #if BOOST_VERSION <= 105600
735       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
736   #else
737    choke me
738   #endif
739   ]])],
740   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
741   [boost_sleep=no])
742 LIBS="$TEMP_LIBS"
743 CPPFLAGS="$TEMP_CPPFLAGS"
746 if test x$boost_sleep != xyes; then
747   AC_MSG_ERROR(No working boost sleep implementation found.)
752 if test x$use_pkgconfig = xyes; then
753   : dnl
754   m4_ifdef(
755     [PKG_CHECK_MODULES],
756     [
757       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
758       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
759       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
760       if test x$use_qr != xno; then
761         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
762       fi
763       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
764         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
765         if test x$TARGET_OS != xwindows; then
766           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
767         fi
768       fi
770       if test "x$use_zmq" = "xyes"; then
771         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
772           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
773           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
774            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
775            use_zmq=no])
776       else
777           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
778       fi
779     ]
780   )
781 else
782   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
783   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
785   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
786   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
788   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
789     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
790     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
791     if test x$TARGET_OS != xwindows; then
792       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
793     fi
794   fi
796   if test "x$use_zmq" = "xyes"; then
797      AC_CHECK_HEADER([zmq.h],
798        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
799        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
800         use_zmq=no
801         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
802      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
803        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
804         use_zmq=no
805         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
806   else
807     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
808   fi
810   if test "x$use_zmq" = "xyes"; then
811     dnl Assume libzmq was built for static linking
812     case $host in
813       *mingw*)
814         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
815       ;;
816     esac
817   fi
819   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
820   if test x$use_qr != xno; then
821     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
822     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
823   fi
826 dnl univalue check
828 need_bundled_univalue=yes
830 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
831   need_bundled_univalue=no
832 else
834 if test x$system_univalue != xno ; then
835   found_univalue=no
836   if test x$use_pkgconfig = xyes; then
837     : #NOP
838     m4_ifdef(
839       [PKG_CHECK_MODULES],
840       [
841         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
842       ]
843     )
844   else
845     AC_CHECK_HEADER([univalue.h],[
846       AC_CHECK_LIB([univalue],  [main],[
847         UNIVALUE_LIBS=-lunivalue
848         found_univalue=yes
849       ],[true])
850     ],[true])
851   fi
853   if test x$found_univalue = xyes ; then
854     system_univalue=yes
855     need_bundled_univalue=no
856   elif test x$system_univalue = xyes ; then
857     AC_MSG_ERROR([univalue not found])
858   else
859     system_univalue=no
860   fi
863 if test x$need_bundled_univalue = xyes ; then
864   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
865   UNIVALUE_LIBS='univalue/libunivalue.la'
870 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
871 AC_SUBST(UNIVALUE_CFLAGS)
872 AC_SUBST(UNIVALUE_LIBS)
874 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
876 AC_MSG_CHECKING([whether to build bitcoind])
877 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
878 AC_MSG_RESULT($build_bitcoind)
880 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
881 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
882 AC_MSG_RESULT($build_bitcoin_utils)
884 AC_MSG_CHECKING([whether to build libraries])
885 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
886 if test x$build_bitcoin_libs = xyes; then
887   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
888   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
890 AC_MSG_RESULT($build_bitcoin_libs)
892 AC_LANG_POP
894 if test "x$use_ccache" != "xno"; then
895   AC_MSG_CHECKING(if ccache should be used)
896   if test x$CCACHE = x; then
897     if test "x$use_ccache" = "xyes"; then
898       AC_MSG_ERROR([ccache not found.]);
899     else
900       use_ccache=no
901     fi
902   else
903     use_ccache=yes
904     CC="$ac_cv_path_CCACHE $CC"
905     CXX="$ac_cv_path_CCACHE $CXX"
906   fi
907   AC_MSG_RESULT($use_ccache)
909 if test "x$use_ccache" = "xyes"; then
910     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
913 dnl enable wallet
914 AC_MSG_CHECKING([if wallet should be enabled])
915 if test x$enable_wallet != xno; then
916   AC_MSG_RESULT(yes)
917   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
919 else
920   AC_MSG_RESULT(no)
923 dnl enable upnp support
924 AC_MSG_CHECKING([whether to build with support for UPnP])
925 if test x$have_miniupnpc = xno; then
926   if test x$use_upnp = xyes; then
927      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
928   fi
929   AC_MSG_RESULT(no)
930 else
931   if test x$use_upnp != xno; then
932     AC_MSG_RESULT(yes)
933     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
934     use_upnp=yes
935     upnp_setting=0
936     if test x$use_upnp_default != xno; then
937       use_upnp_default=yes
938       upnp_setting=1
939     fi
940     AC_MSG_RESULT($use_upnp_default)
941     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
942     if test x$TARGET_OS = xwindows; then
943       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
944     fi
945   else
946     AC_MSG_RESULT(no)
947   fi
950 dnl these are only used when qt is enabled
951 BUILD_TEST_QT=""
952 if test x$bitcoin_enable_qt != xno; then
953   dnl enable dbus support
954   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
955   if test x$bitcoin_enable_qt_dbus != xno; then
956     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
957   fi
958   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
960   dnl enable qr support
961   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
962   if test x$have_qrencode = xno; then
963     if test x$use_qr = xyes; then
964      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
965     fi
966     AC_MSG_RESULT(no)
967   else
968     if test x$use_qr != xno; then
969       AC_MSG_RESULT(yes)
970       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
971       use_qr=yes
972     else
973       AC_MSG_RESULT(no)
974     fi
975   fi
977   if test x$XGETTEXT = x; then
978     AC_MSG_WARN("xgettext is required to update qt translations")
979   fi
981   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
982   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
983     AC_MSG_RESULT([yes])
984     BUILD_TEST_QT="yes"
985   else
986     AC_MSG_RESULT([no])
987   fi
990 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
992 AC_MSG_CHECKING([whether to build test_bitcoin])
993 if test x$use_tests = xyes; then
994   AC_MSG_RESULT([yes])
995   BUILD_TEST="yes"
996 else
997   AC_MSG_RESULT([no])
998   BUILD_TEST=""
1001 AC_MSG_CHECKING([whether to reduce exports])
1002 if test x$use_reduce_exports = xyes; then
1003   AC_MSG_RESULT([yes])
1004 else
1005   AC_MSG_RESULT([no])
1008 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1009   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1012 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1013 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1014 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1015 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1016 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1017 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1018 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1019 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1020 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1021 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1022 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1023 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1025 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1026 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1027 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1028 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1029 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1030 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1031 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1032 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1033 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1034 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1035 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1036 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1037 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1038 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1039 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1040 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1041 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1042 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1043 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1044 AC_SUBST(BITCOIN_DAEMON_NAME)
1045 AC_SUBST(BITCOIN_GUI_NAME)
1046 AC_SUBST(BITCOIN_CLI_NAME)
1047 AC_SUBST(BITCOIN_TX_NAME)
1049 AC_SUBST(RELDFLAGS)
1050 AC_SUBST(HARDENED_CXXFLAGS)
1051 AC_SUBST(HARDENED_CPPFLAGS)
1052 AC_SUBST(HARDENED_LDFLAGS)
1053 AC_SUBST(PIC_FLAGS)
1054 AC_SUBST(PIE_FLAGS)
1055 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1056 AC_SUBST(USE_UPNP)
1057 AC_SUBST(USE_QRCODE)
1058 AC_SUBST(BOOST_LIBS)
1059 AC_SUBST(TESTDEFS)
1060 AC_SUBST(LEVELDB_TARGET_FLAGS)
1061 AC_SUBST(MINIUPNPC_CPPFLAGS)
1062 AC_SUBST(MINIUPNPC_LIBS)
1063 AC_SUBST(CRYPTO_LIBS)
1064 AC_SUBST(SSL_LIBS)
1065 AC_SUBST(EVENT_LIBS)
1066 AC_SUBST(EVENT_PTHREADS_LIBS)
1067 AC_SUBST(ZMQ_LIBS)
1068 AC_SUBST(PROTOBUF_LIBS)
1069 AC_SUBST(QR_LIBS)
1070 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1071 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1072 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1073 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1074 AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py])
1076 dnl boost's m4 checks do something really nasty: they export these vars. As a
1077 dnl result, they leak into secp256k1's configure and crazy things happen.
1078 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1079 CPPFLAGS_TEMP="$CPPFLAGS"
1080 unset CPPFLAGS
1081 CPPFLAGS="$CPPFLAGS_TEMP"
1083 LDFLAGS_TEMP="$LDFLAGS"
1084 unset LDFLAGS
1085 LDFLAGS="$LDFLAGS_TEMP"
1087 LIBS_TEMP="$LIBS"
1088 unset LIBS
1089 LIBS="$LIBS_TEMP"
1091 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1092 unset PKG_CONFIG_PATH
1093 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1095 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1096 unset PKG_CONFIG_LIBDIR
1097 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1099 if test x$need_bundled_univalue = xyes; then
1100   AC_CONFIG_SUBDIRS([src/univalue])
1103 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1104 AC_CONFIG_SUBDIRS([src/secp256k1])
1106 AC_OUTPUT
1108 dnl Taken from https://wiki.debian.org/RpathIssue
1109 case $host in
1110    *-*-linux-gnu)
1111      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1112      sed < libtool > libtool-2 \
1113      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1114      mv libtool-2 libtool
1115      chmod 755 libtool
1116    ;;
1117 esac
1119 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1120 case ${OS} in
1121    *Windows*)
1122      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1123      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
1124    ;;
1125 esac