Merge pull request #6616
[bitcoinplatinum.git] / configure.ac
blob9a1029e79f3ad0fcdd2ae82ebad1e877b672702b
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_ENABLE([zmq],
141   [AS_HELP_STRING([--disable-zmq],
142   [disable ZMQ notifications])],
143   [use_zmq=$enableval],
144   [use_zmq=yes])
146 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
148 # Enable debug
149 AC_ARG_ENABLE([debug],
150     [AS_HELP_STRING([--enable-debug],
151                     [use debug compiler flags and macros (default is no)])],
152     [enable_debug=$enableval],
153     [enable_debug=no])
155 if test "x$enable_debug" = xyes; then
156     CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
157     if test "x$GCC" = xyes; then
158         CFLAGS="$CFLAGS -g3 -O0"
159     fi
161     if test "x$GXX" = xyes; then
162         CXXFLAGS="$CXXFLAGS -g3 -O0"
163     fi
166 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
167 ##       compatibility with the legacy buildsystem.
169 if test "x$CXXFLAGS_overridden" = "xno"; then
170   CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
172 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
174 AC_ARG_WITH([utils],
175   [AS_HELP_STRING([--with-utils],
176   [build bitcoin-cli bitcoin-tx (default=yes)])],
177   [build_bitcoin_utils=$withval],
178   [build_bitcoin_utils=yes])
180 AC_ARG_WITH([libs],
181   [AS_HELP_STRING([--with-libs],
182   [build libraries (default=yes)])],
183   [build_bitcoin_libs=$withval],
184   [build_bitcoin_libs=yes])
186 AC_ARG_WITH([daemon],
187   [AS_HELP_STRING([--with-daemon],
188   [build bitcoind daemon (default=yes)])],
189   [build_bitcoind=$withval],
190   [build_bitcoind=yes])
192 AC_LANG_PUSH([C++])
194 use_pkgconfig=yes
195 case $host in
196   *mingw*)
198      #pkgconfig does more harm than good with MinGW
199      use_pkgconfig=no
201      TARGET_OS=windows
202      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
203      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
204      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
205      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
206      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
207      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
208      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
209      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
210      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
211      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
212      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
213      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
214      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
215      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
216      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
217      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
218      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
219      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
220      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
222      # -static is interpreted by libtool, where it has a different meaning.
223      # In libtool-speak, it's -all-static.
224      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
226      AC_PATH_PROG([MAKENSIS], [makensis], none)
227      if test x$MAKENSIS = xnone; then
228        AC_MSG_WARN("makensis not found. Cannot create installer.")
229      fi
231      AC_PATH_TOOL(WINDRES, windres, none)
232      if test x$WINDRES = xnone; then
233        AC_MSG_ERROR("windres not found")
234      fi
236      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
237      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
238      if test "x$CXXFLAGS_overridden" = "xno"; then
239        CXXFLAGS="$CXXFLAGS -w"
240      fi
241      case $host in
242        i?86-*) WINDOWS_BITS=32 ;;
243        x86_64-*) WINDOWS_BITS=64 ;;
244        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
245      esac
246      AC_SUBST(WINDOWS_BITS)
248      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
249      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
250      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
251      dnl also overridden to prevent their insertion later.
252      dnl This should only affect dll's.
253      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
254      postdeps_CXX=
256      ;;
257   *darwin*)
258      TARGET_OS=darwin
259      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
260      if  test x$cross_compiling != xyes; then
261        BUILD_OS=darwin
262        AC_CHECK_PROG([PORT],port, port)
263        if test x$PORT = xport; then
264          dnl add default macports paths
265          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
266          LIBS="$LIBS -L/opt/local/lib"
267          if test -d /opt/local/include/db48; then
268            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
269            LIBS="$LIBS -L/opt/local/lib/db48"
270          fi
271        fi
273        AC_CHECK_PROG([BREW],brew, brew)
274        if test x$BREW = xbrew; then
275          dnl These Homebrew packages may be keg-only, meaning that they won't be found
276          dnl in expected paths because they may conflict with system files. Ask
277          dnl Homebrew where each one is located, then adjust paths accordingly.
278          dnl It's safe to add these paths even if the functionality is disabled by
279          dnl the user (--without-wallet or --without-gui for example).
281          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
282          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
283          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
284          if test x$openssl_prefix != x; then
285            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
286            export PKG_CONFIG_PATH
287          fi
288          if test x$bdb_prefix != x; then
289            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
290            LIBS="$LIBS -L$bdb_prefix/lib"
291          fi
292          if test x$qt5_prefix != x; then
293            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
294            export PKG_CONFIG_PATH
295          fi
296        fi
297      else
298        case $build_os in
299          *darwin*)
300            BUILD_OS=darwin
301            ;;
302          *)
303            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
304            AC_PATH_TOOL([OTOOL], [otool], otool)
305            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
307            dnl libtool will try to strip the static lib, which is a problem for
308            dnl cross-builds because strip attempts to call a hard-coded ld,
309            dnl which may not exist in the path. Stripping the .a is not
310            dnl necessary, so just disable it.
311            old_striplib=
312            ;;
313        esac
314      fi
316      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
317      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
318      ;;
319    *linux*)
320      TARGET_OS=linux
321      ;;
322    *)
323      ;;
324 esac
326 if test x$use_comparison_tool != xno; then
327   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
330 if test x$use_comparison_tool_reorg_tests != xno; then
331   if test x$use_comparison_tool = x; then
332     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
333   fi
334   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
335 else
336   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
339 if test x$use_lcov = xyes; then
340   if test x$LCOV = x; then
341     AC_MSG_ERROR("lcov testing requested but lcov not found")
342   fi
343   if test x$GCOV = x; then
344     AC_MSG_ERROR("lcov testing requested but gcov not found")
345   fi
346   if test x$JAVA = x; then
347     AC_MSG_ERROR("lcov testing requested but java not found")
348   fi
349   if test x$GENHTML = x; then
350     AC_MSG_ERROR("lcov testing requested but genhtml not found")
351   fi
352   if test x$use_comparison_tool = x; then
353     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
354   fi
355   LCOV="$LCOV --gcov-tool=$GCOV"
356   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
357     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
360 dnl Check for endianness
361 AC_C_BIGENDIAN
363 dnl Check for pthread compile/link requirements
364 AX_PTHREAD
366 # The following macro will add the necessary defines to bitcoin-config.h, but
367 # they also need to be passed down to any subprojects. Pull the results out of
368 # the cache and add them to CPPFLAGS.
369 AC_SYS_LARGEFILE
370 # detect POSIX or GNU variant of strerror_r
371 AC_FUNC_STRERROR_R
373 if test x$ac_cv_sys_file_offset_bits != x &&
374    test x$ac_cv_sys_file_offset_bits != xno &&
375    test x$ac_cv_sys_file_offset_bits != xunknown; then
376   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
379 if test x$ac_cv_sys_large_files != x &&
380    test x$ac_cv_sys_large_files != xno &&
381    test x$ac_cv_sys_large_files != xunknown; then
382   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
385 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
387 AX_GCC_FUNC_ATTRIBUTE([visibility])
388 AX_GCC_FUNC_ATTRIBUTE([dllexport])
389 AX_GCC_FUNC_ATTRIBUTE([dllimport])
391 if test x$use_glibc_compat != xno; then
393   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
394   # See which one is present here.
395   AC_MSG_CHECKING(__fdelt_chk type)
396   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
397                     #undef _FORTIFY_SOURCE
398                   #endif
399                   #define _FORTIFY_SOURCE 2
400                   #include <sys/select.h>
401      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
402     [ fdelt_type="long unsigned int"],
403     [ fdelt_type="long int"])
404   AC_MSG_RESULT($fdelt_type)
405   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
409 if test x$use_hardening != xno; then
410   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
411   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
413   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
414     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
415       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
416     ])
417     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
418   ])
420   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
421   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
422   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
423   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
425   if test x$TARGET_OS != xwindows; then
426     # All windows code is PIC, forcing it on just adds useless compile warnings
427     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
428     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
429   fi
431   case $host in
432     *mingw*)
433        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
434     ;;
435   esac
437   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
438   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
439   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
440   OBJCXXFLAGS="$CXXFLAGS"
443 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
444 if test x$TARGET_OS = xdarwin; then
445   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
448 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])
449 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
450 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
452 AC_CHECK_DECLS([strnlen])
454 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
455                 [#if HAVE_ENDIAN_H
456                  #include <endian.h>
457                  #elif HAVE_SYS_ENDIAN_H
458                  #include <sys/endian.h>
459                  #endif])
461 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
462                 [#if HAVE_BYTESWAP_H
463                  #include <byteswap.h>
464                  #endif])
466 dnl Check for MSG_NOSIGNAL
467 AC_MSG_CHECKING(for MSG_NOSIGNAL)
468 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
469  [[ int f = MSG_NOSIGNAL; ]])],
470  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
471  [ AC_MSG_RESULT(no)]
474 AC_SEARCH_LIBS([clock_gettime],[rt])
476 AC_MSG_CHECKING([for visibility attribute])
477 AC_LINK_IFELSE([AC_LANG_SOURCE([
478   int foo_def( void ) __attribute__((visibility("default")));
479   int main(){}
480   ])],
481   [
482     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
483     AC_MSG_RESULT(yes)
484   ],
485   [
486     AC_MSG_RESULT(no)
487     if test x$use_reduce_exports = xyes; then
488       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
489     fi
490   ]
493 if test x$use_reduce_exports = xyes; then
494   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
495   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
498 LEVELDB_CPPFLAGS=
499 LIBLEVELDB=
500 LIBMEMENV=
501 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
502 AC_SUBST(LEVELDB_CPPFLAGS)
503 AC_SUBST(LIBLEVELDB)
504 AC_SUBST(LIBMEMENV)
506 if test x$enable_wallet != xno; then
507     dnl Check for libdb_cxx only if wallet enabled
508     BITCOIN_FIND_BDB48
511 dnl Check for libminiupnpc (optional)
512 if test x$use_upnp != xno; then
513   AC_CHECK_HEADERS(
514     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
515     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
516     [have_miniupnpc=no]
517   )
520 BITCOIN_QT_INIT
522 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
523 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
525 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
526     use_boost=no
527 else
528     use_boost=yes
531 if test x$use_boost = xyes; then
533 dnl Check for boost libs
534 AX_BOOST_BASE
535 AX_BOOST_SYSTEM
536 AX_BOOST_FILESYSTEM
537 AX_BOOST_PROGRAM_OPTIONS
538 AX_BOOST_THREAD
539 AX_BOOST_CHRONO
542 if test x$use_reduce_exports = xyes; then
543   AC_MSG_CHECKING([for working boost reduced exports])
544   TEMP_CPPFLAGS="$CPPFLAGS"
545   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
546   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
547       @%:@include <boost/version.hpp>
548     ]], [[
549       #if BOOST_VERSION >= 104900
550       // Everything is okay
551       #else
552       #  error Boost version is too old
553       #endif
554     ]])],[
555       AC_MSG_RESULT(yes)
556     ],[
557     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
558   ])
559   CPPFLAGS="$TEMP_CPPFLAGS"
563 if test x$use_reduce_exports = xyes; then
564     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
565     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
568 if test x$use_tests = xyes; then
570   if test x$HEXDUMP = x; then
571     AC_MSG_ERROR(hexdump is required for tests)
572   fi
575   if test x$use_boost = xyes; then
577   AX_BOOST_UNIT_TEST_FRAMEWORK
579   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
580   AC_MSG_CHECKING([for dynamic linked boost test])
581   TEMP_LIBS="$LIBS"
582   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
583   TEMP_CPPFLAGS="$CPPFLAGS"
584   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
585   AC_LINK_IFELSE([AC_LANG_SOURCE([
586        #define BOOST_TEST_DYN_LINK
587        #define BOOST_TEST_MAIN
588         #include <boost/test/unit_test.hpp>
590        ])],
591     [AC_MSG_RESULT(yes)]
592     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
593     [AC_MSG_RESULT(no)])
594   LIBS="$TEMP_LIBS"
595   CPPFLAGS="$TEMP_CPPFLAGS"
597   fi
600 if test x$use_boost = xyes; then
602 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
604 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
605 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
606 dnl a working version is available, else fall back to sleep. sleep was removed
607 dnl after 1.56.
608 dnl If neither is available, abort.
609 TEMP_LIBS="$LIBS"
610 LIBS="$BOOST_LIBS $LIBS"
611 TEMP_CPPFLAGS="$CPPFLAGS"
612 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
613 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
614   #include <boost/thread/thread.hpp>
615   #include <boost/version.hpp>
616   ]],[[
617   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
618       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
619   #else
620    choke me
621   #endif
622   ]])],
623   [boost_sleep=yes;
624      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
625   [boost_sleep=no])
626 LIBS="$TEMP_LIBS"
627 CPPFLAGS="$TEMP_CPPFLAGS"
629 if test x$boost_sleep != xyes; then
630 TEMP_LIBS="$LIBS"
631 LIBS="$BOOST_LIBS $LIBS"
632 TEMP_CPPFLAGS="$CPPFLAGS"
633 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
634 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
635   #include <boost/version.hpp>
636   #include <boost/thread.hpp>
637   #include <boost/date_time/posix_time/posix_time_types.hpp>
638   ]],[[
639   #if BOOST_VERSION <= 105600
640       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
641   #else
642    choke me
643   #endif
644   ]])],
645   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
646   [boost_sleep=no])
647 LIBS="$TEMP_LIBS"
648 CPPFLAGS="$TEMP_CPPFLAGS"
651 if test x$boost_sleep != xyes; then
652   AC_MSG_ERROR(No working boost sleep implementation found.)
657 if test x$use_pkgconfig = xyes; then
659   if test x"$PKG_CONFIG" = "x"; then
660     AC_MSG_ERROR(pkg-config not found.)
661   fi
663   : #NOP
664   m4_ifdef(
665     [PKG_CHECK_MODULES],
666     [
667       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
668       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
669       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
670       if test x$use_qr != xno; then
671         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
672       fi
673       if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
674         PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
675         if test x$TARGET_OS != xwindows; then
676           PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
677         fi
678       fi
679     ]
680   )
681 else
682   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
683   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
685   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
686   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
688   if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
689     AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
690     AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
691     if test x$TARGET_OS != xwindows; then
692       AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
693     fi
694   fi
696   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
697   if test x$use_qr != xno; then
698     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
699     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
700   fi
703 CXXFLAGS_TEMP="$CXXFLAGS"
704 LIBS_TEMP="$LIBS"
705 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
706 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
707 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
708 CXXFLAGS="$CXXFLAGS_TEMP"
709 LIBS="$LIBS_TEMP"
711 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
713 AC_MSG_CHECKING([whether to build bitcoind])
714 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
715 AC_MSG_RESULT($build_bitcoind)
717 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
718 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
719 AC_MSG_RESULT($build_bitcoin_utils)
721 AC_MSG_CHECKING([whether to build libraries])
722 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
723 if test x$build_bitcoin_libs = xyes; then
724   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
725   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
727 AC_MSG_RESULT($build_bitcoin_libs)
729 AC_LANG_POP
731 if test "x$use_ccache" != "xno"; then
732   AC_MSG_CHECKING(if ccache should be used)
733   if test x$CCACHE = x; then
734     if test "x$use_ccache" = "xyes"; then
735       AC_MSG_ERROR([ccache not found.]);
736     else
737       use_ccache=no
738     fi
739   else
740     use_ccache=yes
741     CC="$ac_cv_path_CCACHE $CC"
742     CXX="$ac_cv_path_CCACHE $CXX"
743   fi
744   AC_MSG_RESULT($use_ccache)
746 if test "x$use_ccache" = "xyes"; then
747     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
750 dnl enable wallet
751 AC_MSG_CHECKING([if wallet should be enabled])
752 if test x$enable_wallet != xno; then
753   AC_MSG_RESULT(yes)
754   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
756 else
757   AC_MSG_RESULT(no)
760 dnl enable upnp support
761 AC_MSG_CHECKING([whether to build with support for UPnP])
762 if test x$have_miniupnpc = xno; then
763   if test x$use_upnp = xyes; then
764      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
765   fi
766   AC_MSG_RESULT(no)
767 else
768   if test x$use_upnp != xno; then
769     AC_MSG_RESULT(yes)
770     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
771     use_upnp=yes
772     upnp_setting=0
773     if test x$use_upnp_default != xno; then
774       use_upnp_default=yes
775       upnp_setting=1
776     fi
777     AC_MSG_RESULT($use_upnp_default)
778     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
779     if test x$TARGET_OS = xwindows; then
780       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
781     fi
782   else
783     AC_MSG_RESULT(no)
784   fi
787 dnl these are only used when qt is enabled
788 if test x$bitcoin_enable_qt != xno; then
789   BUILD_QT=qt
790   dnl enable dbus support
791   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
792   if test x$bitcoin_enable_qt_dbus != xno; then
793     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
794   fi
795   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
797   dnl enable qr support
798   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
799   if test x$have_qrencode = xno; then
800     if test x$use_qr = xyes; then
801      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
802     fi
803     AC_MSG_RESULT(no)
804   else
805     if test x$use_qr != xno; then
806       AC_MSG_RESULT(yes)
807       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
808       use_qr=yes
809     else
810       AC_MSG_RESULT(no)
811     fi
812   fi
814   if test x$XGETTEXT = x; then
815     AC_MSG_WARN("xgettext is required to update qt translations")
816   fi
818   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
819   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
820     AC_MSG_RESULT([yes])
821     BUILD_TEST_QT="test"
822   else
823     AC_MSG_RESULT([no])
824   fi
827 # conditional search for and use libzmq
828 AC_MSG_CHECKING([whether to build ZMQ support])
829 if test "x$use_zmq" = "xyes"; then
830   AC_MSG_RESULT([yes])
831   PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
832     [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
833     [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
834      AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
835      use_zmq=no])
836 else
837   AC_MSG_RESULT([no, --disable-zmq used])
838   AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
841 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
843 AC_MSG_CHECKING([whether to build test_bitcoin])
844 if test x$use_tests = xyes; then
845   AC_MSG_RESULT([yes])
846   BUILD_TEST="test"
847 else
848   AC_MSG_RESULT([no])
851 AC_MSG_CHECKING([whether to reduce exports])
852 if test x$use_reduce_exports = xyes; then
853   AC_MSG_RESULT([yes])
854 else
855   AC_MSG_RESULT([no])
858 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
859   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
862 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
863 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
864 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
865 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
866 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
867 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
868 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
869 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
870 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
871 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
872 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
873 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
875 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
876 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
877 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
878 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
879 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
880 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
881 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
882 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
883 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
884 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
885 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
886 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
888 AC_SUBST(RELDFLAGS)
889 AC_SUBST(LIBTOOL_APP_LDFLAGS)
890 AC_SUBST(USE_UPNP)
891 AC_SUBST(USE_QRCODE)
892 AC_SUBST(BOOST_LIBS)
893 AC_SUBST(TESTDEFS)
894 AC_SUBST(LEVELDB_TARGET_FLAGS)
895 AC_SUBST(BUILD_TEST)
896 AC_SUBST(BUILD_QT)
897 AC_SUBST(BUILD_TEST_QT)
898 AC_SUBST(MINIUPNPC_CPPFLAGS)
899 AC_SUBST(MINIUPNPC_LIBS)
900 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
901 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
902 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
903 chmod +x qa/pull-tester/rpc-tests.py
905 dnl boost's m4 checks do something really nasty: they export these vars. As a
906 dnl result, they leak into secp256k1's configure and crazy things happen.
907 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
908 CPPFLAGS_TEMP="$CPPFLAGS"
909 unset CPPFLAGS
910 CPPFLAGS="$CPPFLAGS_TEMP"
912 LDFLAGS_TEMP="$LDFLAGS"
913 unset LDFLAGS
914 LDFLAGS="$LDFLAGS_TEMP"
916 LIBS_TEMP="$LIBS"
917 unset LIBS
918 LIBS="$LIBS_TEMP"
920 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
921 unset PKG_CONFIG_PATH
922 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
924 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
925 unset PKG_CONFIG_LIBDIR
926 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
928 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
929 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
931 AC_OUTPUT
933 dnl Taken from https://wiki.debian.org/RpathIssue
934 case $host in
935    *-*-linux-gnu)
936      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
937      sed < libtool > libtool-2 \
938      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
939      mv libtool-2 libtool
940      chmod 755 libtool
941    ;;
942 esac
944 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
945 case ${OS} in
946    *Windows*)
947      sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
948      mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
949      chmod +x qa/pull-tester/tests_config.py
950    ;;
951 esac