leveldbwrapper file rename to dbwrapper.*
[bitcoinplatinum.git] / configure.ac
blob4318aafa559785ff53d00342fc30de04baca625b
1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
2 AC_PREREQ([2.60])
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 11)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2015)
9 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin])
10 AC_CONFIG_SRCDIR([src/main.cpp])
11 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
12 AC_CONFIG_AUX_DIR([build-aux])
13 AC_CONFIG_MACRO_DIR([build-aux/m4])
15 AC_CANONICAL_HOST
17 AH_TOP([#ifndef BITCOIN_CONFIG_H])
18 AH_TOP([#define BITCOIN_CONFIG_H])
19 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
21 dnl faketime breaks configure and is only needed for make. Disable it here.
22 unset FAKETIME
24 dnl Automake init set-up and checks
25 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
27 dnl faketime messes with timestamps and causes configure to be re-run.
28 dnl --disable-maintainer-mode can be used to bypass this.
29 AM_MAINTAINER_MODE([enable])
31 dnl make the compilation flags quiet unless V=1 is used
32 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
34 dnl Compiler checks (here before libtool).
35 if test "x${CXXFLAGS+set}" = "xset"; then
36   CXXFLAGS_overridden=yes
37 else
38   CXXFLAGS_overridden=no
40 AC_PROG_CXX
41 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
43 dnl By default, libtool for mingw refuses to link static libs into a dll for
44 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
45 dnl we have those under control, re-enable that functionality.
46 case $host in
47   *mingw*)
48      lt_cv_deplibs_check_method="pass_all"
49   ;;
50 esac
51 dnl Libtool init checks.
52 LT_INIT([pic-only])
54 dnl Check/return PATH for base programs.
55 AC_PATH_TOOL(AR, ar)
56 AC_PATH_TOOL(RANLIB, ranlib)
57 AC_PATH_TOOL(STRIP, strip)
58 AC_PATH_TOOL(GCOV, gcov)
59 AC_PATH_PROG(LCOV, lcov)
60 AC_PATH_PROG(JAVA, java)
61 AC_PATH_PROG(GENHTML, genhtml)
62 AC_PATH_PROG([GIT], [git])
63 AC_PATH_PROG(CCACHE,ccache)
64 AC_PATH_PROG(XGETTEXT,xgettext)
65 AC_PATH_PROG(HEXDUMP,hexdump)
67 dnl pkg-config check.
68 PKG_PROG_PKG_CONFIG
70 # Enable wallet
71 AC_ARG_ENABLE([wallet],
72   [AS_HELP_STRING([--disable-wallet],
73   [disable wallet (enabled by default)])],
74   [enable_wallet=$enableval],
75   [enable_wallet=yes])
77 AC_ARG_WITH([miniupnpc],
78   [AS_HELP_STRING([--with-miniupnpc],
79   [enable UPNP (default is yes if libminiupnpc is found)])],
80   [use_upnp=$withval],
81   [use_upnp=auto])
83 AC_ARG_ENABLE([upnp-default],
84   [AS_HELP_STRING([--enable-upnp-default],
85   [if UPNP is enabled, turn it on at startup (default is no)])],
86   [use_upnp_default=$enableval],
87   [use_upnp_default=no])
89 AC_ARG_ENABLE(tests,
90     AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
91     [use_tests=$enableval],
92     [use_tests=yes])
94 AC_ARG_ENABLE(bench,
95     AS_HELP_STRING([--enable-bench],[compile benchmarks (default is yes)]),
96     [use_bench=$enableval],
97     [use_bench=yes])
99 AC_ARG_WITH([comparison-tool],
100     AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
101     [use_comparison_tool=$withval],
102     [use_comparison_tool=no])
104 AC_ARG_ENABLE([comparison-tool-reorg-tests],
105     AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
106     [use_comparison_tool_reorg_tests=$enableval],
107     [use_comparison_tool_reorg_tests=no])
109 AC_ARG_WITH([qrencode],
110   [AS_HELP_STRING([--with-qrencode],
111   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
112   [use_qr=$withval],
113   [use_qr=auto])
115 AC_ARG_ENABLE([hardening],
116   [AS_HELP_STRING([--disable-hardening],
117   [do not attempt to harden the resulting executables (default is to harden)])],
118   [use_hardening=$enableval],
119   [use_hardening=yes])
121 AC_ARG_ENABLE([reduce-exports],
122   [AS_HELP_STRING([--enable-reduce-exports],
123   [attempt to reduce exported symbols in the resulting executables (default is no)])],
124   [use_reduce_exports=$enableval],
125   [use_reduce_exports=no])
127 AC_ARG_ENABLE([ccache],
128   [AS_HELP_STRING([--disable-ccache],
129   [do not use ccache for building (default is to use if found)])],
130   [use_ccache=$enableval],
131   [use_ccache=auto])
133 AC_ARG_ENABLE([lcov],
134   [AS_HELP_STRING([--enable-lcov],
135   [enable lcov testing (default is no)])],
136   [use_lcov=yes],
137   [use_lcov=no])
139 AC_ARG_ENABLE([glibc-back-compat],
140   [AS_HELP_STRING([--enable-glibc-back-compat],
141   [enable backwards compatibility with glibc])],
142   [use_glibc_compat=$enableval],
143   [use_glibc_compat=no])
145 AC_ARG_ENABLE([zmq],
146   [AS_HELP_STRING([--disable-zmq],
147   [disable ZMQ notifications])],
148   [use_zmq=$enableval],
149   [use_zmq=yes])
151 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
153 # Enable debug
154 AC_ARG_ENABLE([debug],
155     [AS_HELP_STRING([--enable-debug],
156                     [use debug compiler flags and macros (default is no)])],
157     [enable_debug=$enableval],
158     [enable_debug=no])
160 if test "x$enable_debug" = xyes; then
161     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
162     if test "x$GCC" = xyes; then
163         CFLAGS="$CFLAGS -g3 -O0"
164     fi
166     if test "x$GXX" = xyes; then
167         CXXFLAGS="$CXXFLAGS -g3 -O0"
168     fi
171 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
172 ##       compatibility with the legacy buildsystem.
174 if test "x$CXXFLAGS_overridden" = "xno"; then
175   CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
177 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
179 AC_ARG_WITH([utils],
180   [AS_HELP_STRING([--with-utils],
181   [build bitcoin-cli bitcoin-tx (default=yes)])],
182   [build_bitcoin_utils=$withval],
183   [build_bitcoin_utils=yes])
185 AC_ARG_WITH([libs],
186   [AS_HELP_STRING([--with-libs],
187   [build libraries (default=yes)])],
188   [build_bitcoin_libs=$withval],
189   [build_bitcoin_libs=yes])
191 AC_ARG_WITH([daemon],
192   [AS_HELP_STRING([--with-daemon],
193   [build bitcoind daemon (default=yes)])],
194   [build_bitcoind=$withval],
195   [build_bitcoind=yes])
197 AC_LANG_PUSH([C++])
199 use_pkgconfig=yes
200 case $host in
201   *mingw*)
203      #pkgconfig does more harm than good with MinGW
204      use_pkgconfig=no
206      TARGET_OS=windows
207      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
208      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
209      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
210      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
211      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
212      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
213      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
214      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
215      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
216      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
217      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
218      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
219      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
220      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
221      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
222      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
223      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
224      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
225      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
227      # -static is interpreted by libtool, where it has a different meaning.
228      # In libtool-speak, it's -all-static.
229      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
231      AC_PATH_PROG([MAKENSIS], [makensis], none)
232      if test x$MAKENSIS = xnone; then
233        AC_MSG_WARN("makensis not found. Cannot create installer.")
234      fi
236      AC_PATH_TOOL(WINDRES, windres, none)
237      if test x$WINDRES = xnone; then
238        AC_MSG_ERROR("windres not found")
239      fi
241      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
242      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
243      if test "x$CXXFLAGS_overridden" = "xno"; then
244        CXXFLAGS="$CXXFLAGS -w"
245      fi
246      case $host in
247        i?86-*) WINDOWS_BITS=32 ;;
248        x86_64-*) WINDOWS_BITS=64 ;;
249        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
250      esac
251      AC_SUBST(WINDOWS_BITS)
253      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
254      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
255      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
256      dnl also overridden to prevent their insertion later.
257      dnl This should only affect dll's.
258      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
259      postdeps_CXX=
261      ;;
262   *darwin*)
263      TARGET_OS=darwin
264      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
265      if  test x$cross_compiling != xyes; then
266        BUILD_OS=darwin
267        AC_CHECK_PROG([PORT],port, port)
268        if test x$PORT = xport; then
269          dnl add default macports paths
270          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
271          LIBS="$LIBS -L/opt/local/lib"
272          if test -d /opt/local/include/db48; then
273            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
274            LIBS="$LIBS -L/opt/local/lib/db48"
275          fi
276        fi
278        AC_CHECK_PROG([BREW],brew, brew)
279        if test x$BREW = xbrew; then
280          dnl These Homebrew packages may be keg-only, meaning that they won't be found
281          dnl in expected paths because they may conflict with system files. Ask
282          dnl Homebrew where each one is located, then adjust paths accordingly.
283          dnl It's safe to add these paths even if the functionality is disabled by
284          dnl the user (--without-wallet or --without-gui for example).
286          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
287          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
288          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
289          if test x$openssl_prefix != x; then
290            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
291            export PKG_CONFIG_PATH
292          fi
293          if test x$bdb_prefix != x; then
294            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
295            LIBS="$LIBS -L$bdb_prefix/lib"
296          fi
297          if test x$qt5_prefix != x; then
298            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
299            export PKG_CONFIG_PATH
300          fi
301        fi
302      else
303        case $build_os in
304          *darwin*)
305            BUILD_OS=darwin
306            ;;
307          *)
308            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
309            AC_PATH_TOOL([OTOOL], [otool], otool)
310            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
312            dnl libtool will try to strip the static lib, which is a problem for
313            dnl cross-builds because strip attempts to call a hard-coded ld,
314            dnl which may not exist in the path. Stripping the .a is not
315            dnl necessary, so just disable it.
316            old_striplib=
317            ;;
318        esac
319      fi
321      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
322      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
323      ;;
324    *linux*)
325      TARGET_OS=linux
326      ;;
327    *)
328      ;;
329 esac
331 if test x$use_comparison_tool != xno; then
332   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
335 if test x$use_comparison_tool_reorg_tests != xno; then
336   if test x$use_comparison_tool = x; then
337     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
338   fi
339   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
340 else
341   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
344 if test x$use_lcov = xyes; then
345   if test x$LCOV = x; then
346     AC_MSG_ERROR("lcov testing requested but lcov not found")
347   fi
348   if test x$GCOV = x; then
349     AC_MSG_ERROR("lcov testing requested but gcov not found")
350   fi
351   if test x$JAVA = x; then
352     AC_MSG_ERROR("lcov testing requested but java not found")
353   fi
354   if test x$GENHTML = x; then
355     AC_MSG_ERROR("lcov testing requested but genhtml not found")
356   fi
357   if test x$use_comparison_tool = x; then
358     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
359   fi
360   LCOV="$LCOV --gcov-tool=$GCOV"
361   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
362     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
365 dnl Check for endianness
366 AC_C_BIGENDIAN
368 dnl Check for pthread compile/link requirements
369 AX_PTHREAD
371 # The following macro will add the necessary defines to bitcoin-config.h, but
372 # they also need to be passed down to any subprojects. Pull the results out of
373 # the cache and add them to CPPFLAGS.
374 AC_SYS_LARGEFILE
375 # detect POSIX or GNU variant of strerror_r
376 AC_FUNC_STRERROR_R
378 if test x$ac_cv_sys_file_offset_bits != x &&
379    test x$ac_cv_sys_file_offset_bits != xno &&
380    test x$ac_cv_sys_file_offset_bits != xunknown; then
381   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
384 if test x$ac_cv_sys_large_files != x &&
385    test x$ac_cv_sys_large_files != xno &&
386    test x$ac_cv_sys_large_files != xunknown; then
387   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
390 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
392 AX_GCC_FUNC_ATTRIBUTE([visibility])
393 AX_GCC_FUNC_ATTRIBUTE([dllexport])
394 AX_GCC_FUNC_ATTRIBUTE([dllimport])
396 if test x$use_glibc_compat != xno; then
398   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
399   # See which one is present here.
400   AC_MSG_CHECKING(__fdelt_chk type)
401   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
402                     #undef _FORTIFY_SOURCE
403                   #endif
404                   #define _FORTIFY_SOURCE 2
405                   #include <sys/select.h>
406      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
407     [ fdelt_type="long unsigned int"],
408     [ fdelt_type="long int"])
409   AC_MSG_RESULT($fdelt_type)
410   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
414 if test x$use_hardening != xno; then
415   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
416   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
418   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
419     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
420       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
421     ])
422     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
423   ])
425   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
426   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
427   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
428   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
430   if test x$TARGET_OS != xwindows; then
431     # All windows code is PIC, forcing it on just adds useless compile warnings
432     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
433     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
434   fi
436   case $host in
437     *mingw*)
438        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
439     ;;
440   esac
442   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
443   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
444   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
445   OBJCXXFLAGS="$CXXFLAGS"
448 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
449 if test x$TARGET_OS = xdarwin; then
450   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
453 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])
454 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
455 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
457 AC_CHECK_DECLS([strnlen])
459 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
460                 [#if HAVE_ENDIAN_H
461                  #include <endian.h>
462                  #elif HAVE_SYS_ENDIAN_H
463                  #include <sys/endian.h>
464                  #endif])
466 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
467                 [#if HAVE_BYTESWAP_H
468                  #include <byteswap.h>
469                  #endif])
471 dnl Check for MSG_NOSIGNAL
472 AC_MSG_CHECKING(for MSG_NOSIGNAL)
473 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
474  [[ int f = MSG_NOSIGNAL; ]])],
475  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
476  [ AC_MSG_RESULT(no)]
479 AC_SEARCH_LIBS([clock_gettime],[rt])
481 AC_MSG_CHECKING([for visibility attribute])
482 AC_LINK_IFELSE([AC_LANG_SOURCE([
483   int foo_def( void ) __attribute__((visibility("default")));
484   int main(){}
485   ])],
486   [
487     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
488     AC_MSG_RESULT(yes)
489   ],
490   [
491     AC_MSG_RESULT(no)
492     if test x$use_reduce_exports = xyes; then
493       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
494     fi
495   ]
498 if test x$use_reduce_exports = xyes; then
499   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
500   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
503 LEVELDB_CPPFLAGS=
504 LIBLEVELDB=
505 LIBMEMENV=
506 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
507 AC_SUBST(LEVELDB_CPPFLAGS)
508 AC_SUBST(LIBLEVELDB)
509 AC_SUBST(LIBMEMENV)
511 if test x$enable_wallet != xno; then
512     dnl Check for libdb_cxx only if wallet enabled
513     BITCOIN_FIND_BDB48
516 dnl Check for libminiupnpc (optional)
517 if test x$use_upnp != xno; then
518   AC_CHECK_HEADERS(
519     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
520     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
521     [have_miniupnpc=no]
522   )
525 BITCOIN_QT_INIT
527 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
528 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
530 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
531     use_boost=no
532 else
533     use_boost=yes
536 if test x$use_boost = xyes; then
538 dnl Check for boost libs
539 AX_BOOST_BASE
540 AX_BOOST_SYSTEM
541 AX_BOOST_FILESYSTEM
542 AX_BOOST_PROGRAM_OPTIONS
543 AX_BOOST_THREAD
544 AX_BOOST_CHRONO
547 if test x$use_reduce_exports = xyes; then
548   AC_MSG_CHECKING([for working boost reduced exports])
549   TEMP_CPPFLAGS="$CPPFLAGS"
550   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
551   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
552       @%:@include <boost/version.hpp>
553     ]], [[
554       #if BOOST_VERSION >= 104900
555       // Everything is okay
556       #else
557       #  error Boost version is too old
558       #endif
559     ]])],[
560       AC_MSG_RESULT(yes)
561     ],[
562     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
563   ])
564   CPPFLAGS="$TEMP_CPPFLAGS"
568 if test x$use_reduce_exports = xyes; then
569     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
570     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
573 if test x$use_tests = xyes; then
575   if test x$HEXDUMP = x; then
576     AC_MSG_ERROR(hexdump is required for tests)
577   fi
580   if test x$use_boost = xyes; then
582   AX_BOOST_UNIT_TEST_FRAMEWORK
584   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
585   AC_MSG_CHECKING([for dynamic linked boost test])
586   TEMP_LIBS="$LIBS"
587   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
588   TEMP_CPPFLAGS="$CPPFLAGS"
589   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
590   AC_LINK_IFELSE([AC_LANG_SOURCE([
591        #define BOOST_TEST_DYN_LINK
592        #define BOOST_TEST_MAIN
593         #include <boost/test/unit_test.hpp>
595        ])],
596     [AC_MSG_RESULT(yes)]
597     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
598     [AC_MSG_RESULT(no)])
599   LIBS="$TEMP_LIBS"
600   CPPFLAGS="$TEMP_CPPFLAGS"
602   fi
605 if test x$use_boost = xyes; then
607 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
609 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
610 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
611 dnl a working version is available, else fall back to sleep. sleep was removed
612 dnl after 1.56.
613 dnl If neither is available, abort.
614 TEMP_LIBS="$LIBS"
615 LIBS="$BOOST_LIBS $LIBS"
616 TEMP_CPPFLAGS="$CPPFLAGS"
617 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
618 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
619   #include <boost/thread/thread.hpp>
620   #include <boost/version.hpp>
621   ]],[[
622   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
623       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
624   #else
625    choke me
626   #endif
627   ]])],
628   [boost_sleep=yes;
629      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
630   [boost_sleep=no])
631 LIBS="$TEMP_LIBS"
632 CPPFLAGS="$TEMP_CPPFLAGS"
634 if test x$boost_sleep != xyes; then
635 TEMP_LIBS="$LIBS"
636 LIBS="$BOOST_LIBS $LIBS"
637 TEMP_CPPFLAGS="$CPPFLAGS"
638 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
639 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
640   #include <boost/version.hpp>
641   #include <boost/thread.hpp>
642   #include <boost/date_time/posix_time/posix_time_types.hpp>
643   ]],[[
644   #if BOOST_VERSION <= 105600
645       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
646   #else
647    choke me
648   #endif
649   ]])],
650   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
651   [boost_sleep=no])
652 LIBS="$TEMP_LIBS"
653 CPPFLAGS="$TEMP_CPPFLAGS"
656 if test x$boost_sleep != xyes; then
657   AC_MSG_ERROR(No working boost sleep implementation found.)
662 if test x$use_pkgconfig = xyes; then
664   if test x"$PKG_CONFIG" = "x"; then
665     AC_MSG_ERROR(pkg-config not found.)
666   fi
668   : #NOP
669   m4_ifdef(
670     [PKG_CHECK_MODULES],
671     [
672       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
673       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
674       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
675       if test x$use_qr != xno; then
676         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
677       fi
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
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   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
698   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
700   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
701   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
703   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
704     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
705     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
706     if test x$TARGET_OS != xwindows; then
707       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
708     fi
709   fi
711   if test "x$use_zmq" = "xyes"; then
712      AC_CHECK_HEADER([zmq.h],
713        [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
714        [AC_MSG_WARN([zmq.h not found, disabling zmq support])
715         use_zmq=no
716         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
717      AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
718        [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
719         use_zmq=no
720         AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
721   else
722     AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
723   fi
725   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
726   if test x$use_qr != xno; then
727     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
728     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
729   fi
732 CXXFLAGS_TEMP="$CXXFLAGS"
733 LIBS_TEMP="$LIBS"
734 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
735 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
736 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
737 CXXFLAGS="$CXXFLAGS_TEMP"
738 LIBS="$LIBS_TEMP"
740 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
742 AC_MSG_CHECKING([whether to build bitcoind])
743 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
744 AC_MSG_RESULT($build_bitcoind)
746 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
747 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
748 AC_MSG_RESULT($build_bitcoin_utils)
750 AC_MSG_CHECKING([whether to build libraries])
751 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
752 if test x$build_bitcoin_libs = xyes; then
753   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
754   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
756 AC_MSG_RESULT($build_bitcoin_libs)
758 AC_LANG_POP
760 if test "x$use_ccache" != "xno"; then
761   AC_MSG_CHECKING(if ccache should be used)
762   if test x$CCACHE = x; then
763     if test "x$use_ccache" = "xyes"; then
764       AC_MSG_ERROR([ccache not found.]);
765     else
766       use_ccache=no
767     fi
768   else
769     use_ccache=yes
770     CC="$ac_cv_path_CCACHE $CC"
771     CXX="$ac_cv_path_CCACHE $CXX"
772   fi
773   AC_MSG_RESULT($use_ccache)
775 if test "x$use_ccache" = "xyes"; then
776     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
779 dnl enable wallet
780 AC_MSG_CHECKING([if wallet should be enabled])
781 if test x$enable_wallet != xno; then
782   AC_MSG_RESULT(yes)
783   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
785 else
786   AC_MSG_RESULT(no)
789 dnl enable upnp support
790 AC_MSG_CHECKING([whether to build with support for UPnP])
791 if test x$have_miniupnpc = xno; then
792   if test x$use_upnp = xyes; then
793      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
794   fi
795   AC_MSG_RESULT(no)
796 else
797   if test x$use_upnp != xno; then
798     AC_MSG_RESULT(yes)
799     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
800     use_upnp=yes
801     upnp_setting=0
802     if test x$use_upnp_default != xno; then
803       use_upnp_default=yes
804       upnp_setting=1
805     fi
806     AC_MSG_RESULT($use_upnp_default)
807     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
808     if test x$TARGET_OS = xwindows; then
809       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
810     fi
811   else
812     AC_MSG_RESULT(no)
813   fi
816 dnl these are only used when qt is enabled
817 if test x$bitcoin_enable_qt != xno; then
818   BUILD_QT=qt
819   dnl enable dbus support
820   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
821   if test x$bitcoin_enable_qt_dbus != xno; then
822     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
823   fi
824   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
826   dnl enable qr support
827   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
828   if test x$have_qrencode = xno; then
829     if test x$use_qr = xyes; then
830      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
831     fi
832     AC_MSG_RESULT(no)
833   else
834     if test x$use_qr != xno; then
835       AC_MSG_RESULT(yes)
836       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
837       use_qr=yes
838     else
839       AC_MSG_RESULT(no)
840     fi
841   fi
843   if test x$XGETTEXT = x; then
844     AC_MSG_WARN("xgettext is required to update qt translations")
845   fi
847   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
848   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
849     AC_MSG_RESULT([yes])
850     BUILD_TEST_QT="test"
851   else
852     AC_MSG_RESULT([no])
853   fi
856 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
858 AC_MSG_CHECKING([whether to build test_bitcoin])
859 if test x$use_tests = xyes; then
860   AC_MSG_RESULT([yes])
861   BUILD_TEST="test"
862 else
863   AC_MSG_RESULT([no])
866 AC_MSG_CHECKING([whether to reduce exports])
867 if test x$use_reduce_exports = xyes; then
868   AC_MSG_RESULT([yes])
869 else
870   AC_MSG_RESULT([no])
873 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
874   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
877 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
878 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
879 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
880 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
881 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
882 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
883 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
884 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
885 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
886 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
887 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
888 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
889 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
891 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
892 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
893 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
894 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
895 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
896 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
897 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
898 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
899 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
900 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
901 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
902 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
904 AC_SUBST(RELDFLAGS)
905 AC_SUBST(LIBTOOL_APP_LDFLAGS)
906 AC_SUBST(USE_UPNP)
907 AC_SUBST(USE_QRCODE)
908 AC_SUBST(BOOST_LIBS)
909 AC_SUBST(TESTDEFS)
910 AC_SUBST(LEVELDB_TARGET_FLAGS)
911 AC_SUBST(BUILD_TEST)
912 AC_SUBST(BUILD_QT)
913 AC_SUBST(BUILD_TEST_QT)
914 AC_SUBST(MINIUPNPC_CPPFLAGS)
915 AC_SUBST(MINIUPNPC_LIBS)
916 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
917 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
918 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
920 dnl boost's m4 checks do something really nasty: they export these vars. As a
921 dnl result, they leak into secp256k1's configure and crazy things happen.
922 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
923 CPPFLAGS_TEMP="$CPPFLAGS"
924 unset CPPFLAGS
925 CPPFLAGS="$CPPFLAGS_TEMP"
927 LDFLAGS_TEMP="$LDFLAGS"
928 unset LDFLAGS
929 LDFLAGS="$LDFLAGS_TEMP"
931 LIBS_TEMP="$LIBS"
932 unset LIBS
933 LIBS="$LIBS_TEMP"
935 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
936 unset PKG_CONFIG_PATH
937 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
939 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
940 unset PKG_CONFIG_LIBDIR
941 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
943 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
944 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
946 AC_OUTPUT
948 dnl Taken from https://wiki.debian.org/RpathIssue
949 case $host in
950    *-*-linux-gnu)
951      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
952      sed < libtool > libtool-2 \
953      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
954      mv libtool-2 libtool
955      chmod 755 libtool
956    ;;
957 esac
959 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
960 case ${OS} in
961    *Windows*)
962      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
963      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
964    ;;
965 esac