Update comments in txmempool to be doxygen compatible
[bitcoinplatinum.git] / configure.ac
blob837810401ab960835729e1c76b1847a12675cefe
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, 9)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2014)
9 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitcoin.org],[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([disable-shared])
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 # This m4 will only be used if a system copy cannot be found. This is helpful
68 # on systems where autotools are installed but the pkg-config macros are not in
69 # a default location. It is currently used for building on OSX where autotools
70 # are preinstalled but pkg-config comes from macports or homebrew. It should
71 # probably be removed when building on <= 10.6 is no longer supported.
72 m4_include([pkg.m4])
74 dnl pkg-config check.
75 PKG_PROG_PKG_CONFIG
77 # Enable wallet
78 AC_ARG_ENABLE([wallet],
79   [AS_HELP_STRING([--enable-wallet],
80   [enable wallet (default is yes)])],
81   [enable_wallet=$enableval],
82   [enable_wallet=yes])
84 AC_ARG_WITH([miniupnpc],
85   [AS_HELP_STRING([--with-miniupnpc],
86   [enable UPNP (default is yes if libminiupnpc is found)])],
87   [use_upnp=$withval],
88   [use_upnp=auto])
90 AC_ARG_ENABLE([upnp-default],
91   [AS_HELP_STRING([--enable-upnp-default],
92   [if UPNP is enabled, turn it on at startup (default is no)])],
93   [use_upnp_default=$enableval],
94   [use_upnp_default=no])
96 AC_ARG_ENABLE(tests,
97     AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
98     [use_tests=$enableval],
99     [use_tests=yes])
101 AC_ARG_WITH([comparison-tool],
102     AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
103     [use_comparison_tool=$withval],
104     [use_comparison_tool=no])
106 AC_ARG_ENABLE([comparison-tool-reorg-tests],
107     AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
108     [use_comparison_tool_reorg_tests=$enableval],
109     [use_comparison_tool_reorg_tests=no])
111 AC_ARG_WITH([qrencode],
112   [AS_HELP_STRING([--with-qrencode],
113   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
114   [use_qr=$withval],
115   [use_qr=auto])
117 AC_ARG_ENABLE([hardening],
118   [AS_HELP_STRING([--enable-hardening],
119   [attempt to harden the resulting executables (default is yes)])],
120   [use_hardening=$enableval],
121   [use_hardening=yes])
123 AC_ARG_ENABLE([reduce-exports],
124   [AS_HELP_STRING([--enable-reduce-exports],
125   [attempt to reduce exported symbols in the resulting executables (default is yes)])],
126   [use_reduce_exports=$enableval],
127   [use_reduce_exports=auto])
129 AC_ARG_ENABLE([ccache],
130   [AS_HELP_STRING([--enable-ccache],
131   [use ccache for building (default is yes if ccache is found)])],
132   [use_ccache=$enableval],
133   [use_ccache=auto])
135 AC_ARG_ENABLE([lcov],
136   [AS_HELP_STRING([--enable-lcov],
137   [enable lcov testing (default is no)])],
138   [use_lcov=yes],
139   [use_lcov=no])
141 AC_ARG_ENABLE([glibc-back-compat],
142   [AS_HELP_STRING([--enable-glibc-back-compat],
143   [enable backwards compatibility with glibc and libstdc++])],
144   [use_glibc_compat=$enableval],
145   [use_glibc_compat=no])
147 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
149 # Enable debug 
150 AC_ARG_ENABLE([debug],
151     [AS_HELP_STRING([--enable-debug],
152                     [use debug compiler flags and macros (default is no)])],
153     [enable_debug=$enableval],
154     [enable_debug=no])
156 if test "x$enable_debug" = xyes; then
157     if test "x$GCC" = xyes; then
158         CFLAGS="-g3 -O0 -DDEBUG"
159     fi
160     
161     if test "x$GXX" = xyes; then
162         CXXFLAGS="-g3 -O0 -DDEBUG"
163     fi
164 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 -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
174 AC_LANG_PUSH([C++])
176 use_pkgconfig=yes
177 case $host in
178   *mingw*)
180      #pkgconfig does more harm than good with MinGW
181      use_pkgconfig=no
183      TARGET_OS=windows
184      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
185      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
186      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
187      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
188      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
189      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
190      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
191      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
192      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
193      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
194      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
195      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
196      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
197      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
198      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
199      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
200      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
201      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
202      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
204      AX_CHECK_LINK_FLAG([[-static-libgcc]],[LDFLAGS="$LDFLAGS -static-libgcc"])
205      AX_CHECK_LINK_FLAG([[-static-libstdc++]],[LDFLAGS="$LDFLAGS -static-libstdc++"])
207      # -static is interpreted by libtool, where it has a different meaning.
208      # In libtool-speak, it's -all-static.
209      AX_CHECK_LINK_FLAG([[-static]],[LDFLAGS="$LDFLAGS -static"; LIBTOOL_LDFLAGS="$LIBTOOL_LDFLAGS -all-static"])
211      AC_PATH_PROG([MAKENSIS], [makensis], none)
212      if test x$MAKENSIS = xnone; then
213        AC_MSG_WARN("makensis not found. Cannot create installer.")
214      fi
216      AC_PATH_TOOL(WINDRES, windres, none)
217      if test x$WINDRES = xnone; then
218        AC_MSG_ERROR("windres not found")
219      fi
221      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
222      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
223      if test "x$CXXFLAGS_overridden" = "xno"; then
224        CXXFLAGS="$CXXFLAGS -w"
225      fi
226      case $host in
227        i?86-*) WINDOWS_BITS=32 ;;
228        x86_64-*) WINDOWS_BITS=64 ;;
229        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
230      esac
231      AC_SUBST(WINDOWS_BITS)
232      ;;
233   *darwin*)
234      TARGET_OS=darwin
235      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
236      if  test x$cross_compiling != xyes; then
237        BUILD_OS=darwin
238        AC_CHECK_PROG([PORT],port, port)
239        if test x$PORT = xport; then
240          dnl add default macports paths
241          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include -I/opt/local/include/db48"
242          LIBS="$LIBS -L/opt/local/lib -L/opt/local/lib/db48"
243        fi
245        AC_CHECK_PROG([BREW],brew, brew)
246        if test x$BREW = xbrew; then
247          dnl These Homebrew packages may be keg-only, meaning that they won't be found
248          dnl in expected paths because they may conflict with system files. Ask
249          dnl Homebrew where each one is located, then adjust paths accordingly.
250          dnl It's safe to add these paths even if the functionality is disabled by
251          dnl the user (--without-wallet or --without-gui for example).
253          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
254          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
255          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
256          if test x$openssl_prefix != x; then
257            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
258            export PKG_CONFIG_PATH
259          fi
260          if test x$bdb_prefix != x; then
261            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
262            LIBS="$LIBS -L$bdb_prefix/lib"
263          fi
264          if test x$qt5_prefix != x; then
265            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
266            export PKG_CONFIG_PATH
267          fi
268        fi
269      else
270        case $build_os in
271          *darwin*)
272            BUILD_OS=darwin
273            ;;
274          *)
275            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
276            AC_PATH_TOOL([OTOOL], [otool], otool)
277            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
278            ;;
279        esac
280      fi
282      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
283      ;;
284    *linux*)
285      TARGET_OS=linux
286      ;;
287    *)
288      ;;
289 esac
291 if test x$use_comparison_tool != xno; then
292   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
295 if test x$use_comparison_tool_reorg_tests != xno; then
296   if test x$use_comparison_tool = x; then
297     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
298   fi
299   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
300 else
301   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
304 if test x$use_lcov = xyes; then
305   if test x$LCOV = x; then
306     AC_MSG_ERROR("lcov testing requested but lcov not found")
307   fi
308   if test x$GCOV = x; then
309     AC_MSG_ERROR("lcov testing requested but gcov not found")
310   fi
311   if test x$JAVA = x; then
312     AC_MSG_ERROR("lcov testing requested but java not found")
313   fi
314   if test x$GENHTML = x; then
315     AC_MSG_ERROR("lcov testing requested but genhtml not found")
316   fi
317   if test x$use_comparison_tool = x; then
318     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
319   fi
320   LCOV="$LCOV --gcov-tool=$GCOV"
321   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
322     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
325 dnl Require little endian
326 AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")])
328 dnl Check for pthread compile/link requirements
329 AX_PTHREAD
331 # The following macro will add the necessary defines to bitcoin-config.h, but
332 # they also need to be passed down to any subprojects. Pull the results out of
333 # the cache and add them to CPPFLAGS.
334 AC_SYS_LARGEFILE
335 # detect POSIX or GNU variant of strerror_r
336 AC_FUNC_STRERROR_R
338 if test x$ac_cv_sys_file_offset_bits != x &&
339    test x$ac_cv_sys_file_offset_bits != xno &&
340    test x$ac_cv_sys_file_offset_bits != xunknown; then
341   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
344 if test x$ac_cv_sys_large_files != x &&
345    test x$ac_cv_sys_large_files != xno &&
346    test x$ac_cv_sys_large_files != xunknown; then
347   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
350 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
352 if test x$use_glibc_compat != xno; then
354   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
355   # See which one is present here.
356   AC_MSG_CHECKING(__fdelt_chk type)
357   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
358                     #undef _FORTIFY_SOURCE
359                   #endif
360                   #define _FORTIFY_SOURCE 2
361                   #include <sys/select.h>
362      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
363     [ fdelt_type="long unsigned int"],
364     [ fdelt_type="long int"])
365   AC_MSG_RESULT($fdelt_type)
366   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
370 if test x$use_hardening != xno; then
371   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
372   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
374   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
375     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
376       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
377     ])
378     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
379   ])
381   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
382   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
383   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
384   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
386   if test x$TARGET_OS != xwindows; then
387     # All windows code is PIC, forcing it on just adds useless compile warnings
388     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
389     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
390   fi
392   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
393   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
394   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
395   OBJCXXFLAGS="$CXXFLAGS"
398 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
399 if test x$TARGET_OS = xdarwin; then
400   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
403 AC_CHECK_HEADERS([endian.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
404 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
405 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
407 AC_CHECK_DECLS([le32toh, le64toh, htole32, htole64, be32toh, be64toh, htobe32, htobe64],,,
408                 [#if HAVE_ENDIAN_H
409                  #include <endian.h>
410                  #endif])
412 dnl Check for MSG_NOSIGNAL
413 AC_MSG_CHECKING(for MSG_NOSIGNAL)
414 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
415  [[ int f = MSG_NOSIGNAL; ]])],
416  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
417  [ AC_MSG_RESULT(no)]
420 AC_SEARCH_LIBS([clock_gettime],[rt])
422 AC_MSG_CHECKING([for visibility attribute])
423 AC_LINK_IFELSE([AC_LANG_SOURCE([
424   int foo_def( void ) __attribute__((visibility("default")));
425   int main(){}
426   ])],
427   [
428     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
429     AC_MSG_RESULT(yes)
430   ],
431   [
432     AC_MSG_RESULT(no)
433     if test x$use_reduce_exports = xyes; then
434       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduced-exports.])
435     fi
436       AC_MSG_WARN([Cannot find a working visibility attribute. Disabling reduced exports.])
437       use_reduce_exports=no
438   ]
441 if test x$use_reduce_exports != xno; then
442   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
443   [
444     if test x$use_reduce_exports = xyes; then
445       AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduced-exports.])
446     fi
447     AC_MSG_WARN([Cannot set default symbol visibility. Disabling reduced exports.])
448     use_reduce_exports=no
449   ])
452 LEVELDB_CPPFLAGS=
453 LIBLEVELDB=
454 LIBMEMENV=
455 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
456 AC_SUBST(LEVELDB_CPPFLAGS)
457 AC_SUBST(LIBLEVELDB)
458 AC_SUBST(LIBMEMENV)
460 if test x$enable_wallet != xno; then
461     dnl Check for libdb_cxx only if wallet enabled
462     BITCOIN_FIND_BDB48
465 dnl Check for libminiupnpc (optional)
466 if test x$use_upnp != xno; then
467   AC_CHECK_HEADERS(
468     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
469     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
470     [have_miniupnpc=no]
471   )
474 dnl Check for boost libs
475 AX_BOOST_BASE
476 AX_BOOST_SYSTEM
477 AX_BOOST_FILESYSTEM
478 AX_BOOST_PROGRAM_OPTIONS
479 AX_BOOST_THREAD
480 AX_BOOST_CHRONO
483 if test x$use_reduce_exports != xno; then
484   AC_MSG_CHECKING([for working boost reduced exports])
485   TEMP_CPPFLAGS="$CPPFLAGS"
486   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
487   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
488       @%:@include <boost/version.hpp>
489     ]], [[
490       #if BOOST_VERSION >= 104900
491       // Everything is okay
492       #else
493       #  error Boost version is too old
494       #endif
495     ]])],[
496       AC_MSG_RESULT(yes)
497     ],[:
498     if test x$use_reduce_exports = xauto; then
499       use_reduce_exports=no
500     else
501       if test x$use_reduce_exports = xyes; then
502         AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduced-exports.])
503       fi
504     fi
505     AC_MSG_RESULT(no)
506     AC_MSG_WARN([boost versions < 1.49 are known to have symbol visibility issues. Disabling reduced exports.])
507   ])
508   CPPFLAGS="$TEMP_CPPFLAGS"
511 if test x$use_reduce_exports != xno; then
512     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
513     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
516 if test x$use_tests = xyes; then
518   if test x$HEXDUMP = x; then
519     AC_MSG_ERROR(hexdump is required for tests)
520   fi
523   AX_BOOST_UNIT_TEST_FRAMEWORK
525   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
526   AC_MSG_CHECKING([for dynamic linked boost test])
527   TEMP_LIBS="$LIBS"
528   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
529   TEMP_CPPFLAGS="$CPPFLAGS"
530   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
531   AC_LINK_IFELSE([AC_LANG_SOURCE([
532        #define BOOST_TEST_DYN_LINK
533        #define BOOST_TEST_MAIN
534         #include <boost/test/unit_test.hpp>
536        ])],
537     [AC_MSG_RESULT(yes)]
538     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
539     [AC_MSG_RESULT(no)])
540   LIBS="$TEMP_LIBS"
541   CPPFLAGS="$TEMP_CPPFLAGS"
544 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
546 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
547 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
548 dnl a working version is available, else fall back to sleep. sleep was removed
549 dnl after 1.56.
550 dnl If neither is available, abort.
551 dnl If sleep_for is used, boost_chrono becomes a requirement.
552 if test x$ax_cv_boost_chrono = xyes; then
553 TEMP_LIBS="$LIBS"
554 LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
555 TEMP_CPPFLAGS="$CPPFLAGS"
556 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
557 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
558   #include <boost/thread/thread.hpp>
559   #include <boost/version.hpp>
560   ]],[[
561   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
562       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
563   #else
564    choke me
565   #endif
566   ]])],
567   [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
568      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
569   [boost_sleep=no])
570 LIBS="$TEMP_LIBS"
571 CPPFLAGS="$TEMP_CPPFLAGS"
574 if test x$boost_sleep != xyes; then
575 TEMP_LIBS="$LIBS"
576 LIBS="$BOOST_LIBS $LIBS"
577 TEMP_CPPFLAGS="$CPPFLAGS"
578 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
579 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
580   #include <boost/version.hpp>
581   #include <boost/thread.hpp>
582   #include <boost/date_time/posix_time/posix_time_types.hpp>
583   ]],[[
584   #if BOOST_VERSION <= 105600
585       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
586   #else
587    choke me
588   #endif
589   ]])],
590   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
591   [boost_sleep=no])
592 LIBS="$TEMP_LIBS"
593 CPPFLAGS="$TEMP_CPPFLAGS"
596 if test x$boost_sleep != xyes; then
597   AC_MSG_ERROR(No working boost sleep implementation found.)
600 AC_ARG_WITH([utils],
601   [AS_HELP_STRING([--with-utils],
602   [build bitcoin-cli bitcoin-tx (default=yes)])],
603   [build_bitcoin_utils=$withval],
604   [build_bitcoin_utils=yes])
606 AC_ARG_WITH([daemon],
607   [AS_HELP_STRING([--with-daemon],
608   [build bitcoind daemon (default=yes)])],
609   [build_bitcoind=$withval],
610   [build_bitcoind=yes])
612 BITCOIN_QT_INIT
614 if test x$use_pkgconfig = xyes; then
616   if test x"$PKG_CONFIG" = "x"; then
617     AC_MSG_ERROR(pkg-config not found.)
618   fi
620   : #NOP
621   m4_ifdef(
622     [PKG_CHECK_MODULES],
623     [
624       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
625       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
626       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
627       if test x$use_qr != xno; then
628         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
629       fi
630     ]
631   )
632 else
633   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
634   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
636   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
637   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
639   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
640   if test x$use_qr != xno; then
641     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
642     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
643   fi
646 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
648 AC_MSG_CHECKING([whether to build bitcoind])
649 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
650 AC_MSG_RESULT($build_bitcoind)
652 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
653 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
654 AC_MSG_RESULT($build_bitcoin_utils)
656 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
657 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
659 AC_LANG_POP
661 if test "x$use_ccache" != "xno"; then
662   AC_MSG_CHECKING(if ccache should be used)
663   if test x$CCACHE = x; then
664     if test "x$use_ccache" = "xyes"; then
665       AC_MSG_ERROR([ccache not found.]);
666     else
667       use_ccache=no
668     fi
669   else
670     use_ccache=yes
671     CC="$ac_cv_path_CCACHE $CC"
672     CXX="$ac_cv_path_CCACHE $CXX"
673   fi
674   AC_MSG_RESULT($use_ccache)
676 if test "x$use_ccache" = "xyes"; then
677     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
680 dnl enable wallet
681 AC_MSG_CHECKING([if wallet should be enabled])
682 if test x$enable_wallet != xno; then
683   AC_MSG_RESULT(yes)
684   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
686 else
687   AC_MSG_RESULT(no)
690 dnl enable upnp support
691 AC_MSG_CHECKING([whether to build with support for UPnP])
692 if test x$have_miniupnpc = xno; then
693   if test x$use_upnp = xyes; then
694      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
695   fi
696   AC_MSG_RESULT(no)
697 else
698   if test x$use_upnp != xno; then
699     AC_MSG_RESULT(yes)
700     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
701     use_upnp=yes
702     upnp_setting=0
703     if test x$use_upnp_default != xno; then
704       use_upnp_default=yes
705       upnp_setting=1
706     fi
707     AC_MSG_RESULT($use_upnp_default)
708     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
709     if test x$TARGET_OS = xwindows; then
710       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
711     fi
712   else
713     AC_MSG_RESULT(no)
714   fi
717 dnl these are only used when qt is enabled
718 if test x$bitcoin_enable_qt != xno; then
719   BUILD_QT=qt
720   dnl enable dbus support
721   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
722   if test x$bitcoin_enable_qt_dbus != xno; then
723     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
724   fi
725   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
727   dnl enable qr support
728   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
729   if test x$have_qrencode = xno; then
730     if test x$use_qr = xyes; then
731      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
732     fi
733     AC_MSG_RESULT(no)
734   else
735     if test x$use_qr != xno; then
736       AC_MSG_RESULT(yes)
737       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
738       use_qr=yes
739     else
740       AC_MSG_RESULT(no)
741     fi
742   fi
744   if test x$XGETTEXT = x; then
745     AC_MSG_WARN("xgettext is required to update qt translations")
746   fi
748   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
749   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
750     AC_MSG_RESULT([yes])
751     BUILD_TEST_QT="test"
752   else
753     AC_MSG_RESULT([no])
754   fi
757 AC_MSG_CHECKING([whether to build test_bitcoin])
758 if test x$use_tests = xyes; then
759   AC_MSG_RESULT([yes])
760   BUILD_TEST="test"
761 else
762   AC_MSG_RESULT([no])
765 AC_MSG_CHECKING([whether to reduce exports])
766 if test x$use_reduce_exports != xno; then
767   AC_MSG_RESULT([yes])
768 else
769   AC_MSG_RESULT([no])
772 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
773   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-daemon --with-gui or --enable-tests])
776 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
777 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
778 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
779 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
780 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
781 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
782 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
783 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
784 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
785 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
786 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
787 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
788 AM_CONDITIONAL([USE_LIBSECP256K1],[test x$use_libsecp256k1 = xyes])
790 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
791 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
792 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
793 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
794 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
795 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
796 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
797 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
798 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
799 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
800 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
801 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
804 AC_SUBST(RELDFLAGS)
805 AC_SUBST(LIBTOOL_LDFLAGS)
806 AC_SUBST(USE_UPNP)
807 AC_SUBST(USE_QRCODE)
808 AC_SUBST(BOOST_LIBS)
809 AC_SUBST(TESTDEFS)
810 AC_SUBST(LEVELDB_TARGET_FLAGS)
811 AC_SUBST(BUILD_TEST)
812 AC_SUBST(BUILD_QT)
813 AC_SUBST(BUILD_TEST_QT)
814 AC_SUBST(MINIUPNPC_CPPFLAGS)
815 AC_SUBST(MINIUPNPC_LIBS)
816 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
817 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
818 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
819 AC_OUTPUT
821 dnl Taken from https://wiki.debian.org/RpathIssue
822 case $host in
823    *-*-linux-gnu)
824      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
825      sed < libtool > libtool-2 \
826      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
827      mv libtool-2 libtool
828      chmod 755 libtool
829    ;;
830 esac