]> Git Repo - VerusCoin.git/blame - configure.ac
Ensure that ECDSA constant sizes are correctly-sized
[VerusCoin.git] / configure.ac
CommitLineData
35b8af92
CF
1dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
2AC_PREREQ([2.60])
f11099e2
SB
3define(_CLIENT_VERSION_MAJOR, 1)
4define(_CLIENT_VERSION_MINOR, 0)
de9c56c8
NW
5define(_CLIENT_VERSION_REVISION, 9)
6define(_CLIENT_VERSION_BUILD, 50)
6fe11af7
JG
7define(_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)))
8define(_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)))
998202ba 9define(_CLIENT_VERSION_IS_RELEASE, true)
e466df93 10define(_COPYRIGHT_YEAR, 2017)
6fe11af7 11AC_INIT([Zcash],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_SUFFIX(_ZC_BUILD_VAL)],[https://github.com/zcash/zcash/issues],[zcash])
e5438111 12AC_CONFIG_SRCDIR([src/main.cpp])
13AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
52a5f903 14AC_CONFIG_AUX_DIR([build-aux])
15AC_CONFIG_MACRO_DIR([build-aux/m4])
1723862e 16
35b8af92 17AC_CANONICAL_HOST
1723862e 18
35b8af92
CF
19AH_TOP([#ifndef BITCOIN_CONFIG_H])
20AH_TOP([#define BITCOIN_CONFIG_H])
21AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
22
35b8af92
CF
23dnl faketime breaks configure and is only needed for make. Disable it here.
24unset FAKETIME
25
eefb766c 26dnl Automake init set-up and checks
35b8af92
CF
27AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
28
29dnl faketime messes with timestamps and causes configure to be re-run.
30dnl --disable-maintainer-mode can be used to bypass this.
31AM_MAINTAINER_MODE([enable])
32
33dnl make the compilation flags quiet unless V=1 is used
34m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
35
eefb766c 36dnl Compiler checks (here before libtool).
37if test "x${CXXFLAGS+set}" = "xset"; then
38 CXXFLAGS_overridden=yes
39else
40 CXXFLAGS_overridden=no
41fi
c4da0970 42
9285bba8 43# Zcash requries C++11 compatibility; set it early:
c4da0970 44CXXFLAGS="-std=c++11 $CXXFLAGS"
c4da0970 45
52a5f903 46AC_PROG_CXX
52a5f903 47m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
eefb766c 48
49dnl By default, libtool for mingw refuses to link static libs into a dll for
50dnl fear of mixing pic/non-pic objects, and import/export complications. Since
51dnl we have those under control, re-enable that functionality.
52case $host in
53 *mingw*)
54 lt_cv_deplibs_check_method="pass_all"
55 ;;
56esac
57dnl Libtool init checks.
19df238a 58LT_INIT([pic-only])
eefb766c 59
60dnl Check/return PATH for base programs.
52a5f903 61AC_PATH_TOOL(AR, ar)
62AC_PATH_TOOL(RANLIB, ranlib)
63AC_PATH_TOOL(STRIP, strip)
64AC_PATH_TOOL(GCOV, gcov)
65AC_PATH_PROG(LCOV, lcov)
66AC_PATH_PROG(JAVA, java)
67AC_PATH_PROG(GENHTML, genhtml)
68AC_PATH_PROG([GIT], [git])
69AC_PATH_PROG(CCACHE,ccache)
70AC_PATH_PROG(XGETTEXT,xgettext)
71AC_PATH_PROG(HEXDUMP,hexdump)
56734f4b
TH
72AC_PATH_TOOL(READELF,readelf)
73AC_PATH_TOOL(CPPFILT,c++filt)
eefb766c 74
eefb766c 75dnl pkg-config check.
52a5f903 76PKG_PROG_PKG_CONFIG
77
4f9e993b
WL
78# Enable wallet
79AC_ARG_ENABLE([wallet],
80 [AS_HELP_STRING([--enable-wallet],
81 [enable wallet (default is yes)])],
82 [enable_wallet=$enableval],
83 [enable_wallet=yes])
84
2cc0a252
JG
85AC_ARG_ENABLE([mining],
86 [AS_HELP_STRING([--enable-mining],
87 [enable mining (default is yes)])],
88 [enable_mining=$enableval],
89 [enable_mining=yes])
90
802ea76b
SB
91AC_ARG_ENABLE([rust],
92 [AS_HELP_STRING([--enable-rust],
93 [enable rust (default is yes)])],
94 [enable_rust=$enableval],
95 [enable_rust=yes])
96
35b8af92
CF
97AC_ARG_WITH([miniupnpc],
98 [AS_HELP_STRING([--with-miniupnpc],
99 [enable UPNP (default is yes if libminiupnpc is found)])],
100 [use_upnp=$withval],
101 [use_upnp=auto])
102
103AC_ARG_ENABLE([upnp-default],
104 [AS_HELP_STRING([--enable-upnp-default],
105 [if UPNP is enabled, turn it on at startup (default is no)])],
106 [use_upnp_default=$enableval],
107 [use_upnp_default=no])
108
99eb947a
S
109AC_ARG_ENABLE([proton],
110 [AS_HELP_STRING([--disable-proton],
111 [disable Proton (AMQP messaging)])],
112 [use_proton=$enableval],
113 [use_proton=yes])
114
35b8af92
CF
115AC_ARG_ENABLE(tests,
116 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
117 [use_tests=$enableval],
118 [use_tests=yes])
119
120AC_ARG_WITH([comparison-tool],
47b9374e 121 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
35b8af92
CF
122 [use_comparison_tool=$withval],
123 [use_comparison_tool=no])
124
47b9374e
MC
125AC_ARG_ENABLE([comparison-tool-reorg-tests],
126 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
127 [use_comparison_tool_reorg_tests=$enableval],
128 [use_comparison_tool_reorg_tests=no])
129
35b8af92
CF
130AC_ARG_ENABLE([hardening],
131 [AS_HELP_STRING([--enable-hardening],
132 [attempt to harden the resulting executables (default is yes)])],
133 [use_hardening=$enableval],
134 [use_hardening=yes])
135
e432a5f0
CF
136AC_ARG_ENABLE([reduce-exports],
137 [AS_HELP_STRING([--enable-reduce-exports],
3ee028f1 138 [attempt to reduce exported symbols in the resulting executables (default is no)])],
e432a5f0 139 [use_reduce_exports=$enableval],
3ee028f1 140 [use_reduce_exports=no])
e432a5f0 141
35b8af92
CF
142AC_ARG_ENABLE([ccache],
143 [AS_HELP_STRING([--enable-ccache],
e18e1001 144 [use ccache for building (default is yes if ccache is found)])],
35b8af92
CF
145 [use_ccache=$enableval],
146 [use_ccache=auto])
147
148AC_ARG_ENABLE([lcov],
149 [AS_HELP_STRING([--enable-lcov],
150 [enable lcov testing (default is no)])],
151 [use_lcov=yes],
152 [use_lcov=no])
153
d5aab704
CF
154AC_ARG_ENABLE([glibc-back-compat],
155 [AS_HELP_STRING([--enable-glibc-back-compat],
aa367306 156 [enable backwards compatibility with glibc])],
d5aab704
CF
157 [use_glibc_compat=$enableval],
158 [use_glibc_compat=no])
159
f200002c 160AC_ARG_ENABLE([zmq],
1afb8431 161 [AS_HELP_STRING([--disable-zmq],
162 [disable ZMQ notifications])],
f200002c
JG
163 [use_zmq=$enableval],
164 [use_zmq=yes])
165
35b8af92
CF
166AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
167
abfcaefe 168AC_ARG_ENABLE(man,
1b5e712c 169 [AS_HELP_STRING([--disable-man],
170 [do not install man pages (default is to install)])],,
abfcaefe 171 enable_man=yes)
172AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
173
b197605e 174# Enable debug
f5f157b8 175AC_ARG_ENABLE([debug],
176 [AS_HELP_STRING([--enable-debug],
177 [use debug compiler flags and macros (default is no)])],
178 [enable_debug=$enableval],
179 [enable_debug=no])
180
181if test "x$enable_debug" = xyes; then
ae1565b5 182 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
f5f157b8 183 if test "x$GCC" = xyes; then
ae1565b5 184 CFLAGS="$CFLAGS -g3 -O0"
f5f157b8 185 fi
b197605e 186
f5f157b8 187 if test "x$GXX" = xyes; then
ae1565b5 188 CXXFLAGS="$CXXFLAGS -g3 -O0"
f5f157b8 189 fi
b197605e 190fi
f5f157b8 191
35b8af92
CF
192## TODO: Remove these hard-coded paths and flags. They are here for the sake of
193## compatibility with the legacy buildsystem.
194##
123e4f87 195if test "x$CXXFLAGS_overridden" = "xno"; then
9e451578 196 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
123e4f87 197fi
55fca515 198CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
35b8af92 199
b7a4ecc1
LD
200AC_ARG_WITH([utils],
201 [AS_HELP_STRING([--with-utils],
66a89c08 202 [build zcash-cli zcash-tx (default=yes)])],
b7a4ecc1
LD
203 [build_bitcoin_utils=$withval],
204 [build_bitcoin_utils=yes])
205
206AC_ARG_WITH([libs],
207 [AS_HELP_STRING([--with-libs],
208 [build libraries (default=yes)])],
209 [build_bitcoin_libs=$withval],
210 [build_bitcoin_libs=yes])
211
212AC_ARG_WITH([daemon],
213 [AS_HELP_STRING([--with-daemon],
214 [build bitcoind daemon (default=yes)])],
215 [build_bitcoind=$withval],
216 [build_bitcoind=yes])
217
35b8af92
CF
218AC_LANG_PUSH([C++])
219
220use_pkgconfig=yes
221case $host in
222 *mingw*)
223
96b9603c 224 #pkgconfig does more harm than good with MinGW
35b8af92
CF
225 use_pkgconfig=no
226
227 TARGET_OS=windows
228 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
239 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
241 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
242 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
243 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
244 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
245 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
c589f5f2
CF
246 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
247
575e70c0
CF
248 # -static is interpreted by libtool, where it has a different meaning.
249 # In libtool-speak, it's -all-static.
e0077de5 250 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
575e70c0 251
35b8af92
CF
252 AC_PATH_PROG([MAKENSIS], [makensis], none)
253 if test x$MAKENSIS = xnone; then
254 AC_MSG_WARN("makensis not found. Cannot create installer.")
255 fi
256
5ceb9c96
CF
257 AC_PATH_TOOL(WINDRES, windres, none)
258 if test x$WINDRES = xnone; then
259 AC_MSG_ERROR("windres not found")
260 fi
261
b77dfdc9 262 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
35b8af92 263 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
123e4f87
LD
264 if test "x$CXXFLAGS_overridden" = "xno"; then
265 CXXFLAGS="$CXXFLAGS -w"
266 fi
2f87b38e
WL
267 case $host in
268 i?86-*) WINDOWS_BITS=32 ;;
269 x86_64-*) WINDOWS_BITS=64 ;;
270 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
271 esac
272 AC_SUBST(WINDOWS_BITS)
9ed8979e
CF
273
274 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
275 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
276 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
277 dnl also overridden to prevent their insertion later.
278 dnl This should only affect dll's.
279 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
280 postdeps_CXX=
281
35b8af92
CF
282 ;;
283 *darwin*)
284 TARGET_OS=darwin
285 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
286 if test x$cross_compiling != xyes; then
b62bbb1f 287 BUILD_OS=darwin
35b8af92
CF
288 AC_CHECK_PROG([PORT],port, port)
289 if test x$PORT = xport; then
290 dnl add default macports paths
4c69ebed
PJ
291 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
292 LIBS="$LIBS -L/opt/local/lib"
9cb7abaf
DH
293 if test -d /opt/local/include/db62; then
294 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
295 LIBS="$LIBS -L/opt/local/lib/db62"
4c69ebed 296 fi
35b8af92
CF
297 fi
298
299 AC_CHECK_PROG([BREW],brew, brew)
300 if test x$BREW = xbrew; then
27368e76 301 dnl These Homebrew packages may be keg-only, meaning that they won't be found
9fedafba
CF
302 dnl in expected paths because they may conflict with system files. Ask
303 dnl Homebrew where each one is located, then adjust paths accordingly.
304 dnl It's safe to add these paths even if the functionality is disabled by
abecfc42 305 dnl the user (--without-wallet for example).
9fedafba
CF
306
307 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
308 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
9fedafba 309 if test x$openssl_prefix != x; then
b77b4eda 310 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
f9e40fb0 311 export PKG_CONFIG_PATH
9fedafba
CF
312 fi
313 if test x$bdb_prefix != x; then
314 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
315 LIBS="$LIBS -L$bdb_prefix/lib"
316 fi
35b8af92 317 fi
b62bbb1f
CF
318 else
319 case $build_os in
320 *darwin*)
321 BUILD_OS=darwin
322 ;;
323 *)
324 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
325 AC_PATH_TOOL([OTOOL], [otool], otool)
326 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
b7f2cdc8
CF
327
328 dnl libtool will try to strip the static lib, which is a problem for
329 dnl cross-builds because strip attempts to call a hard-coded ld,
330 dnl which may not exist in the path. Stripping the .a is not
331 dnl necessary, so just disable it.
332 old_striplib=
b62bbb1f
CF
333 ;;
334 esac
35b8af92
CF
335 fi
336
9eb5a5fb 337 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
35b8af92 338 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
35b8af92 339 ;;
ab123ad4
CF
340 *linux*)
341 TARGET_OS=linux
342 ;;
35b8af92 343 *)
35b8af92
CF
344 ;;
345esac
346
35b8af92 347if test x$use_comparison_tool != xno; then
4bc2a390
JG
348 if test x$JAVA = x; then
349 AC_MSG_ERROR("comparison tool set but java not found")
350 fi
35b8af92
CF
351 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
352fi
353
47b9374e 354if test x$use_comparison_tool_reorg_tests != xno; then
b77b4eda 355 if test x$use_comparison_tool = x; then
47b9374e
MC
356 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
357 fi
358 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
359else
360 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
361fi
362
b77b4eda
LD
363if test x$use_lcov = xyes; then
364 if test x$LCOV = x; then
35b8af92
CF
365 AC_MSG_ERROR("lcov testing requested but lcov not found")
366 fi
b77b4eda 367 if test x$GCOV = x; then
35b8af92
CF
368 AC_MSG_ERROR("lcov testing requested but gcov not found")
369 fi
b77b4eda 370 if test x$JAVA = x; then
35b8af92
CF
371 AC_MSG_ERROR("lcov testing requested but java not found")
372 fi
b77b4eda 373 if test x$GENHTML = x; then
35b8af92
CF
374 AC_MSG_ERROR("lcov testing requested but genhtml not found")
375 fi
b77b4eda 376 if test x$use_comparison_tool = x; then
35b8af92
CF
377 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
378 fi
6ecb05dd
JG
379 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
380 GENHTML="$GENHTML --branch-coverage"
35b8af92
CF
381 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
382 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
383fi
384
4414f5ff
WL
385dnl Check for endianness
386AC_C_BIGENDIAN
35b8af92
CF
387
388dnl Check for pthread compile/link requirements
389AX_PTHREAD
35b8af92
CF
390
391# The following macro will add the necessary defines to bitcoin-config.h, but
392# they also need to be passed down to any subprojects. Pull the results out of
393# the cache and add them to CPPFLAGS.
394AC_SYS_LARGEFILE
a60838d0
WL
395# detect POSIX or GNU variant of strerror_r
396AC_FUNC_STRERROR_R
35b8af92
CF
397
398if test x$ac_cv_sys_file_offset_bits != x &&
399 test x$ac_cv_sys_file_offset_bits != xno &&
400 test x$ac_cv_sys_file_offset_bits != xunknown; then
401 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
402fi
403
404if test x$ac_cv_sys_large_files != x &&
405 test x$ac_cv_sys_large_files != xno &&
406 test x$ac_cv_sys_large_files != xunknown; then
407 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
408fi
409
410AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
411
f36a40f7
CF
412AX_GCC_FUNC_ATTRIBUTE([visibility])
413AX_GCC_FUNC_ATTRIBUTE([dllexport])
414AX_GCC_FUNC_ATTRIBUTE([dllimport])
415
d5aab704
CF
416if test x$use_glibc_compat != xno; then
417
d68e2111
CF
418 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
419 #in anyway for back-compat.
420 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
421
d5aab704
CF
422 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
423 # See which one is present here.
424 AC_MSG_CHECKING(__fdelt_chk type)
e2a98d27 425 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
8021cf8d
CF
426 #undef _FORTIFY_SOURCE
427 #endif
428 #define _FORTIFY_SOURCE 2
d5aab704 429 #include <sys/select.h>
e2a98d27 430 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
d5aab704
CF
431 [ fdelt_type="long unsigned int"],
432 [ fdelt_type="long int"])
433 AC_MSG_RESULT($fdelt_type)
434 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
d68e2111
CF
435else
436 AC_SEARCH_LIBS([clock_gettime],[rt])
d5aab704
CF
437fi
438
35b8af92 439if test x$use_hardening != xno; then
5d37904b 440 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
6dcb7067 441 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
b00b98ae
TH
442 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
443 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
35b8af92 444
9b4e03b2
LD
445 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
446 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
447 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
b00b98ae 448 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
9b4e03b2 449 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
b00b98ae 450 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
35b8af92 451
b00b98ae
TH
452 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
453 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
35b8af92
CF
454
455 if test x$TARGET_OS != xwindows; then
eccd5856 456 # All windows code is PIC, forcing it on just adds useless compile warnings
b00b98ae
TH
457 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
458 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
459 else
460 # These are only available on Windows.
461 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
462 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
35b8af92
CF
463 fi
464
811a765b
CF
465 case $host in
466 *mingw*)
467 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
468 ;;
469 esac
470
35b8af92
CF
471 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
472 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
473 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
474 OBJCXXFLAGS="$CXXFLAGS"
475fi
476
477dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
478if test x$TARGET_OS = xdarwin; then
479 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
480fi
481
8ea6d37a 482AC_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])
caf6150e
HL
483AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
484AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
f2647cc0 485
494f6e7d
PJ
486AC_CHECK_DECLS([strnlen])
487
4414f5ff 488AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
f2647cc0
CF
489 [#if HAVE_ENDIAN_H
490 #include <endian.h>
8ea6d37a
AV
491 #elif HAVE_SYS_ENDIAN_H
492 #include <sys/endian.h>
f2647cc0 493 #endif])
35b8af92 494
4414f5ff
WL
495AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
496 [#if HAVE_BYTESWAP_H
497 #include <byteswap.h>
498 #endif])
499
35b8af92
CF
500dnl Check for MSG_NOSIGNAL
501AC_MSG_CHECKING(for MSG_NOSIGNAL)
e2a98d27 502AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
503 [[ int f = MSG_NOSIGNAL; ]])],
35b8af92
CF
504 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
505 [ AC_MSG_RESULT(no)]
506)
507
e432a5f0
CF
508AC_MSG_CHECKING([for visibility attribute])
509AC_LINK_IFELSE([AC_LANG_SOURCE([
510 int foo_def( void ) __attribute__((visibility("default")));
511 int main(){}
512 ])],
513 [
514 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
515 AC_MSG_RESULT(yes)
516 ],
517 [
518 AC_MSG_RESULT(no)
519 if test x$use_reduce_exports = xyes; then
3448b132 520 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
e432a5f0 521 fi
e432a5f0
CF
522 ]
523)
524
3ee028f1 525if test x$use_reduce_exports = xyes; then
e432a5f0 526 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
3448b132 527 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
e432a5f0
CF
528fi
529
4a290b52
LD
530LEVELDB_CPPFLAGS=
531LIBLEVELDB=
532LIBMEMENV=
533AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
534AC_SUBST(LEVELDB_CPPFLAGS)
535AC_SUBST(LIBLEVELDB)
536AC_SUBST(LIBMEMENV)
537
4f9e993b
WL
538if test x$enable_wallet != xno; then
539 dnl Check for libdb_cxx only if wallet enabled
9cb7abaf 540 BITCOIN_FIND_BDB62
4f9e993b 541fi
35b8af92 542
99eb947a
S
543dnl Check Qpid Proton headers and library exist
544if test x$use_proton = xyes; then
545 AC_CHECK_HEADERS([proton/connection.hpp],
546 [],
547 [AC_MSG_WARN([Proton headers not found, disabling Proton support])
548 use_proton=no])
549 AC_CHECK_LIB([qpid-proton-cpp], [main],
550 [PROTON_LIBS="-lqpid-proton-cpp -lqpid-proton"],
551 [AC_MSG_WARN([Proton libraries not found, disabling Proton support])
552 use_proton=no])
553fi
554if test x$use_proton = xyes; then
555 AC_DEFINE(ENABLE_PROTON, 1, [Define to 1 to enable Proton functions])
556else
557 AC_DEFINE(ENABLE_PROTON, 0, [Define to 1 to enable Proton functions])
558fi
559
35b8af92
CF
560dnl Check for libminiupnpc (optional)
561if test x$use_upnp != xno; then
a26a3676
JT
562 AC_CHECK_HEADERS(
563 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
28d412ff 564 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
a26a3676
JT
565 [have_miniupnpc=no]
566 )
35b8af92
CF
567fi
568
38ba3c66 569if test x$build_bitcoin_utils$build_bitcoind$use_tests = xnonono; then
b7a4ecc1
LD
570 use_boost=no
571else
572 use_boost=yes
573fi
574
575if test x$use_boost = xyes; then
576
35b8af92
CF
577dnl Check for boost libs
578AX_BOOST_BASE
579AX_BOOST_SYSTEM
580AX_BOOST_FILESYSTEM
581AX_BOOST_PROGRAM_OPTIONS
582AX_BOOST_THREAD
583AX_BOOST_CHRONO
584
e432a5f0 585
3ee028f1 586if test x$use_reduce_exports = xyes; then
e432a5f0
CF
587 AC_MSG_CHECKING([for working boost reduced exports])
588 TEMP_CPPFLAGS="$CPPFLAGS"
589 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
590 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
591 @%:@include <boost/version.hpp>
592 ]], [[
593 #if BOOST_VERSION >= 104900
594 // Everything is okay
595 #else
596 # error Boost version is too old
597 #endif
598 ]])],[
599 AC_MSG_RESULT(yes)
3ee028f1 600 ],[
3448b132 601 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
e432a5f0
CF
602 ])
603 CPPFLAGS="$TEMP_CPPFLAGS"
604fi
b7a4ecc1
LD
605fi
606
3ee028f1 607if test x$use_reduce_exports = xyes; then
e432a5f0
CF
608 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
609 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
610fi
611
35b8af92 612if test x$use_tests = xyes; then
152e51c7
CF
613
614 if test x$HEXDUMP = x; then
615 AC_MSG_ERROR(hexdump is required for tests)
616 fi
617
618
b7a4ecc1
LD
619 if test x$use_boost = xyes; then
620
35b8af92 621 AX_BOOST_UNIT_TEST_FRAMEWORK
e4b991e5
WL
622
623 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
624 AC_MSG_CHECKING([for dynamic linked boost test])
625 TEMP_LIBS="$LIBS"
a7d1f035 626 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
e4b991e5
WL
627 TEMP_CPPFLAGS="$CPPFLAGS"
628 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
629 AC_LINK_IFELSE([AC_LANG_SOURCE([
630 #define BOOST_TEST_DYN_LINK
631 #define BOOST_TEST_MAIN
632 #include <boost/test/unit_test.hpp>
633
634 ])],
635 [AC_MSG_RESULT(yes)]
636 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
637 [AC_MSG_RESULT(no)])
638 LIBS="$TEMP_LIBS"
639 CPPFLAGS="$TEMP_CPPFLAGS"
b7a4ecc1
LD
640
641 fi
35b8af92
CF
642fi
643
b7a4ecc1
LD
644if test x$use_boost = xyes; then
645
ca66717d 646BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
35b8af92
CF
647
648dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
649dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
650dnl a working version is available, else fall back to sleep. sleep was removed
651dnl after 1.56.
652dnl If neither is available, abort.
35b8af92 653TEMP_LIBS="$LIBS"
ca66717d 654LIBS="$BOOST_LIBS $LIBS"
714cdecb
WL
655TEMP_CPPFLAGS="$CPPFLAGS"
656CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
e2a98d27 657AC_LINK_IFELSE([AC_LANG_PROGRAM([[
35b8af92
CF
658 #include <boost/thread/thread.hpp>
659 #include <boost/version.hpp>
e2a98d27 660 ]],[[
35b8af92
CF
661 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
662 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
663 #else
664 choke me
665 #endif
e2a98d27 666 ]])],
ca66717d 667 [boost_sleep=yes;
35b8af92
CF
668 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
669 [boost_sleep=no])
670LIBS="$TEMP_LIBS"
714cdecb 671CPPFLAGS="$TEMP_CPPFLAGS"
35b8af92
CF
672
673if test x$boost_sleep != xyes; then
674TEMP_LIBS="$LIBS"
460b32d7 675LIBS="$BOOST_LIBS $LIBS"
714cdecb
WL
676TEMP_CPPFLAGS="$CPPFLAGS"
677CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
e2a98d27 678AC_LINK_IFELSE([AC_LANG_PROGRAM([[
35b8af92
CF
679 #include <boost/version.hpp>
680 #include <boost/thread.hpp>
681 #include <boost/date_time/posix_time/posix_time_types.hpp>
e2a98d27 682 ]],[[
35b8af92
CF
683 #if BOOST_VERSION <= 105600
684 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
685 #else
686 choke me
687 #endif
e2a98d27 688 ]])],
35b8af92
CF
689 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
690 [boost_sleep=no])
691LIBS="$TEMP_LIBS"
714cdecb 692CPPFLAGS="$TEMP_CPPFLAGS"
35b8af92
CF
693fi
694
695if test x$boost_sleep != xyes; then
539abc47 696 AC_MSG_ERROR(No working boost sleep implementation found.)
35b8af92
CF
697fi
698
b7a4ecc1 699fi
c8ba8ef6 700
35b8af92
CF
701if test x$use_pkgconfig = xyes; then
702
b77b4eda 703 if test x"$PKG_CONFIG" = "x"; then
12564aa1 704 AC_MSG_ERROR(pkg-config not found.)
35b8af92
CF
705 fi
706
707 : #NOP
708 m4_ifdef(
709 [PKG_CHECK_MODULES],
710 [
6b099402
CF
711 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
712 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
df377ca8
WL
713 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
714 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
715 if test x$TARGET_OS != xwindows; then
716 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
717 fi
718 fi
effe8a5f
JC
719
720 if test "x$use_zmq" = "xyes"; then
721 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
722 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
723 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
724 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
725 use_zmq=no])
726 else
727 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
728 fi
35b8af92
CF
729 ]
730 )
731else
c4da0970
NW
732 # BUG: Fix this:
733 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
734
35b8af92 735 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
6b099402 736 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
35b8af92
CF
737
738 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
6b099402 739 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
35b8af92 740
df377ca8
WL
741 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
742 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
743 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
744 if test x$TARGET_OS != xwindows; then
745 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
746 fi
747 fi
748
effe8a5f
JC
749 if test "x$use_zmq" = "xyes"; then
750 AC_CHECK_HEADER([zmq.h],
751 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
752 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
753 use_zmq=no
754 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
755 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
756 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
757 use_zmq=no
758 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
759 else
760 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
761 fi
762
00bcf223 763 if test "x$use_zmq" = "xyes"; then
764 dnl Assume libzmq was built for static linking
765 case $host in
766 *mingw*)
767 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
768 ;;
769 esac
770 fi
c8ba8ef6 771fi
35b8af92 772
c4da0970
NW
773# These packages don't provide pkgconfig config files across all
774# platforms, so we use older autoconf detection mechanisms:
775AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
776AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
777
778AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
779AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
780
c4da0970
NW
781# libsnark header layout is broken unless cpp's -I is passed with the
782# libsnark directory, so for now we use this hideous workaround:
783echo 'Hunting for libsnark include directory...'
784[LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
785if test -d "$LIBSNARK_INCDIR"; then
786 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
787else
788 AC_MSG_ERROR(libsnark include directory not found)
789fi
790
791CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
792
793# Now check for libsnark compilability using traditional autoconf tests:
794AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
795AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
796
802ea76b
SB
797RUST_LIBS=""
798if test x$enable_rust != xno; then
799 RUST_LIBS="-lrustzcash"
800fi
801
802LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp $RUST_LIBS"
c4da0970 803
51babcb9 804CXXFLAGS_TEMP="$CXXFLAGS"
a19eeace 805LIBS_TEMP="$LIBS"
51babcb9 806CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
c4da0970 807LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
a19eeace 808AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
51babcb9 809CXXFLAGS="$CXXFLAGS_TEMP"
a19eeace
LD
810LIBS="$LIBS_TEMP"
811
e18e1001 812AC_MSG_CHECKING([whether to build bitcoind])
f930341d
LD
813AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
814AC_MSG_RESULT($build_bitcoind)
815
66a89c08 816AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
c101c769 817AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
818AC_MSG_RESULT($build_bitcoin_utils)
f930341d 819
cdd36c6c
CF
820AC_MSG_CHECKING([whether to build libraries])
821AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
822if test x$build_bitcoin_libs = xyes; then
823 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
08d6b02d 824 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
cdd36c6c 825fi
e463edc1 826
cdd36c6c
CF
827AC_MSG_RESULT($build_bitcoin_libs)
828
35b8af92
CF
829AC_LANG_POP
830
831if test "x$use_ccache" != "xno"; then
e18e1001 832 AC_MSG_CHECKING(if ccache should be used)
35b8af92
CF
833 if test x$CCACHE = x; then
834 if test "x$use_ccache" = "xyes"; then
835 AC_MSG_ERROR([ccache not found.]);
836 else
35b8af92
CF
837 use_ccache=no
838 fi
839 else
840 use_ccache=yes
841 CC="$ac_cv_path_CCACHE $CC"
842 CXX="$ac_cv_path_CCACHE $CXX"
843 fi
844 AC_MSG_RESULT($use_ccache)
845fi
386efb76
CF
846if test "x$use_ccache" = "xyes"; then
847 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
848fi
35b8af92 849
4f9e993b
WL
850dnl enable wallet
851AC_MSG_CHECKING([if wallet should be enabled])
852if test x$enable_wallet != xno; then
853 AC_MSG_RESULT(yes)
854 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
855
856else
857 AC_MSG_RESULT(no)
4f9e993b
WL
858fi
859
2cc0a252
JG
860dnl enable mining
861AC_MSG_CHECKING([if mining should be enabled])
862if test x$enable_mining != xno; then
863 AC_MSG_RESULT(yes)
864 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
865
866else
867 AC_MSG_RESULT(no)
868fi
869
802ea76b
SB
870dnl enable rust
871AC_MSG_CHECKING([if rust should be enabled])
872if test x$enable_rust != xno; then
873 AC_MSG_RESULT(yes)
874 AC_DEFINE(ENABLE_RUST, 1, [Define to 1 to enable Rust language dependent functions])
875
876else
877 AC_MSG_RESULT(no)
878fi
879
35b8af92 880dnl enable upnp support
e18e1001 881AC_MSG_CHECKING([whether to build with support for UPnP])
35b8af92
CF
882if test x$have_miniupnpc = xno; then
883 if test x$use_upnp = xyes; then
e18e1001 884 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
35b8af92
CF
885 fi
886 AC_MSG_RESULT(no)
887else
888 if test x$use_upnp != xno; then
889 AC_MSG_RESULT(yes)
e18e1001 890 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
35b8af92
CF
891 use_upnp=yes
892 upnp_setting=0
893 if test x$use_upnp_default != xno; then
894 use_upnp_default=yes
895 upnp_setting=1
896 fi
897 AC_MSG_RESULT($use_upnp_default)
e18e1001 898 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
35b8af92 899 if test x$TARGET_OS = xwindows; then
9f7f504e 900 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
35b8af92
CF
901 fi
902 else
903 AC_MSG_RESULT(no)
904 fi
905fi
906
f200002c
JG
907AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
908
99eb947a
S
909AM_CONDITIONAL([ENABLE_PROTON], [test "x$use_proton" = "xyes"])
910
e18e1001 911AC_MSG_CHECKING([whether to build test_bitcoin])
35b8af92 912if test x$use_tests = xyes; then
e18e1001 913 AC_MSG_RESULT([yes])
2762638a 914 BUILD_TEST="yes"
e18e1001
LD
915else
916 AC_MSG_RESULT([no])
2762638a 917 BUILD_TEST=""
35b8af92
CF
918fi
919
e432a5f0 920AC_MSG_CHECKING([whether to reduce exports])
3ee028f1 921if test x$use_reduce_exports = xyes; then
e432a5f0
CF
922 AC_MSG_RESULT([yes])
923else
924 AC_MSG_RESULT([no])
925fi
926
38ba3c66 927if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$use_tests = xnononono; then
abecfc42 928 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon or --enable-tests])
a9dbcf03
LD
929fi
930
35b8af92 931AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
b62bbb1f 932AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
35b8af92 933AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
b77b4eda 934AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
2cc0a252 935AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
802ea76b 936AM_CONDITIONAL([ENABLE_RUST],[test x$enable_rust = xyes])
2762638a 937AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
b77b4eda 938AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
35b8af92 939AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
47b9374e 940AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
d5aab704 941AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
56734f4b 942AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
35b8af92
CF
943
944AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
945AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
946AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
947AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
948AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
949AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
950AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
951AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
952AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
953AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
954AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
955AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
956
e432a5f0 957AC_SUBST(RELDFLAGS)
e0077de5 958AC_SUBST(LIBTOOL_APP_LDFLAGS)
35b8af92 959AC_SUBST(USE_UPNP)
35b8af92 960AC_SUBST(BOOST_LIBS)
35b8af92
CF
961AC_SUBST(TESTDEFS)
962AC_SUBST(LEVELDB_TARGET_FLAGS)
9f7f504e 963AC_SUBST(MINIUPNPC_CPPFLAGS)
28d412ff 964AC_SUBST(MINIUPNPC_LIBS)
c4da0970
NW
965AC_SUBST(GMP_LIBS)
966AC_SUBST(GMPXX_LIBS)
c4da0970 967AC_SUBST(LIBSNARK_LIBS)
1785bdb9 968AC_SUBST(LIBZCASH_LIBS)
99eb947a 969AC_SUBST(PROTON_LIBS)
38ba3c66 970AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi src/test/buildenv.py])
35b8af92 971AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
7667850d 972AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
07a99017
PW
973
974dnl boost's m4 checks do something really nasty: they export these vars. As a
975dnl result, they leak into secp256k1's configure and crazy things happen.
976dnl Until this is fixed upstream and we've synced, we'll just un-export them.
0dc86138 977CPPFLAGS_TEMP="$CPPFLAGS"
cf61b544 978unset CPPFLAGS
0dc86138
CF
979CPPFLAGS="$CPPFLAGS_TEMP"
980
981LDFLAGS_TEMP="$LDFLAGS"
cf61b544 982unset LDFLAGS
0dc86138
CF
983LDFLAGS="$LDFLAGS_TEMP"
984
985LIBS_TEMP="$LIBS"
986unset LIBS
987LIBS="$LIBS_TEMP"
988
989PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
990unset PKG_CONFIG_PATH
991PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
992
993PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
994unset PKG_CONFIG_LIBDIR
995PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
996
c1afe40a 997ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
a10a6e2a 998AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
07a99017 999
35b8af92 1000AC_OUTPUT
a98356fe
CF
1001
1002dnl Taken from https://wiki.debian.org/RpathIssue
1003case $host in
1004 *-*-linux-gnu)
1005 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1006 sed < libtool > libtool-2 \
1007 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1008 mv libtool-2 libtool
1009 chmod 755 libtool
1010 ;;
1011esac
This page took 0.2364 seconds and 4 git commands to generate.