Record nMinPingUsecTime
[bitcoinplatinum.git] / configure.ac
bloba524bded6fa3e386d958305c971858f7639fbebe
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([--enable-wallet],
73   [enable wallet (default is yes)])],
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([--enable-tests],[compile tests (default is yes)]),
91     [use_tests=$enableval],
92     [use_tests=yes])
94 AC_ARG_WITH([comparison-tool],
95     AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
96     [use_comparison_tool=$withval],
97     [use_comparison_tool=no])
99 AC_ARG_ENABLE([comparison-tool-reorg-tests],
100     AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
101     [use_comparison_tool_reorg_tests=$enableval],
102     [use_comparison_tool_reorg_tests=no])
104 AC_ARG_WITH([qrencode],
105   [AS_HELP_STRING([--with-qrencode],
106   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
107   [use_qr=$withval],
108   [use_qr=auto])
110 AC_ARG_ENABLE([hardening],
111   [AS_HELP_STRING([--enable-hardening],
112   [attempt to harden the resulting executables (default is yes)])],
113   [use_hardening=$enableval],
114   [use_hardening=yes])
116 AC_ARG_ENABLE([reduce-exports],
117   [AS_HELP_STRING([--enable-reduce-exports],
118   [attempt to reduce exported symbols in the resulting executables (default is no)])],
119   [use_reduce_exports=$enableval],
120   [use_reduce_exports=no])
122 AC_ARG_ENABLE([ccache],
123   [AS_HELP_STRING([--enable-ccache],
124   [use ccache for building (default is yes if ccache is found)])],
125   [use_ccache=$enableval],
126   [use_ccache=auto])
128 AC_ARG_ENABLE([lcov],
129   [AS_HELP_STRING([--enable-lcov],
130   [enable lcov testing (default is no)])],
131   [use_lcov=yes],
132   [use_lcov=no])
134 AC_ARG_ENABLE([glibc-back-compat],
135   [AS_HELP_STRING([--enable-glibc-back-compat],
136   [enable backwards compatibility with glibc])],
137   [use_glibc_compat=$enableval],
138   [use_glibc_compat=no])
140 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
142 # Enable debug 
143 AC_ARG_ENABLE([debug],
144     [AS_HELP_STRING([--enable-debug],
145                     [use debug compiler flags and macros (default is no)])],
146     [enable_debug=$enableval],
147     [enable_debug=no])
149 if test "x$enable_debug" = xyes; then
150     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
151     if test "x$GCC" = xyes; then
152         CFLAGS="$CFLAGS -g3 -O0"
153     fi
154     
155     if test "x$GXX" = xyes; then
156         CXXFLAGS="$CXXFLAGS -g3 -O0"
157     fi
158 fi 
160 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
161 ##       compatibility with the legacy buildsystem.
163 if test "x$CXXFLAGS_overridden" = "xno"; then
164   CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
166 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
168 AC_ARG_WITH([utils],
169   [AS_HELP_STRING([--with-utils],
170   [build bitcoin-cli bitcoin-tx (default=yes)])],
171   [build_bitcoin_utils=$withval],
172   [build_bitcoin_utils=yes])
174 AC_ARG_WITH([libs],
175   [AS_HELP_STRING([--with-libs],
176   [build libraries (default=yes)])],
177   [build_bitcoin_libs=$withval],
178   [build_bitcoin_libs=yes])
180 AC_ARG_WITH([daemon],
181   [AS_HELP_STRING([--with-daemon],
182   [build bitcoind daemon (default=yes)])],
183   [build_bitcoind=$withval],
184   [build_bitcoind=yes])
186 AC_LANG_PUSH([C++])
188 use_pkgconfig=yes
189 case $host in
190   *mingw*)
192      #pkgconfig does more harm than good with MinGW
193      use_pkgconfig=no
195      TARGET_OS=windows
196      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
197      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
198      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
199      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
200      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
201      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
202      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
203      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
204      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
205      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
206      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
207      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
208      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
209      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
210      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
211      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
212      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
213      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
214      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
216      # -static is interpreted by libtool, where it has a different meaning.
217      # In libtool-speak, it's -all-static.
218      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
220      AC_PATH_PROG([MAKENSIS], [makensis], none)
221      if test x$MAKENSIS = xnone; then
222        AC_MSG_WARN("makensis not found. Cannot create installer.")
223      fi
225      AC_PATH_TOOL(WINDRES, windres, none)
226      if test x$WINDRES = xnone; then
227        AC_MSG_ERROR("windres not found")
228      fi
230      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
231      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
232      if test "x$CXXFLAGS_overridden" = "xno"; then
233        CXXFLAGS="$CXXFLAGS -w"
234      fi
235      case $host in
236        i?86-*) WINDOWS_BITS=32 ;;
237        x86_64-*) WINDOWS_BITS=64 ;;
238        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
239      esac
240      AC_SUBST(WINDOWS_BITS)
242      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
243      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
244      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
245      dnl also overridden to prevent their insertion later.
246      dnl This should only affect dll's.
247      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
248      postdeps_CXX=
250      ;;
251   *darwin*)
252      TARGET_OS=darwin
253      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
254      if  test x$cross_compiling != xyes; then
255        BUILD_OS=darwin
256        AC_CHECK_PROG([PORT],port, port)
257        if test x$PORT = xport; then
258          dnl add default macports paths
259          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
260          LIBS="$LIBS -L/opt/local/lib"
261          if test -d /opt/local/include/db48; then
262            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
263            LIBS="$LIBS -L/opt/local/lib/db48"
264          fi
265        fi
267        AC_CHECK_PROG([BREW],brew, brew)
268        if test x$BREW = xbrew; then
269          dnl These Homebrew packages may be keg-only, meaning that they won't be found
270          dnl in expected paths because they may conflict with system files. Ask
271          dnl Homebrew where each one is located, then adjust paths accordingly.
272          dnl It's safe to add these paths even if the functionality is disabled by
273          dnl the user (--without-wallet or --without-gui for example).
275          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
276          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
277          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
278          if test x$openssl_prefix != x; then
279            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
280            export PKG_CONFIG_PATH
281          fi
282          if test x$bdb_prefix != x; then
283            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
284            LIBS="$LIBS -L$bdb_prefix/lib"
285          fi
286          if test x$qt5_prefix != x; then
287            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
288            export PKG_CONFIG_PATH
289          fi
290        fi
291      else
292        case $build_os in
293          *darwin*)
294            BUILD_OS=darwin
295            ;;
296          *)
297            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
298            AC_PATH_TOOL([OTOOL], [otool], otool)
299            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
301            dnl libtool will try to strip the static lib, which is a problem for
302            dnl cross-builds because strip attempts to call a hard-coded ld,
303            dnl which may not exist in the path. Stripping the .a is not
304            dnl necessary, so just disable it.
305            old_striplib=
306            ;;
307        esac
308      fi
310      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
311      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
312      ;;
313    *linux*)
314      TARGET_OS=linux
315      ;;
316    *)
317      ;;
318 esac
320 if test x$use_comparison_tool != xno; then
321   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
324 if test x$use_comparison_tool_reorg_tests != xno; then
325   if test x$use_comparison_tool = x; then
326     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
327   fi
328   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
329 else
330   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
333 if test x$use_lcov = xyes; then
334   if test x$LCOV = x; then
335     AC_MSG_ERROR("lcov testing requested but lcov not found")
336   fi
337   if test x$GCOV = x; then
338     AC_MSG_ERROR("lcov testing requested but gcov not found")
339   fi
340   if test x$JAVA = x; then
341     AC_MSG_ERROR("lcov testing requested but java not found")
342   fi
343   if test x$GENHTML = x; then
344     AC_MSG_ERROR("lcov testing requested but genhtml not found")
345   fi
346   if test x$use_comparison_tool = x; then
347     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
348   fi
349   LCOV="$LCOV --gcov-tool=$GCOV"
350   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
351     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
354 dnl Check for endianness
355 AC_C_BIGENDIAN
357 dnl Check for pthread compile/link requirements
358 AX_PTHREAD
360 # The following macro will add the necessary defines to bitcoin-config.h, but
361 # they also need to be passed down to any subprojects. Pull the results out of
362 # the cache and add them to CPPFLAGS.
363 AC_SYS_LARGEFILE
364 # detect POSIX or GNU variant of strerror_r
365 AC_FUNC_STRERROR_R
367 if test x$ac_cv_sys_file_offset_bits != x &&
368    test x$ac_cv_sys_file_offset_bits != xno &&
369    test x$ac_cv_sys_file_offset_bits != xunknown; then
370   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
373 if test x$ac_cv_sys_large_files != x &&
374    test x$ac_cv_sys_large_files != xno &&
375    test x$ac_cv_sys_large_files != xunknown; then
376   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
379 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
381 AX_GCC_FUNC_ATTRIBUTE([visibility])
382 AX_GCC_FUNC_ATTRIBUTE([dllexport])
383 AX_GCC_FUNC_ATTRIBUTE([dllimport])
385 if test x$use_glibc_compat != xno; then
387   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
388   # See which one is present here.
389   AC_MSG_CHECKING(__fdelt_chk type)
390   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
391                     #undef _FORTIFY_SOURCE
392                   #endif
393                   #define _FORTIFY_SOURCE 2
394                   #include <sys/select.h>
395      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
396     [ fdelt_type="long unsigned int"],
397     [ fdelt_type="long int"])
398   AC_MSG_RESULT($fdelt_type)
399   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
403 if test x$use_hardening != xno; then
404   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
405   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
407   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
408     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
409       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
410     ])
411     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
412   ])
414   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
415   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
416   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
417   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
419   if test x$TARGET_OS != xwindows; then
420     # All windows code is PIC, forcing it on just adds useless compile warnings
421     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
422     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
423   fi
425   case $host in
426     *mingw*)
427        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
428     ;;
429   esac
431   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
432   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
433   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
434   OBJCXXFLAGS="$CXXFLAGS"
437 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
438 if test x$TARGET_OS = xdarwin; then
439   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
442 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])
443 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
444 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
446 AC_CHECK_DECLS([strnlen])
448 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
449                 [#if HAVE_ENDIAN_H
450                  #include <endian.h>
451                  #elif HAVE_SYS_ENDIAN_H
452                  #include <sys/endian.h>
453                  #endif])
455 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
456                 [#if HAVE_BYTESWAP_H
457                  #include <byteswap.h>
458                  #endif])
460 dnl Check for MSG_NOSIGNAL
461 AC_MSG_CHECKING(for MSG_NOSIGNAL)
462 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
463  [[ int f = MSG_NOSIGNAL; ]])],
464  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
465  [ AC_MSG_RESULT(no)]
468 AC_SEARCH_LIBS([clock_gettime],[rt])
470 AC_MSG_CHECKING([for visibility attribute])
471 AC_LINK_IFELSE([AC_LANG_SOURCE([
472   int foo_def( void ) __attribute__((visibility("default")));
473   int main(){}
474   ])],
475   [
476     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
477     AC_MSG_RESULT(yes)
478   ],
479   [
480     AC_MSG_RESULT(no)
481     if test x$use_reduce_exports = xyes; then
482       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
483     fi
484   ]
487 if test x$use_reduce_exports = xyes; then
488   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
489   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
492 LEVELDB_CPPFLAGS=
493 LIBLEVELDB=
494 LIBMEMENV=
495 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
496 AC_SUBST(LEVELDB_CPPFLAGS)
497 AC_SUBST(LIBLEVELDB)
498 AC_SUBST(LIBMEMENV)
500 if test x$enable_wallet != xno; then
501     dnl Check for libdb_cxx only if wallet enabled
502     BITCOIN_FIND_BDB48
505 dnl Check for libminiupnpc (optional)
506 if test x$use_upnp != xno; then
507   AC_CHECK_HEADERS(
508     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
509     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
510     [have_miniupnpc=no]
511   )
514 BITCOIN_QT_INIT
516 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
517 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
519 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
520     use_boost=no
521 else
522     use_boost=yes
525 if test x$use_boost = xyes; then
527 dnl Check for boost libs
528 AX_BOOST_BASE
529 AX_BOOST_SYSTEM
530 AX_BOOST_FILESYSTEM
531 AX_BOOST_PROGRAM_OPTIONS
532 AX_BOOST_THREAD
533 AX_BOOST_CHRONO
536 if test x$use_reduce_exports = xyes; then
537   AC_MSG_CHECKING([for working boost reduced exports])
538   TEMP_CPPFLAGS="$CPPFLAGS"
539   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
540   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
541       @%:@include <boost/version.hpp>
542     ]], [[
543       #if BOOST_VERSION >= 104900
544       // Everything is okay
545       #else
546       #  error Boost version is too old
547       #endif
548     ]])],[
549       AC_MSG_RESULT(yes)
550     ],[
551     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
552   ])
553   CPPFLAGS="$TEMP_CPPFLAGS"
557 if test x$use_reduce_exports = xyes; then
558     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
559     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
562 if test x$use_tests = xyes; then
564   if test x$HEXDUMP = x; then
565     AC_MSG_ERROR(hexdump is required for tests)
566   fi
569   if test x$use_boost = xyes; then
571   AX_BOOST_UNIT_TEST_FRAMEWORK
573   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
574   AC_MSG_CHECKING([for dynamic linked boost test])
575   TEMP_LIBS="$LIBS"
576   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
577   TEMP_CPPFLAGS="$CPPFLAGS"
578   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
579   AC_LINK_IFELSE([AC_LANG_SOURCE([
580        #define BOOST_TEST_DYN_LINK
581        #define BOOST_TEST_MAIN
582         #include <boost/test/unit_test.hpp>
584        ])],
585     [AC_MSG_RESULT(yes)]
586     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
587     [AC_MSG_RESULT(no)])
588   LIBS="$TEMP_LIBS"
589   CPPFLAGS="$TEMP_CPPFLAGS"
591   fi
594 if test x$use_boost = xyes; then
596 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
598 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
599 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
600 dnl a working version is available, else fall back to sleep. sleep was removed
601 dnl after 1.56.
602 dnl If neither is available, abort.
603 TEMP_LIBS="$LIBS"
604 LIBS="$BOOST_LIBS $LIBS"
605 TEMP_CPPFLAGS="$CPPFLAGS"
606 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
607 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
608   #include <boost/thread/thread.hpp>
609   #include <boost/version.hpp>
610   ]],[[
611   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
612       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
613   #else
614    choke me
615   #endif
616   ]])],
617   [boost_sleep=yes;
618      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
619   [boost_sleep=no])
620 LIBS="$TEMP_LIBS"
621 CPPFLAGS="$TEMP_CPPFLAGS"
623 if test x$boost_sleep != xyes; then
624 TEMP_LIBS="$LIBS"
625 LIBS="$BOOST_LIBS $LIBS"
626 TEMP_CPPFLAGS="$CPPFLAGS"
627 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
628 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
629   #include <boost/version.hpp>
630   #include <boost/thread.hpp>
631   #include <boost/date_time/posix_time/posix_time_types.hpp>
632   ]],[[
633   #if BOOST_VERSION <= 105600
634       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
635   #else
636    choke me
637   #endif
638   ]])],
639   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
640   [boost_sleep=no])
641 LIBS="$TEMP_LIBS"
642 CPPFLAGS="$TEMP_CPPFLAGS"
645 if test x$boost_sleep != xyes; then
646   AC_MSG_ERROR(No working boost sleep implementation found.)
651 if test x$use_pkgconfig = xyes; then
653   if test x"$PKG_CONFIG" = "x"; then
654     AC_MSG_ERROR(pkg-config not found.)
655   fi
657   : #NOP
658   m4_ifdef(
659     [PKG_CHECK_MODULES],
660     [
661       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
662       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
663       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
664       if test x$use_qr != xno; then
665         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
666       fi
667     ]
668   )
669 else
670   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
671   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
673   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
674   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
676   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
677   if test x$use_qr != xno; then
678     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
679     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
680   fi
683 CFLAGS_TEMP="$CFLAGS"
684 LIBS_TEMP="$LIBS"
685 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
686 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
687 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
689 AC_MSG_CHECKING(for a supported OpenSSL version)
690 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
691   #include <openssl/rand.h>
692   ]],
693   [[RAND_egd(NULL);]])],
694   [AC_MSG_RESULT(yes)],
695   [
696     AC_ARG_WITH([libressl],
697     [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
698     [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
699     [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
700     )]
703 CFLAGS="$CFLAGS_TEMP"
704 LIBS="$LIBS_TEMP"
706 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
708 AC_MSG_CHECKING([whether to build bitcoind])
709 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
710 AC_MSG_RESULT($build_bitcoind)
712 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
713 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
714 AC_MSG_RESULT($build_bitcoin_utils)
716 AC_MSG_CHECKING([whether to build libraries])
717 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
718 if test x$build_bitcoin_libs = xyes; then
719   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
720   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
722 AC_MSG_RESULT($build_bitcoin_libs)
724 AC_LANG_POP
726 if test "x$use_ccache" != "xno"; then
727   AC_MSG_CHECKING(if ccache should be used)
728   if test x$CCACHE = x; then
729     if test "x$use_ccache" = "xyes"; then
730       AC_MSG_ERROR([ccache not found.]);
731     else
732       use_ccache=no
733     fi
734   else
735     use_ccache=yes
736     CC="$ac_cv_path_CCACHE $CC"
737     CXX="$ac_cv_path_CCACHE $CXX"
738   fi
739   AC_MSG_RESULT($use_ccache)
741 if test "x$use_ccache" = "xyes"; then
742     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
745 dnl enable wallet
746 AC_MSG_CHECKING([if wallet should be enabled])
747 if test x$enable_wallet != xno; then
748   AC_MSG_RESULT(yes)
749   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
751 else
752   AC_MSG_RESULT(no)
755 dnl enable upnp support
756 AC_MSG_CHECKING([whether to build with support for UPnP])
757 if test x$have_miniupnpc = xno; then
758   if test x$use_upnp = xyes; then
759      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
760   fi
761   AC_MSG_RESULT(no)
762 else
763   if test x$use_upnp != xno; then
764     AC_MSG_RESULT(yes)
765     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
766     use_upnp=yes
767     upnp_setting=0
768     if test x$use_upnp_default != xno; then
769       use_upnp_default=yes
770       upnp_setting=1
771     fi
772     AC_MSG_RESULT($use_upnp_default)
773     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
774     if test x$TARGET_OS = xwindows; then
775       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
776     fi
777   else
778     AC_MSG_RESULT(no)
779   fi
782 dnl these are only used when qt is enabled
783 if test x$bitcoin_enable_qt != xno; then
784   BUILD_QT=qt
785   dnl enable dbus support
786   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
787   if test x$bitcoin_enable_qt_dbus != xno; then
788     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
789   fi
790   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
792   dnl enable qr support
793   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
794   if test x$have_qrencode = xno; then
795     if test x$use_qr = xyes; then
796      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
797     fi
798     AC_MSG_RESULT(no)
799   else
800     if test x$use_qr != xno; then
801       AC_MSG_RESULT(yes)
802       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
803       use_qr=yes
804     else
805       AC_MSG_RESULT(no)
806     fi
807   fi
809   if test x$XGETTEXT = x; then
810     AC_MSG_WARN("xgettext is required to update qt translations")
811   fi
813   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
814   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
815     AC_MSG_RESULT([yes])
816     BUILD_TEST_QT="test"
817   else
818     AC_MSG_RESULT([no])
819   fi
822 AC_MSG_CHECKING([whether to build test_bitcoin])
823 if test x$use_tests = xyes; then
824   AC_MSG_RESULT([yes])
825   BUILD_TEST="test"
826 else
827   AC_MSG_RESULT([no])
830 AC_MSG_CHECKING([whether to reduce exports])
831 if test x$use_reduce_exports = xyes; then
832   AC_MSG_RESULT([yes])
833 else
834   AC_MSG_RESULT([no])
837 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
838   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
841 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
842 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
843 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
844 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
845 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
846 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
847 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
848 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
849 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
850 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
851 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
852 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
854 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
855 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
856 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
857 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
858 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
859 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
860 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
861 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
862 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
863 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
864 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
865 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
867 AC_SUBST(RELDFLAGS)
868 AC_SUBST(LIBTOOL_APP_LDFLAGS)
869 AC_SUBST(USE_UPNP)
870 AC_SUBST(USE_QRCODE)
871 AC_SUBST(BOOST_LIBS)
872 AC_SUBST(TESTDEFS)
873 AC_SUBST(LEVELDB_TARGET_FLAGS)
874 AC_SUBST(BUILD_TEST)
875 AC_SUBST(BUILD_QT)
876 AC_SUBST(BUILD_TEST_QT)
877 AC_SUBST(MINIUPNPC_CPPFLAGS)
878 AC_SUBST(MINIUPNPC_LIBS)
879 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
880 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
881 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
883 dnl boost's m4 checks do something really nasty: they export these vars. As a
884 dnl result, they leak into secp256k1's configure and crazy things happen.
885 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
886 CPPFLAGS_TEMP="$CPPFLAGS"
887 unset CPPFLAGS
888 CPPFLAGS="$CPPFLAGS_TEMP"
890 LDFLAGS_TEMP="$LDFLAGS"
891 unset LDFLAGS
892 LDFLAGS="$LDFLAGS_TEMP"
894 LIBS_TEMP="$LIBS"
895 unset LIBS
896 LIBS="$LIBS_TEMP"
898 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
899 unset PKG_CONFIG_PATH
900 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
902 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
903 unset PKG_CONFIG_LIBDIR
904 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
906 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
907 AC_CONFIG_SUBDIRS([src/secp256k1])
909 AC_OUTPUT
911 dnl Taken from https://wiki.debian.org/RpathIssue
912 case $host in
913    *-*-linux-gnu)
914      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
915      sed < libtool > libtool-2 \
916      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
917      mv libtool-2 libtool
918      chmod 755 libtool
919    ;;
920 esac