]> Git Repo - VerusCoin.git/blame - configure.ac
doc: add libgmp dependency for secp256k1
[VerusCoin.git] / configure.ac
CommitLineData
35b8af92
CF
1dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
2AC_PREREQ([2.60])
3define(_CLIENT_VERSION_MAJOR, 0)
f9a2f088 4define(_CLIENT_VERSION_MINOR, 9)
ad6ae489 5define(_CLIENT_VERSION_REVISION, 99)
35b8af92 6define(_CLIENT_VERSION_BUILD, 0)
ad6ae489 7define(_CLIENT_VERSION_IS_RELEASE, false)
5bab5589 8define(_COPYRIGHT_YEAR, 2014)
fe14e8d7 9AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[[email protected]],[bitcoin])
e5438111 10AC_CONFIG_SRCDIR([src/main.cpp])
11AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
52a5f903 12AC_CONFIG_AUX_DIR([build-aux])
13AC_CONFIG_MACRO_DIR([build-aux/m4])
1723862e 14
35b8af92 15AC_CANONICAL_HOST
1723862e 16
35b8af92
CF
17AH_TOP([#ifndef BITCOIN_CONFIG_H])
18AH_TOP([#define BITCOIN_CONFIG_H])
19AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
20
35b8af92
CF
21dnl faketime breaks configure and is only needed for make. Disable it here.
22unset FAKETIME
23
eefb766c 24dnl Automake init set-up and checks
35b8af92
CF
25AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
26
27dnl faketime messes with timestamps and causes configure to be re-run.
28dnl --disable-maintainer-mode can be used to bypass this.
29AM_MAINTAINER_MODE([enable])
30
31dnl make the compilation flags quiet unless V=1 is used
32m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
33
eefb766c 34dnl Compiler checks (here before libtool).
35if test "x${CXXFLAGS+set}" = "xset"; then
36 CXXFLAGS_overridden=yes
37else
38 CXXFLAGS_overridden=no
39fi
52a5f903 40AC_PROG_CXX
52a5f903 41m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
eefb766c 42
43dnl By default, libtool for mingw refuses to link static libs into a dll for
44dnl fear of mixing pic/non-pic objects, and import/export complications. Since
45dnl we have those under control, re-enable that functionality.
46case $host in
47 *mingw*)
48 lt_cv_deplibs_check_method="pass_all"
49 ;;
50esac
51dnl Libtool init checks.
52LT_INIT([disable-shared])
53
54dnl Check/return PATH for base programs.
52a5f903 55AC_PATH_TOOL(AR, ar)
56AC_PATH_TOOL(RANLIB, ranlib)
57AC_PATH_TOOL(STRIP, strip)
58AC_PATH_TOOL(GCOV, gcov)
59AC_PATH_PROG(LCOV, lcov)
60AC_PATH_PROG(JAVA, java)
61AC_PATH_PROG(GENHTML, genhtml)
62AC_PATH_PROG([GIT], [git])
63AC_PATH_PROG(CCACHE,ccache)
64AC_PATH_PROG(XGETTEXT,xgettext)
65AC_PATH_PROG(HEXDUMP,hexdump)
eefb766c 66
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.
72m4_include([pkg.m4])
73
74dnl pkg-config check.
52a5f903 75PKG_PROG_PKG_CONFIG
76
4f9e993b
WL
77# Enable wallet
78AC_ARG_ENABLE([wallet],
79 [AS_HELP_STRING([--enable-wallet],
80 [enable wallet (default is yes)])],
81 [enable_wallet=$enableval],
82 [enable_wallet=yes])
83
35b8af92
CF
84AC_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])
89
90AC_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])
95
35b8af92
CF
96AC_ARG_ENABLE(tests,
97 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
98 [use_tests=$enableval],
99 [use_tests=yes])
100
101AC_ARG_WITH([comparison-tool],
47b9374e 102 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
35b8af92
CF
103 [use_comparison_tool=$withval],
104 [use_comparison_tool=no])
105
47b9374e
MC
106AC_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])
110
35b8af92
CF
111AC_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])
116
35b8af92
CF
117AC_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])
122
e432a5f0
CF
123AC_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])
128
35b8af92
CF
129AC_ARG_ENABLE([ccache],
130 [AS_HELP_STRING([--enable-ccache],
e18e1001 131 [use ccache for building (default is yes if ccache is found)])],
35b8af92
CF
132 [use_ccache=$enableval],
133 [use_ccache=auto])
134
135AC_ARG_ENABLE([lcov],
136 [AS_HELP_STRING([--enable-lcov],
137 [enable lcov testing (default is no)])],
138 [use_lcov=yes],
139 [use_lcov=no])
140
d5aab704
CF
141AC_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])
146
35b8af92
CF
147AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
148
f5f157b8 149# Enable debug
150AC_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])
155
156if 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
164fi
165
35b8af92
CF
166## TODO: Remove these hard-coded paths and flags. They are here for the sake of
167## compatibility with the legacy buildsystem.
168##
123e4f87
LD
169if test "x$CXXFLAGS_overridden" = "xno"; then
170 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
171fi
51ed9ec9 172CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
35b8af92
CF
173
174AC_LANG_PUSH([C++])
175
176use_pkgconfig=yes
177case $host in
178 *mingw*)
179
96b9603c 180 #pkgconfig does more harm than good with MinGW
35b8af92
CF
181 use_pkgconfig=no
182
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))
c589f5f2
CF
202 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
203
204 AX_CHECK_LINK_FLAG([[-static-libgcc]],[LDFLAGS="$LDFLAGS -static-libgcc"])
205 AX_CHECK_LINK_FLAG([[-static-libstdc++]],[LDFLAGS="$LDFLAGS -static-libstdc++"])
35b8af92 206
575e70c0
CF
207 # -static is interpreted by libtool, where it has a different meaning.
208 # In libtool-speak, it's -all-static.
209 AX_CHECK_LINK_FLAG([[-static]],[LDFLAGS="$LDFLAGS -static"; LIBTOOL_LDFLAGS="$LIBTOOL_LDFLAGS -all-static"])
210
35b8af92
CF
211 AC_PATH_PROG([MAKENSIS], [makensis], none)
212 if test x$MAKENSIS = xnone; then
213 AC_MSG_WARN("makensis not found. Cannot create installer.")
214 fi
215
5ceb9c96
CF
216 AC_PATH_TOOL(WINDRES, windres, none)
217 if test x$WINDRES = xnone; then
218 AC_MSG_ERROR("windres not found")
219 fi
220
b77dfdc9 221 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
35b8af92 222 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
123e4f87
LD
223 if test "x$CXXFLAGS_overridden" = "xno"; then
224 CXXFLAGS="$CXXFLAGS -w"
225 fi
2f87b38e
WL
226 case $host in
227 i?86-*) WINDOWS_BITS=32 ;;
228 x86_64-*) WINDOWS_BITS=64 ;;
229 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
230 esac
231 AC_SUBST(WINDOWS_BITS)
35b8af92
CF
232 ;;
233 *darwin*)
234 TARGET_OS=darwin
235 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
236 if test x$cross_compiling != xyes; then
b62bbb1f 237 BUILD_OS=darwin
35b8af92
CF
238 AC_CHECK_PROG([PORT],port, port)
239 if test x$PORT = xport; then
240 dnl add default macports paths
2691cbc4 241 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include -I/opt/local/include/db48"
35b8af92
CF
242 LIBS="$LIBS -L/opt/local/lib -L/opt/local/lib/db48"
243 fi
244
245 AC_CHECK_PROG([BREW],brew, brew)
246 if test x$BREW = xbrew; then
27368e76 247 dnl These Homebrew packages may be keg-only, meaning that they won't be found
9fedafba
CF
248 dnl in expected paths because they may conflict with system files. Ask
249 dnl Homebrew where each one is located, then adjust paths accordingly.
250 dnl It's safe to add these paths even if the functionality is disabled by
251 dnl the user (--without-wallet or --without-gui for example).
252
253 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
254 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
255 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
256 if test x$openssl_prefix != x; then
b77b4eda 257 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
f9e40fb0 258 export PKG_CONFIG_PATH
9fedafba
CF
259 fi
260 if test x$bdb_prefix != x; then
261 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
262 LIBS="$LIBS -L$bdb_prefix/lib"
263 fi
264 if test x$qt5_prefix != x; then
b77b4eda 265 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
f9e40fb0 266 export PKG_CONFIG_PATH
9fedafba 267 fi
35b8af92 268 fi
b62bbb1f
CF
269 else
270 case $build_os in
271 *darwin*)
272 BUILD_OS=darwin
273 ;;
274 *)
275 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
276 AC_PATH_TOOL([OTOOL], [otool], otool)
277 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
278 ;;
279 esac
35b8af92
CF
280 fi
281
35b8af92 282 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
35b8af92 283 ;;
ab123ad4
CF
284 *linux*)
285 TARGET_OS=linux
286 ;;
35b8af92 287 *)
35b8af92
CF
288 ;;
289esac
290
35b8af92
CF
291if test x$use_comparison_tool != xno; then
292 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
293fi
294
47b9374e 295if test x$use_comparison_tool_reorg_tests != xno; then
b77b4eda 296 if test x$use_comparison_tool = x; then
47b9374e
MC
297 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
298 fi
299 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
300else
301 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
302fi
303
b77b4eda
LD
304if test x$use_lcov = xyes; then
305 if test x$LCOV = x; then
35b8af92
CF
306 AC_MSG_ERROR("lcov testing requested but lcov not found")
307 fi
b77b4eda 308 if test x$GCOV = x; then
35b8af92
CF
309 AC_MSG_ERROR("lcov testing requested but gcov not found")
310 fi
b77b4eda 311 if test x$JAVA = x; then
35b8af92
CF
312 AC_MSG_ERROR("lcov testing requested but java not found")
313 fi
b77b4eda 314 if test x$GENHTML = x; then
35b8af92
CF
315 AC_MSG_ERROR("lcov testing requested but genhtml not found")
316 fi
b77b4eda 317 if test x$use_comparison_tool = x; then
35b8af92
CF
318 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
319 fi
320 LCOV="$LCOV --gcov-tool=$GCOV"
321 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
322 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
323fi
324
325dnl Require little endian
326AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")])
327
328dnl Check for pthread compile/link requirements
329AX_PTHREAD
35b8af92
CF
330
331# The following macro will add the necessary defines to bitcoin-config.h, but
332# they also need to be passed down to any subprojects. Pull the results out of
333# the cache and add them to CPPFLAGS.
334AC_SYS_LARGEFILE
a60838d0
WL
335# detect POSIX or GNU variant of strerror_r
336AC_FUNC_STRERROR_R
35b8af92
CF
337
338if test x$ac_cv_sys_file_offset_bits != x &&
339 test x$ac_cv_sys_file_offset_bits != xno &&
340 test x$ac_cv_sys_file_offset_bits != xunknown; then
341 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
342fi
343
344if test x$ac_cv_sys_large_files != x &&
345 test x$ac_cv_sys_large_files != xno &&
346 test x$ac_cv_sys_large_files != xunknown; then
347 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
348fi
349
350AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
351
d5aab704
CF
352if test x$use_glibc_compat != xno; then
353
354 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
355 # See which one is present here.
356 AC_MSG_CHECKING(__fdelt_chk type)
e2a98d27 357 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
8021cf8d
CF
358 #undef _FORTIFY_SOURCE
359 #endif
360 #define _FORTIFY_SOURCE 2
d5aab704 361 #include <sys/select.h>
e2a98d27 362 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
d5aab704
CF
363 [ fdelt_type="long unsigned int"],
364 [ fdelt_type="long int"])
365 AC_MSG_RESULT($fdelt_type)
366 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
367
368fi
369
35b8af92
CF
370if test x$use_hardening != xno; then
371 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
4e57e238 372 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
35b8af92 373
9b4e03b2
LD
374 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
375 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
376 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
377 ])
378 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
379 ])
35b8af92
CF
380
381 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
382 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
505867ac
MM
383 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
384 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
35b8af92
CF
385
386 if test x$TARGET_OS != xwindows; then
eccd5856
CF
387 # All windows code is PIC, forcing it on just adds useless compile warnings
388 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
35b8af92
CF
389 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
390 fi
391
392 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
393 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
394 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
395 OBJCXXFLAGS="$CXXFLAGS"
396fi
397
398dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
399if test x$TARGET_OS = xdarwin; then
400 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
401fi
402
4c61ba40 403AC_CHECK_HEADERS([endian.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
caf6150e
HL
404AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
405AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
f2647cc0
CF
406
407AC_CHECK_DECLS([le32toh, le64toh, htole32, htole64, be32toh, be64toh, htobe32, htobe64],,,
408 [#if HAVE_ENDIAN_H
409 #include <endian.h>
410 #endif])
35b8af92
CF
411
412dnl Check for MSG_NOSIGNAL
413AC_MSG_CHECKING(for MSG_NOSIGNAL)
e2a98d27 414AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
415 [[ int f = MSG_NOSIGNAL; ]])],
35b8af92
CF
416 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
417 [ AC_MSG_RESULT(no)]
418)
419
460b32d7
CF
420AC_SEARCH_LIBS([clock_gettime],[rt])
421
e432a5f0
CF
422AC_MSG_CHECKING([for visibility attribute])
423AC_LINK_IFELSE([AC_LANG_SOURCE([
424 int foo_def( void ) __attribute__((visibility("default")));
425 int main(){}
426 ])],
427 [
428 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
429 AC_MSG_RESULT(yes)
430 ],
431 [
432 AC_MSG_RESULT(no)
433 if test x$use_reduce_exports = xyes; then
434 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduced-exports.])
435 fi
436 AC_MSG_WARN([Cannot find a working visibility attribute. Disabling reduced exports.])
437 use_reduce_exports=no
438 ]
439)
440
441if test x$use_reduce_exports != xno; then
442 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
443 [
444 if test x$use_reduce_exports = xyes; then
445 AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduced-exports.])
446 fi
447 AC_MSG_WARN([Cannot set default symbol visibility. Disabling reduced exports.])
448 use_reduce_exports=no
449 ])
450fi
451
4a290b52
LD
452LEVELDB_CPPFLAGS=
453LIBLEVELDB=
454LIBMEMENV=
455AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
456AC_SUBST(LEVELDB_CPPFLAGS)
457AC_SUBST(LIBLEVELDB)
458AC_SUBST(LIBMEMENV)
459
4f9e993b
WL
460if test x$enable_wallet != xno; then
461 dnl Check for libdb_cxx only if wallet enabled
462 BITCOIN_FIND_BDB48
463fi
35b8af92
CF
464
465dnl Check for libminiupnpc (optional)
466if test x$use_upnp != xno; then
a26a3676
JT
467 AC_CHECK_HEADERS(
468 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
28d412ff 469 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
a26a3676
JT
470 [have_miniupnpc=no]
471 )
35b8af92
CF
472fi
473
474dnl Check for boost libs
475AX_BOOST_BASE
476AX_BOOST_SYSTEM
477AX_BOOST_FILESYSTEM
478AX_BOOST_PROGRAM_OPTIONS
479AX_BOOST_THREAD
480AX_BOOST_CHRONO
481
e432a5f0
CF
482
483if test x$use_reduce_exports != xno; then
484 AC_MSG_CHECKING([for working boost reduced exports])
485 TEMP_CPPFLAGS="$CPPFLAGS"
486 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
487 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
488 @%:@include <boost/version.hpp>
489 ]], [[
490 #if BOOST_VERSION >= 104900
491 // Everything is okay
492 #else
493 # error Boost version is too old
494 #endif
495 ]])],[
496 AC_MSG_RESULT(yes)
497 ],[:
498 if test x$use_reduce_exports = xauto; then
499 use_reduce_exports=no
500 else
501 if test x$use_reduce_exports = xyes; then
502 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduced-exports.])
503 fi
504 fi
505 AC_MSG_RESULT(no)
506 AC_MSG_WARN([boost versions < 1.49 are known to have symbol visibility issues. Disabling reduced exports.])
507 ])
508 CPPFLAGS="$TEMP_CPPFLAGS"
509fi
510
511if test x$use_reduce_exports != xno; then
512 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
513 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
514fi
515
35b8af92 516if test x$use_tests = xyes; then
152e51c7
CF
517
518 if test x$HEXDUMP = x; then
519 AC_MSG_ERROR(hexdump is required for tests)
520 fi
521
522
35b8af92 523 AX_BOOST_UNIT_TEST_FRAMEWORK
e4b991e5
WL
524
525 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
526 AC_MSG_CHECKING([for dynamic linked boost test])
527 TEMP_LIBS="$LIBS"
a7d1f035 528 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
e4b991e5
WL
529 TEMP_CPPFLAGS="$CPPFLAGS"
530 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
531 AC_LINK_IFELSE([AC_LANG_SOURCE([
532 #define BOOST_TEST_DYN_LINK
533 #define BOOST_TEST_MAIN
534 #include <boost/test/unit_test.hpp>
535
536 ])],
537 [AC_MSG_RESULT(yes)]
538 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
539 [AC_MSG_RESULT(no)])
540 LIBS="$TEMP_LIBS"
541 CPPFLAGS="$TEMP_CPPFLAGS"
35b8af92
CF
542fi
543
544BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
35b8af92
CF
545
546dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
547dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
548dnl a working version is available, else fall back to sleep. sleep was removed
549dnl after 1.56.
550dnl If neither is available, abort.
551dnl If sleep_for is used, boost_chrono becomes a requirement.
552if test x$ax_cv_boost_chrono = xyes; then
553TEMP_LIBS="$LIBS"
460b32d7 554LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
714cdecb
WL
555TEMP_CPPFLAGS="$CPPFLAGS"
556CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
e2a98d27 557AC_LINK_IFELSE([AC_LANG_PROGRAM([[
35b8af92
CF
558 #include <boost/thread/thread.hpp>
559 #include <boost/version.hpp>
e2a98d27 560 ]],[[
35b8af92
CF
561 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
562 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
563 #else
564 choke me
565 #endif
e2a98d27 566 ]])],
35b8af92
CF
567 [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
568 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
569 [boost_sleep=no])
570LIBS="$TEMP_LIBS"
714cdecb 571CPPFLAGS="$TEMP_CPPFLAGS"
35b8af92
CF
572fi
573
574if test x$boost_sleep != xyes; then
575TEMP_LIBS="$LIBS"
460b32d7 576LIBS="$BOOST_LIBS $LIBS"
714cdecb
WL
577TEMP_CPPFLAGS="$CPPFLAGS"
578CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
e2a98d27 579AC_LINK_IFELSE([AC_LANG_PROGRAM([[
35b8af92
CF
580 #include <boost/version.hpp>
581 #include <boost/thread.hpp>
582 #include <boost/date_time/posix_time/posix_time_types.hpp>
e2a98d27 583 ]],[[
35b8af92
CF
584 #if BOOST_VERSION <= 105600
585 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
586 #else
587 choke me
588 #endif
e2a98d27 589 ]])],
35b8af92
CF
590 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
591 [boost_sleep=no])
592LIBS="$TEMP_LIBS"
714cdecb 593CPPFLAGS="$TEMP_CPPFLAGS"
35b8af92
CF
594fi
595
596if test x$boost_sleep != xyes; then
539abc47 597 AC_MSG_ERROR(No working boost sleep implementation found.)
35b8af92
CF
598fi
599
c101c769 600AC_ARG_WITH([utils],
601 [AS_HELP_STRING([--with-utils],
602 [build bitcoin-cli bitcoin-tx (default=yes)])],
603 [build_bitcoin_utils=$withval],
604 [build_bitcoin_utils=yes])
a9dbcf03
LD
605
606AC_ARG_WITH([daemon],
607 [AS_HELP_STRING([--with-daemon],
c101c769 608 [build bitcoind daemon (default=yes)])],
a9dbcf03
LD
609 [build_bitcoind=$withval],
610 [build_bitcoind=yes])
611
c8ba8ef6
CF
612BITCOIN_QT_INIT
613
35b8af92
CF
614if test x$use_pkgconfig = xyes; then
615
b77b4eda 616 if test x"$PKG_CONFIG" = "x"; then
12564aa1 617 AC_MSG_ERROR(pkg-config not found.)
35b8af92
CF
618 fi
619
620 : #NOP
621 m4_ifdef(
622 [PKG_CHECK_MODULES],
623 [
6b099402
CF
624 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
625 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
c8ba8ef6
CF
626 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
627 if test x$use_qr != xno; then
628 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
629 fi
35b8af92
CF
630 ]
631 )
632else
633 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
6b099402 634 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
35b8af92
CF
635
636 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
6b099402 637 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
35b8af92 638
28d412ff 639 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
c8ba8ef6 640 if test x$use_qr != xno; then
28d412ff 641 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
c8ba8ef6
CF
642 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
643 fi
644fi
35b8af92 645
c8ba8ef6 646BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
fcfbf547 647
e18e1001 648AC_MSG_CHECKING([whether to build bitcoind])
f930341d
LD
649AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
650AC_MSG_RESULT($build_bitcoind)
651
c101c769 652AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
653AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
654AC_MSG_RESULT($build_bitcoin_utils)
f930341d 655
c8ba8ef6
CF
656dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
657BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
35b8af92 658
35b8af92
CF
659AC_LANG_POP
660
661if test "x$use_ccache" != "xno"; then
e18e1001 662 AC_MSG_CHECKING(if ccache should be used)
35b8af92
CF
663 if test x$CCACHE = x; then
664 if test "x$use_ccache" = "xyes"; then
665 AC_MSG_ERROR([ccache not found.]);
666 else
35b8af92
CF
667 use_ccache=no
668 fi
669 else
670 use_ccache=yes
671 CC="$ac_cv_path_CCACHE $CC"
672 CXX="$ac_cv_path_CCACHE $CXX"
673 fi
674 AC_MSG_RESULT($use_ccache)
675fi
386efb76
CF
676if test "x$use_ccache" = "xyes"; then
677 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
678fi
35b8af92 679
4f9e993b
WL
680dnl enable wallet
681AC_MSG_CHECKING([if wallet should be enabled])
682if test x$enable_wallet != xno; then
683 AC_MSG_RESULT(yes)
684 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
685
686else
687 AC_MSG_RESULT(no)
4f9e993b
WL
688fi
689
35b8af92 690dnl enable upnp support
e18e1001 691AC_MSG_CHECKING([whether to build with support for UPnP])
35b8af92
CF
692if test x$have_miniupnpc = xno; then
693 if test x$use_upnp = xyes; then
e18e1001 694 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
35b8af92
CF
695 fi
696 AC_MSG_RESULT(no)
697else
698 if test x$use_upnp != xno; then
699 AC_MSG_RESULT(yes)
e18e1001 700 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
35b8af92
CF
701 use_upnp=yes
702 upnp_setting=0
703 if test x$use_upnp_default != xno; then
704 use_upnp_default=yes
705 upnp_setting=1
706 fi
707 AC_MSG_RESULT($use_upnp_default)
e18e1001 708 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
35b8af92 709 if test x$TARGET_OS = xwindows; then
9f7f504e 710 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
35b8af92
CF
711 fi
712 else
713 AC_MSG_RESULT(no)
714 fi
715fi
716
35b8af92 717dnl these are only used when qt is enabled
c8ba8ef6
CF
718if test x$bitcoin_enable_qt != xno; then
719 BUILD_QT=qt
35b8af92 720 dnl enable dbus support
e18e1001 721 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
c8ba8ef6 722 if test x$bitcoin_enable_qt_dbus != xno; then
35b8af92 723 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
35b8af92 724 fi
c8ba8ef6 725 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
35b8af92
CF
726
727 dnl enable qr support
e18e1001 728 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
35b8af92 729 if test x$have_qrencode = xno; then
b77b4eda 730 if test x$use_qr = xyes; then
35b8af92
CF
731 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
732 fi
733 AC_MSG_RESULT(no)
734 else
735 if test x$use_qr != xno; then
736 AC_MSG_RESULT(yes)
737 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
738 use_qr=yes
739 else
740 AC_MSG_RESULT(no)
741 fi
742 fi
743
b77b4eda 744 if test x$XGETTEXT = x; then
c8ba8ef6
CF
745 AC_MSG_WARN("xgettext is required to update qt translations")
746 fi
747
e18e1001
LD
748 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
749 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
750 AC_MSG_RESULT([yes])
35b8af92 751 BUILD_TEST_QT="test"
e18e1001
LD
752 else
753 AC_MSG_RESULT([no])
c8ba8ef6 754 fi
35b8af92
CF
755fi
756
e18e1001 757AC_MSG_CHECKING([whether to build test_bitcoin])
35b8af92 758if test x$use_tests = xyes; then
e18e1001 759 AC_MSG_RESULT([yes])
35b8af92 760 BUILD_TEST="test"
e18e1001
LD
761else
762 AC_MSG_RESULT([no])
35b8af92
CF
763fi
764
e432a5f0
CF
765AC_MSG_CHECKING([whether to reduce exports])
766if test x$use_reduce_exports != xno; then
767 AC_MSG_RESULT([yes])
768else
769 AC_MSG_RESULT([no])
770fi
771
c101c769 772if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
773 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-daemon --with-gui or --enable-tests])
a9dbcf03
LD
774fi
775
35b8af92 776AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
b62bbb1f 777AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
35b8af92 778AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
b77b4eda
LD
779AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
780AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
781AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
65e8ba4d 782AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
35b8af92 783AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
b77b4eda 784AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
35b8af92 785AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
47b9374e 786AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
d5aab704 787AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
55668266 788AM_CONDITIONAL([USE_LIBSECP256K1],[test x$use_libsecp256k1 = xyes])
35b8af92
CF
789
790AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
791AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
792AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
793AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
794AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
795AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
796AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
797AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
798AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
799AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
800AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
801AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
802
e432a5f0 803AC_SUBST(RELDFLAGS)
575e70c0 804AC_SUBST(LIBTOOL_LDFLAGS)
35b8af92
CF
805AC_SUBST(USE_UPNP)
806AC_SUBST(USE_QRCODE)
35b8af92 807AC_SUBST(BOOST_LIBS)
35b8af92
CF
808AC_SUBST(TESTDEFS)
809AC_SUBST(LEVELDB_TARGET_FLAGS)
35b8af92 810AC_SUBST(BUILD_TEST)
c8ba8ef6 811AC_SUBST(BUILD_QT)
35b8af92 812AC_SUBST(BUILD_TEST_QT)
9f7f504e 813AC_SUBST(MINIUPNPC_CPPFLAGS)
28d412ff 814AC_SUBST(MINIUPNPC_LIBS)
41d67c78 815AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
35b8af92 816AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
7667850d 817AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
07a99017
PW
818
819dnl boost's m4 checks do something really nasty: they export these vars. As a
820dnl result, they leak into secp256k1's configure and crazy things happen.
821dnl Until this is fixed upstream and we've synced, we'll just un-export them.
0dc86138 822CPPFLAGS_TEMP="$CPPFLAGS"
cf61b544 823unset CPPFLAGS
0dc86138
CF
824CPPFLAGS="$CPPFLAGS_TEMP"
825
826LDFLAGS_TEMP="$LDFLAGS"
cf61b544 827unset LDFLAGS
0dc86138
CF
828LDFLAGS="$LDFLAGS_TEMP"
829
830LIBS_TEMP="$LIBS"
831unset LIBS
832LIBS="$LIBS_TEMP"
833
834PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
835unset PKG_CONFIG_PATH
836PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
837
838PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
839unset PKG_CONFIG_LIBDIR
840PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
841
07a99017
PW
842ac_configure_args="${ac_configure_args} --disable-shared --with-pic"
843AC_CONFIG_SUBDIRS([src/secp256k1])
844
35b8af92 845AC_OUTPUT
a98356fe
CF
846
847dnl Taken from https://wiki.debian.org/RpathIssue
848case $host in
849 *-*-linux-gnu)
850 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
851 sed < libtool > libtool-2 \
852 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
853 mv libtool-2 libtool
854 chmod 755 libtool
855 ;;
856esac
This page took 0.197934 seconds and 4 git commands to generate.