]> Git Repo - VerusCoin.git/blob - configure.ac
Bump version to 0.11.1
[VerusCoin.git] / configure.ac
1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
2 AC_PREREQ([2.60])
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 11)
5 define(_CLIENT_VERSION_REVISION, 1)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, true)
8 define(_COPYRIGHT_YEAR, 2015)
9 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin])
10 AC_CONFIG_SRCDIR([src/main.cpp])
11 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
12 AC_CONFIG_AUX_DIR([build-aux])
13 AC_CONFIG_MACRO_DIR([build-aux/m4])
14
15 AC_CANONICAL_HOST
16
17 AH_TOP([#ifndef BITCOIN_CONFIG_H])
18 AH_TOP([#define BITCOIN_CONFIG_H])
19 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
20
21 dnl faketime breaks configure and is only needed for make. Disable it here.
22 unset FAKETIME
23
24 dnl Automake init set-up and checks
25 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
26
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])
30
31 dnl make the compilation flags quiet unless V=1 is used
32 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
33
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
39 fi
40 AC_PROG_CXX
41 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
42
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])
53
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)
66
67 dnl pkg-config check.
68 PKG_PROG_PKG_CONFIG
69
70 # Enable wallet
71 AC_ARG_ENABLE([wallet],
72   [AS_HELP_STRING([--enable-wallet],
73   [enable wallet (default is yes)])],
74   [enable_wallet=$enableval],
75   [enable_wallet=yes])
76
77 AC_ARG_WITH([miniupnpc],
78   [AS_HELP_STRING([--with-miniupnpc],
79   [enable UPNP (default is yes if libminiupnpc is found)])],
80   [use_upnp=$withval],
81   [use_upnp=auto])
82
83 AC_ARG_ENABLE([upnp-default],
84   [AS_HELP_STRING([--enable-upnp-default],
85   [if UPNP is enabled, turn it on at startup (default is no)])],
86   [use_upnp_default=$enableval],
87   [use_upnp_default=no])
88
89 AC_ARG_ENABLE(tests,
90     AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
91     [use_tests=$enableval],
92     [use_tests=yes])
93
94 AC_ARG_WITH([comparison-tool],
95     AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
96     [use_comparison_tool=$withval],
97     [use_comparison_tool=no])
98
99 AC_ARG_ENABLE([comparison-tool-reorg-tests],
100     AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
101     [use_comparison_tool_reorg_tests=$enableval],
102     [use_comparison_tool_reorg_tests=no])
103
104 AC_ARG_WITH([qrencode],
105   [AS_HELP_STRING([--with-qrencode],
106   [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
107   [use_qr=$withval],
108   [use_qr=auto])
109
110 AC_ARG_ENABLE([hardening],
111   [AS_HELP_STRING([--enable-hardening],
112   [attempt to harden the resulting executables (default is yes)])],
113   [use_hardening=$enableval],
114   [use_hardening=yes])
115
116 AC_ARG_ENABLE([reduce-exports],
117   [AS_HELP_STRING([--enable-reduce-exports],
118   [attempt to reduce exported symbols in the resulting executables (default is no)])],
119   [use_reduce_exports=$enableval],
120   [use_reduce_exports=no])
121
122 AC_ARG_ENABLE([ccache],
123   [AS_HELP_STRING([--enable-ccache],
124   [use ccache for building (default is yes if ccache is found)])],
125   [use_ccache=$enableval],
126   [use_ccache=auto])
127
128 AC_ARG_ENABLE([lcov],
129   [AS_HELP_STRING([--enable-lcov],
130   [enable lcov testing (default is no)])],
131   [use_lcov=yes],
132   [use_lcov=no])
133
134 AC_ARG_ENABLE([glibc-back-compat],
135   [AS_HELP_STRING([--enable-glibc-back-compat],
136   [enable backwards compatibility with glibc])],
137   [use_glibc_compat=$enableval],
138   [use_glibc_compat=no])
139
140 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
141
142 # Enable debug 
143 AC_ARG_ENABLE([debug],
144     [AS_HELP_STRING([--enable-debug],
145                     [use debug compiler flags and macros (default is no)])],
146     [enable_debug=$enableval],
147     [enable_debug=no])
148
149 if test "x$enable_debug" = xyes; then
150     if test "x$GCC" = xyes; then
151         CFLAGS="-g3 -O0 -DDEBUG"
152     fi
153     
154     if test "x$GXX" = xyes; then
155         CXXFLAGS="-g3 -O0 -DDEBUG"
156     fi
157 fi 
158
159 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
160 ##       compatibility with the legacy buildsystem.
161 ##
162 if test "x$CXXFLAGS_overridden" = "xno"; then
163   CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
164 fi
165 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
166
167 AC_ARG_WITH([utils],
168   [AS_HELP_STRING([--with-utils],
169   [build bitcoin-cli bitcoin-tx (default=yes)])],
170   [build_bitcoin_utils=$withval],
171   [build_bitcoin_utils=yes])
172
173 AC_ARG_WITH([libs],
174   [AS_HELP_STRING([--with-libs],
175   [build libraries (default=yes)])],
176   [build_bitcoin_libs=$withval],
177   [build_bitcoin_libs=yes])
178
179 AC_ARG_WITH([daemon],
180   [AS_HELP_STRING([--with-daemon],
181   [build bitcoind daemon (default=yes)])],
182   [build_bitcoind=$withval],
183   [build_bitcoind=yes])
184
185 AC_LANG_PUSH([C++])
186
187 use_pkgconfig=yes
188 case $host in
189   *mingw*)
190
191      #pkgconfig does more harm than good with MinGW
192      use_pkgconfig=no
193
194      TARGET_OS=windows
195      AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
196      AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
197      AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
198      AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
199      AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
200      AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
201      AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
202      AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
203      AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
204      AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
205      AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
206      AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
207      AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
208      AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
209      AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
210      AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
211      AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
212      AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
213      AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))
214
215      # -static is interpreted by libtool, where it has a different meaning.
216      # In libtool-speak, it's -all-static.
217      AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
218
219      AC_PATH_PROG([MAKENSIS], [makensis], none)
220      if test x$MAKENSIS = xnone; then
221        AC_MSG_WARN("makensis not found. Cannot create installer.")
222      fi
223
224      AC_PATH_TOOL(WINDRES, windres, none)
225      if test x$WINDRES = xnone; then
226        AC_MSG_ERROR("windres not found")
227      fi
228
229      CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
230      LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
231      if test "x$CXXFLAGS_overridden" = "xno"; then
232        CXXFLAGS="$CXXFLAGS -w"
233      fi
234      case $host in
235        i?86-*) WINDOWS_BITS=32 ;;
236        x86_64-*) WINDOWS_BITS=64 ;;
237        *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
238      esac
239      AC_SUBST(WINDOWS_BITS)
240
241      dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
242      dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
243      dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
244      dnl also overridden to prevent their insertion later.
245      dnl This should only affect dll's.
246      archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
247      postdeps_CXX=
248
249      ;;
250   *darwin*)
251      TARGET_OS=darwin
252      LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
253      if  test x$cross_compiling != xyes; then
254        BUILD_OS=darwin
255        AC_CHECK_PROG([PORT],port, port)
256        if test x$PORT = xport; then
257          dnl add default macports paths
258          CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
259          LIBS="$LIBS -L/opt/local/lib"
260          if test -d /opt/local/include/db48; then
261            CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
262            LIBS="$LIBS -L/opt/local/lib/db48"
263          fi
264        fi
265
266        AC_CHECK_PROG([BREW],brew, brew)
267        if test x$BREW = xbrew; then
268          dnl These Homebrew packages may be keg-only, meaning that they won't be found
269          dnl in expected paths because they may conflict with system files. Ask
270          dnl Homebrew where each one is located, then adjust paths accordingly.
271          dnl It's safe to add these paths even if the functionality is disabled by
272          dnl the user (--without-wallet or --without-gui for example).
273
274          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
275          bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
276          qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
277          if test x$openssl_prefix != x; then
278            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
279            export PKG_CONFIG_PATH
280          fi
281          if test x$bdb_prefix != x; then
282            CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
283            LIBS="$LIBS -L$bdb_prefix/lib"
284          fi
285          if test x$qt5_prefix != x; then
286            PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
287            export PKG_CONFIG_PATH
288          fi
289        fi
290      else
291        case $build_os in
292          *darwin*)
293            BUILD_OS=darwin
294            ;;
295          *)
296            AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
297            AC_PATH_TOOL([OTOOL], [otool], otool)
298            AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
299
300            dnl libtool will try to strip the static lib, which is a problem for
301            dnl cross-builds because strip attempts to call a hard-coded ld,
302            dnl which may not exist in the path. Stripping the .a is not
303            dnl necessary, so just disable it.
304            old_striplib=
305            ;;
306        esac
307      fi
308
309      AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
310      CPPFLAGS="$CPPFLAGS -DMAC_OSX"
311      ;;
312    *linux*)
313      TARGET_OS=linux
314      ;;
315    *)
316      ;;
317 esac
318
319 if test x$use_comparison_tool != xno; then
320   AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
321 fi
322
323 if test x$use_comparison_tool_reorg_tests != xno; then
324   if test x$use_comparison_tool = x; then
325     AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
326   fi
327   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
328 else
329   AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
330 fi
331
332 if test x$use_lcov = xyes; then
333   if test x$LCOV = x; then
334     AC_MSG_ERROR("lcov testing requested but lcov not found")
335   fi
336   if test x$GCOV = x; then
337     AC_MSG_ERROR("lcov testing requested but gcov not found")
338   fi
339   if test x$JAVA = x; then
340     AC_MSG_ERROR("lcov testing requested but java not found")
341   fi
342   if test x$GENHTML = x; then
343     AC_MSG_ERROR("lcov testing requested but genhtml not found")
344   fi
345   if test x$use_comparison_tool = x; then
346     AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
347   fi
348   LCOV="$LCOV --gcov-tool=$GCOV"
349   AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
350     [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
351 fi
352
353 dnl Check for endianness
354 AC_C_BIGENDIAN
355
356 dnl Check for pthread compile/link requirements
357 AX_PTHREAD
358
359 # The following macro will add the necessary defines to bitcoin-config.h, but
360 # they also need to be passed down to any subprojects. Pull the results out of
361 # the cache and add them to CPPFLAGS.
362 AC_SYS_LARGEFILE
363 # detect POSIX or GNU variant of strerror_r
364 AC_FUNC_STRERROR_R
365
366 if test x$ac_cv_sys_file_offset_bits != x &&
367    test x$ac_cv_sys_file_offset_bits != xno &&
368    test x$ac_cv_sys_file_offset_bits != xunknown; then
369   CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
370 fi
371
372 if test x$ac_cv_sys_large_files != x &&
373    test x$ac_cv_sys_large_files != xno &&
374    test x$ac_cv_sys_large_files != xunknown; then
375   CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
376 fi
377
378 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
379
380 AX_GCC_FUNC_ATTRIBUTE([visibility])
381 AX_GCC_FUNC_ATTRIBUTE([dllexport])
382 AX_GCC_FUNC_ATTRIBUTE([dllimport])
383
384 if test x$use_glibc_compat != xno; then
385
386   #__fdelt_chk's params and return type have changed from long unsigned int to long int.
387   # See which one is present here.
388   AC_MSG_CHECKING(__fdelt_chk type)
389   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
390                     #undef _FORTIFY_SOURCE
391                   #endif
392                   #define _FORTIFY_SOURCE 2
393                   #include <sys/select.h>
394      extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
395     [ fdelt_type="long unsigned int"],
396     [ fdelt_type="long int"])
397   AC_MSG_RESULT($fdelt_type)
398   AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
399
400 fi
401
402 if test x$use_hardening != xno; then
403   AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
404   AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
405
406   AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
407     AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
408       HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
409     ])
410     HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
411   ])
412
413   AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
414   AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
415   AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
416   AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
417
418   if test x$TARGET_OS != xwindows; then
419     # All windows code is PIC, forcing it on just adds useless compile warnings
420     AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
421     AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
422   fi
423
424   case $host in
425     *mingw*)
426        AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
427     ;;
428   esac
429
430   CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
431   CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
432   LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
433   OBJCXXFLAGS="$CXXFLAGS"
434 fi
435
436 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
437 if test x$TARGET_OS = xdarwin; then
438   AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
439 fi
440
441 AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
442 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
443 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
444
445 AC_CHECK_DECLS([strnlen])
446
447 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
448                 [#if HAVE_ENDIAN_H
449                  #include <endian.h>
450                  #elif HAVE_SYS_ENDIAN_H
451                  #include <sys/endian.h>
452                  #endif])
453
454 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
455                 [#if HAVE_BYTESWAP_H
456                  #include <byteswap.h>
457                  #endif])
458
459 dnl Check for MSG_NOSIGNAL
460 AC_MSG_CHECKING(for MSG_NOSIGNAL)
461 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
462  [[ int f = MSG_NOSIGNAL; ]])],
463  [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
464  [ AC_MSG_RESULT(no)]
465 )
466
467 AC_SEARCH_LIBS([clock_gettime],[rt])
468
469 AC_MSG_CHECKING([for visibility attribute])
470 AC_LINK_IFELSE([AC_LANG_SOURCE([
471   int foo_def( void ) __attribute__((visibility("default")));
472   int main(){}
473   ])],
474   [
475     AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
476     AC_MSG_RESULT(yes)
477   ],
478   [
479     AC_MSG_RESULT(no)
480     if test x$use_reduce_exports = xyes; then
481       AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
482     fi
483   ]
484 )
485
486 if test x$use_reduce_exports = xyes; then
487   AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
488   [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
489 fi
490
491 LEVELDB_CPPFLAGS=
492 LIBLEVELDB=
493 LIBMEMENV=
494 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
495 AC_SUBST(LEVELDB_CPPFLAGS)
496 AC_SUBST(LIBLEVELDB)
497 AC_SUBST(LIBMEMENV)
498
499 if test x$enable_wallet != xno; then
500     dnl Check for libdb_cxx only if wallet enabled
501     BITCOIN_FIND_BDB48
502 fi
503
504 dnl Check for libminiupnpc (optional)
505 if test x$use_upnp != xno; then
506   AC_CHECK_HEADERS(
507     [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
508     [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
509     [have_miniupnpc=no]
510   )
511 fi
512
513 BITCOIN_QT_INIT
514
515 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
516 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
517
518 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
519     use_boost=no
520 else
521     use_boost=yes
522 fi
523
524 if test x$use_boost = xyes; then
525
526 dnl Check for boost libs
527 AX_BOOST_BASE
528 AX_BOOST_SYSTEM
529 AX_BOOST_FILESYSTEM
530 AX_BOOST_PROGRAM_OPTIONS
531 AX_BOOST_THREAD
532 AX_BOOST_CHRONO
533
534
535 if test x$use_reduce_exports = xyes; then
536   AC_MSG_CHECKING([for working boost reduced exports])
537   TEMP_CPPFLAGS="$CPPFLAGS"
538   CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
539   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
540       @%:@include <boost/version.hpp>
541     ]], [[
542       #if BOOST_VERSION >= 104900
543       // Everything is okay
544       #else
545       #  error Boost version is too old
546       #endif
547     ]])],[
548       AC_MSG_RESULT(yes)
549     ],[
550     AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
551   ])
552   CPPFLAGS="$TEMP_CPPFLAGS"
553 fi
554 fi
555
556 if test x$use_reduce_exports = xyes; then
557     CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
558     AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
559 fi
560
561 if test x$use_tests = xyes; then
562
563   if test x$HEXDUMP = x; then
564     AC_MSG_ERROR(hexdump is required for tests)
565   fi
566
567
568   if test x$use_boost = xyes; then
569
570   AX_BOOST_UNIT_TEST_FRAMEWORK
571
572   dnl Determine if -DBOOST_TEST_DYN_LINK is needed
573   AC_MSG_CHECKING([for dynamic linked boost test])
574   TEMP_LIBS="$LIBS"
575   LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
576   TEMP_CPPFLAGS="$CPPFLAGS"
577   CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
578   AC_LINK_IFELSE([AC_LANG_SOURCE([
579        #define BOOST_TEST_DYN_LINK
580        #define BOOST_TEST_MAIN
581         #include <boost/test/unit_test.hpp>
582
583        ])],
584     [AC_MSG_RESULT(yes)]
585     [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
586     [AC_MSG_RESULT(no)])
587   LIBS="$TEMP_LIBS"
588   CPPFLAGS="$TEMP_CPPFLAGS"
589
590   fi
591 fi
592
593 if test x$use_boost = xyes; then
594
595 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
596
597 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
598 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
599 dnl a working version is available, else fall back to sleep. sleep was removed
600 dnl after 1.56.
601 dnl If neither is available, abort.
602 TEMP_LIBS="$LIBS"
603 LIBS="$BOOST_LIBS $LIBS"
604 TEMP_CPPFLAGS="$CPPFLAGS"
605 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
606 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
607   #include <boost/thread/thread.hpp>
608   #include <boost/version.hpp>
609   ]],[[
610   #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
611       boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
612   #else
613    choke me
614   #endif
615   ]])],
616   [boost_sleep=yes;
617      AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
618   [boost_sleep=no])
619 LIBS="$TEMP_LIBS"
620 CPPFLAGS="$TEMP_CPPFLAGS"
621
622 if test x$boost_sleep != xyes; then
623 TEMP_LIBS="$LIBS"
624 LIBS="$BOOST_LIBS $LIBS"
625 TEMP_CPPFLAGS="$CPPFLAGS"
626 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
627 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
628   #include <boost/version.hpp>
629   #include <boost/thread.hpp>
630   #include <boost/date_time/posix_time/posix_time_types.hpp>
631   ]],[[
632   #if BOOST_VERSION <= 105600
633       boost::this_thread::sleep(boost::posix_time::milliseconds(0));
634   #else
635    choke me
636   #endif
637   ]])],
638   [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
639   [boost_sleep=no])
640 LIBS="$TEMP_LIBS"
641 CPPFLAGS="$TEMP_CPPFLAGS"
642 fi
643
644 if test x$boost_sleep != xyes; then
645   AC_MSG_ERROR(No working boost sleep implementation found.)
646 fi
647
648 fi
649
650 if test x$use_pkgconfig = xyes; then
651
652   if test x"$PKG_CONFIG" = "x"; then
653     AC_MSG_ERROR(pkg-config not found.)
654   fi
655
656   : #NOP
657   m4_ifdef(
658     [PKG_CHECK_MODULES],
659     [
660       PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl  not found.)])
661       PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto  not found.)])
662       BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
663       if test x$use_qr != xno; then
664         BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
665       fi
666     ]
667   )
668 else
669   AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
670   AC_CHECK_LIB([crypto],      [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
671
672   AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
673   AC_CHECK_LIB([ssl],         [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
674
675   BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
676   if test x$use_qr != xno; then
677     BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
678     BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
679   fi
680 fi
681
682 AC_CHECK_LIB([crypto],[RAND_egd],[],[
683   AC_ARG_WITH([libressl],
684     [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
685     [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
686     [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
687   )
688 ])
689
690 CFLAGS_TEMP="$CFLAGS"
691 LIBS_TEMP="$LIBS"
692 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
693 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
694 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
695
696 AC_MSG_CHECKING(for a supported OpenSSL version)
697 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
698   #include <openssl/rand.h>
699   ]],
700   [[RAND_egd(NULL);]])],
701   [AC_MSG_RESULT(yes)],
702   [
703     AC_ARG_WITH([libressl],
704     [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
705     [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
706     [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
707     )]
708 )
709
710 CFLAGS="$CFLAGS_TEMP"
711 LIBS="$LIBS_TEMP"
712
713 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
714
715 AC_MSG_CHECKING([whether to build bitcoind])
716 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
717 AC_MSG_RESULT($build_bitcoind)
718
719 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
720 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
721 AC_MSG_RESULT($build_bitcoin_utils)
722
723 AC_MSG_CHECKING([whether to build libraries])
724 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
725 if test x$build_bitcoin_libs = xyes; then
726   AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
727   AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
728 fi
729 AC_MSG_RESULT($build_bitcoin_libs)
730
731 AC_LANG_POP
732
733 if test "x$use_ccache" != "xno"; then
734   AC_MSG_CHECKING(if ccache should be used)
735   if test x$CCACHE = x; then
736     if test "x$use_ccache" = "xyes"; then
737       AC_MSG_ERROR([ccache not found.]);
738     else
739       use_ccache=no
740     fi
741   else
742     use_ccache=yes
743     CC="$ac_cv_path_CCACHE $CC"
744     CXX="$ac_cv_path_CCACHE $CXX"
745   fi
746   AC_MSG_RESULT($use_ccache)
747 fi
748 if test "x$use_ccache" = "xyes"; then
749     AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
750 fi
751
752 dnl enable wallet
753 AC_MSG_CHECKING([if wallet should be enabled])
754 if test x$enable_wallet != xno; then
755   AC_MSG_RESULT(yes)
756   AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
757
758 else
759   AC_MSG_RESULT(no)
760 fi
761
762 dnl enable upnp support
763 AC_MSG_CHECKING([whether to build with support for UPnP])
764 if test x$have_miniupnpc = xno; then
765   if test x$use_upnp = xyes; then
766      AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
767   fi
768   AC_MSG_RESULT(no)
769 else
770   if test x$use_upnp != xno; then
771     AC_MSG_RESULT(yes)
772     AC_MSG_CHECKING([whether to build with UPnP enabled by default])
773     use_upnp=yes
774     upnp_setting=0
775     if test x$use_upnp_default != xno; then
776       use_upnp_default=yes
777       upnp_setting=1
778     fi
779     AC_MSG_RESULT($use_upnp_default)
780     AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
781     if test x$TARGET_OS = xwindows; then
782       MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
783     fi
784   else
785     AC_MSG_RESULT(no)
786   fi
787 fi
788
789 dnl these are only used when qt is enabled
790 if test x$bitcoin_enable_qt != xno; then
791   BUILD_QT=qt
792   dnl enable dbus support
793   AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
794   if test x$bitcoin_enable_qt_dbus != xno; then
795     AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
796   fi
797   AC_MSG_RESULT($bitcoin_enable_qt_dbus)
798
799   dnl enable qr support
800   AC_MSG_CHECKING([whether to build GUI with support for QR codes])
801   if test x$have_qrencode = xno; then
802     if test x$use_qr = xyes; then
803      AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
804     fi
805     AC_MSG_RESULT(no)
806   else
807     if test x$use_qr != xno; then
808       AC_MSG_RESULT(yes)
809       AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
810       use_qr=yes
811     else
812       AC_MSG_RESULT(no)
813     fi
814   fi
815
816   if test x$XGETTEXT = x; then
817     AC_MSG_WARN("xgettext is required to update qt translations")
818   fi
819
820   AC_MSG_CHECKING([whether to build test_bitcoin-qt])
821   if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
822     AC_MSG_RESULT([yes])
823     BUILD_TEST_QT="test"
824   else
825     AC_MSG_RESULT([no])
826   fi
827 fi
828
829 AC_MSG_CHECKING([whether to build test_bitcoin])
830 if test x$use_tests = xyes; then
831   AC_MSG_RESULT([yes])
832   BUILD_TEST="test"
833 else
834   AC_MSG_RESULT([no])
835 fi
836
837 AC_MSG_CHECKING([whether to reduce exports])
838 if test x$use_reduce_exports = xyes; then
839   AC_MSG_RESULT([yes])
840 else
841   AC_MSG_RESULT([no])
842 fi
843
844 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
845   AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
846 fi
847
848 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
849 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
850 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
851 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
852 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
853 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
854 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
855 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
856 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
857 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
858 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
859 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
860
861 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
862 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
863 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
864 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
865 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
866 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
867 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
868 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
869 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
870 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
871 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
872 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
873
874 AC_SUBST(RELDFLAGS)
875 AC_SUBST(LIBTOOL_APP_LDFLAGS)
876 AC_SUBST(USE_UPNP)
877 AC_SUBST(USE_QRCODE)
878 AC_SUBST(BOOST_LIBS)
879 AC_SUBST(TESTDEFS)
880 AC_SUBST(LEVELDB_TARGET_FLAGS)
881 AC_SUBST(BUILD_TEST)
882 AC_SUBST(BUILD_QT)
883 AC_SUBST(BUILD_TEST_QT)
884 AC_SUBST(MINIUPNPC_CPPFLAGS)
885 AC_SUBST(MINIUPNPC_LIBS)
886 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
887 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
888 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
889
890 dnl boost's m4 checks do something really nasty: they export these vars. As a
891 dnl result, they leak into secp256k1's configure and crazy things happen.
892 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
893 CPPFLAGS_TEMP="$CPPFLAGS"
894 unset CPPFLAGS
895 CPPFLAGS="$CPPFLAGS_TEMP"
896
897 LDFLAGS_TEMP="$LDFLAGS"
898 unset LDFLAGS
899 LDFLAGS="$LDFLAGS_TEMP"
900
901 LIBS_TEMP="$LIBS"
902 unset LIBS
903 LIBS="$LIBS_TEMP"
904
905 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
906 unset PKG_CONFIG_PATH
907 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
908
909 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
910 unset PKG_CONFIG_LIBDIR
911 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
912
913 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
914 AC_CONFIG_SUBDIRS([src/secp256k1])
915
916 AC_OUTPUT
917
918 dnl Taken from https://wiki.debian.org/RpathIssue
919 case $host in
920    *-*-linux-gnu)
921      AC_MSG_RESULT([Fixing libtool for -rpath problems.])
922      sed < libtool > libtool-2 \
923      's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
924      mv libtool-2 libtool
925      chmod 755 libtool
926    ;;
927 esac
This page took 0.07249 seconds and 4 git commands to generate.