1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 2)
4 define(_CLIENT_VERSION_MINOR, 0)
5 define(_CLIENT_VERSION_REVISION, 15)
6 define(_CLIENT_VERSION_BUILD, 26)
7 define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
8 define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
9 define(_CLIENT_VERSION_IS_RELEASE, true)
10 define(_COPYRIGHT_YEAR, 2019)
11 AC_INIT([Verus-CLI],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_SUFFIX(_ZC_BUILD_VAL)],[https://github.com/VerusCoin/VerusCoin/issues],[verus-cli])
12 AC_CONFIG_SRCDIR([src/main.cpp])
13 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14 AC_CONFIG_AUX_DIR([build-aux])
15 AC_CONFIG_MACRO_DIR([build-aux/m4])
17 BITCOIN_DAEMON_NAME=verusd
18 BITCOIN_CLI_NAME=verus
19 BITCOIN_TX_NAME=verus-tx
21 dnl Unless the user specified ARFLAGS, force it to be cr
22 AC_ARG_VAR(ARFLAGS, [Flags for the archiver, defaults to <cr> if not set])
23 if test "x${ARFLAGS+set}" != "xset"; then
29 AH_TOP([#ifndef BITCOIN_CONFIG_H])
30 AH_TOP([#define BITCOIN_CONFIG_H])
31 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
33 dnl faketime breaks configure and is only needed for make. Disable it here.
36 dnl Automake init set-up and checks
37 AM_INIT_AUTOMAKE([no-define subdir-objects foreign tar-pax])
39 dnl faketime messes with timestamps and causes configure to be re-run.
40 dnl --disable-maintainer-mode can be used to bypass this.
41 AM_MAINTAINER_MODE([enable])
43 dnl make the compilation flags quiet unless V=1 is used
44 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
46 dnl Compiler checks (here before libtool).
47 if test "x${CXXFLAGS+set}" = "xset"; then
48 CXXFLAGS_overridden=yes
50 CXXFLAGS_overridden=no
54 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
56 dnl By default, libtool for mingw refuses to link static libs into a dll for
57 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
58 dnl we have those under control, re-enable that functionality.
61 lt_cv_deplibs_check_method="pass_all"
64 dnl Require C++11 compiler (no GNU extensions)
65 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault])
66 dnl Check if -latomic is required for <std::atomic>
69 dnl Libtool init checks.
72 dnl Check/return PATH for base programs.
74 AC_PATH_TOOL(RANLIB, ranlib)
75 AC_PATH_TOOL(STRIP, strip)
76 AC_PATH_TOOL(GCOV, gcov)
77 AC_PATH_PROG(LCOV, lcov)
78 AC_PATH_PROG(GENHTML, genhtml)
79 AC_PATH_PROG([GIT], [git])
80 AC_PATH_PROG(CCACHE,ccache)
81 AC_PATH_PROG(XGETTEXT,xgettext)
82 AC_PATH_PROG(HEXDUMP,hexdump)
83 AC_PATH_TOOL(READELF,readelf)
84 AC_PATH_TOOL(CPPFILT,c++filt)
87 AC_ARG_ENABLE([wallet],
88 [AS_HELP_STRING([--enable-wallet],
89 [enable wallet (default is yes)])],
90 [enable_wallet=$enableval],
93 AC_ARG_ENABLE([mining],
94 [AS_HELP_STRING([--enable-mining],
95 [enable mining (default is yes)])],
96 [enable_mining=$enableval],
99 AC_ARG_ENABLE([proton],
100 [AS_HELP_STRING([--disable-proton],
101 [disable Proton (AMQP messaging)])],
102 [use_proton=$enableval],
106 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
107 [use_tests=$enableval],
110 AC_ARG_ENABLE([asan],
111 [AS_HELP_STRING([--enable-asan],
112 [instrument the executables with asan (default is no)])],
113 [use_asan=$enableval],
116 AC_ARG_ENABLE([tsan],
117 [AS_HELP_STRING([--enable-tsan],
118 [instrument the executables with tsan (default is no)])],
119 [use_tsan=$enableval],
122 if test x$TARGET_OS = xdarwin; then
123 AC_ARG_ENABLE([hardening],
124 [AS_HELP_STRING([--enable-hardening],
125 [attempt to harden the resulting executables (default is yes)])],
126 [use_hardening=$enableval],
129 AC_ARG_ENABLE([hardening],
130 [AS_HELP_STRING([--enable-hardening],
131 [attempt to harden the resulting executables (default is yes)])],
132 [use_hardening=$enableval],
136 AC_ARG_ENABLE([reduce-exports],
137 [AS_HELP_STRING([--enable-reduce-exports],
138 [attempt to reduce exported symbols in the resulting executables (default is no)])],
139 [use_reduce_exports=$enableval],
140 [use_reduce_exports=no])
142 AC_ARG_ENABLE([ccache],
143 [AS_HELP_STRING([--enable-ccache],
144 [use ccache for building (default is yes if ccache is found)])],
145 [use_ccache=$enableval],
148 AC_ARG_ENABLE([lcov],
149 [AS_HELP_STRING([--enable-lcov],
150 [enable lcov testing (default is no)])],
154 AC_ARG_ENABLE([glibc-back-compat],
155 [AS_HELP_STRING([--enable-glibc-back-compat],
156 [enable backwards compatibility with glibc])],
157 [use_glibc_compat=$enableval],
158 [use_glibc_compat=no])
161 [AS_HELP_STRING([--disable-zmq],
162 [disable ZMQ notifications])],
163 [use_zmq=$enableval],
166 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
169 [AS_HELP_STRING([--disable-man],
170 [do not install man pages (default is to install)])],,
172 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
175 AC_ARG_ENABLE([debug],
176 [AS_HELP_STRING([--enable-debug],
177 [use debug compiler flags and macros (default is no)])],
178 [enable_debug=$enableval],
181 # Turn warnings into errors
182 AC_ARG_ENABLE([werror],
183 [AS_HELP_STRING([--enable-werror],
184 [Treat all compiler warnings as errors (default is no)])],
185 [enable_werror=$enableval],
189 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
191 if test "x$enable_debug" = xyes; then
192 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
193 if test "x$GCC" = xyes; then
194 CFLAGS="$CFLAGS -g3 -O0"
197 if test "x$GXX" = xyes; then
198 CXXFLAGS="$CXXFLAGS -g3 -O0"
203 if test "x$enable_werror" = "xyes"; then
204 if test "x$CXXFLAG_WERROR" = "x"; then
205 AC_MSG_ERROR("enable-werror set but -Werror is not usable")
207 ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror"
210 if test "x$CXXFLAGS_overridden" = "xno"; then
211 AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
212 AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
213 AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
214 AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
215 AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
217 ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
218 ## unknown options if any other warning is produced. Test the -Wfoo case, and
219 ## set the -Wno-foo case if it works.
220 AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
221 AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
222 AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
223 AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
225 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
228 [AS_HELP_STRING([--with-utils],
229 [build verus verus-tx wallet-utility (default=yes)])],
230 [build_bitcoin_utils=$withval],
231 [build_bitcoin_utils=yes])
234 [AS_HELP_STRING([--with-libs],
235 [build libraries (default=no)])],
236 [build_bitcoin_libs=$withval],
237 [build_bitcoin_libs=no])
239 AC_ARG_WITH([daemon],
240 [AS_HELP_STRING([--with-daemon],
241 [build bitcoind daemon (default=yes)])],
242 [build_bitcoind=$withval],
243 [build_bitcoind=yes])
249 #pkgconfig does more harm than good with MinGW
253 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
254 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
255 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
256 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
257 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
258 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
259 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
260 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
261 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
262 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
263 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
264 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
265 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
266 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
267 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
268 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
269 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
270 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
271 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
273 # -static is interpreted by libtool, where it has a different meaning.
274 # In libtool-speak, it's -all-static.
275 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
277 AC_PATH_PROG([MAKENSIS], [makensis], none)
278 if test x$MAKENSIS = xnone; then
279 AC_MSG_WARN("makensis not found. Cannot create installer.")
282 AC_PATH_TOOL(WINDRES, windres, none)
283 if test x$WINDRES = xnone; then
284 AC_MSG_ERROR("windres not found")
287 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
288 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
289 if test "x$CXXFLAGS_overridden" = "xno"; then
290 CXXFLAGS="$CXXFLAGS -w"
293 i?86-*) WINDOWS_BITS=32 ;;
294 x86_64-*) WINDOWS_BITS=64 ;;
295 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
297 AC_SUBST(WINDOWS_BITS)
299 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
300 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
301 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
302 dnl also overridden to prevent their insertion later.
303 dnl This should only affect dll's.
304 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
310 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
311 if test x$cross_compiling != xyes; then
313 AC_CHECK_PROG([PORT],port, port)
314 if test x$PORT = xport; then
315 dnl add default macports paths
316 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
317 LIBS="$LIBS -L/opt/local/lib"
318 if test -d /opt/local/include/db62; then
319 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
320 LIBS="$LIBS -L/opt/local/lib/db62"
324 dnl AC_CHECK_PROG([BREW],brew, brew)
325 dnl if test x$BREW = xbrew; then
326 dnl These Homebrew packages may be keg-only, meaning that they won't be found
327 dnl in expected paths because they may conflict with system files. Ask
328 dnl Homebrew where each one is located, then adjust paths accordingly.
329 dnl It's safe to add these paths even if the functionality is disabled by
330 dnl the user (--without-wallet for example).
332 dnl openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
333 dnl bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
334 dnl qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
335 dnl if test x$openssl_prefix != x; then
336 dnl PKG_CONFIG_PATH="$PKG_CONFIG_PATH"
337 dnl export PKG_CONFIG_PATH
339 dnl if test x$bdb_prefix != x; then
340 dnl CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
341 dnl LIBS="$LIBS -L$bdb_prefix/lib"
343 dnl if test x$qt5_prefix != x; then
344 dnl PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
345 dnl export PKG_CONFIG_PATH
354 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
355 AC_PATH_TOOL([OTOOL], [otool], otool)
356 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
358 dnl libtool will try to strip the static lib, which is a problem for
359 dnl cross-builds because strip attempts to call a hard-coded ld,
360 dnl which may not exist in the path. Stripping the .a is not
361 dnl necessary, so just disable it.
367 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
368 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
369 OBJCXXFLAGS="$CXXFLAGS"
378 if test x$use_pkgconfig = xyes; then
379 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.)])
380 m4_ifdef([PKG_PROG_PKG_CONFIG], [
382 if test x"$PKG_CONFIG" = "x"; then
383 AC_MSG_ERROR(pkg-config not found.)
388 if test x$use_lcov = xyes; then
389 if test x$LCOV = x; then
390 AC_MSG_ERROR("lcov testing requested but lcov not found")
392 if test x$GCOV = x; then
393 AC_MSG_ERROR("lcov testing requested but gcov not found")
395 if test x$GENHTML = x; then
396 AC_MSG_ERROR("lcov testing requested but genhtml not found")
398 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
399 GENHTML="$GENHTML --branch-coverage"
400 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
401 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
404 dnl Check for endianness
407 dnl Check for pthread compile/link requirements
410 # The following macro will add the necessary defines to bitcoin-config.h, but
411 # they also need to be passed down to any subprojects. Pull the results out of
412 # the cache and add them to CPPFLAGS.
414 # detect POSIX or GNU variant of strerror_r
417 if test x$ac_cv_sys_file_offset_bits != x &&
418 test x$ac_cv_sys_file_offset_bits != xno &&
419 test x$ac_cv_sys_file_offset_bits != xunknown; then
420 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
423 if test x$ac_cv_sys_large_files != x &&
424 test x$ac_cv_sys_large_files != xno &&
425 test x$ac_cv_sys_large_files != xunknown; then
426 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
429 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
431 AX_GCC_FUNC_ATTRIBUTE([visibility])
432 AX_GCC_FUNC_ATTRIBUTE([dllexport])
433 AX_GCC_FUNC_ATTRIBUTE([dllimport])
435 if test x$use_glibc_compat != xno; then
437 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
438 #in anyway for back-compat.
439 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
441 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
442 # See which one is present here.
443 AC_MSG_CHECKING(__fdelt_chk type)
444 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
445 #undef _FORTIFY_SOURCE
447 #define _FORTIFY_SOURCE 2
448 #include <sys/select.h>
449 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
450 [ fdelt_type="long unsigned int"],
451 [ fdelt_type="long int"])
452 AC_MSG_RESULT($fdelt_type)
453 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
455 AC_SEARCH_LIBS([clock_gettime],[rt])
458 if test x$TARGET_OS != xwindows; then
459 # All windows code is PIC, forcing it on just adds useless compile warnings
460 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
463 #asan and tsan cannot be used together
464 if test x$use_asan$use_tsan == xyesyes; then
465 AC_MSG_ERROR(asan and tsan cannot be simultaneously enabled)
468 # using asan flag to enable address sanitizer and undefined behavior sanitizer
469 if test x$use_asan == xyes; then
470 AX_CHECK_LINK_FLAG([-static-libstdc++],[SAN_LDFLAGS="$SAN_LDFLAGS -static-libstdc++"],[AC_MSG_ERROR(Cannot statically link -static-libstdc++)])
471 AX_CHECK_LINK_FLAG([-static-libasan],[SAN_LDFLAGS="$SAN_LDFLAGS -static-libasan"],[AC_MSG_ERROR(Cannot statically link -static-libasan)])
472 AX_CHECK_COMPILE_FLAG([-fsanitize=address],[SAN_CXXFLAGS="$SAN_CXXFLAGS -fsanitize=address"],[AC_MSG_ERROR(Cannot enable -fsanitize=address)])
473 AX_CHECK_COMPILE_FLAG([-fsanitize=undefined],[SAN_CXXFLAGS="$SAN_CXXFLAGS -fsanitize=undefined"],[AC_MSG_ERROR(Cannot enable -fsanitize=undefined)])
474 AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer],[SAN_CXXFLAGS="$SAN_CXXFLAGS -fno-omit-frame-pointer"],[AC_MSG_ERROR(Cannot enable -fno-omit-frame-pointer)])
477 # using tsan flag to enable address thread sanitizer
478 # TSAN is supported on Linux x84_64 and tested on Ubuntu 12.04
479 # Non-position-independent executables are not supported. Use with -fPIE and -pie flags
480 # libc/libstdc++ static linking is not supported
481 if test x$use_tsan == xyes; then
482 AX_CHECK_COMPILE_FLAG([-fsanitize=thread],[SAN_CXXFLAGS="$SAN_CXXFLAGS -fsanitize=thread"],[AC_MSG_ERROR(Cannot enable -fsanitize=thread)])
483 AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer],[SAN_CXXFLAGS="$SAN_CXXFLAGS -fno-omit-frame-pointer"],[AC_MSG_ERROR(Cannot enable -fno-omit-frame-pointer)])
486 if test x$use_hardening != xno; then
487 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
488 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
489 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
490 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
492 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
493 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
494 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
495 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
496 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
497 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
499 #AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
500 #AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
502 if test x$TARGET_OS != xwindows; then
503 # All windows code is PIC, forcing it on just adds useless compile warnings
504 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
505 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
506 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
507 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
509 # These are only available on Windows.
510 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
511 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
512 AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"],[AC_MSG_ERROR(Cannot enable ASLR)])
517 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
522 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
523 if test x$TARGET_OS = xdarwin; then
524 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
527 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])
528 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
529 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
531 AC_CHECK_DECLS([strnlen])
533 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
536 #elif HAVE_SYS_ENDIAN_H
537 #include <sys/endian.h>
540 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
542 #include <byteswap.h>
545 dnl Check for MSG_NOSIGNAL
546 AC_MSG_CHECKING(for MSG_NOSIGNAL)
547 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
548 [[ int f = MSG_NOSIGNAL; ]])],
549 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
553 AC_MSG_CHECKING([for visibility attribute])
554 AC_LINK_IFELSE([AC_LANG_SOURCE([
555 int foo_def( void ) __attribute__((visibility("default")));
559 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
564 if test x$use_reduce_exports = xyes; then
565 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
570 if test x$use_reduce_exports = xyes; then
571 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
572 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
578 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
579 AC_SUBST(LEVELDB_CPPFLAGS)
583 if test x$enable_wallet != xno; then
584 dnl Check for libdb_cxx only if wallet enabled
588 dnl Check Qpid Proton headers and library exist
589 if test x$use_proton = xyes; then
590 AC_CHECK_HEADERS([proton/connection.hpp],
592 [AC_MSG_WARN([Proton headers not found, disabling Proton support])
594 AC_CHECK_LIB([qpid-proton-cpp], [main],
595 [PROTON_LIBS="-lqpid-proton-cpp -lqpid-proton"],
596 [AC_MSG_WARN([Proton libraries not found, disabling Proton support])
599 if test x$use_proton = xyes; then
600 AC_DEFINE(ENABLE_PROTON, 1, [Define to 1 to enable Proton functions])
602 AC_DEFINE(ENABLE_PROTON, 0, [Define to 1 to enable Proton functions])
605 if test x$build_bitcoin_utils$build_bitcoind$use_tests = xnonono; then
611 if test x$use_boost = xyes; then
613 dnl Check for boost libs
614 dnl We need Boost >= 1.62 to fix a potential security bug (https://github.com/zcash/zcash/issues/1241)
615 AX_BOOST_BASE([1.62])
618 AX_BOOST_PROGRAM_OPTIONS
624 if test x$use_reduce_exports = xyes; then
625 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
626 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
629 if test x$use_tests = xyes; then
631 if test x$HEXDUMP = x; then
632 AC_MSG_ERROR(hexdump is required for tests)
636 if test x$use_boost = xyes; then
638 AX_BOOST_UNIT_TEST_FRAMEWORK
640 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
641 AC_MSG_CHECKING([for dynamic linked boost test])
643 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
644 TEMP_CPPFLAGS="$CPPFLAGS"
645 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
646 AC_LINK_IFELSE([AC_LANG_SOURCE([
647 #define BOOST_TEST_DYN_LINK
648 #define BOOST_TEST_MAIN
649 #include <boost/test/unit_test.hpp>
653 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
656 CPPFLAGS="$TEMP_CPPFLAGS"
661 if test x$use_boost = xyes; then
662 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
665 if test x$use_pkgconfig = xyes; then
670 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
671 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
672 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
673 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
674 if test x$TARGET_OS != xwindows; then
675 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
679 if test "x$use_zmq" = "xyes"; then
680 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
681 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
682 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
683 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
686 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
692 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
694 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
695 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
697 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
698 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
700 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
701 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
702 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
703 if test x$TARGET_OS != xwindows; then
704 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
708 if test "x$use_zmq" = "xyes"; then
709 AC_CHECK_HEADER([zmq.h],
710 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
711 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
713 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
714 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
715 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
717 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
719 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
722 if test "x$use_zmq" = "xyes"; then
723 dnl Assume libzmq was built for static linking
726 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
732 # These packages don't provide pkgconfig config files across all
733 # platforms, so we use older autoconf detection mechanisms:
734 if test x$TARGET_OS = xdarwin; then
735 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
736 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
738 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
739 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
742 #AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
743 #AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
745 #AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
746 #AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
748 RUST_LIBS="-lrustzcash"
753 RUST_LIBS="$RUST_LIBS -ldl"
757 dnl Check for OpenMP support
759 [AC_DEFINE(HAVE_OPENMP, 1, [Define if OpenMP is enabled])
760 AM_CONDITIONAL([HAVE_OPENMP], [true])
761 CPPFLAGS="$CPPFLAGS -DMULTICORE"
762 CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"],
763 [AC_MSG_WARN([OpenMP not supported, disabling multithreading])
764 AC_DEFINE(HAVE_OPENMP, 0, [Define if OpenMP is enabled])
765 AM_CONDITIONAL([HAVE_OPENMP], [false])])
767 # Gitian uses a config.site that sets depends_prefix, and then sets --prefix=/
768 # build.sh just uses --prefix
769 if test x$depends_prefix != x; then
770 LIBSNARK_DEPINST="$depends_prefix"
772 LIBSNARK_DEPINST="$prefix"
775 # Set optimization flags for libsnark
776 AX_GCC_ARCHFLAG([no], [LIBSNARK_OPTFLAGS="-O2 $ax_cv_gcc_archflag"], [LIBSNARK_OPTFLAGS="-O2"])
778 # Additional Zcash flags
779 AX_CHECK_COMPILE_FLAG([-fwrapv],[CXXFLAGS="$CXXFLAGS -fwrapv"])
780 AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing],[CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"])
781 if test x$TARGET_OS != xdarwin; then
782 AX_CHECK_COMPILE_FLAG([-Wno-builtin-declaration-mismatch],[CXXFLAGS="$CXXFLAGS -Wno-builtin-declaration-mismatch"],,[[$CXXFLAG_WERROR]])
784 LIBZCASH_LIBS="-lgmp -lgmpxx $BOOST_SYSTEM_LIB -lcrypto -lsodium $RUST_LIBS"
786 AC_MSG_CHECKING([whether to build bitcoind])
787 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
788 AC_MSG_RESULT($build_bitcoind)
790 AC_MSG_CHECKING([whether to build utils (verus verus-tx wallet-utility)])
791 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
792 AC_MSG_RESULT($build_bitcoin_utils)
794 AC_MSG_CHECKING([whether to build libraries])
795 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
796 if test x$build_bitcoin_libs = xyes; then
797 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
798 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
801 AC_MSG_RESULT($build_bitcoin_libs)
805 if test "x$use_ccache" != "xno"; then
806 AC_MSG_CHECKING(if ccache should be used)
807 if test x$CCACHE = x; then
808 if test "x$use_ccache" = "xyes"; then
809 AC_MSG_ERROR([ccache not found.]);
815 CC="$ac_cv_path_CCACHE $CC"
816 CXX="$ac_cv_path_CCACHE $CXX"
818 AC_MSG_RESULT($use_ccache)
820 if test "x$use_ccache" = "xyes"; then
821 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
825 AC_MSG_CHECKING([if wallet should be enabled])
826 if test x$enable_wallet != xno; then
828 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
835 AC_MSG_CHECKING([if mining should be enabled])
836 if test x$enable_mining != xno; then
838 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
844 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
846 AM_CONDITIONAL([ENABLE_PROTON], [test "x$use_proton" = "xyes"])
848 AC_MSG_CHECKING([whether to build test_bitcoin])
849 if test x$use_tests = xyes; then
857 AC_MSG_CHECKING([whether to reduce exports])
858 if test x$use_reduce_exports = xyes; then
864 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$use_tests = xnononono; then
865 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon or --enable-tests])
868 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
869 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
870 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
871 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
872 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
873 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
874 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
875 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
876 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
877 AM_CONDITIONAL([ASAN],[test x$use_asan = xyes])
878 AM_CONDITIONAL([TSAN],[test x$use_tsan = xyes])
880 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
881 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
882 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
883 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
884 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
885 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
886 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
887 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
888 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
889 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
890 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
891 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
892 AC_SUBST(BITCOIN_DAEMON_NAME)
893 AC_SUBST(BITCOIN_CLI_NAME)
894 AC_SUBST(BITCOIN_TX_NAME)
897 AC_SUBST(ERROR_CXXFLAGS)
898 AC_SUBST(SAN_CXXFLAGS)
899 AC_SUBST(SAN_LDFLAGS)
900 AC_SUBST(HARDENED_CXXFLAGS)
901 AC_SUBST(HARDENED_CPPFLAGS)
902 AC_SUBST(HARDENED_LDFLAGS)
905 AC_SUBST(LIBTOOL_APP_LDFLAGS)
908 AC_SUBST(LEVELDB_TARGET_FLAGS)
909 AC_SUBST(CRYPTO_LIBS)
912 AC_SUBST(EVENT_PTHREADS_LIBS)
916 AC_SUBST(LIBSNARK_DEPINST)
917 AC_SUBST(LIBSNARK_OPTFLAGS)
918 AC_SUBST(LIBZCASH_LIBS)
919 AC_SUBST(PROTON_LIBS)
920 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile src/test/buildenv.py])
921 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
922 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
924 dnl boost's m4 checks do something really nasty: they export these vars. As a
925 dnl result, they leak into secp256k1's configure and crazy things happen.
926 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
927 CPPFLAGS_TEMP="$CPPFLAGS"
929 CPPFLAGS="$CPPFLAGS_TEMP"
931 LDFLAGS_TEMP="$LDFLAGS"
933 LDFLAGS="$LDFLAGS_TEMP"
939 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
940 unset PKG_CONFIG_PATH
941 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
943 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
944 unset PKG_CONFIG_LIBDIR
945 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
947 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
948 AC_CONFIG_SUBDIRS([src/secp256k1 src/snark src/univalue src/cryptoconditions])
952 dnl Taken from https://wiki.debian.org/RpathIssue
955 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
956 sed < libtool > libtool-2 \
957 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
964 echo "Options used to compile and link:"
965 echo " with wallet = $enable_wallet"
966 echo " with proton = $use_proton"
967 echo " with zmq = $use_zmq"
968 echo " with test = $use_tests"
969 echo " debug enabled = $enable_debug"
970 echo " werror = $enable_werror"
972 echo " target os = $TARGET_OS"
973 echo " build os = $BUILD_OS"
976 echo " CFLAGS = $CFLAGS"
977 echo " CPPFLAGS = $CPPFLAGS"
979 echo " CXXFLAGS = $CXXFLAGS"
980 echo " LDFLAGS = $LDFLAGS"
981 echo " ARFLAGS = $ARFLAGS"