Bugfix: configure: Check for openssl/ec.h
[bitcoinplatinum.git] / configure.ac
blob2abfd0d419fdefa6da8d28a24704ac03c497dda2
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([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 # 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      # -static is interpreted by libtool, where it has a different meaning.
205      # In libtool-speak, it's -all-static.
206      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
208      AC_PATH_PROG([MAKENSIS], [makensis], none)
209      if test x$MAKENSIS = xnone; then
210        AC_MSG_WARN("makensis not found. Cannot create installer.")
211      fi
213      AC_PATH_TOOL(WINDRES, windres, none)
214      if test x$WINDRES = xnone; then
215        AC_MSG_ERROR("windres not found")
216      fi
218      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
219      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
220      if test "x$CXXFLAGS_overridden" = "xno"; then
221        CXXFLAGS="$CXXFLAGS -w"
222      fi
223      case $host in
224        i?86-*) WINDOWS_BITS=32 ;;
225        x86_64-*) WINDOWS_BITS=64 ;;
226        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
227      esac
228      AC_SUBST(WINDOWS_BITS)
230      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
231      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
232      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
233      dnl also overridden to prevent their insertion later.
234      dnl This should only affect dll's.
235      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
236      postdeps_CXX=
238      ;;
239   *darwin*)
240      TARGET_OS=darwin
241      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
242      if  test x$cross_compiling != xyes; then
243        BUILD_OS=darwin
244        AC_CHECK_PROG([PORT],port, port)
245        if test x$PORT = xport; then
246          dnl add default macports paths
247          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
248          LIBS="$LIBS -L/opt/local/lib"
249          if test -d /opt/local/include/db48; then
250            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
251            LIBS="$LIBS -L/opt/local/lib/db48"
252          fi
253        fi
255        AC_CHECK_PROG([BREW],brew, brew)
256        if test x$BREW = xbrew; then
257          dnl These Homebrew packages may be keg-only, meaning that they won't be found
258          dnl in expected paths because they may conflict with system files. Ask
259          dnl Homebrew where each one is located, then adjust paths accordingly.
260          dnl It's safe to add these paths even if the functionality is disabled by
261          dnl the user (--without-wallet or --without-gui for example).
263          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
264          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
265          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
266          if test x$openssl_prefix != x; then
267            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
268            export PKG_CONFIG_PATH
269          fi
270          if test x$bdb_prefix != x; then
271            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
272            LIBS="$LIBS -L$bdb_prefix/lib"
273          fi
274          if test x$qt5_prefix != x; then
275            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
276            export PKG_CONFIG_PATH
277          fi
278        fi
279      else
280        case $build_os in
281          *darwin*)
282            BUILD_OS=darwin
283            ;;
284          *)
285            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
286            AC_PATH_TOOL([OTOOL], [otool], otool)
287            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
289            dnl libtool will try to strip the static lib, which is a problem for
290            dnl cross-builds because strip attempts to call a hard-coded ld,
291            dnl which may not exist in the path. Stripping the .a is not
292            dnl necessary, so just disable it.
293            old_striplib=
294            ;;
295        esac
296      fi
298      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
299      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
300      ;;
301    *linux*)
302      TARGET_OS=linux
303      ;;
304    *)
305      ;;
306 esac
308 if test x$use_comparison_tool != xno; then
309   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
312 if test x$use_comparison_tool_reorg_tests != xno; then
313   if test x$use_comparison_tool = x; then
314     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
315   fi
316   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
317 else
318   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
321 if test x$use_lcov = xyes; then
322   if test x$LCOV = x; then
323     AC_MSG_ERROR("lcov testing requested but lcov not found")
324   fi
325   if test x$GCOV = x; then
326     AC_MSG_ERROR("lcov testing requested but gcov not found")
327   fi
328   if test x$JAVA = x; then
329     AC_MSG_ERROR("lcov testing requested but java not found")
330   fi
331   if test x$GENHTML = x; then
332     AC_MSG_ERROR("lcov testing requested but genhtml not found")
333   fi
334   if test x$use_comparison_tool = x; then
335     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
336   fi
337   LCOV="$LCOV --gcov-tool=$GCOV"
338   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
339     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
342 dnl Require little endian
343 AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")])
345 dnl Check for pthread compile/link requirements
346 AX_PTHREAD
348 # The following macro will add the necessary defines to bitcoin-config.h, but
349 # they also need to be passed down to any subprojects. Pull the results out of
350 # the cache and add them to CPPFLAGS.
351 AC_SYS_LARGEFILE
352 # detect POSIX or GNU variant of strerror_r
353 AC_FUNC_STRERROR_R
355 if test x$ac_cv_sys_file_offset_bits != x &&
356    test x$ac_cv_sys_file_offset_bits != xno &&
357    test x$ac_cv_sys_file_offset_bits != xunknown; then
358   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
361 if test x$ac_cv_sys_large_files != x &&
362    test x$ac_cv_sys_large_files != xno &&
363    test x$ac_cv_sys_large_files != xunknown; then
364   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
367 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
369 AX_GCC_FUNC_ATTRIBUTE([visibility])
370 AX_GCC_FUNC_ATTRIBUTE([dllexport])
371 AX_GCC_FUNC_ATTRIBUTE([dllimport])
373 if test x$use_glibc_compat != xno; then
375   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
376   # See which one is present here.
377   AC_MSG_CHECKING(__fdelt_chk type)
378   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
379                     #undef _FORTIFY_SOURCE
380                   #endif
381                   #define _FORTIFY_SOURCE 2
382                   #include <sys/select.h>
383      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
384     [ fdelt_type="long unsigned int"],
385     [ fdelt_type="long int"])
386   AC_MSG_RESULT($fdelt_type)
387   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
391 if test x$use_hardening != xno; then
392   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
393   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
395   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
396     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
397       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
398     ])
399     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
400   ])
402   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
403   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
404   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
405   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
407   if test x$TARGET_OS != xwindows; then
408     # All windows code is PIC, forcing it on just adds useless compile warnings
409     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
410     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
411   fi
413   case $host in
414     *mingw*)
415        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
416     ;;
417   esac
419   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
420   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
421   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
422   OBJCXXFLAGS="$CXXFLAGS"
425 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
426 if test x$TARGET_OS = xdarwin; then
427   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
430 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])
431 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
432 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
434 AC_CHECK_DECLS([strnlen])
436 AC_CHECK_DECLS([le32toh, le64toh, htole32, htole64, be32toh, be64toh, htobe32, htobe64],,,
437                 [#if HAVE_ENDIAN_H
438                  #include <endian.h>
439                  #endif])
441 dnl Check for MSG_NOSIGNAL
442 AC_MSG_CHECKING(for MSG_NOSIGNAL)
443 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
444  [[ int f = MSG_NOSIGNAL; ]])],
445  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
446  [ AC_MSG_RESULT(no)]
449 AC_SEARCH_LIBS([clock_gettime],[rt])
451 AC_MSG_CHECKING([for visibility attribute])
452 AC_LINK_IFELSE([AC_LANG_SOURCE([
453   int foo_def( void ) __attribute__((visibility("default")));
454   int main(){}
455   ])],
456   [
457     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
458     AC_MSG_RESULT(yes)
459   ],
460   [
461     AC_MSG_RESULT(no)
462     if test x$use_reduce_exports = xyes; then
463       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduced-exports.])
464     fi
465       AC_MSG_WARN([Cannot find a working visibility attribute. Disabling reduced exports.])
466       use_reduce_exports=no
467   ]
470 if test x$use_reduce_exports != xno; then
471   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
472   [
473     if test x$use_reduce_exports = xyes; then
474       AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduced-exports.])
475     fi
476     AC_MSG_WARN([Cannot set default symbol visibility. Disabling reduced exports.])
477     use_reduce_exports=no
478   ])
481 LEVELDB_CPPFLAGS=
482 LIBLEVELDB=
483 LIBMEMENV=
484 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
485 AC_SUBST(LEVELDB_CPPFLAGS)
486 AC_SUBST(LIBLEVELDB)
487 AC_SUBST(LIBMEMENV)
489 if test x$enable_wallet != xno; then
490     dnl Check for libdb_cxx only if wallet enabled
491     BITCOIN_FIND_BDB48
494 dnl Check for libminiupnpc (optional)
495 if test x$use_upnp != xno; then
496   AC_CHECK_HEADERS(
497     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
498     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
499     [have_miniupnpc=no]
500   )
503 dnl Check for boost libs
504 AX_BOOST_BASE
505 AX_BOOST_SYSTEM
506 AX_BOOST_FILESYSTEM
507 AX_BOOST_PROGRAM_OPTIONS
508 AX_BOOST_THREAD
509 AX_BOOST_CHRONO
512 if test x$use_reduce_exports != xno; then
513   AC_MSG_CHECKING([for working boost reduced exports])
514   TEMP_CPPFLAGS="$CPPFLAGS"
515   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
516   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
517       @%:@include <boost/version.hpp>
518     ]], [[
519       #if BOOST_VERSION >= 104900
520       // Everything is okay
521       #else
522       #  error Boost version is too old
523       #endif
524     ]])],[
525       AC_MSG_RESULT(yes)
526     ],[:
527     if test x$use_reduce_exports = xauto; then
528       use_reduce_exports=no
529     else
530       if test x$use_reduce_exports = xyes; then
531         AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduced-exports.])
532       fi
533     fi
534     AC_MSG_RESULT(no)
535     AC_MSG_WARN([boost versions < 1.49 are known to have symbol visibility issues. Disabling reduced exports.])
536   ])
537   CPPFLAGS="$TEMP_CPPFLAGS"
540 if test x$use_reduce_exports != xno; then
541     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
542     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
545 if test x$use_tests = xyes; then
547   if test x$HEXDUMP = x; then
548     AC_MSG_ERROR(hexdump is required for tests)
549   fi
552   AX_BOOST_UNIT_TEST_FRAMEWORK
554   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
555   AC_MSG_CHECKING([for dynamic linked boost test])
556   TEMP_LIBS="$LIBS"
557   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
558   TEMP_CPPFLAGS="$CPPFLAGS"
559   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
560   AC_LINK_IFELSE([AC_LANG_SOURCE([
561        #define BOOST_TEST_DYN_LINK
562        #define BOOST_TEST_MAIN
563         #include <boost/test/unit_test.hpp>
565        ])],
566     [AC_MSG_RESULT(yes)]
567     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
568     [AC_MSG_RESULT(no)])
569   LIBS="$TEMP_LIBS"
570   CPPFLAGS="$TEMP_CPPFLAGS"
573 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
575 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
576 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
577 dnl a working version is available, else fall back to sleep. sleep was removed
578 dnl after 1.56.
579 dnl If neither is available, abort.
580 dnl If sleep_for is used, boost_chrono becomes a requirement.
581 if test x$ax_cv_boost_chrono = xyes; then
582 TEMP_LIBS="$LIBS"
583 LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
584 TEMP_CPPFLAGS="$CPPFLAGS"
585 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
586 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
587   #include <boost/thread/thread.hpp>
588   #include <boost/version.hpp>
589   ]],[[
590   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
591       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
592   #else
593    choke me
594   #endif
595   ]])],
596   [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
597      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
598   [boost_sleep=no])
599 LIBS="$TEMP_LIBS"
600 CPPFLAGS="$TEMP_CPPFLAGS"
603 if test x$boost_sleep != xyes; then
604 TEMP_LIBS="$LIBS"
605 LIBS="$BOOST_LIBS $LIBS"
606 TEMP_CPPFLAGS="$CPPFLAGS"
607 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
608 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
609   #include <boost/version.hpp>
610   #include <boost/thread.hpp>
611   #include <boost/date_time/posix_time/posix_time_types.hpp>
612   ]],[[
613   #if BOOST_VERSION <= 105600
614       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
615   #else
616    choke me
617   #endif
618   ]])],
619   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
620   [boost_sleep=no])
621 LIBS="$TEMP_LIBS"
622 CPPFLAGS="$TEMP_CPPFLAGS"
625 if test x$boost_sleep != xyes; then
626   AC_MSG_ERROR(No working boost sleep implementation found.)
629 AC_ARG_WITH([utils],
630   [AS_HELP_STRING([--with-utils],
631   [build bitcoin-cli bitcoin-tx (default=yes)])],
632   [build_bitcoin_utils=$withval],
633   [build_bitcoin_utils=yes])
635 AC_ARG_WITH([libs],
636   [AS_HELP_STRING([--with-libs],
637   [build libraries (default=yes)])],
638   [build_bitcoin_libs=$withval],
639   [build_bitcoin_libs=yes])
641 AC_ARG_WITH([daemon],
642   [AS_HELP_STRING([--with-daemon],
643   [build bitcoind daemon (default=yes)])],
644   [build_bitcoind=$withval],
645   [build_bitcoind=yes])
647 BITCOIN_QT_INIT
649 if test x$use_pkgconfig = xyes; then
651   if test x"$PKG_CONFIG" = "x"; then
652     AC_MSG_ERROR(pkg-config not found.)
653   fi
655   : #NOP
656   m4_ifdef(
657     [PKG_CHECK_MODULES],
658     [
659       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
660       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
661       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
662       if test x$use_qr != xno; then
663         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
664       fi
665     ]
666   )
667 else
668   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
669   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
671   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
672   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
674   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
675   if test x$use_qr != xno; then
676     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
677     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
678   fi
681 CFLAGS_TEMP="$CFLAGS"
682 LIBS_TEMP="$LIBS"
683 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
684 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
685 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
686 CFLAGS="$CFLAGS_TEMP"
687 LIBS="$LIBS_TEMP"
689 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
691 AC_MSG_CHECKING([whether to build bitcoind])
692 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
693 AC_MSG_RESULT($build_bitcoind)
695 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
696 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
697 AC_MSG_RESULT($build_bitcoin_utils)
699 AC_MSG_CHECKING([whether to build libraries])
700 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
701 if test x$build_bitcoin_libs = xyes; then
702   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
704 AC_MSG_RESULT($build_bitcoin_libs)
706 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
707 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
709 AC_LANG_POP
711 if test "x$use_ccache" != "xno"; then
712   AC_MSG_CHECKING(if ccache should be used)
713   if test x$CCACHE = x; then
714     if test "x$use_ccache" = "xyes"; then
715       AC_MSG_ERROR([ccache not found.]);
716     else
717       use_ccache=no
718     fi
719   else
720     use_ccache=yes
721     CC="$ac_cv_path_CCACHE $CC"
722     CXX="$ac_cv_path_CCACHE $CXX"
723   fi
724   AC_MSG_RESULT($use_ccache)
726 if test "x$use_ccache" = "xyes"; then
727     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
730 dnl enable wallet
731 AC_MSG_CHECKING([if wallet should be enabled])
732 if test x$enable_wallet != xno; then
733   AC_MSG_RESULT(yes)
734   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
736 else
737   AC_MSG_RESULT(no)
740 dnl enable upnp support
741 AC_MSG_CHECKING([whether to build with support for UPnP])
742 if test x$have_miniupnpc = xno; then
743   if test x$use_upnp = xyes; then
744      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
745   fi
746   AC_MSG_RESULT(no)
747 else
748   if test x$use_upnp != xno; then
749     AC_MSG_RESULT(yes)
750     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
751     use_upnp=yes
752     upnp_setting=0
753     if test x$use_upnp_default != xno; then
754       use_upnp_default=yes
755       upnp_setting=1
756     fi
757     AC_MSG_RESULT($use_upnp_default)
758     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
759     if test x$TARGET_OS = xwindows; then
760       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
761     fi
762   else
763     AC_MSG_RESULT(no)
764   fi
767 dnl these are only used when qt is enabled
768 if test x$bitcoin_enable_qt != xno; then
769   BUILD_QT=qt
770   dnl enable dbus support
771   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
772   if test x$bitcoin_enable_qt_dbus != xno; then
773     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
774   fi
775   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
777   dnl enable qr support
778   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
779   if test x$have_qrencode = xno; then
780     if test x$use_qr = xyes; then
781      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
782     fi
783     AC_MSG_RESULT(no)
784   else
785     if test x$use_qr != xno; then
786       AC_MSG_RESULT(yes)
787       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
788       use_qr=yes
789     else
790       AC_MSG_RESULT(no)
791     fi
792   fi
794   if test x$XGETTEXT = x; then
795     AC_MSG_WARN("xgettext is required to update qt translations")
796   fi
798   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
799   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
800     AC_MSG_RESULT([yes])
801     BUILD_TEST_QT="test"
802   else
803     AC_MSG_RESULT([no])
804   fi
807 AC_MSG_CHECKING([whether to build test_bitcoin])
808 if test x$use_tests = xyes; then
809   AC_MSG_RESULT([yes])
810   BUILD_TEST="test"
811 else
812   AC_MSG_RESULT([no])
815 AC_MSG_CHECKING([whether to reduce exports])
816 if test x$use_reduce_exports != xno; then
817   AC_MSG_RESULT([yes])
818 else
819   AC_MSG_RESULT([no])
822 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
823   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
826 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
827 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
828 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
829 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
830 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
831 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
832 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
833 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
834 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
835 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
836 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
837 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
838 AM_CONDITIONAL([USE_LIBSECP256K1],[test x$use_libsecp256k1 = xyes])
840 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
841 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
842 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
843 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
844 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
845 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
846 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
847 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
848 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
849 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
850 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
851 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
853 AC_SUBST(RELDFLAGS)
854 AC_SUBST(LIBTOOL_APP_LDFLAGS)
855 AC_SUBST(USE_UPNP)
856 AC_SUBST(USE_QRCODE)
857 AC_SUBST(BOOST_LIBS)
858 AC_SUBST(TESTDEFS)
859 AC_SUBST(LEVELDB_TARGET_FLAGS)
860 AC_SUBST(BUILD_TEST)
861 AC_SUBST(BUILD_QT)
862 AC_SUBST(BUILD_TEST_QT)
863 AC_SUBST(MINIUPNPC_CPPFLAGS)
864 AC_SUBST(MINIUPNPC_LIBS)
865 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
866 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
867 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
869 dnl boost's m4 checks do something really nasty: they export these vars. As a
870 dnl result, they leak into secp256k1's configure and crazy things happen.
871 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
872 CPPFLAGS_TEMP="$CPPFLAGS"
873 unset CPPFLAGS
874 CPPFLAGS="$CPPFLAGS_TEMP"
876 LDFLAGS_TEMP="$LDFLAGS"
877 unset LDFLAGS
878 LDFLAGS="$LDFLAGS_TEMP"
880 LIBS_TEMP="$LIBS"
881 unset LIBS
882 LIBS="$LIBS_TEMP"
884 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
885 unset PKG_CONFIG_PATH
886 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
888 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
889 unset PKG_CONFIG_LIBDIR
890 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
892 ac_configure_args="${ac_configure_args} --disable-shared --with-pic"
893 AC_CONFIG_SUBDIRS([src/secp256k1])
895 AC_OUTPUT
897 dnl Taken from https://wiki.debian.org/RpathIssue
898 case $host in
899    *-*-linux-gnu)
900      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
901      sed < libtool > libtool-2 \
902      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
903      mv libtool-2 libtool
904      chmod 755 libtool
905    ;;
906 esac