Depends: Add ZeroMQ package
[bitcoinplatinum.git] / configure.ac
blob07ee28f84e69ccd5cc41afc9aaeb7360dbb81bb8
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       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
668         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
669         if test x$TARGET_OS != xwindows; then
670           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
671         fi
672       fi
673     ]
674   )
675 else
676   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
677   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
679   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
680   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
682   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
683     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
684     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
685     if test x$TARGET_OS != xwindows; then
686       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
687     fi
688   fi
690   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
691   if test x$use_qr != xno; then
692     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
693     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
694   fi
697 CFLAGS_TEMP="$CFLAGS"
698 LIBS_TEMP="$LIBS"
699 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
700 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
701 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
703 AC_MSG_CHECKING(for a supported OpenSSL version)
704 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
705   #include <openssl/rand.h>
706   ]],
707   [[RAND_egd(NULL);]])],
708   [AC_MSG_RESULT(yes)],
709   [
710     AC_ARG_WITH([libressl],
711     [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
712     [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
713     [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
714     )]
717 CFLAGS="$CFLAGS_TEMP"
718 LIBS="$LIBS_TEMP"
720 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
722 AC_MSG_CHECKING([whether to build bitcoind])
723 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
724 AC_MSG_RESULT($build_bitcoind)
726 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
727 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
728 AC_MSG_RESULT($build_bitcoin_utils)
730 AC_MSG_CHECKING([whether to build libraries])
731 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
732 if test x$build_bitcoin_libs = xyes; then
733   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
734   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
736 AC_MSG_RESULT($build_bitcoin_libs)
738 AC_LANG_POP
740 if test "x$use_ccache" != "xno"; then
741   AC_MSG_CHECKING(if ccache should be used)
742   if test x$CCACHE = x; then
743     if test "x$use_ccache" = "xyes"; then
744       AC_MSG_ERROR([ccache not found.]);
745     else
746       use_ccache=no
747     fi
748   else
749     use_ccache=yes
750     CC="$ac_cv_path_CCACHE $CC"
751     CXX="$ac_cv_path_CCACHE $CXX"
752   fi
753   AC_MSG_RESULT($use_ccache)
755 if test "x$use_ccache" = "xyes"; then
756     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
759 dnl enable wallet
760 AC_MSG_CHECKING([if wallet should be enabled])
761 if test x$enable_wallet != xno; then
762   AC_MSG_RESULT(yes)
763   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
765 else
766   AC_MSG_RESULT(no)
769 dnl enable upnp support
770 AC_MSG_CHECKING([whether to build with support for UPnP])
771 if test x$have_miniupnpc = xno; then
772   if test x$use_upnp = xyes; then
773      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
774   fi
775   AC_MSG_RESULT(no)
776 else
777   if test x$use_upnp != xno; then
778     AC_MSG_RESULT(yes)
779     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
780     use_upnp=yes
781     upnp_setting=0
782     if test x$use_upnp_default != xno; then
783       use_upnp_default=yes
784       upnp_setting=1
785     fi
786     AC_MSG_RESULT($use_upnp_default)
787     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
788     if test x$TARGET_OS = xwindows; then
789       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
790     fi
791   else
792     AC_MSG_RESULT(no)
793   fi
796 dnl these are only used when qt is enabled
797 if test x$bitcoin_enable_qt != xno; then
798   BUILD_QT=qt
799   dnl enable dbus support
800   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
801   if test x$bitcoin_enable_qt_dbus != xno; then
802     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
803   fi
804   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
806   dnl enable qr support
807   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
808   if test x$have_qrencode = xno; then
809     if test x$use_qr = xyes; then
810      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
811     fi
812     AC_MSG_RESULT(no)
813   else
814     if test x$use_qr != xno; then
815       AC_MSG_RESULT(yes)
816       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
817       use_qr=yes
818     else
819       AC_MSG_RESULT(no)
820     fi
821   fi
823   if test x$XGETTEXT = x; then
824     AC_MSG_WARN("xgettext is required to update qt translations")
825   fi
827   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
828   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
829     AC_MSG_RESULT([yes])
830     BUILD_TEST_QT="test"
831   else
832     AC_MSG_RESULT([no])
833   fi
836 AC_MSG_CHECKING([whether to build test_bitcoin])
837 if test x$use_tests = xyes; then
838   AC_MSG_RESULT([yes])
839   BUILD_TEST="test"
840 else
841   AC_MSG_RESULT([no])
844 AC_MSG_CHECKING([whether to reduce exports])
845 if test x$use_reduce_exports = xyes; then
846   AC_MSG_RESULT([yes])
847 else
848   AC_MSG_RESULT([no])
851 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
852   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
855 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
856 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
857 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
858 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
859 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
860 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
861 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
862 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
863 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
864 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
865 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
866 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
868 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
869 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
870 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
871 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
872 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
873 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
874 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
875 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
876 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
877 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
878 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
879 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
881 AC_SUBST(RELDFLAGS)
882 AC_SUBST(LIBTOOL_APP_LDFLAGS)
883 AC_SUBST(USE_UPNP)
884 AC_SUBST(USE_QRCODE)
885 AC_SUBST(BOOST_LIBS)
886 AC_SUBST(TESTDEFS)
887 AC_SUBST(LEVELDB_TARGET_FLAGS)
888 AC_SUBST(BUILD_TEST)
889 AC_SUBST(BUILD_QT)
890 AC_SUBST(BUILD_TEST_QT)
891 AC_SUBST(MINIUPNPC_CPPFLAGS)
892 AC_SUBST(MINIUPNPC_LIBS)
893 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
894 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
895 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
897 dnl boost's m4 checks do something really nasty: they export these vars. As a
898 dnl result, they leak into secp256k1's configure and crazy things happen.
899 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
900 CPPFLAGS_TEMP="$CPPFLAGS"
901 unset CPPFLAGS
902 CPPFLAGS="$CPPFLAGS_TEMP"
904 LDFLAGS_TEMP="$LDFLAGS"
905 unset LDFLAGS
906 LDFLAGS="$LDFLAGS_TEMP"
908 LIBS_TEMP="$LIBS"
909 unset LIBS
910 LIBS="$LIBS_TEMP"
912 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
913 unset PKG_CONFIG_PATH
914 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
916 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
917 unset PKG_CONFIG_LIBDIR
918 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
920 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
921 AC_CONFIG_SUBDIRS([src/secp256k1])
923 AC_OUTPUT
925 dnl Taken from https://wiki.debian.org/RpathIssue
926 case $host in
927    *-*-linux-gnu)
928      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
929      sed < libtool > libtool-2 \
930      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
931      mv libtool-2 libtool
932      chmod 755 libtool
933    ;;
934 esac