Update comments in chainparams to be doxygen compatible
[bitcoinplatinum.git] / configure.ac
blob90aa11242166b9dcb2c2faae29db2c940cb22f81
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])
14 LT_INIT([disable-shared])
15 AC_CANONICAL_HOST
16 AH_TOP([#ifndef BITCOIN_CONFIG_H])
17 AH_TOP([#define BITCOIN_CONFIG_H])
18 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
20 # This m4 will only be used if a system copy cannot be found. This is helpful
21 # on systems where autotools are installed but the pkg-config macros are not in
22 # a default location. It is currently used for building on OSX where autotools
23 # are preinstalled but pkg-config comes from macports or homebrew. It should
24 # probably be removed when building on <= 10.6 is no longer supported.
25 m4_include([pkg.m4])
27 dnl faketime breaks configure and is only needed for make. Disable it here.
28 unset FAKETIME
30 if test "x${CXXFLAGS+set}" = "xset"; then
31   CXXFLAGS_overridden=yes
32 else
33   CXXFLAGS_overridden=no
36 dnl ==============================================================
37 dnl Setup for automake
38 dnl ==============================================================
40 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
42 dnl faketime messes with timestamps and causes configure to be re-run.
43 dnl --disable-maintainer-mode can be used to bypass this.
44 AM_MAINTAINER_MODE([enable])
46 dnl make the compilation flags quiet unless V=1 is used
47 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
49 dnl Checks for programs.
50 AC_PROG_CXX
51 AC_PROG_CC
52 AC_PROG_CPP
53 AC_PROG_CXXCPP
54 AC_PROG_INSTALL
55 AC_PROG_OBJC
56 AC_PROG_LN_S
57 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
58 AC_PROG_MKDIR_P
59 AC_PROG_SED
60 AC_PATH_TOOL(AR, ar)
61 AC_PATH_TOOL(RANLIB, ranlib)
62 AC_PATH_TOOL(STRIP, strip)
63 AC_PATH_TOOL(GCOV, gcov)
64 AC_PATH_PROG(LCOV, lcov)
65 AC_PATH_PROG(JAVA, java)
66 AC_PATH_PROG(GENHTML, genhtml)
67 AC_PATH_PROG([GIT], [git])
68 AC_PATH_PROG(CCACHE,ccache)
69 AC_PATH_PROG(XGETTEXT,xgettext)
70 AC_PATH_PROG(HEXDUMP,hexdump)
71 PKG_PROG_PKG_CONFIG
73 # Enable wallet
74 AC_ARG_ENABLE([wallet],
75   [AS_HELP_STRING([--enable-wallet],
76   [enable wallet (default is yes)])],
77   [enable_wallet=$enableval],
78   [enable_wallet=yes])
80 AC_ARG_WITH([miniupnpc],
81   [AS_HELP_STRING([--with-miniupnpc],
82   [enable UPNP (default is yes if libminiupnpc is found)])],
83   [use_upnp=$withval],
84   [use_upnp=auto])
86 AC_ARG_ENABLE([upnp-default],
87   [AS_HELP_STRING([--enable-upnp-default],
88   [if UPNP is enabled, turn it on at startup (default is no)])],
89   [use_upnp_default=$enableval],
90   [use_upnp_default=no])
92 AC_ARG_ENABLE(tests,
93     AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
94     [use_tests=$enableval],
95     [use_tests=yes])
97 AC_ARG_WITH([comparison-tool],
98     AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
99     [use_comparison_tool=$withval],
100     [use_comparison_tool=no])
102 AC_ARG_ENABLE([comparison-tool-reorg-tests],
103     AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
104     [use_comparison_tool_reorg_tests=$enableval],
105     [use_comparison_tool_reorg_tests=no])
107 AC_ARG_WITH([qrencode],
108   [AS_HELP_STRING([--with-qrencode],
109   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
110   [use_qr=$withval],
111   [use_qr=auto])
113 AC_ARG_ENABLE([hardening],
114   [AS_HELP_STRING([--enable-hardening],
115   [attempt to harden the resulting executables (default is yes)])],
116   [use_hardening=$enableval],
117   [use_hardening=yes])
119 AC_ARG_ENABLE([reduce-exports],
120   [AS_HELP_STRING([--enable-reduce-exports],
121   [attempt to reduce exported symbols in the resulting executables (default is yes)])],
122   [use_reduce_exports=$enableval],
123   [use_reduce_exports=auto])
125 AC_ARG_ENABLE([ccache],
126   [AS_HELP_STRING([--enable-ccache],
127   [use ccache for building (default is yes if ccache is found)])],
128   [use_ccache=$enableval],
129   [use_ccache=auto])
131 AC_ARG_ENABLE([lcov],
132   [AS_HELP_STRING([--enable-lcov],
133   [enable lcov testing (default is no)])],
134   [use_lcov=yes],
135   [use_lcov=no])
137 AC_ARG_ENABLE([glibc-back-compat],
138   [AS_HELP_STRING([--enable-glibc-back-compat],
139   [enable backwards compatibility with glibc and libstdc++])],
140   [use_glibc_compat=$enableval],
141   [use_glibc_compat=no])
143 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
145 # Enable debug 
146 AC_ARG_ENABLE([debug],
147     [AS_HELP_STRING([--enable-debug],
148                     [use debug compiler flags and macros (default is no)])],
149     [enable_debug=$enableval],
150     [enable_debug=no])
152 if test "x$enable_debug" = xyes; then
153     if test "x$GCC" = xyes; then
154         CFLAGS="-g3 -O0 -DDEBUG"
155     fi
156     
157     if test "x$GXX" = xyes; then
158         CXXFLAGS="-g3 -O0 -DDEBUG"
159     fi
160 fi 
162 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
163 ##       compatibility with the legacy buildsystem.
165 if test "x$CXXFLAGS_overridden" = "xno"; then
166   CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
168 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
170 AC_LANG_PUSH([C++])
172 use_pkgconfig=yes
173 case $host in
174   *mingw*)
176      #pkgconfig does more harm than good with MinGW
177      use_pkgconfig=no
179      TARGET_OS=windows
180      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
181      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
182      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
183      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
184      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
185      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
186      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
187      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
188      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
189      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
190      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
191      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
192      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
193      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
194      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
195      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
196      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
197      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
198      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
200      AX_CHECK_LINK_FLAG([[-static-libgcc]],[LDFLAGS="$LDFLAGS -static-libgcc"])
201      AX_CHECK_LINK_FLAG([[-static-libstdc++]],[LDFLAGS="$LDFLAGS -static-libstdc++"])
203      # -static is interpreted by libtool, where it has a different meaning.
204      # In libtool-speak, it's -all-static.
205      AX_CHECK_LINK_FLAG([[-static]],[LDFLAGS="$LDFLAGS -static"; LIBTOOL_LDFLAGS="$LIBTOOL_LDFLAGS -all-static"])
207      AC_PATH_PROG([MAKENSIS], [makensis], none)
208      if test x$MAKENSIS = xnone; then
209        AC_MSG_WARN("makensis not found. Cannot create installer.")
210      fi
212      AC_PATH_TOOL(WINDRES, windres, none)
213      if test x$WINDRES = xnone; then
214        AC_MSG_ERROR("windres not found")
215      fi
217      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
218      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
219      if test "x$CXXFLAGS_overridden" = "xno"; then
220        CXXFLAGS="$CXXFLAGS -w"
221      fi
222      case $host in
223        i?86-*) WINDOWS_BITS=32 ;;
224        x86_64-*) WINDOWS_BITS=64 ;;
225        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
226      esac
227      AC_SUBST(WINDOWS_BITS)
228      ;;
229   *darwin*)
230      TARGET_OS=darwin
231      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
232      if  test x$cross_compiling != xyes; then
233        BUILD_OS=darwin
234        AC_CHECK_PROG([PORT],port, port)
235        if test x$PORT = xport; then
236          dnl add default macports paths
237          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include -I/opt/local/include/db48"
238          LIBS="$LIBS -L/opt/local/lib -L/opt/local/lib/db48"
239        fi
241        AC_CHECK_PROG([BREW],brew, brew)
242        if test x$BREW = xbrew; then
243          dnl These Homebrew packages may be keg-only, meaning that they won't be found
244          dnl in expected paths because they may conflict with system files. Ask
245          dnl Homebrew where each one is located, then adjust paths accordingly.
246          dnl It's safe to add these paths even if the functionality is disabled by
247          dnl the user (--without-wallet or --without-gui for example).
249          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
250          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
251          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
252          if test x$openssl_prefix != x; then
253            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
254            export PKG_CONFIG_PATH
255          fi
256          if test x$bdb_prefix != x; then
257            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
258            LIBS="$LIBS -L$bdb_prefix/lib"
259          fi
260          if test x$qt5_prefix != x; then
261            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
262            export PKG_CONFIG_PATH
263          fi
264        fi
265      else
266        case $build_os in
267          *darwin*)
268            BUILD_OS=darwin
269            ;;
270          *)
271            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
272            AC_PATH_TOOL([OTOOL], [otool], otool)
273            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
274            ;;
275        esac
276      fi
278      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
279      ;;
280    *linux*)
281      TARGET_OS=linux
282      ;;
283    *)
284      ;;
285 esac
287 if test x$use_comparison_tool != xno; then
288   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
291 if test x$use_comparison_tool_reorg_tests != xno; then
292   if test x$use_comparison_tool = x; then
293     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
294   fi
295   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
296 else
297   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
300 if test x$use_lcov = xyes; then
301   if test x$LCOV = x; then
302     AC_MSG_ERROR("lcov testing requested but lcov not found")
303   fi
304   if test x$GCOV = x; then
305     AC_MSG_ERROR("lcov testing requested but gcov not found")
306   fi
307   if test x$JAVA = x; then
308     AC_MSG_ERROR("lcov testing requested but java not found")
309   fi
310   if test x$GENHTML = x; then
311     AC_MSG_ERROR("lcov testing requested but genhtml not found")
312   fi
313   if test x$use_comparison_tool = x; then
314     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
315   fi
316   LCOV="$LCOV --gcov-tool=$GCOV"
317   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
318     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
321 dnl Require little endian
322 AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")])
324 dnl Check for pthread compile/link requirements
325 AX_PTHREAD
327 # The following macro will add the necessary defines to bitcoin-config.h, but
328 # they also need to be passed down to any subprojects. Pull the results out of
329 # the cache and add them to CPPFLAGS.
330 AC_SYS_LARGEFILE
331 # detect POSIX or GNU variant of strerror_r
332 AC_FUNC_STRERROR_R
334 if test x$ac_cv_sys_file_offset_bits != x &&
335    test x$ac_cv_sys_file_offset_bits != xno &&
336    test x$ac_cv_sys_file_offset_bits != xunknown; then
337   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
340 if test x$ac_cv_sys_large_files != x &&
341    test x$ac_cv_sys_large_files != xno &&
342    test x$ac_cv_sys_large_files != xunknown; then
343   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
346 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
348 if test x$use_glibc_compat != xno; then
350   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
351   # See which one is present here.
352   AC_MSG_CHECKING(__fdelt_chk type)
353   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
354                     #undef _FORTIFY_SOURCE
355                   #endif
356                   #define _FORTIFY_SOURCE 2
357                   #include <sys/select.h>
358      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
359     [ fdelt_type="long unsigned int"],
360     [ fdelt_type="long int"])
361   AC_MSG_RESULT($fdelt_type)
362   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
366 if test x$use_hardening != xno; then
367   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
368   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
370   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
371     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
372       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
373     ])
374     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
375   ])
377   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
378   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
379   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
380   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
382   if test x$TARGET_OS != xwindows; then
383     # All windows code is PIC, forcing it on just adds useless compile warnings
384     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
385     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
386   fi
388   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
389   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
390   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
391   OBJCXXFLAGS="$CXXFLAGS"
394 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
395 if test x$TARGET_OS = xdarwin; then
396   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
399 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])
400 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
401 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
403 AC_CHECK_DECLS([le32toh, le64toh, htole32, htole64, be32toh, be64toh, htobe32, htobe64],,,
404                 [#if HAVE_ENDIAN_H
405                  #include <endian.h>
406                  #endif])
408 dnl Check for MSG_NOSIGNAL
409 AC_MSG_CHECKING(for MSG_NOSIGNAL)
410 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
411  [[ int f = MSG_NOSIGNAL; ]])],
412  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
413  [ AC_MSG_RESULT(no)]
416 AC_SEARCH_LIBS([clock_gettime],[rt])
418 AC_MSG_CHECKING([for visibility attribute])
419 AC_LINK_IFELSE([AC_LANG_SOURCE([
420   int foo_def( void ) __attribute__((visibility("default")));
421   int main(){}
422   ])],
423   [
424     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
425     AC_MSG_RESULT(yes)
426   ],
427   [
428     AC_MSG_RESULT(no)
429     if test x$use_reduce_exports = xyes; then
430       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduced-exports.])
431     fi
432       AC_MSG_WARN([Cannot find a working visibility attribute. Disabling reduced exports.])
433       use_reduce_exports=no
434   ]
437 if test x$use_reduce_exports != xno; then
438   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
439   [
440     if test x$use_reduce_exports = xyes; then
441       AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduced-exports.])
442     fi
443     AC_MSG_WARN([Cannot set default symbol visibility. Disabling reduced exports.])
444     use_reduce_exports=no
445   ])
448 LEVELDB_CPPFLAGS=
449 LIBLEVELDB=
450 LIBMEMENV=
451 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
452 AC_SUBST(LEVELDB_CPPFLAGS)
453 AC_SUBST(LIBLEVELDB)
454 AC_SUBST(LIBMEMENV)
456 if test x$enable_wallet != xno; then
457     dnl Check for libdb_cxx only if wallet enabled
458     BITCOIN_FIND_BDB48
461 dnl Check for libminiupnpc (optional)
462 if test x$use_upnp != xno; then
463   AC_CHECK_HEADERS(
464     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
465     [AC_CHECK_LIB([miniupnpc], [main],, [have_miniupnpc=no])],
466     [have_miniupnpc=no]
467   )
470 dnl Check for boost libs
471 AX_BOOST_BASE
472 AX_BOOST_SYSTEM
473 AX_BOOST_FILESYSTEM
474 AX_BOOST_PROGRAM_OPTIONS
475 AX_BOOST_THREAD
476 AX_BOOST_CHRONO
479 if test x$use_reduce_exports != xno; then
480   AC_MSG_CHECKING([for working boost reduced exports])
481   TEMP_CPPFLAGS="$CPPFLAGS"
482   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
483   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
484       @%:@include <boost/version.hpp>
485     ]], [[
486       #if BOOST_VERSION >= 104900
487       // Everything is okay
488       #else
489       #  error Boost version is too old
490       #endif
491     ]])],[
492       AC_MSG_RESULT(yes)
493     ],[:
494     if test x$use_reduce_exports = xauto; then
495       use_reduce_exports=no
496     else
497       if test x$use_reduce_exports = xyes; then
498         AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduced-exports.])
499       fi
500     fi
501     AC_MSG_RESULT(no)
502     AC_MSG_WARN([boost versions < 1.49 are known to have symbol visibility issues. Disabling reduced exports.])
503   ])
504   CPPFLAGS="$TEMP_CPPFLAGS"
507 if test x$use_reduce_exports != xno; then
508     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
509     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
512 if test x$use_tests = xyes; then
514   if test x$HEXDUMP = x; then
515     AC_MSG_ERROR(hexdump is required for tests)
516   fi
519   AX_BOOST_UNIT_TEST_FRAMEWORK
521   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
522   AC_MSG_CHECKING([for dynamic linked boost test])
523   TEMP_LIBS="$LIBS"
524   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
525   TEMP_CPPFLAGS="$CPPFLAGS"
526   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
527   AC_LINK_IFELSE([AC_LANG_SOURCE([
528        #define BOOST_TEST_DYN_LINK
529        #define BOOST_TEST_MAIN
530         #include <boost/test/unit_test.hpp>
532        ])],
533     [AC_MSG_RESULT(yes)]
534     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
535     [AC_MSG_RESULT(no)])
536   LIBS="$TEMP_LIBS"
537   CPPFLAGS="$TEMP_CPPFLAGS"
540 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
542 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
543 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
544 dnl a working version is available, else fall back to sleep. sleep was removed
545 dnl after 1.56.
546 dnl If neither is available, abort.
547 dnl If sleep_for is used, boost_chrono becomes a requirement.
548 if test x$ax_cv_boost_chrono = xyes; then
549 TEMP_LIBS="$LIBS"
550 LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
551 TEMP_CPPFLAGS="$CPPFLAGS"
552 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
553 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
554   #include <boost/thread/thread.hpp>
555   #include <boost/version.hpp>
556   ]],[[
557   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
558       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
559   #else
560    choke me
561   #endif
562   ]])],
563   [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
564      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
565   [boost_sleep=no])
566 LIBS="$TEMP_LIBS"
567 CPPFLAGS="$TEMP_CPPFLAGS"
570 if test x$boost_sleep != xyes; then
571 TEMP_LIBS="$LIBS"
572 LIBS="$BOOST_LIBS $LIBS"
573 TEMP_CPPFLAGS="$CPPFLAGS"
574 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
575 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
576   #include <boost/version.hpp>
577   #include <boost/thread.hpp>
578   #include <boost/date_time/posix_time/posix_time_types.hpp>
579   ]],[[
580   #if BOOST_VERSION <= 105600
581       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
582   #else
583    choke me
584   #endif
585   ]])],
586   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
587   [boost_sleep=no])
588 LIBS="$TEMP_LIBS"
589 CPPFLAGS="$TEMP_CPPFLAGS"
592 if test x$boost_sleep != xyes; then
593   AC_MSG_ERROR(No working boost sleep implementation found.)
596 AC_ARG_WITH([utils],
597   [AS_HELP_STRING([--with-utils],
598   [build bitcoin-cli bitcoin-tx (default=yes)])],
599   [build_bitcoin_utils=$withval],
600   [build_bitcoin_utils=yes])
602 AC_ARG_WITH([daemon],
603   [AS_HELP_STRING([--with-daemon],
604   [build bitcoind daemon (default=yes)])],
605   [build_bitcoind=$withval],
606   [build_bitcoind=yes])
608 BITCOIN_QT_INIT
610 if test x$use_pkgconfig = xyes; then
612   if test x"$PKG_CONFIG" = "x"; then
613     AC_MSG_ERROR(pkg-config not found.)
614   fi
616   : #NOP
617   m4_ifdef(
618     [PKG_CHECK_MODULES],
619     [
620       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
621       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
622       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
623       if test x$use_qr != xno; then
624         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
625       fi
626     ]
627   )
628 else
629   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
630   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
632   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
633   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
635   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],,BITCOIN_QT_FAIL(libprotobuf not found)))
636   if test x$use_qr != xno; then
637     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],, [have_qrencode=no])])
638     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
639   fi
642 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
644 AC_MSG_CHECKING([whether to build bitcoind])
645 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
646 AC_MSG_RESULT($build_bitcoind)
648 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
649 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
650 AC_MSG_RESULT($build_bitcoin_utils)
652 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
653 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
655 AC_LANG_POP
657 if test "x$use_ccache" != "xno"; then
658   AC_MSG_CHECKING(if ccache should be used)
659   if test x$CCACHE = x; then
660     if test "x$use_ccache" = "xyes"; then
661       AC_MSG_ERROR([ccache not found.]);
662     else
663       use_ccache=no
664     fi
665   else
666     use_ccache=yes
667     CC="$ac_cv_path_CCACHE $CC"
668     CXX="$ac_cv_path_CCACHE $CXX"
669   fi
670   AC_MSG_RESULT($use_ccache)
672 if test "x$use_ccache" = "xyes"; then
673     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
676 dnl enable wallet
677 AC_MSG_CHECKING([if wallet should be enabled])
678 if test x$enable_wallet != xno; then
679   AC_MSG_RESULT(yes)
680   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
682 else
683   AC_MSG_RESULT(no)
686 dnl enable upnp support
687 AC_MSG_CHECKING([whether to build with support for UPnP])
688 if test x$have_miniupnpc = xno; then
689   if test x$use_upnp = xyes; then
690      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
691   fi
692   AC_MSG_RESULT(no)
693 else
694   if test x$use_upnp != xno; then
695     AC_MSG_RESULT(yes)
696     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
697     use_upnp=yes
698     upnp_setting=0
699     if test x$use_upnp_default != xno; then
700       use_upnp_default=yes
701       upnp_setting=1
702     fi
703     AC_MSG_RESULT($use_upnp_default)
704     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
705     if test x$TARGET_OS = xwindows; then
706       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
707     fi
708   else
709     AC_MSG_RESULT(no)
710   fi
713 dnl these are only used when qt is enabled
714 if test x$bitcoin_enable_qt != xno; then
715   BUILD_QT=qt
716   dnl enable dbus support
717   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
718   if test x$bitcoin_enable_qt_dbus != xno; then
719     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
720   fi
721   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
723   dnl enable qr support
724   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
725   if test x$have_qrencode = xno; then
726     if test x$use_qr = xyes; then
727      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
728     fi
729     AC_MSG_RESULT(no)
730   else
731     if test x$use_qr != xno; then
732       AC_MSG_RESULT(yes)
733       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
734       use_qr=yes
735     else
736       AC_MSG_RESULT(no)
737     fi
738   fi
740   if test x$XGETTEXT = x; then
741     AC_MSG_WARN("xgettext is required to update qt translations")
742   fi
744   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
745   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
746     AC_MSG_RESULT([yes])
747     BUILD_TEST_QT="test"
748   else
749     AC_MSG_RESULT([no])
750   fi
753 AC_MSG_CHECKING([whether to build test_bitcoin])
754 if test x$use_tests = xyes; then
755   AC_MSG_RESULT([yes])
756   BUILD_TEST="test"
757 else
758   AC_MSG_RESULT([no])
761 AC_MSG_CHECKING([whether to reduce exports])
762 if test x$use_reduce_exports != xno; then
763   AC_MSG_RESULT([yes])
764 else
765   AC_MSG_RESULT([no])
768 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
769   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-daemon --with-gui or --enable-tests])
772 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
773 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
774 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
775 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
776 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
777 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
778 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
779 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
780 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
781 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
782 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
783 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
784 AM_CONDITIONAL([USE_LIBSECP256K1],[test x$use_libsecp256k1 = xyes])
786 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
787 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
788 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
789 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
790 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
791 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
792 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
793 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
794 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
795 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
796 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
797 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
800 AC_SUBST(RELDFLAGS)
801 AC_SUBST(LIBTOOL_LDFLAGS)
802 AC_SUBST(USE_UPNP)
803 AC_SUBST(USE_QRCODE)
804 AC_SUBST(BOOST_LIBS)
805 AC_SUBST(TESTDEFS)
806 AC_SUBST(LEVELDB_TARGET_FLAGS)
807 AC_SUBST(BUILD_TEST)
808 AC_SUBST(BUILD_QT)
809 AC_SUBST(BUILD_TEST_QT)
810 AC_SUBST(MINIUPNPC_CPPFLAGS)
811 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
812 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
813 AC_CONFIG_FILES([qa/pull-tester/build-tests.sh],[chmod +x qa/pull-tester/build-tests.sh])
814 AC_OUTPUT
816 dnl Taken from https://wiki.debian.org/RpathIssue
817 case $host in
818    *-*-linux-gnu)
819      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
820      sed < libtool > libtool-2 \
821      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
822      mv libtool-2 libtool
823      chmod 755 libtool
824    ;;
825 esac