Check and enable -Wshadow by default.
[bitcoinplatinum.git] / configure.ac
blob109bbcca7bb0c30e5142a66a0ef031e3dc25a649
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/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]])
214   AX_CHECK_COMPILE_FLAG([-Wshadow],[CXXFLAGS="$CXXFLAGS -Wshadow"],,[[$CXXFLAG_WERROR]])
216   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
217   ## unknown options if any other warning is produced. Test the -Wfoo case, and
218   ## set the -Wno-foo case if it works.
219   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
220   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
221   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
222   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
224 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
226 AC_ARG_WITH([utils],
227   [AS_HELP_STRING([--with-utils],
228   [build bitcoin-cli bitcoin-tx (default=yes)])],
229   [build_bitcoin_utils=$withval],
230   [build_bitcoin_utils=yes])
232 AC_ARG_WITH([libs],
233   [AS_HELP_STRING([--with-libs],
234   [build libraries (default=yes)])],
235   [build_bitcoin_libs=$withval],
236   [build_bitcoin_libs=yes])
238 AC_ARG_WITH([daemon],
239   [AS_HELP_STRING([--with-daemon],
240   [build bitcoind daemon (default=yes)])],
241   [build_bitcoind=$withval],
242   [build_bitcoind=yes])
244 use_pkgconfig=yes
245 case $host in
246   *mingw*)
248      #pkgconfig does more harm than good with MinGW
249      use_pkgconfig=no
251      TARGET_OS=windows
252      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
253      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
254      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
255      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
256      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
257      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
258      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
259      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
260      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
261      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
262      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
263      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
264      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
265      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
266      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
267      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
268      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
269      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
270      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
272      # -static is interpreted by libtool, where it has a different meaning.
273      # In libtool-speak, it's -all-static.
274      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
276      AC_PATH_PROG([MAKENSIS], [makensis], none)
277      if test x$MAKENSIS = xnone; then
278        AC_MSG_WARN("makensis not found. Cannot create installer.")
279      fi
281      AC_PATH_TOOL(WINDRES, windres, none)
282      if test x$WINDRES = xnone; then
283        AC_MSG_ERROR("windres not found")
284      fi
286      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
287      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
288      if test "x$CXXFLAGS_overridden" = "xno"; then
289        CXXFLAGS="$CXXFLAGS -w"
290      fi
291      case $host in
292        i?86-*) WINDOWS_BITS=32 ;;
293        x86_64-*) WINDOWS_BITS=64 ;;
294        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
295      esac
296      AC_SUBST(WINDOWS_BITS)
298      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
299      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
300      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
301      dnl also overridden to prevent their insertion later.
302      dnl This should only affect dll's.
303      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
304      postdeps_CXX=
306      ;;
307   *darwin*)
308      TARGET_OS=darwin
309      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
310      if  test x$cross_compiling != xyes; then
311        BUILD_OS=darwin
312        AC_CHECK_PROG([PORT],port, port)
313        if test x$PORT = xport; then
314          dnl add default macports paths
315          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
316          LIBS="$LIBS -L/opt/local/lib"
317          if test -d /opt/local/include/db48; then
318            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
319            LIBS="$LIBS -L/opt/local/lib/db48"
320          fi
321        fi
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_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
419     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
422 dnl Check for endianness
423 AC_C_BIGENDIAN
425 dnl Check for pthread compile/link requirements
426 AX_PTHREAD
428 # The following macro will add the necessary defines to bitcoin-config.h, but
429 # they also need to be passed down to any subprojects. Pull the results out of
430 # the cache and add them to CPPFLAGS.
431 AC_SYS_LARGEFILE
432 # detect POSIX or GNU variant of strerror_r
433 AC_FUNC_STRERROR_R
435 if test x$ac_cv_sys_file_offset_bits != x &&
436    test x$ac_cv_sys_file_offset_bits != xno &&
437    test x$ac_cv_sys_file_offset_bits != xunknown; then
438   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
441 if test x$ac_cv_sys_large_files != x &&
442    test x$ac_cv_sys_large_files != xno &&
443    test x$ac_cv_sys_large_files != xunknown; then
444   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
447 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
449 AX_GCC_FUNC_ATTRIBUTE([visibility])
450 AX_GCC_FUNC_ATTRIBUTE([dllexport])
451 AX_GCC_FUNC_ATTRIBUTE([dllimport])
453 if test x$use_glibc_compat != xno; then
455   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
456   #in anyway for back-compat.
457   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
459   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
460   # See which one is present here.
461   AC_MSG_CHECKING(__fdelt_chk type)
462   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
463                     #undef _FORTIFY_SOURCE
464                   #endif
465                   #define _FORTIFY_SOURCE 2
466                   #include <sys/select.h>
467      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
468     [ fdelt_type="long unsigned int"],
469     [ fdelt_type="long int"])
470   AC_MSG_RESULT($fdelt_type)
471   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
472 else
473   AC_SEARCH_LIBS([clock_gettime],[rt])
476 if test x$TARGET_OS != xwindows; then
477   # All windows code is PIC, forcing it on just adds useless compile warnings
478   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
481 if test x$use_hardening != xno; then
482   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
483   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
485   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
486     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
487       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
488     ])
489     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
490   ])
492   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
493   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
494   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
495   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
496   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
498   if test x$TARGET_OS != xwindows; then
499     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
500     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
501   fi
503   case $host in
504     *mingw*)
505        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
506     ;;
507   esac
510 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
511 if test x$TARGET_OS = xdarwin; then
512   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
515 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])
517 AC_CHECK_DECLS([strnlen])
519 # Check for daemon(3), unrelated to --with-daemon (although used by it)
520 AC_CHECK_DECLS([daemon])
522 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
523                 [#if HAVE_ENDIAN_H
524                  #include <endian.h>
525                  #elif HAVE_SYS_ENDIAN_H
526                  #include <sys/endian.h>
527                  #endif])
529 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
530                 [#if HAVE_BYTESWAP_H
531                  #include <byteswap.h>
532                  #endif])
534 dnl Check for MSG_NOSIGNAL
535 AC_MSG_CHECKING(for MSG_NOSIGNAL)
536 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
537  [[ int f = MSG_NOSIGNAL; ]])],
538  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
539  [ AC_MSG_RESULT(no)]
542 AC_MSG_CHECKING([for visibility attribute])
543 AC_LINK_IFELSE([AC_LANG_SOURCE([
544   int foo_def( void ) __attribute__((visibility("default")));
545   int main(){}
546   ])],
547   [
548     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
549     AC_MSG_RESULT(yes)
550   ],
551   [
552     AC_MSG_RESULT(no)
553     if test x$use_reduce_exports = xyes; then
554       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
555     fi
556   ]
559 if test x$use_reduce_exports = xyes; then
560   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
561   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
564 LEVELDB_CPPFLAGS=
565 LIBLEVELDB=
566 LIBMEMENV=
567 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
568 AC_SUBST(LEVELDB_CPPFLAGS)
569 AC_SUBST(LIBLEVELDB)
570 AC_SUBST(LIBMEMENV)
572 if test x$enable_wallet != xno; then
573     dnl Check for libdb_cxx only if wallet enabled
574     BITCOIN_FIND_BDB48
577 dnl Check for libminiupnpc (optional)
578 if test x$use_upnp != xno; then
579   AC_CHECK_HEADERS(
580     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
581     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
582     [have_miniupnpc=no]
583   )
586 BITCOIN_QT_INIT
588 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
589 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
591 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
592     use_boost=no
593 else
594     use_boost=yes
597 if test x$use_boost = xyes; then
599 dnl Minimum required Boost version
600 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
602 dnl Check for boost libs
603 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
604 AX_BOOST_SYSTEM
605 AX_BOOST_FILESYSTEM
606 AX_BOOST_PROGRAM_OPTIONS
607 AX_BOOST_THREAD
608 AX_BOOST_CHRONO
611 if test x$use_reduce_exports = xyes; then
612   AC_MSG_CHECKING([for working boost reduced exports])
613   TEMP_CPPFLAGS="$CPPFLAGS"
614   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
615   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
616       @%:@include <boost/version.hpp>
617     ]], [[
618       #if BOOST_VERSION >= 104900
619       // Everything is okay
620       #else
621       #  error Boost version is too old
622       #endif
623     ]])],[
624       AC_MSG_RESULT(yes)
625     ],[
626     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
627   ])
628   CPPFLAGS="$TEMP_CPPFLAGS"
632 if test x$use_reduce_exports = xyes; then
633     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
634     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
637 if test x$use_tests = xyes; then
639   if test x$HEXDUMP = x; then
640     AC_MSG_ERROR(hexdump is required for tests)
641   fi
644   if test x$use_boost = xyes; then
646   AX_BOOST_UNIT_TEST_FRAMEWORK
648   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
649   AC_MSG_CHECKING([for dynamic linked boost test])
650   TEMP_LIBS="$LIBS"
651   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
652   TEMP_CPPFLAGS="$CPPFLAGS"
653   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
654   AC_LINK_IFELSE([AC_LANG_SOURCE([
655        #define BOOST_TEST_DYN_LINK
656        #define BOOST_TEST_MAIN
657         #include <boost/test/unit_test.hpp>
659        ])],
660     [AC_MSG_RESULT(yes)]
661     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
662     [AC_MSG_RESULT(no)])
663   LIBS="$TEMP_LIBS"
664   CPPFLAGS="$TEMP_CPPFLAGS"
666   fi
669 if test x$use_boost = xyes; then
671 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
674 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
675 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
676 dnl the abi. This was fixed in 1.57.
678 dnl When building against that installed version using c++11, the headers pick up
679 dnl on the native c++11 scoped enum support and enable it, however it will fail to
680 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
681 dnl fail.
682 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
684 TEMP_LIBS="$LIBS"
685 LIBS="$BOOST_LIBS $LIBS"
686 TEMP_CPPFLAGS="$CPPFLAGS"
687 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
688 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
689 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
690   #include "boost/config.hpp"
691   #include "boost/version.hpp"
692   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
693   #define BOOST_NO_SCOPED_ENUMS
694   #define BOOST_NO_CXX11_SCOPED_ENUMS
695   #define CHECK
696   #endif
697   #include "boost/filesystem.hpp"
698   ]],[[
699   #if defined(CHECK)
700     boost::filesystem::copy_file("foo", "bar");
701   #else
702     choke;
703   #endif
704   ]])],
705   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
706 LIBS="$TEMP_LIBS"
707 CPPFLAGS="$TEMP_CPPFLAGS"
709 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
710 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
711 dnl a working version is available, else fall back to sleep. sleep was removed
712 dnl after 1.56.
713 dnl If neither is available, abort.
714 TEMP_LIBS="$LIBS"
715 LIBS="$BOOST_LIBS $LIBS"
716 TEMP_CPPFLAGS="$CPPFLAGS"
717 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
718 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
719   #include <boost/thread/thread.hpp>
720   #include <boost/version.hpp>
721   ]],[[
722   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
723       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
724   #else
725    choke me
726   #endif
727   ]])],
728   [boost_sleep=yes;
729      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
730   [boost_sleep=no])
731 LIBS="$TEMP_LIBS"
732 CPPFLAGS="$TEMP_CPPFLAGS"
734 if test x$boost_sleep != xyes; then
735 TEMP_LIBS="$LIBS"
736 LIBS="$BOOST_LIBS $LIBS"
737 TEMP_CPPFLAGS="$CPPFLAGS"
738 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
739 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
740   #include <boost/version.hpp>
741   #include <boost/thread.hpp>
742   #include <boost/date_time/posix_time/posix_time_types.hpp>
743   ]],[[
744   #if BOOST_VERSION <= 105600
745       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
746   #else
747    choke me
748   #endif
749   ]])],
750   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
751   [boost_sleep=no])
752 LIBS="$TEMP_LIBS"
753 CPPFLAGS="$TEMP_CPPFLAGS"
756 if test x$boost_sleep != xyes; then
757   AC_MSG_ERROR(No working boost sleep implementation found.)
762 if test x$use_pkgconfig = xyes; then
763   : dnl
764   m4_ifdef(
765     [PKG_CHECK_MODULES],
766     [
767       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
768       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
769       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
770       if test x$use_qr != xno; then
771         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
772       fi
773       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
774         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
775         if test x$TARGET_OS != xwindows; then
776           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
777         fi
778       fi
780       if test "x$use_zmq" = "xyes"; then
781         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
782           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
783           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
784            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
785            use_zmq=no])
786       else
787           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
788       fi
789     ]
790   )
791 else
792   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
793   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
795   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
796   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
798   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
799     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
800     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
801     if test x$TARGET_OS != xwindows; then
802       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
803     fi
804   fi
806   if test "x$use_zmq" = "xyes"; then
807      AC_CHECK_HEADER([zmq.h],
808        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
809        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
810         use_zmq=no
811         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
812      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
813        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
814         use_zmq=no
815         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
816   else
817     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
818   fi
820   if test "x$use_zmq" = "xyes"; then
821     dnl Assume libzmq was built for static linking
822     case $host in
823       *mingw*)
824         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
825       ;;
826     esac
827   fi
829   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
830   if test x$use_qr != xno; then
831     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
832     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
833   fi
836 dnl univalue check
838 need_bundled_univalue=yes
840 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
841   need_bundled_univalue=no
842 else
844 if test x$system_univalue != xno ; then
845   found_univalue=no
846   if test x$use_pkgconfig = xyes; then
847     : #NOP
848     m4_ifdef(
849       [PKG_CHECK_MODULES],
850       [
851         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
852       ]
853     )
854   else
855     AC_CHECK_HEADER([univalue.h],[
856       AC_CHECK_LIB([univalue],  [main],[
857         UNIVALUE_LIBS=-lunivalue
858         found_univalue=yes
859       ],[true])
860     ],[true])
861   fi
863   if test x$found_univalue = xyes ; then
864     system_univalue=yes
865     need_bundled_univalue=no
866   elif test x$system_univalue = xyes ; then
867     AC_MSG_ERROR([univalue not found])
868   else
869     system_univalue=no
870   fi
873 if test x$need_bundled_univalue = xyes ; then
874   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
875   UNIVALUE_LIBS='univalue/libunivalue.la'
880 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
881 AC_SUBST(UNIVALUE_CFLAGS)
882 AC_SUBST(UNIVALUE_LIBS)
884 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
886 AC_MSG_CHECKING([whether to build bitcoind])
887 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
888 AC_MSG_RESULT($build_bitcoind)
890 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
891 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
892 AC_MSG_RESULT($build_bitcoin_utils)
894 AC_MSG_CHECKING([whether to build libraries])
895 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
896 if test x$build_bitcoin_libs = xyes; then
897   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
898   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
900 AC_MSG_RESULT($build_bitcoin_libs)
902 AC_LANG_POP
904 if test "x$use_ccache" != "xno"; then
905   AC_MSG_CHECKING(if ccache should be used)
906   if test x$CCACHE = x; then
907     if test "x$use_ccache" = "xyes"; then
908       AC_MSG_ERROR([ccache not found.]);
909     else
910       use_ccache=no
911     fi
912   else
913     use_ccache=yes
914     CC="$ac_cv_path_CCACHE $CC"
915     CXX="$ac_cv_path_CCACHE $CXX"
916   fi
917   AC_MSG_RESULT($use_ccache)
919 if test "x$use_ccache" = "xyes"; then
920     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
923 dnl enable wallet
924 AC_MSG_CHECKING([if wallet should be enabled])
925 if test x$enable_wallet != xno; then
926   AC_MSG_RESULT(yes)
927   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
929 else
930   AC_MSG_RESULT(no)
933 dnl enable upnp support
934 AC_MSG_CHECKING([whether to build with support for UPnP])
935 if test x$have_miniupnpc = xno; then
936   if test x$use_upnp = xyes; then
937      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
938   fi
939   AC_MSG_RESULT(no)
940 else
941   if test x$use_upnp != xno; then
942     AC_MSG_RESULT(yes)
943     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
944     use_upnp=yes
945     upnp_setting=0
946     if test x$use_upnp_default != xno; then
947       use_upnp_default=yes
948       upnp_setting=1
949     fi
950     AC_MSG_RESULT($use_upnp_default)
951     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
952     if test x$TARGET_OS = xwindows; then
953       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
954     fi
955   else
956     AC_MSG_RESULT(no)
957   fi
960 dnl these are only used when qt is enabled
961 BUILD_TEST_QT=""
962 if test x$bitcoin_enable_qt != xno; then
963   dnl enable dbus support
964   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
965   if test x$bitcoin_enable_qt_dbus != xno; then
966     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
967   fi
968   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
970   dnl enable qr support
971   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
972   if test x$have_qrencode = xno; then
973     if test x$use_qr = xyes; then
974      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
975     fi
976     AC_MSG_RESULT(no)
977   else
978     if test x$use_qr != xno; then
979       AC_MSG_RESULT(yes)
980       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
981       use_qr=yes
982     else
983       AC_MSG_RESULT(no)
984     fi
985   fi
987   if test x$XGETTEXT = x; then
988     AC_MSG_WARN("xgettext is required to update qt translations")
989   fi
991   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
992   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
993     AC_MSG_RESULT([yes])
994     BUILD_TEST_QT="yes"
995   else
996     AC_MSG_RESULT([no])
997   fi
1000 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1002 AC_MSG_CHECKING([whether to build test_bitcoin])
1003 if test x$use_tests = xyes; then
1004   AC_MSG_RESULT([yes])
1005   BUILD_TEST="yes"
1006 else
1007   AC_MSG_RESULT([no])
1008   BUILD_TEST=""
1011 AC_MSG_CHECKING([whether to reduce exports])
1012 if test x$use_reduce_exports = xyes; then
1013   AC_MSG_RESULT([yes])
1014 else
1015   AC_MSG_RESULT([no])
1018 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1019   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1022 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1023 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1024 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1025 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1026 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1027 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1028 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1029 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1030 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1031 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1032 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1033 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1035 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1036 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1037 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1038 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1039 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1040 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1041 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1042 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1043 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1044 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1045 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1046 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1047 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1048 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1049 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1050 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1051 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1052 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1053 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1054 AC_SUBST(BITCOIN_DAEMON_NAME)
1055 AC_SUBST(BITCOIN_GUI_NAME)
1056 AC_SUBST(BITCOIN_CLI_NAME)
1057 AC_SUBST(BITCOIN_TX_NAME)
1059 AC_SUBST(RELDFLAGS)
1060 AC_SUBST(HARDENED_CXXFLAGS)
1061 AC_SUBST(HARDENED_CPPFLAGS)
1062 AC_SUBST(HARDENED_LDFLAGS)
1063 AC_SUBST(PIC_FLAGS)
1064 AC_SUBST(PIE_FLAGS)
1065 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1066 AC_SUBST(USE_UPNP)
1067 AC_SUBST(USE_QRCODE)
1068 AC_SUBST(BOOST_LIBS)
1069 AC_SUBST(TESTDEFS)
1070 AC_SUBST(LEVELDB_TARGET_FLAGS)
1071 AC_SUBST(MINIUPNPC_CPPFLAGS)
1072 AC_SUBST(MINIUPNPC_LIBS)
1073 AC_SUBST(CRYPTO_LIBS)
1074 AC_SUBST(SSL_LIBS)
1075 AC_SUBST(EVENT_LIBS)
1076 AC_SUBST(EVENT_PTHREADS_LIBS)
1077 AC_SUBST(ZMQ_LIBS)
1078 AC_SUBST(PROTOBUF_LIBS)
1079 AC_SUBST(QR_LIBS)
1080 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1081 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1082 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1083 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1084 AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py])
1086 dnl boost's m4 checks do something really nasty: they export these vars. As a
1087 dnl result, they leak into secp256k1's configure and crazy things happen.
1088 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1089 CPPFLAGS_TEMP="$CPPFLAGS"
1090 unset CPPFLAGS
1091 CPPFLAGS="$CPPFLAGS_TEMP"
1093 LDFLAGS_TEMP="$LDFLAGS"
1094 unset LDFLAGS
1095 LDFLAGS="$LDFLAGS_TEMP"
1097 LIBS_TEMP="$LIBS"
1098 unset LIBS
1099 LIBS="$LIBS_TEMP"
1101 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1102 unset PKG_CONFIG_PATH
1103 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1105 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1106 unset PKG_CONFIG_LIBDIR
1107 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1109 if test x$need_bundled_univalue = xyes; then
1110   AC_CONFIG_SUBDIRS([src/univalue])
1113 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1114 AC_CONFIG_SUBDIRS([src/secp256k1])
1116 AC_OUTPUT
1118 dnl Taken from https://wiki.debian.org/RpathIssue
1119 case $host in
1120    *-*-linux-gnu)
1121      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1122      sed < libtool > libtool-2 \
1123      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1124      mv libtool-2 libtool
1125      chmod 755 libtool
1126    ;;
1127 esac
1129 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1130 case ${OS} in
1131    *Windows*)
1132      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1133      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
1134    ;;
1135 esac
1137 echo 
1138 echo "Options used to compile and link:"
1139 echo "  with wallet   = $enable_wallet"
1140 echo "  with gui / qt = $bitcoin_enable_qt"
1141 if test x$bitcoin_enable_qt != xno; then
1142     echo "    qt version  = $bitcoin_qt_got_major_vers"
1143     echo "    with qr     = $use_qr"
1145 echo "  with zmq      = $use_zmq"
1146 echo "  with test     = $use_tests"
1147 echo "  with bench    = $use_bench"
1148 echo "  with upnp     = $use_upnp"
1149 echo "  debug enabled = $enable_debug"
1150 echo 
1151 echo "  target os     = $TARGET_OS"
1152 echo "  build os      = $BUILD_OS"
1153 echo
1154 echo "  CC            = $CC"
1155 echo "  CFLAGS        = $CFLAGS"
1156 echo "  CPPFLAGS      = $CPPFLAGS"
1157 echo "  CXX           = $CXX"
1158 echo "  CXXFLAGS      = $CXXFLAGS"
1159 echo "  LDFLAGS       = $LDFLAGS"
1160 echo