net: don't run callbacks on nodes that haven't completed the version handshake
[bitcoinplatinum.git] / configure.ac
blob346695043d9d12dfdfe2f03e0b7e9fbe9c1559eb
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, 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])
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-rpc-tests],
128     AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
129     [use_extended_rpc_tests=$enableval],
130     [use_extended_rpc_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 AC_LANG_PUSH([C++])
196 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
198 if test "x$enable_debug" = xyes; then
199     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
200     if test "x$GCC" = xyes; then
201         CFLAGS="$CFLAGS -g3 -O0"
202     fi
204     if test "x$GXX" = xyes; then
205         CXXFLAGS="$CXXFLAGS -g3 -O0"
206     fi
209 if test "x$CXXFLAGS_overridden" = "xno"; then
210   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
211   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
212   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
213   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
215   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
216   ## unknown options if any other warning is produced. Test the -Wfoo case, and
217   ## set the -Wno-foo case if it works.
218   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
219   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
220   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
221   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
223 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
225 AC_ARG_WITH([utils],
226   [AS_HELP_STRING([--with-utils],
227   [build bitcoin-cli bitcoin-tx (default=yes)])],
228   [build_bitcoin_utils=$withval],
229   [build_bitcoin_utils=yes])
231 AC_ARG_WITH([libs],
232   [AS_HELP_STRING([--with-libs],
233   [build libraries (default=yes)])],
234   [build_bitcoin_libs=$withval],
235   [build_bitcoin_libs=yes])
237 AC_ARG_WITH([daemon],
238   [AS_HELP_STRING([--with-daemon],
239   [build bitcoind daemon (default=yes)])],
240   [build_bitcoind=$withval],
241   [build_bitcoind=yes])
243 use_pkgconfig=yes
244 case $host in
245   *mingw*)
247      #pkgconfig does more harm than good with MinGW
248      use_pkgconfig=no
250      TARGET_OS=windows
251      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
252      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
253      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
254      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
255      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
256      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
257      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
258      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
259      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
260      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
261      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
262      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
263      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
264      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
265      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
266      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
267      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
268      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
269      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
271      # -static is interpreted by libtool, where it has a different meaning.
272      # In libtool-speak, it's -all-static.
273      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
275      AC_PATH_PROG([MAKENSIS], [makensis], none)
276      if test x$MAKENSIS = xnone; then
277        AC_MSG_WARN("makensis not found. Cannot create installer.")
278      fi
280      AC_PATH_TOOL(WINDRES, windres, none)
281      if test x$WINDRES = xnone; then
282        AC_MSG_ERROR("windres not found")
283      fi
285      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
286      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
287      if test "x$CXXFLAGS_overridden" = "xno"; then
288        CXXFLAGS="$CXXFLAGS -w"
289      fi
290      case $host in
291        i?86-*) WINDOWS_BITS=32 ;;
292        x86_64-*) WINDOWS_BITS=64 ;;
293        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
294      esac
295      AC_SUBST(WINDOWS_BITS)
297      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
298      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
299      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
300      dnl also overridden to prevent their insertion later.
301      dnl This should only affect dll's.
302      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
303      postdeps_CXX=
305      ;;
306   *darwin*)
307      TARGET_OS=darwin
308      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
309      if  test x$cross_compiling != xyes; then
310        BUILD_OS=darwin
311        AC_CHECK_PROG([PORT],port, port)
312        if test x$PORT = xport; then
313          dnl add default macports paths
314          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
315          LIBS="$LIBS -L/opt/local/lib"
316          if test -d /opt/local/include/db48; then
317            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
318            LIBS="$LIBS -L/opt/local/lib/db48"
319          fi
320        fi
322        AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
323        AC_CHECK_PROG([BREW],brew, brew)
324        if test x$BREW = xbrew; then
325          dnl These Homebrew packages may be keg-only, meaning that they won't be found
326          dnl in expected paths because they may conflict with system files. Ask
327          dnl Homebrew where each one is located, then adjust paths accordingly.
328          dnl It's safe to add these paths even if the functionality is disabled by
329          dnl the user (--without-wallet or --without-gui for example).
331          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
332          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
333          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
334          if test x$openssl_prefix != x; then
335            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
336            export PKG_CONFIG_PATH
337          fi
338          if test x$bdb_prefix != x; then
339            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
340            LIBS="$LIBS -L$bdb_prefix/lib"
341          fi
342          if test x$qt5_prefix != x; then
343            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
344            export PKG_CONFIG_PATH
345          fi
346        fi
347      else
348        case $build_os in
349          *darwin*)
350            BUILD_OS=darwin
351            ;;
352          *)
353            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
354            AC_PATH_TOOL([OTOOL], [otool], otool)
355            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
356            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
357            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
358            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
360            dnl libtool will try to strip the static lib, which is a problem for
361            dnl cross-builds because strip attempts to call a hard-coded ld,
362            dnl which may not exist in the path. Stripping the .a is not
363            dnl necessary, so just disable it.
364            old_striplib=
365            ;;
366        esac
367      fi
369      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
370      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
371      OBJCXXFLAGS="$CXXFLAGS"
372      ;;
373    *linux*)
374      TARGET_OS=linux
375      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
376      ;;
377    *freebsd*)
378      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
379      ;;
380    *openbsd*)
381      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
382      ;;
383    *)
384      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
385      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
386      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
387      ;;
388 esac
390 if test x$use_pkgconfig = xyes; then
391   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.)])
392   m4_ifdef([PKG_PROG_PKG_CONFIG], [
393   PKG_PROG_PKG_CONFIG
394   if test x"$PKG_CONFIG" = "x"; then
395     AC_MSG_ERROR(pkg-config not found.)
396   fi
397   ])
400 if test x$use_extended_rpc_tests != xno; then
401   AC_SUBST(EXTENDED_RPC_TESTS, -extended)
404 if test x$use_lcov = xyes; then
405   if test x$LCOV = x; then
406     AC_MSG_ERROR("lcov testing requested but lcov not found")
407   fi
408   if test x$GCOV = x; then
409     AC_MSG_ERROR("lcov testing requested but gcov not found")
410   fi
411   if test x$PYTHON = x; then
412     AC_MSG_ERROR("lcov testing requested but python not found")
413   fi
414   if test x$GENHTML = x; then
415     AC_MSG_ERROR("lcov testing requested but genhtml not found")
416   fi
417   LCOV="$LCOV --gcov-tool=$GCOV"
418   AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
419     [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
420   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
421     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
424 dnl Check for endianness
425 AC_C_BIGENDIAN
427 dnl Check for pthread compile/link requirements
428 AX_PTHREAD
430 # The following macro will add the necessary defines to bitcoin-config.h, but
431 # they also need to be passed down to any subprojects. Pull the results out of
432 # the cache and add them to CPPFLAGS.
433 AC_SYS_LARGEFILE
434 # detect POSIX or GNU variant of strerror_r
435 AC_FUNC_STRERROR_R
437 if test x$ac_cv_sys_file_offset_bits != x &&
438    test x$ac_cv_sys_file_offset_bits != xno &&
439    test x$ac_cv_sys_file_offset_bits != xunknown; then
440   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
443 if test x$ac_cv_sys_large_files != x &&
444    test x$ac_cv_sys_large_files != xno &&
445    test x$ac_cv_sys_large_files != xunknown; then
446   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
449 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
451 AX_GCC_FUNC_ATTRIBUTE([visibility])
452 AX_GCC_FUNC_ATTRIBUTE([dllexport])
453 AX_GCC_FUNC_ATTRIBUTE([dllimport])
455 if test x$use_glibc_compat != xno; then
457   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
458   #in anyway for back-compat.
459   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
461   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
462   # See which one is present here.
463   AC_MSG_CHECKING(__fdelt_chk type)
464   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
465                     #undef _FORTIFY_SOURCE
466                   #endif
467                   #define _FORTIFY_SOURCE 2
468                   #include <sys/select.h>
469      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
470     [ fdelt_type="long unsigned int"],
471     [ fdelt_type="long int"])
472   AC_MSG_RESULT($fdelt_type)
473   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
474 else
475   AC_SEARCH_LIBS([clock_gettime],[rt])
478 if test x$TARGET_OS != xwindows; then
479   # All windows code is PIC, forcing it on just adds useless compile warnings
480   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
483 if test x$use_hardening != xno; then
484   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
485   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
487   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
488     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
489       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
490     ])
491     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
492   ])
494   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
495   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
496   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
497   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
498   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
500   if test x$TARGET_OS != xwindows; then
501     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
502     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
503   fi
505   case $host in
506     *mingw*)
507        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
508     ;;
509   esac
512 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
513 if test x$TARGET_OS = xdarwin; then
514   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
517 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])
519 AC_CHECK_DECLS([strnlen])
521 # Check for daemon(3), unrelated to --with-daemon (although used by it)
522 AC_CHECK_DECLS([daemon])
524 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
525                 [#if HAVE_ENDIAN_H
526                  #include <endian.h>
527                  #elif HAVE_SYS_ENDIAN_H
528                  #include <sys/endian.h>
529                  #endif])
531 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
532                 [#if HAVE_BYTESWAP_H
533                  #include <byteswap.h>
534                  #endif])
536 dnl Check for MSG_NOSIGNAL
537 AC_MSG_CHECKING(for MSG_NOSIGNAL)
538 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
539  [[ int f = MSG_NOSIGNAL; ]])],
540  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
541  [ AC_MSG_RESULT(no)]
544 AC_MSG_CHECKING([for visibility attribute])
545 AC_LINK_IFELSE([AC_LANG_SOURCE([
546   int foo_def( void ) __attribute__((visibility("default")));
547   int main(){}
548   ])],
549   [
550     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
551     AC_MSG_RESULT(yes)
552   ],
553   [
554     AC_MSG_RESULT(no)
555     if test x$use_reduce_exports = xyes; then
556       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
557     fi
558   ]
561 if test x$use_reduce_exports = xyes; then
562   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
563   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
566 LEVELDB_CPPFLAGS=
567 LIBLEVELDB=
568 LIBMEMENV=
569 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
570 AC_SUBST(LEVELDB_CPPFLAGS)
571 AC_SUBST(LIBLEVELDB)
572 AC_SUBST(LIBMEMENV)
574 if test x$enable_wallet != xno; then
575     dnl Check for libdb_cxx only if wallet enabled
576     BITCOIN_FIND_BDB48
579 dnl Check for libminiupnpc (optional)
580 if test x$use_upnp != xno; then
581   AC_CHECK_HEADERS(
582     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
583     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
584     [have_miniupnpc=no]
585   )
588 BITCOIN_QT_INIT
590 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
591 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
593 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
594     use_boost=no
595 else
596     use_boost=yes
599 if test x$use_boost = xyes; then
601 dnl Minimum required Boost version
602 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
604 dnl Check for boost libs
605 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
606 AX_BOOST_SYSTEM
607 AX_BOOST_FILESYSTEM
608 AX_BOOST_PROGRAM_OPTIONS
609 AX_BOOST_THREAD
610 AX_BOOST_CHRONO
613 if test x$use_reduce_exports = xyes; then
614   AC_MSG_CHECKING([for working boost reduced exports])
615   TEMP_CPPFLAGS="$CPPFLAGS"
616   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
617   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
618       @%:@include <boost/version.hpp>
619     ]], [[
620       #if BOOST_VERSION >= 104900
621       // Everything is okay
622       #else
623       #  error Boost version is too old
624       #endif
625     ]])],[
626       AC_MSG_RESULT(yes)
627     ],[
628     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
629   ])
630   CPPFLAGS="$TEMP_CPPFLAGS"
634 if test x$use_reduce_exports = xyes; then
635     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
636     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
639 if test x$use_tests = xyes; then
641   if test x$HEXDUMP = x; then
642     AC_MSG_ERROR(hexdump is required for tests)
643   fi
646   if test x$use_boost = xyes; then
648   AX_BOOST_UNIT_TEST_FRAMEWORK
650   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
651   AC_MSG_CHECKING([for dynamic linked boost test])
652   TEMP_LIBS="$LIBS"
653   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
654   TEMP_CPPFLAGS="$CPPFLAGS"
655   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
656   AC_LINK_IFELSE([AC_LANG_SOURCE([
657        #define BOOST_TEST_DYN_LINK
658        #define BOOST_TEST_MAIN
659         #include <boost/test/unit_test.hpp>
661        ])],
662     [AC_MSG_RESULT(yes)]
663     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
664     [AC_MSG_RESULT(no)])
665   LIBS="$TEMP_LIBS"
666   CPPFLAGS="$TEMP_CPPFLAGS"
668   fi
671 if test x$use_boost = xyes; then
673 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
676 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
677 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
678 dnl the abi. This was fixed in 1.57.
680 dnl When building against that installed version using c++11, the headers pick up
681 dnl on the native c++11 scoped enum support and enable it, however it will fail to
682 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
683 dnl fail.
684 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
686 TEMP_LIBS="$LIBS"
687 LIBS="$BOOST_LIBS $LIBS"
688 TEMP_CPPFLAGS="$CPPFLAGS"
689 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
690 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
691 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
692   #include "boost/config.hpp"
693   #include "boost/version.hpp"
694   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
695   #define BOOST_NO_SCOPED_ENUMS
696   #define BOOST_NO_CXX11_SCOPED_ENUMS
697   #define CHECK
698   #endif
699   #include "boost/filesystem.hpp"
700   ]],[[
701   #if defined(CHECK)
702     boost::filesystem::copy_file("foo", "bar");
703   #else
704     choke;
705   #endif
706   ]])],
707   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
708 LIBS="$TEMP_LIBS"
709 CPPFLAGS="$TEMP_CPPFLAGS"
711 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
712 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
713 dnl a working version is available, else fall back to sleep. sleep was removed
714 dnl after 1.56.
715 dnl If neither is available, abort.
716 TEMP_LIBS="$LIBS"
717 LIBS="$BOOST_LIBS $LIBS"
718 TEMP_CPPFLAGS="$CPPFLAGS"
719 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
720 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
721   #include <boost/thread/thread.hpp>
722   #include <boost/version.hpp>
723   ]],[[
724   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
725       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
726   #else
727    choke me
728   #endif
729   ]])],
730   [boost_sleep=yes;
731      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
732   [boost_sleep=no])
733 LIBS="$TEMP_LIBS"
734 CPPFLAGS="$TEMP_CPPFLAGS"
736 if test x$boost_sleep != xyes; then
737 TEMP_LIBS="$LIBS"
738 LIBS="$BOOST_LIBS $LIBS"
739 TEMP_CPPFLAGS="$CPPFLAGS"
740 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
741 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
742   #include <boost/version.hpp>
743   #include <boost/thread.hpp>
744   #include <boost/date_time/posix_time/posix_time_types.hpp>
745   ]],[[
746   #if BOOST_VERSION <= 105600
747       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
748   #else
749    choke me
750   #endif
751   ]])],
752   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
753   [boost_sleep=no])
754 LIBS="$TEMP_LIBS"
755 CPPFLAGS="$TEMP_CPPFLAGS"
758 if test x$boost_sleep != xyes; then
759   AC_MSG_ERROR(No working boost sleep implementation found.)
764 if test x$use_pkgconfig = xyes; then
765   : dnl
766   m4_ifdef(
767     [PKG_CHECK_MODULES],
768     [
769       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
770       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
771       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
772       if test x$use_qr != xno; then
773         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
774       fi
775       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
776         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
777         if test x$TARGET_OS != xwindows; then
778           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
779         fi
780       fi
782       if test "x$use_zmq" = "xyes"; then
783         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
784           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
785           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
786            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
787            use_zmq=no])
788       else
789           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
790       fi
791     ]
792   )
793 else
794   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
795   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
797   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
798   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
800   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
801     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
802     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
803     if test x$TARGET_OS != xwindows; then
804       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
805     fi
806   fi
808   if test "x$use_zmq" = "xyes"; then
809      AC_CHECK_HEADER([zmq.h],
810        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
811        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
812         use_zmq=no
813         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
814      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
815        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
816         use_zmq=no
817         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
818   else
819     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
820   fi
822   if test "x$use_zmq" = "xyes"; then
823     dnl Assume libzmq was built for static linking
824     case $host in
825       *mingw*)
826         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
827       ;;
828     esac
829   fi
831   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
832   if test x$use_qr != xno; then
833     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
834     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
835   fi
838 save_CXXFLAGS="${CXXFLAGS}"
839 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
840 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
841 #include <openssl/x509_vfy.h>
843 CXXFLAGS="${save_CXXFLAGS}"
845 dnl univalue check
847 need_bundled_univalue=yes
849 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
850   need_bundled_univalue=no
851 else
853 if test x$system_univalue != xno ; then
854   found_univalue=no
855   if test x$use_pkgconfig = xyes; then
856     : #NOP
857     m4_ifdef(
858       [PKG_CHECK_MODULES],
859       [
860         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
861       ]
862     )
863   else
864     AC_CHECK_HEADER([univalue.h],[
865       AC_CHECK_LIB([univalue],  [main],[
866         UNIVALUE_LIBS=-lunivalue
867         found_univalue=yes
868       ],[true])
869     ],[true])
870   fi
872   if test x$found_univalue = xyes ; then
873     system_univalue=yes
874     need_bundled_univalue=no
875   elif test x$system_univalue = xyes ; then
876     AC_MSG_ERROR([univalue not found])
877   else
878     system_univalue=no
879   fi
882 if test x$need_bundled_univalue = xyes ; then
883   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
884   UNIVALUE_LIBS='univalue/libunivalue.la'
889 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
890 AC_SUBST(UNIVALUE_CFLAGS)
891 AC_SUBST(UNIVALUE_LIBS)
893 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
895 AC_MSG_CHECKING([whether to build bitcoind])
896 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
897 AC_MSG_RESULT($build_bitcoind)
899 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
900 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
901 AC_MSG_RESULT($build_bitcoin_utils)
903 AC_MSG_CHECKING([whether to build libraries])
904 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
905 if test x$build_bitcoin_libs = xyes; then
906   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
907   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
909 AC_MSG_RESULT($build_bitcoin_libs)
911 AC_LANG_POP
913 if test "x$use_ccache" != "xno"; then
914   AC_MSG_CHECKING(if ccache should be used)
915   if test x$CCACHE = x; then
916     if test "x$use_ccache" = "xyes"; then
917       AC_MSG_ERROR([ccache not found.]);
918     else
919       use_ccache=no
920     fi
921   else
922     use_ccache=yes
923     CC="$ac_cv_path_CCACHE $CC"
924     CXX="$ac_cv_path_CCACHE $CXX"
925   fi
926   AC_MSG_RESULT($use_ccache)
928 if test "x$use_ccache" = "xyes"; then
929     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
932 dnl enable wallet
933 AC_MSG_CHECKING([if wallet should be enabled])
934 if test x$enable_wallet != xno; then
935   AC_MSG_RESULT(yes)
936   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
938 else
939   AC_MSG_RESULT(no)
942 dnl enable upnp support
943 AC_MSG_CHECKING([whether to build with support for UPnP])
944 if test x$have_miniupnpc = xno; then
945   if test x$use_upnp = xyes; then
946      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
947   fi
948   AC_MSG_RESULT(no)
949 else
950   if test x$use_upnp != xno; then
951     AC_MSG_RESULT(yes)
952     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
953     use_upnp=yes
954     upnp_setting=0
955     if test x$use_upnp_default != xno; then
956       use_upnp_default=yes
957       upnp_setting=1
958     fi
959     AC_MSG_RESULT($use_upnp_default)
960     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
961     if test x$TARGET_OS = xwindows; then
962       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
963     fi
964   else
965     AC_MSG_RESULT(no)
966   fi
969 dnl these are only used when qt is enabled
970 BUILD_TEST_QT=""
971 if test x$bitcoin_enable_qt != xno; then
972   dnl enable dbus support
973   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
974   if test x$bitcoin_enable_qt_dbus != xno; then
975     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
976   fi
977   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
979   dnl enable qr support
980   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
981   if test x$have_qrencode = xno; then
982     if test x$use_qr = xyes; then
983      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
984     fi
985     AC_MSG_RESULT(no)
986   else
987     if test x$use_qr != xno; then
988       AC_MSG_RESULT(yes)
989       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
990       use_qr=yes
991     else
992       AC_MSG_RESULT(no)
993     fi
994   fi
996   if test x$XGETTEXT = x; then
997     AC_MSG_WARN("xgettext is required to update qt translations")
998   fi
1000   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1001   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1002     AC_MSG_RESULT([yes])
1003     BUILD_TEST_QT="yes"
1004   else
1005     AC_MSG_RESULT([no])
1006   fi
1009 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1011 AC_MSG_CHECKING([whether to build test_bitcoin])
1012 if test x$use_tests = xyes; then
1013   AC_MSG_RESULT([yes])
1014   BUILD_TEST="yes"
1015 else
1016   AC_MSG_RESULT([no])
1017   BUILD_TEST=""
1020 AC_MSG_CHECKING([whether to reduce exports])
1021 if test x$use_reduce_exports = xyes; then
1022   AC_MSG_RESULT([yes])
1023 else
1024   AC_MSG_RESULT([no])
1027 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1028   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1031 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1032 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1033 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1034 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1035 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1036 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1037 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1038 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1039 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1040 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1041 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1042 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1044 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1045 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1046 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1047 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1048 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1049 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1050 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1051 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1052 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1053 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1054 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1055 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1056 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1057 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1058 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1059 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1060 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1061 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1062 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1063 AC_SUBST(BITCOIN_DAEMON_NAME)
1064 AC_SUBST(BITCOIN_GUI_NAME)
1065 AC_SUBST(BITCOIN_CLI_NAME)
1066 AC_SUBST(BITCOIN_TX_NAME)
1068 AC_SUBST(RELDFLAGS)
1069 AC_SUBST(HARDENED_CXXFLAGS)
1070 AC_SUBST(HARDENED_CPPFLAGS)
1071 AC_SUBST(HARDENED_LDFLAGS)
1072 AC_SUBST(PIC_FLAGS)
1073 AC_SUBST(PIE_FLAGS)
1074 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1075 AC_SUBST(USE_UPNP)
1076 AC_SUBST(USE_QRCODE)
1077 AC_SUBST(BOOST_LIBS)
1078 AC_SUBST(TESTDEFS)
1079 AC_SUBST(LEVELDB_TARGET_FLAGS)
1080 AC_SUBST(MINIUPNPC_CPPFLAGS)
1081 AC_SUBST(MINIUPNPC_LIBS)
1082 AC_SUBST(CRYPTO_LIBS)
1083 AC_SUBST(SSL_LIBS)
1084 AC_SUBST(EVENT_LIBS)
1085 AC_SUBST(EVENT_PTHREADS_LIBS)
1086 AC_SUBST(ZMQ_LIBS)
1087 AC_SUBST(PROTOBUF_LIBS)
1088 AC_SUBST(QR_LIBS)
1089 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1090 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1091 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1092 AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py])
1094 dnl boost's m4 checks do something really nasty: they export these vars. As a
1095 dnl result, they leak into secp256k1's configure and crazy things happen.
1096 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1097 CPPFLAGS_TEMP="$CPPFLAGS"
1098 unset CPPFLAGS
1099 CPPFLAGS="$CPPFLAGS_TEMP"
1101 LDFLAGS_TEMP="$LDFLAGS"
1102 unset LDFLAGS
1103 LDFLAGS="$LDFLAGS_TEMP"
1105 LIBS_TEMP="$LIBS"
1106 unset LIBS
1107 LIBS="$LIBS_TEMP"
1109 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1110 unset PKG_CONFIG_PATH
1111 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1113 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1114 unset PKG_CONFIG_LIBDIR
1115 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1117 if test x$need_bundled_univalue = xyes; then
1118   AC_CONFIG_SUBDIRS([src/univalue])
1121 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1122 AC_CONFIG_SUBDIRS([src/secp256k1])
1124 AC_OUTPUT
1126 dnl Taken from https://wiki.debian.org/RpathIssue
1127 case $host in
1128    *-*-linux-gnu)
1129      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1130      sed < libtool > libtool-2 \
1131      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1132      mv libtool-2 libtool
1133      chmod 755 libtool
1134    ;;
1135 esac
1137 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1138 case ${OS} in
1139    *Windows*)
1140      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1141      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
1142    ;;
1143 esac
1145 echo 
1146 echo "Options used to compile and link:"
1147 echo "  with wallet   = $enable_wallet"
1148 echo "  with gui / qt = $bitcoin_enable_qt"
1149 if test x$bitcoin_enable_qt != xno; then
1150     echo "    qt version  = $bitcoin_qt_got_major_vers"
1151     echo "    with qr     = $use_qr"
1153 echo "  with zmq      = $use_zmq"
1154 echo "  with test     = $use_tests"
1155 echo "  with bench    = $use_bench"
1156 echo "  with upnp     = $use_upnp"
1157 echo "  debug enabled = $enable_debug"
1158 echo 
1159 echo "  target os     = $TARGET_OS"
1160 echo "  build os      = $BUILD_OS"
1161 echo
1162 echo "  CC            = $CC"
1163 echo "  CFLAGS        = $CFLAGS"
1164 echo "  CPPFLAGS      = $CPPFLAGS"
1165 echo "  CXX           = $CXX"
1166 echo "  CXXFLAGS      = $CXXFLAGS"
1167 echo "  LDFLAGS       = $LDFLAGS"
1168 echo