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