Simplify "!foo || (foo && bar)" as "!foo || bar"
[bitcoinplatinum.git] / configure.ac
bloba90063d9dedc4909648f68e6adb42609f3698f5a
1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
2 AC_PREREQ([2.60])
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 14)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2017)
9 define(_COPYRIGHT_HOLDERS,[The %s developers])
10 define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
11 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin],[https://bitcoincore.org/])
12 AC_CONFIG_SRCDIR([src/validation.cpp])
13 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14 AC_CONFIG_AUX_DIR([build-aux])
15 AC_CONFIG_MACRO_DIR([build-aux/m4])
17 BITCOIN_DAEMON_NAME=bitcoind
18 BITCOIN_GUI_NAME=bitcoin-qt
19 BITCOIN_CLI_NAME=bitcoin-cli
20 BITCOIN_TX_NAME=bitcoin-tx
22 AC_CANONICAL_HOST
24 AH_TOP([#ifndef BITCOIN_CONFIG_H])
25 AH_TOP([#define BITCOIN_CONFIG_H])
26 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
28 dnl faketime breaks configure and is only needed for make. Disable it here.
29 unset FAKETIME
31 dnl Automake init set-up and checks
32 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
34 dnl faketime messes with timestamps and causes configure to be re-run.
35 dnl --disable-maintainer-mode can be used to bypass this.
36 AM_MAINTAINER_MODE([enable])
38 dnl make the compilation flags quiet unless V=1 is used
39 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
41 dnl Compiler checks (here before libtool).
42 if test "x${CXXFLAGS+set}" = "xset"; then
43   CXXFLAGS_overridden=yes
44 else
45   CXXFLAGS_overridden=no
47 AC_PROG_CXX
49 dnl By default, libtool for mingw refuses to link static libs into a dll for
50 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
51 dnl we have those under control, re-enable that functionality.
52 case $host in
53   *mingw*)
54      lt_cv_deplibs_check_method="pass_all"
55   ;;
56 esac
57 dnl Require C++11 compiler (no GNU extensions)
58 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault])
59 dnl Check if -latomic is required for <std::atomic>
60 CHECK_ATOMIC
62 dnl Unless the user specified OBJCXX, force it to be the same as CXX. This ensures
63 dnl that we get the same -std flags for both.
64 m4_ifdef([AC_PROG_OBJCXX],[
65 if test "x${OBJCXX+set}" = "x"; then
66   OBJCXX="${CXX}"
68 AC_PROG_OBJCXX
71 dnl Libtool init checks.
72 LT_INIT([pic-only])
74 dnl Check/return PATH for base programs.
75 AC_PATH_TOOL(AR, ar)
76 AC_PATH_TOOL(RANLIB, ranlib)
77 AC_PATH_TOOL(STRIP, strip)
78 AC_PATH_TOOL(GCOV, gcov)
79 AC_PATH_PROG(LCOV, lcov)
80 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
81 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
82 AC_PATH_PROG(GENHTML, genhtml)
83 AC_PATH_PROG([GIT], [git])
84 AC_PATH_PROG(CCACHE,ccache)
85 AC_PATH_PROG(XGETTEXT,xgettext)
86 AC_PATH_PROG(HEXDUMP,hexdump)
87 AC_PATH_TOOL(READELF, readelf)
88 AC_PATH_TOOL(CPPFILT, c++filt)
89 AC_PATH_TOOL(OBJCOPY, objcopy)
91 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
93 # Enable wallet
94 AC_ARG_ENABLE([wallet],
95   [AS_HELP_STRING([--disable-wallet],
96   [disable wallet (enabled by default)])],
97   [enable_wallet=$enableval],
98   [enable_wallet=yes])
100 AC_ARG_WITH([miniupnpc],
101   [AS_HELP_STRING([--with-miniupnpc],
102   [enable UPNP (default is yes if libminiupnpc is found)])],
103   [use_upnp=$withval],
104   [use_upnp=auto])
106 AC_ARG_ENABLE([upnp-default],
107   [AS_HELP_STRING([--enable-upnp-default],
108   [if UPNP is enabled, turn it on at startup (default is no)])],
109   [use_upnp_default=$enableval],
110   [use_upnp_default=no])
112 AC_ARG_ENABLE(tests,
113     AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
114     [use_tests=$enableval],
115     [use_tests=yes])
117 AC_ARG_ENABLE(gui-tests,
118     AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
119     [use_gui_tests=$enableval],
120     [use_gui_tests=$use_tests])
122 AC_ARG_ENABLE(bench,
123     AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
124     [use_bench=$enableval],
125     [use_bench=yes])
127 AC_ARG_ENABLE([extended-functional-tests],
128     AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests when using lcov (default no)]),
129     [use_extended_functional_tests=$enableval],
130     [use_extended_functional_tests=no])
132 AC_ARG_WITH([qrencode],
133   [AS_HELP_STRING([--with-qrencode],
134   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
135   [use_qr=$withval],
136   [use_qr=auto])
138 AC_ARG_ENABLE([hardening],
139   [AS_HELP_STRING([--disable-hardening],
140   [do not attempt to harden the resulting executables (default is to harden)])],
141   [use_hardening=$enableval],
142   [use_hardening=yes])
144 AC_ARG_ENABLE([reduce-exports],
145   [AS_HELP_STRING([--enable-reduce-exports],
146   [attempt to reduce exported symbols in the resulting executables (default is no)])],
147   [use_reduce_exports=$enableval],
148   [use_reduce_exports=no])
150 AC_ARG_ENABLE([ccache],
151   [AS_HELP_STRING([--disable-ccache],
152   [do not use ccache for building (default is to use if found)])],
153   [use_ccache=$enableval],
154   [use_ccache=auto])
156 AC_ARG_ENABLE([lcov],
157   [AS_HELP_STRING([--enable-lcov],
158   [enable lcov testing (default is no)])],
159   [use_lcov=yes],
160   [use_lcov=no])
161   
162 AC_ARG_ENABLE([lcov-branch-coverage],
163   [AS_HELP_STRING([--enable-lcov-branch-coverage],
164   [enable lcov testing branch coverage (default is no)])],
165   [use_lcov_branch=yes],
166   [use_lcov_branch=no])
168 AC_ARG_ENABLE([glibc-back-compat],
169   [AS_HELP_STRING([--enable-glibc-back-compat],
170   [enable backwards compatibility with glibc])],
171   [use_glibc_compat=$enableval],
172   [use_glibc_compat=no])
174 AC_ARG_WITH([system-univalue],
175   [AS_HELP_STRING([--with-system-univalue],
176   [Build with system UniValue (default is no)])],
177   [system_univalue=$withval],
178   [system_univalue=no]
180 AC_ARG_ENABLE([zmq],
181   [AS_HELP_STRING([--disable-zmq],
182   [disable ZMQ notifications])],
183   [use_zmq=$enableval],
184   [use_zmq=yes])
186 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
188 AC_ARG_ENABLE(man,
189     [AS_HELP_STRING([--disable-man],
190                     [do not install man pages (default is to install)])],,
191     enable_man=yes)
192 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
194 # Enable debug
195 AC_ARG_ENABLE([debug],
196     [AS_HELP_STRING([--enable-debug],
197                     [use debug compiler flags and macros (default is no)])],
198     [enable_debug=$enableval],
199     [enable_debug=no])
201 # Turn warnings into errors
202 AC_ARG_ENABLE([werror],
203     [AS_HELP_STRING([--enable-werror],
204                     [Treat certain compiler warnings as errors (default is no)])],
205     [enable_werror=$enableval],
206     [enable_werror=no])
208 AC_LANG_PUSH([C++])
209 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
211 if test "x$enable_debug" = xyes; then
212     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
213     if test "x$GCC" = xyes; then
214         CFLAGS="$CFLAGS -g3 -O0"
215     fi
217     if test "x$GXX" = xyes; then
218         CXXFLAGS="$CXXFLAGS -g3 -O0"
219     fi
222 ERROR_CXXFLAGS=
223 if test "x$enable_werror" = "xyes"; then
224   if test "x$CXXFLAG_WERROR" = "x"; then
225     AC_MSG_ERROR("enable-werror set but -Werror is not usable")
226   fi
227   AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
230 if test "x$CXXFLAGS_overridden" = "xno"; then
231   AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
232   AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
233   AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
234   AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
235   AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
237   ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
238   ## unknown options if any other warning is produced. Test the -Wfoo case, and
239   ## set the -Wno-foo case if it works.
240   AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
241   AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
242   AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
243   AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
244   AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]])
246   # Check for optional instruction set support. Enabling these does _not_ imply that all code will
247   # be compiled with them, rather that specific objects/libs may use them after checking for runtime
248   # compatibility.
249   AX_CHECK_COMPILE_FLAG([-msse4.2],[[enable_sse42=yes; SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
252 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
254 AC_ARG_WITH([utils],
255   [AS_HELP_STRING([--with-utils],
256   [build bitcoin-cli bitcoin-tx (default=yes)])],
257   [build_bitcoin_utils=$withval],
258   [build_bitcoin_utils=yes])
260 AC_ARG_WITH([libs],
261   [AS_HELP_STRING([--with-libs],
262   [build libraries (default=yes)])],
263   [build_bitcoin_libs=$withval],
264   [build_bitcoin_libs=yes])
266 AC_ARG_WITH([daemon],
267   [AS_HELP_STRING([--with-daemon],
268   [build bitcoind daemon (default=yes)])],
269   [build_bitcoind=$withval],
270   [build_bitcoind=yes])
272 use_pkgconfig=yes
273 case $host in
274   *mingw*)
276      #pkgconfig does more harm than good with MinGW
277      use_pkgconfig=no
279      TARGET_OS=windows
280      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
281      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
282      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
283      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
284      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
285      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
286      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
287      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
288      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
289      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
290      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
291      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
292      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
293      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
294      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
295      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
296      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
297      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
298      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
300      # -static is interpreted by libtool, where it has a different meaning.
301      # In libtool-speak, it's -all-static.
302      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
304      AC_PATH_PROG([MAKENSIS], [makensis], none)
305      if test x$MAKENSIS = xnone; then
306        AC_MSG_WARN("makensis not found. Cannot create installer.")
307      fi
309      AC_PATH_TOOL(WINDRES, windres, none)
310      if test x$WINDRES = xnone; then
311        AC_MSG_ERROR("windres not found")
312      fi
314      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
315      LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
316      if test "x$CXXFLAGS_overridden" = "xno"; then
317        CXXFLAGS="$CXXFLAGS -w"
318      fi
319      case $host in
320        i?86-*) WINDOWS_BITS=32 ;;
321        x86_64-*) WINDOWS_BITS=64 ;;
322        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
323      esac
324      AC_SUBST(WINDOWS_BITS)
326      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
327      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
328      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
329      dnl also overridden to prevent their insertion later.
330      dnl This should only affect dll's.
331      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
332      postdeps_CXX=
334      ;;
335   *darwin*)
336      TARGET_OS=darwin
337      LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
338      if  test x$cross_compiling != xyes; then
339        BUILD_OS=darwin
340        AC_CHECK_PROG([PORT],port, port)
341        if test x$PORT = xport; then
342          dnl add default macports paths
343          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
344          LIBS="$LIBS -L/opt/local/lib"
345          if test -d /opt/local/include/db48; then
346            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
347            LIBS="$LIBS -L/opt/local/lib/db48"
348          fi
349        fi
351        AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
352        AC_CHECK_PROG([BREW],brew, brew)
353        if test x$BREW = xbrew; then
354          dnl These Homebrew packages may be keg-only, meaning that they won't be found
355          dnl in expected paths because they may conflict with system files. Ask
356          dnl Homebrew where each one is located, then adjust paths accordingly.
357          dnl It's safe to add these paths even if the functionality is disabled by
358          dnl the user (--without-wallet or --without-gui for example).
360          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
361          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
362          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
363          if test x$openssl_prefix != x; then
364            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
365            export PKG_CONFIG_PATH
366          fi
367          if test x$bdb_prefix != x; then
368            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
369            LIBS="$LIBS -L$bdb_prefix/lib"
370          fi
371          if test x$qt5_prefix != x; then
372            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
373            export PKG_CONFIG_PATH
374          fi
375        fi
376      else
377        case $build_os in
378          *darwin*)
379            BUILD_OS=darwin
380            ;;
381          *)
382            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
383            AC_PATH_TOOL([OTOOL], [otool], otool)
384            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
385            AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
386            AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
387            AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
389            dnl libtool will try to strip the static lib, which is a problem for
390            dnl cross-builds because strip attempts to call a hard-coded ld,
391            dnl which may not exist in the path. Stripping the .a is not
392            dnl necessary, so just disable it.
393            old_striplib=
394            ;;
395        esac
396      fi
398      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
399      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
400      OBJCXXFLAGS="$CXXFLAGS"
401      ;;
402    *linux*)
403      TARGET_OS=linux
404      LEVELDB_TARGET_FLAGS="-DOS_LINUX"
405      ;;
406    *freebsd*)
407      LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
408      ;;
409    *openbsd*)
410      LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
411      ;;
412    *)
413      OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
414      AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
415      LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
416      ;;
417 esac
419 if test x$use_pkgconfig = xyes; then
420   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.)])
421   m4_ifdef([PKG_PROG_PKG_CONFIG], [
422   PKG_PROG_PKG_CONFIG
423   if test x"$PKG_CONFIG" = "x"; then
424     AC_MSG_ERROR(pkg-config not found.)
425   fi
426   ])
429 if test x$use_extended_functional_tests != xno; then
430   AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
433 if test x$use_lcov = xyes; then
434   if test x$LCOV = x; then
435     AC_MSG_ERROR("lcov testing requested but lcov not found")
436   fi
437   if test x$GCOV = x; then
438     AC_MSG_ERROR("lcov testing requested but gcov not found")
439   fi
440   if test x$PYTHON = x; then
441     AC_MSG_ERROR("lcov testing requested but python not found")
442   fi
443   if test x$GENHTML = x; then
444     AC_MSG_ERROR("lcov testing requested but genhtml not found")
445   fi
446   LCOV="$LCOV --gcov-tool=$GCOV"
447   AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
448     [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
449   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
450     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
451   AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled])
452   CXXFLAGS="$CXXFLAGS -Og"
455 if test x$use_lcov_branch != xno; then
456   AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1")
459 dnl Check for endianness
460 AC_C_BIGENDIAN
462 dnl Check for pthread compile/link requirements
463 AX_PTHREAD
465 # The following macro will add the necessary defines to bitcoin-config.h, but
466 # they also need to be passed down to any subprojects. Pull the results out of
467 # the cache and add them to CPPFLAGS.
468 AC_SYS_LARGEFILE
469 # detect POSIX or GNU variant of strerror_r
470 AC_FUNC_STRERROR_R
472 if test x$ac_cv_sys_file_offset_bits != x &&
473    test x$ac_cv_sys_file_offset_bits != xno &&
474    test x$ac_cv_sys_file_offset_bits != xunknown; then
475   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
478 if test x$ac_cv_sys_large_files != x &&
479    test x$ac_cv_sys_large_files != xno &&
480    test x$ac_cv_sys_large_files != xunknown; then
481   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
484 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
486 AX_GCC_FUNC_ATTRIBUTE([visibility])
487 AX_GCC_FUNC_ATTRIBUTE([dllexport])
488 AX_GCC_FUNC_ATTRIBUTE([dllimport])
490 if test x$use_glibc_compat != xno; then
492   #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
493   #in anyway for back-compat.
494   AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
496   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
497   # See which one is present here.
498   AC_MSG_CHECKING(__fdelt_chk type)
499   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
500                     #undef _FORTIFY_SOURCE
501                   #endif
502                   #define _FORTIFY_SOURCE 2
503                   #include <sys/select.h>
504      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
505     [ fdelt_type="long unsigned int"],
506     [ fdelt_type="long int"])
507   AC_MSG_RESULT($fdelt_type)
508   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
509 else
510   AC_SEARCH_LIBS([clock_gettime],[rt])
513 if test x$TARGET_OS != xwindows; then
514   # All windows code is PIC, forcing it on just adds useless compile warnings
515   AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
518 if test x$use_hardening != xno; then
519   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
520   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
522   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
523     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
524       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
525     ])
526     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
527   ])
529   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
530   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
531   AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
532   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
533   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
535   if test x$TARGET_OS != xwindows; then
536     AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
537     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
538   fi
540   case $host in
541     *mingw*)
542        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
543     ;;
544   esac
547 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
548 if test x$TARGET_OS = xdarwin; then
549   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
552 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])
554 AC_CHECK_DECLS([strnlen])
556 # Check for daemon(3), unrelated to --with-daemon (although used by it)
557 AC_CHECK_DECLS([daemon])
559 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
560                 [#if HAVE_ENDIAN_H
561                  #include <endian.h>
562                  #elif HAVE_SYS_ENDIAN_H
563                  #include <sys/endian.h>
564                  #endif])
566 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
567                 [#if HAVE_BYTESWAP_H
568                  #include <byteswap.h>
569                  #endif])
571 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
573 dnl Check for MSG_NOSIGNAL
574 AC_MSG_CHECKING(for MSG_NOSIGNAL)
575 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
576  [[ int f = MSG_NOSIGNAL; ]])],
577  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
578  [ AC_MSG_RESULT(no)]
581 dnl Check for MSG_DONTWAIT
582 AC_MSG_CHECKING(for MSG_DONTWAIT)
583 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
584  [[ int f = MSG_DONTWAIT; ]])],
585  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
586  [ AC_MSG_RESULT(no)]
589 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
590 AC_MSG_CHECKING(for getmemoryinfo)
591 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
592  [[ int f = malloc_info(0, NULL); ]])],
593  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
594  [ AC_MSG_RESULT(no)]
597 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
598 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
599 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
600  [[ mallopt(M_ARENA_MAX, 1); ]])],
601  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
602  [ AC_MSG_RESULT(no)]
605 AC_MSG_CHECKING([for visibility attribute])
606 AC_LINK_IFELSE([AC_LANG_SOURCE([
607   int foo_def( void ) __attribute__((visibility("default")));
608   int main(){}
609   ])],
610   [
611     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
612     AC_MSG_RESULT(yes)
613   ],
614   [
615     AC_MSG_RESULT(no)
616     if test x$use_reduce_exports = xyes; then
617       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
618     fi
619   ]
622 # Check for different ways of gathering OS randomness
623 AC_MSG_CHECKING(for Linux getrandom syscall)
624 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
625   #include <sys/syscall.h>
626   #include <linux/random.h>]],
627  [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
628  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
629  [ AC_MSG_RESULT(no)]
632 AC_MSG_CHECKING(for getentropy)
633 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
634  [[ getentropy(nullptr, 32) ]])],
635  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
636  [ AC_MSG_RESULT(no)]
639 AC_MSG_CHECKING(for sysctl KERN_ARND)
640 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
641   #include <sys/sysctl.h>]],
642  [[ static const int name[2] = {CTL_KERN, KERN_ARND};
643     sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
644  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
645  [ AC_MSG_RESULT(no)]
648 # Check for reduced exports
649 if test x$use_reduce_exports = xyes; then
650   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
651   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
654 LEVELDB_CPPFLAGS=
655 LIBLEVELDB=
656 LIBMEMENV=
657 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
658 AC_SUBST(LEVELDB_CPPFLAGS)
659 AC_SUBST(LIBLEVELDB)
660 AC_SUBST(LIBMEMENV)
662 if test x$enable_wallet != xno; then
663     dnl Check for libdb_cxx only if wallet enabled
664     BITCOIN_FIND_BDB48
667 dnl Check for libminiupnpc (optional)
668 if test x$use_upnp != xno; then
669   AC_CHECK_HEADERS(
670     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
671     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
672     [have_miniupnpc=no]
673   )
676 BITCOIN_QT_INIT
678 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
679 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
681 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
682     use_boost=no
683 else
684     use_boost=yes
687 if test x$use_boost = xyes; then
689 dnl Minimum required Boost version
690 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
692 dnl Check for boost libs
693 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
694 AX_BOOST_SYSTEM
695 AX_BOOST_FILESYSTEM
696 AX_BOOST_PROGRAM_OPTIONS
697 AX_BOOST_THREAD
698 AX_BOOST_CHRONO
700 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
701 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
702 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
703 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
705 if test x$use_reduce_exports = xyes; then
706   AC_MSG_CHECKING([for working boost reduced exports])
707   TEMP_CPPFLAGS="$CPPFLAGS"
708   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
709   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
710       @%:@include <boost/version.hpp>
711     ]], [[
712       #if BOOST_VERSION >= 104900
713       // Everything is okay
714       #else
715       #  error Boost version is too old
716       #endif
717     ]])],[
718       AC_MSG_RESULT(yes)
719     ],[
720     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
721   ])
722   CPPFLAGS="$TEMP_CPPFLAGS"
726 if test x$use_reduce_exports = xyes; then
727     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
728     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
731 if test x$use_tests = xyes; then
733   if test x$HEXDUMP = x; then
734     AC_MSG_ERROR(hexdump is required for tests)
735   fi
738   if test x$use_boost = xyes; then
740   AX_BOOST_UNIT_TEST_FRAMEWORK
742   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
743   AC_MSG_CHECKING([for dynamic linked boost test])
744   TEMP_LIBS="$LIBS"
745   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
746   TEMP_CPPFLAGS="$CPPFLAGS"
747   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
748   AC_LINK_IFELSE([AC_LANG_SOURCE([
749        #define BOOST_TEST_DYN_LINK
750        #define BOOST_TEST_MAIN
751         #include <boost/test/unit_test.hpp>
753        ])],
754     [AC_MSG_RESULT(yes)]
755     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
756     [AC_MSG_RESULT(no)])
757   LIBS="$TEMP_LIBS"
758   CPPFLAGS="$TEMP_CPPFLAGS"
760   fi
763 if test x$use_boost = xyes; then
765 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
768 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
769 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
770 dnl the abi. This was fixed in 1.57.
772 dnl When building against that installed version using c++11, the headers pick up
773 dnl on the native c++11 scoped enum support and enable it, however it will fail to
774 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
775 dnl fail.
776 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
778 TEMP_LIBS="$LIBS"
779 LIBS="$BOOST_LIBS $LIBS"
780 TEMP_CPPFLAGS="$CPPFLAGS"
781 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
782 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
783 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
784   #include "boost/config.hpp"
785   #include "boost/version.hpp"
786   #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
787   #define BOOST_NO_SCOPED_ENUMS
788   #define BOOST_NO_CXX11_SCOPED_ENUMS
789   #define CHECK
790   #endif
791   #include "boost/filesystem.hpp"
792   ]],[[
793   #if defined(CHECK)
794     boost::filesystem::copy_file("foo", "bar");
795   #else
796     choke;
797   #endif
798   ]])],
799   [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
800 LIBS="$TEMP_LIBS"
801 CPPFLAGS="$TEMP_CPPFLAGS"
803 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
804 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
805 dnl a working version is available, else fall back to sleep. sleep was removed
806 dnl after 1.56.
807 dnl If neither is available, abort.
808 TEMP_LIBS="$LIBS"
809 LIBS="$BOOST_LIBS $LIBS"
810 TEMP_CPPFLAGS="$CPPFLAGS"
811 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
812 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
813   #include <boost/thread/thread.hpp>
814   #include <boost/version.hpp>
815   ]],[[
816   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
817       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
818   #else
819    choke me
820   #endif
821   ]])],
822   [boost_sleep=yes;
823      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
824   [boost_sleep=no])
825 LIBS="$TEMP_LIBS"
826 CPPFLAGS="$TEMP_CPPFLAGS"
828 if test x$boost_sleep != xyes; then
829 TEMP_LIBS="$LIBS"
830 LIBS="$BOOST_LIBS $LIBS"
831 TEMP_CPPFLAGS="$CPPFLAGS"
832 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
833 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
834   #include <boost/version.hpp>
835   #include <boost/thread.hpp>
836   #include <boost/date_time/posix_time/posix_time_types.hpp>
837   ]],[[
838   #if BOOST_VERSION <= 105600
839       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
840   #else
841    choke me
842   #endif
843   ]])],
844   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
845   [boost_sleep=no])
846 LIBS="$TEMP_LIBS"
847 CPPFLAGS="$TEMP_CPPFLAGS"
850 if test x$boost_sleep != xyes; then
851   AC_MSG_ERROR(No working boost sleep implementation found.)
856 if test x$use_pkgconfig = xyes; then
857   : dnl
858   m4_ifdef(
859     [PKG_CHECK_MODULES],
860     [
861       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
862       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
863       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
864       if test x$use_qr != xno; then
865         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
866       fi
867       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
868         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
869         if test x$TARGET_OS != xwindows; then
870           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
871         fi
872       fi
874       if test "x$use_zmq" = "xyes"; then
875         PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
876           [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
877           [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
878            AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
879            use_zmq=no])
880       else
881           AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
882       fi
883     ]
884   )
885 else
886   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
887   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
889   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
890   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
892   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
893     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
894     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
895     if test x$TARGET_OS != xwindows; then
896       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
897     fi
898   fi
900   if test "x$use_zmq" = "xyes"; then
901      AC_CHECK_HEADER([zmq.h],
902        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
903        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
904         use_zmq=no
905         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
906      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
907        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
908         use_zmq=no
909         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
910   else
911     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
912   fi
914   if test "x$use_zmq" = "xyes"; then
915     dnl Assume libzmq was built for static linking
916     case $host in
917       *mingw*)
918         ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
919       ;;
920     esac
921   fi
923   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
924   if test x$use_qr != xno; then
925     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
926     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
927   fi
930 save_CXXFLAGS="${CXXFLAGS}"
931 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
932 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
933 #include <openssl/x509_vfy.h>
935 CXXFLAGS="${save_CXXFLAGS}"
937 dnl univalue check
939 need_bundled_univalue=yes
941 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
942   need_bundled_univalue=no
943 else
945 if test x$system_univalue != xno ; then
946   found_univalue=no
947   if test x$use_pkgconfig = xyes; then
948     : #NOP
949     m4_ifdef(
950       [PKG_CHECK_MODULES],
951       [
952         PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
953       ]
954     )
955   else
956     AC_CHECK_HEADER([univalue.h],[
957       AC_CHECK_LIB([univalue],  [main],[
958         UNIVALUE_LIBS=-lunivalue
959         found_univalue=yes
960       ],[true])
961     ],[true])
962   fi
964   if test x$found_univalue = xyes ; then
965     system_univalue=yes
966     need_bundled_univalue=no
967   elif test x$system_univalue = xyes ; then
968     AC_MSG_ERROR([univalue not found])
969   else
970     system_univalue=no
971   fi
974 if test x$need_bundled_univalue = xyes ; then
975   UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
976   UNIVALUE_LIBS='univalue/libunivalue.la'
981 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
982 AC_SUBST(UNIVALUE_CFLAGS)
983 AC_SUBST(UNIVALUE_LIBS)
985 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
987 AC_MSG_CHECKING([whether to build bitcoind])
988 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
989 AC_MSG_RESULT($build_bitcoind)
991 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
992 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
993 AC_MSG_RESULT($build_bitcoin_utils)
995 AC_MSG_CHECKING([whether to build libraries])
996 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
997 if test x$build_bitcoin_libs = xyes; then
998   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
999   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
1001 AC_MSG_RESULT($build_bitcoin_libs)
1003 AC_LANG_POP
1005 if test "x$use_ccache" != "xno"; then
1006   AC_MSG_CHECKING(if ccache should be used)
1007   if test x$CCACHE = x; then
1008     if test "x$use_ccache" = "xyes"; then
1009       AC_MSG_ERROR([ccache not found.]);
1010     else
1011       use_ccache=no
1012     fi
1013   else
1014     use_ccache=yes
1015     CC="$ac_cv_path_CCACHE $CC"
1016     CXX="$ac_cv_path_CCACHE $CXX"
1017   fi
1018   AC_MSG_RESULT($use_ccache)
1020 if test "x$use_ccache" = "xyes"; then
1021     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1024 dnl enable wallet
1025 AC_MSG_CHECKING([if wallet should be enabled])
1026 if test x$enable_wallet != xno; then
1027   AC_MSG_RESULT(yes)
1028   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1030 else
1031   AC_MSG_RESULT(no)
1034 dnl enable upnp support
1035 AC_MSG_CHECKING([whether to build with support for UPnP])
1036 if test x$have_miniupnpc = xno; then
1037   if test x$use_upnp = xyes; then
1038      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1039   fi
1040   AC_MSG_RESULT(no)
1041 else
1042   if test x$use_upnp != xno; then
1043     AC_MSG_RESULT(yes)
1044     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1045     use_upnp=yes
1046     upnp_setting=0
1047     if test x$use_upnp_default != xno; then
1048       use_upnp_default=yes
1049       upnp_setting=1
1050     fi
1051     AC_MSG_RESULT($use_upnp_default)
1052     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1053     if test x$TARGET_OS = xwindows; then
1054       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1055     fi
1056   else
1057     AC_MSG_RESULT(no)
1058   fi
1061 dnl these are only used when qt is enabled
1062 BUILD_TEST_QT=""
1063 if test x$bitcoin_enable_qt != xno; then
1064   dnl enable dbus support
1065   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1066   if test x$bitcoin_enable_qt_dbus != xno; then
1067     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1068   fi
1069   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1071   dnl enable qr support
1072   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1073   if test x$have_qrencode = xno; then
1074     if test x$use_qr = xyes; then
1075      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1076     fi
1077     AC_MSG_RESULT(no)
1078   else
1079     if test x$use_qr != xno; then
1080       AC_MSG_RESULT(yes)
1081       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1082       use_qr=yes
1083     else
1084       AC_MSG_RESULT(no)
1085     fi
1086   fi
1088   if test x$XGETTEXT = x; then
1089     AC_MSG_WARN("xgettext is required to update qt translations")
1090   fi
1092   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1093   if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1094     AC_MSG_RESULT([yes])
1095     BUILD_TEST_QT="yes"
1096   else
1097     AC_MSG_RESULT([no])
1098   fi
1101 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1103 AC_MSG_CHECKING([whether to build test_bitcoin])
1104 if test x$use_tests = xyes; then
1105   AC_MSG_RESULT([yes])
1106   BUILD_TEST="yes"
1107 else
1108   AC_MSG_RESULT([no])
1109   BUILD_TEST=""
1112 AC_MSG_CHECKING([whether to reduce exports])
1113 if test x$use_reduce_exports = xyes; then
1114   AC_MSG_RESULT([yes])
1115 else
1116   AC_MSG_RESULT([no])
1119 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1120   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1123 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1124 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1125 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1126 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1127 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1128 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1129 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1130 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1131 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1132 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1133 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1134 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1135 AM_CONDITIONAL([ENABLE_SSE42],[test x$enable_sse42 = xyes])
1137 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1138 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1139 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1140 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1141 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1142 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1143 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1144 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1145 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1146 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1147 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1148 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1149 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1150 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1151 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1152 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1153 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1154 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1155 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1156 AC_SUBST(BITCOIN_DAEMON_NAME)
1157 AC_SUBST(BITCOIN_GUI_NAME)
1158 AC_SUBST(BITCOIN_CLI_NAME)
1159 AC_SUBST(BITCOIN_TX_NAME)
1161 AC_SUBST(RELDFLAGS)
1162 AC_SUBST(ERROR_CXXFLAGS)
1163 AC_SUBST(HARDENED_CXXFLAGS)
1164 AC_SUBST(HARDENED_CPPFLAGS)
1165 AC_SUBST(HARDENED_LDFLAGS)
1166 AC_SUBST(PIC_FLAGS)
1167 AC_SUBST(PIE_FLAGS)
1168 AC_SUBST(SSE42_CXXFLAGS)
1169 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1170 AC_SUBST(USE_UPNP)
1171 AC_SUBST(USE_QRCODE)
1172 AC_SUBST(BOOST_LIBS)
1173 AC_SUBST(TESTDEFS)
1174 AC_SUBST(LEVELDB_TARGET_FLAGS)
1175 AC_SUBST(MINIUPNPC_CPPFLAGS)
1176 AC_SUBST(MINIUPNPC_LIBS)
1177 AC_SUBST(CRYPTO_LIBS)
1178 AC_SUBST(SSL_LIBS)
1179 AC_SUBST(EVENT_LIBS)
1180 AC_SUBST(EVENT_PTHREADS_LIBS)
1181 AC_SUBST(ZMQ_LIBS)
1182 AC_SUBST(PROTOBUF_LIBS)
1183 AC_SUBST(QR_LIBS)
1184 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
1185 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1186 AC_CONFIG_FILES([doc/Doxyfile])
1187 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1188 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1190 dnl boost's m4 checks do something really nasty: they export these vars. As a
1191 dnl result, they leak into secp256k1's configure and crazy things happen.
1192 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1193 CPPFLAGS_TEMP="$CPPFLAGS"
1194 unset CPPFLAGS
1195 CPPFLAGS="$CPPFLAGS_TEMP"
1197 LDFLAGS_TEMP="$LDFLAGS"
1198 unset LDFLAGS
1199 LDFLAGS="$LDFLAGS_TEMP"
1201 LIBS_TEMP="$LIBS"
1202 unset LIBS
1203 LIBS="$LIBS_TEMP"
1205 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1206 unset PKG_CONFIG_PATH
1207 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1209 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1210 unset PKG_CONFIG_LIBDIR
1211 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1213 if test x$need_bundled_univalue = xyes; then
1214   AC_CONFIG_SUBDIRS([src/univalue])
1217 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1218 AC_CONFIG_SUBDIRS([src/secp256k1])
1220 AC_OUTPUT
1222 dnl Taken from https://wiki.debian.org/RpathIssue
1223 case $host in
1224    *-*-linux-gnu)
1225      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1226      sed < libtool > libtool-2 \
1227      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1228      mv libtool-2 libtool
1229      chmod 755 libtool
1230    ;;
1231 esac
1233 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1234 case ${OS} in
1235    *Windows*)
1236      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  test/config.ini > test/config-2.ini
1237      mv test/config-2.ini test/config.ini
1238    ;;
1239 esac
1241 echo 
1242 echo "Options used to compile and link:"
1243 echo "  with wallet   = $enable_wallet"
1244 echo "  with gui / qt = $bitcoin_enable_qt"
1245 if test x$bitcoin_enable_qt != xno; then
1246     echo "    qt version  = $bitcoin_qt_got_major_vers"
1247     echo "    with qr     = $use_qr"
1249 echo "  with zmq      = $use_zmq"
1250 echo "  with test     = $use_tests"
1251 echo "  with bench    = $use_bench"
1252 echo "  with upnp     = $use_upnp"
1253 echo "  debug enabled = $enable_debug"
1254 echo "  werror        = $enable_werror"
1255 echo 
1256 echo "  target os     = $TARGET_OS"
1257 echo "  build os      = $BUILD_OS"
1258 echo
1259 echo "  CC            = $CC"
1260 echo "  CFLAGS        = $CFLAGS"
1261 echo "  CPPFLAGS      = $CPPFLAGS"
1262 echo "  CXX           = $CXX"
1263 echo "  CXXFLAGS      = $CXXFLAGS"
1264 echo "  LDFLAGS       = $LDFLAGS"
1265 echo