configure.ac 38.3 KB
Newer Older
1
2
3
dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 0)
4
define(_CLIENT_VERSION_MINOR, 12)
Brannon King's avatar
Brannon King committed
5
6
define(_CLIENT_VERSION_REVISION, 4)
define(_CLIENT_VERSION_BUILD, 0)
kay kurokawa's avatar
kay kurokawa committed
7
define(_CLIENT_VERSION_IS_RELEASE, true)
8
define(_COPYRIGHT_YEAR, 2016)
9
define(_COPYRIGHT_HOLDERS,[The %s developers])
10
11
define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[LBRY]])
AC_INIT([LBRYcrd Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/lbryio/lbrycrd/issues],[lbrycrd],[https://lbry.io/])
12
13
AC_CONFIG_SRCDIR([src/main.cpp])
AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14
15
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([build-aux/m4])
16

17
18
19
20
BITCOIN_DAEMON_NAME=lbrycrdd
BITCOIN_GUI_NAME=lbrycrd-qt
BITCOIN_CLI_NAME=lbrycrd-cli
BITCOIN_TX_NAME=lbrycrd-tx
21

22
AC_CANONICAL_HOST
23

24
25
26
27
28
29
30
AH_TOP([#ifndef BITCOIN_CONFIG_H])
AH_TOP([#define BITCOIN_CONFIG_H])
AH_BOTTOM([#endif //BITCOIN_CONFIG_H])

dnl faketime breaks configure and is only needed for make. Disable it here.
unset FAKETIME

31
dnl Automake init set-up and checks
32
33
34
35
36
37
38
39
40
AM_INIT_AUTOMAKE([no-define subdir-objects foreign])

dnl faketime messes with timestamps and causes configure to be re-run.
dnl --disable-maintainer-mode can be used to bypass this.
AM_MAINTAINER_MODE([enable])

dnl make the compilation flags quiet unless V=1 is used
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

41
42
43
44
45
46
dnl Compiler checks (here before libtool).
if test "x${CXXFLAGS+set}" = "xset"; then
  CXXFLAGS_overridden=yes
else
  CXXFLAGS_overridden=no
fi
47
48
AC_PROG_CXX
m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
49
50
51
52
53
54
55
56
57
58

dnl By default, libtool for mingw refuses to link static libs into a dll for
dnl fear of mixing pic/non-pic objects, and import/export complications. Since
dnl we have those under control, re-enable that functionality.
case $host in
  *mingw*)
     lt_cv_deplibs_check_method="pass_all"
  ;;
esac
dnl Libtool init checks.
59
LT_INIT([pic-only])
60
61

dnl Check/return PATH for base programs.
62
63
64
65
66
67
AC_PATH_TOOL(AR, ar)
AC_PATH_TOOL(RANLIB, ranlib)
AC_PATH_TOOL(STRIP, strip)
AC_PATH_TOOL(GCOV, gcov)
AC_PATH_PROG(LCOV, lcov)
AC_PATH_PROG(JAVA, java)
68
AC_PATH_PROGS([PYTHON], [python3 python2.7 python2 python])
69
70
71
72
73
AC_PATH_PROG(GENHTML, genhtml)
AC_PATH_PROG([GIT], [git])
AC_PATH_PROG(CCACHE,ccache)
AC_PATH_PROG(XGETTEXT,xgettext)
AC_PATH_PROG(HEXDUMP,hexdump)
74
75
AC_PATH_TOOL(READELF, readelf)
AC_PATH_TOOL(CPPFILT, c++filt)
76

77
AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
78
79

dnl pkg-config check.
80
81
PKG_PROG_PKG_CONFIG

82
83
# Enable wallet
AC_ARG_ENABLE([wallet],
84
85
  [AS_HELP_STRING([--disable-wallet],
  [disable wallet (enabled by default)])],
86
87
88
  [enable_wallet=$enableval],
  [enable_wallet=yes])

89
90
91
92
93
94
95
96
97
98
99
100
101
AC_ARG_WITH([miniupnpc],
  [AS_HELP_STRING([--with-miniupnpc],
  [enable UPNP (default is yes if libminiupnpc is found)])],
  [use_upnp=$withval],
  [use_upnp=auto])

AC_ARG_ENABLE([upnp-default],
  [AS_HELP_STRING([--enable-upnp-default],
  [if UPNP is enabled, turn it on at startup (default is no)])],
  [use_upnp_default=$enableval],
  [use_upnp_default=no])

AC_ARG_ENABLE(tests,
102
    AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
103
104
105
    [use_tests=$enableval],
    [use_tests=yes])

106
107
108
109
110
AC_ARG_ENABLE(gui-tests,
    AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
    [use_gui_tests=$enableval],
    [use_gui_tests=$use_tests])

Gavin Andresen's avatar
Gavin Andresen committed
111
AC_ARG_ENABLE(bench,
112
    AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
Gavin Andresen's avatar
Gavin Andresen committed
113
114
115
    [use_bench=$enableval],
    [use_bench=yes])

116
AC_ARG_WITH([comparison-tool],
117
    AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
118
119
120
    [use_comparison_tool=$withval],
    [use_comparison_tool=no])

121
122
123
124
125
AC_ARG_ENABLE([comparison-tool-reorg-tests],
    AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
    [use_comparison_tool_reorg_tests=$enableval],
    [use_comparison_tool_reorg_tests=no])

126
127
128
129
130
AC_ARG_ENABLE([extended-rpc-tests],
    AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
    [use_extended_rpc_tests=$enableval],
    [use_extended_rpc_tests=no])

131
132
133
134
135
136
AC_ARG_WITH([qrencode],
  [AS_HELP_STRING([--with-qrencode],
  [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
  [use_qr=$withval],
  [use_qr=auto])

137
138
139
140
141
142
AC_ARG_WITH([icu],
  [AS_HELP_STRING([--with-icu],
  [Required ICU root path])],
  [ICU_PREFIX=$withval],
  [ICU_PREFIX=auto])

143
AC_ARG_ENABLE([hardening],
144
145
  [AS_HELP_STRING([--disable-hardening],
  [do not attempt to harden the resulting executables (default is to harden)])],
146
147
148
  [use_hardening=$enableval],
  [use_hardening=yes])

149
150
AC_ARG_ENABLE([reduce-exports],
  [AS_HELP_STRING([--enable-reduce-exports],
151
  [attempt to reduce exported symbols in the resulting executables (default is no)])],
152
  [use_reduce_exports=$enableval],
153
  [use_reduce_exports=no])
154

155
AC_ARG_ENABLE([ccache],
156
157
  [AS_HELP_STRING([--disable-ccache],
  [do not use ccache for building (default is to use if found)])],
158
159
160
161
162
163
164
165
166
  [use_ccache=$enableval],
  [use_ccache=auto])

AC_ARG_ENABLE([lcov],
  [AS_HELP_STRING([--enable-lcov],
  [enable lcov testing (default is no)])],
  [use_lcov=yes],
  [use_lcov=no])

167
168
AC_ARG_ENABLE([glibc-back-compat],
  [AS_HELP_STRING([--enable-glibc-back-compat],
169
  [enable backwards compatibility with glibc])],
170
171
172
  [use_glibc_compat=$enableval],
  [use_glibc_compat=no])

173
AC_ARG_WITH([system-univalue],
174
175
  [AS_HELP_STRING([--with-system-univalue],
  [Build with system UniValue (default is no)])],
176
  [system_univalue=$withval],
177
  [system_univalue=no]
178
)
179
AC_ARG_ENABLE([zmq],
180
  [AS_HELP_STRING([--disable-zmq],
181
  [disable ZMQ notifications])],
182
183
184
  [use_zmq=$enableval],
  [use_zmq=yes])

185
186
AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])

187
# Enable debug
daniel's avatar
daniel committed
188
189
190
191
192
193
194
AC_ARG_ENABLE([debug],
    [AS_HELP_STRING([--enable-debug],
                    [use debug compiler flags and macros (default is no)])],
    [enable_debug=$enableval],
    [enable_debug=no])

if test "x$enable_debug" = xyes; then
195
    CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
daniel's avatar
daniel committed
196
    if test "x$GCC" = xyes; then
197
        CFLAGS="$CFLAGS -g3 -O0"
daniel's avatar
daniel committed
198
    fi
199

daniel's avatar
daniel committed
200
    if test "x$GXX" = xyes; then
201
        CXXFLAGS="$CXXFLAGS -g3 -O0"
daniel's avatar
daniel committed
202
    fi
203
fi
daniel's avatar
daniel committed
204

205
206
207
## TODO: Remove these hard-coded paths and flags. They are here for the sake of
##       compatibility with the legacy buildsystem.
##
208
if test "x$CXXFLAGS_overridden" = "xno"; then
209
  CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
210
fi
211
CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
212

213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
AC_ARG_WITH([utils],
  [AS_HELP_STRING([--with-utils],
  [build bitcoin-cli bitcoin-tx (default=yes)])],
  [build_bitcoin_utils=$withval],
  [build_bitcoin_utils=yes])

AC_ARG_WITH([libs],
  [AS_HELP_STRING([--with-libs],
  [build libraries (default=yes)])],
  [build_bitcoin_libs=$withval],
  [build_bitcoin_libs=yes])

AC_ARG_WITH([daemon],
  [AS_HELP_STRING([--with-daemon],
  [build bitcoind daemon (default=yes)])],
  [build_bitcoind=$withval],
  [build_bitcoind=yes])

231
232
233
234
235
236
AC_LANG_PUSH([C++])

use_pkgconfig=yes
case $host in
  *mingw*)

237
     #pkgconfig does more harm than good with MinGW
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
     use_pkgconfig=no

     TARGET_OS=windows
     AC_CHECK_LIB([mingwthrd],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([kernel32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([user32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([gdi32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([comdlg32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([winspool],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([winmm],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([shell32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([comctl32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([ole32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([oleaut32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([uuid],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([rpcrt4],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([advapi32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([ws2_32],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([mswsock],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([shlwapi],      [main],, AC_MSG_ERROR(lib missing))
     AC_CHECK_LIB([iphlpapi],      [main],, AC_MSG_ERROR(lib missing))
259
260
     AC_CHECK_LIB([crypt32],      [main],, AC_MSG_ERROR(lib missing))

261
262
     # -static is interpreted by libtool, where it has a different meaning.
     # In libtool-speak, it's -all-static.
263
     AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
264

265
266
267
268
269
     AC_PATH_PROG([MAKENSIS], [makensis], none)
     if test x$MAKENSIS = xnone; then
       AC_MSG_WARN("makensis not found. Cannot create installer.")
     fi

270
271
272
273
274
     AC_PATH_TOOL(WINDRES, windres, none)
     if test x$WINDRES = xnone; then
       AC_MSG_ERROR("windres not found")
     fi

275
     CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
276
     LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
277
278
279
     if test "x$CXXFLAGS_overridden" = "xno"; then
       CXXFLAGS="$CXXFLAGS -w"
     fi
280
281
282
283
284
285
     case $host in
       i?86-*) WINDOWS_BITS=32 ;;
       x86_64-*) WINDOWS_BITS=64 ;;
       *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
     esac
     AC_SUBST(WINDOWS_BITS)
286
287
288
289
290
291
292
293
294

     dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
     dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
     dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
     dnl also overridden to prevent their insertion later.
     dnl This should only affect dll's.
     archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
     postdeps_CXX=

295
296
297
298
299
     ;;
  *darwin*)
     TARGET_OS=darwin
     LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
     if  test x$cross_compiling != xyes; then
300
       BUILD_OS=darwin
301
302
303
       AC_CHECK_PROG([PORT],port, port)
       if test x$PORT = xport; then
         dnl add default macports paths
304
305
306
307
308
309
         CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
         LIBS="$LIBS -L/opt/local/lib"
         if test -d /opt/local/include/db48; then
           CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
           LIBS="$LIBS -L/opt/local/lib/db48"
         fi
310
311
312
313
       fi

       AC_CHECK_PROG([BREW],brew, brew)
       if test x$BREW = xbrew; then
Dominyk Tiller's avatar
Dominyk Tiller committed
314
         dnl These Homebrew packages may be keg-only, meaning that they won't be found
315
316
317
318
319
320
321
322
323
         dnl in expected paths because they may conflict with system files. Ask
         dnl Homebrew where each one is located, then adjust paths accordingly.
         dnl It's safe to add these paths even if the functionality is disabled by
         dnl the user (--without-wallet or --without-gui for example).

         openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
         bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
         qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
         if test x$openssl_prefix != x; then
324
           PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
Cory Fields's avatar
Cory Fields committed
325
           export PKG_CONFIG_PATH
326
327
328
329
330
331
         fi
         if test x$bdb_prefix != x; then
           CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
           LIBS="$LIBS -L$bdb_prefix/lib"
         fi
         if test x$qt5_prefix != x; then
332
           PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
Cory Fields's avatar
Cory Fields committed
333
           export PKG_CONFIG_PATH
334
         fi
335
       fi
336
337
338
339
340
341
342
343
344
     else
       case $build_os in
         *darwin*)
           BUILD_OS=darwin
           ;;
         *)
           AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
           AC_PATH_TOOL([OTOOL], [otool], otool)
           AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
345
           AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
346
347
           AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
           AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
348
349
350
351
352
353

           dnl libtool will try to strip the static lib, which is a problem for
           dnl cross-builds because strip attempts to call a hard-coded ld,
           dnl which may not exist in the path. Stripping the .a is not
           dnl necessary, so just disable it.
           old_striplib=
354
355
           ;;
       esac
356
357
     fi

Cory Fields's avatar
Cory Fields committed
358
     AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
359
     CPPFLAGS="$CPPFLAGS -DMAC_OSX"
360
     OBJCXXFLAGS="$CXXFLAGS"
361
     ;;
362
363
364
   *linux*)
     TARGET_OS=linux
     ;;
365
366
367
368
369
370
371
372
   *)
     ;;
esac

if test x$use_comparison_tool != xno; then
  AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
fi

373
if test x$use_comparison_tool_reorg_tests != xno; then
374
  if test x$use_comparison_tool = x; then
375
376
377
378
379
380
381
    AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
  fi
  AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
else
  AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
fi

382
383
384
385
if test x$use_extended_rpc_tests != xno; then
  AC_SUBST(EXTENDED_RPC_TESTS, -extended)
fi

386
387
if test x$use_lcov = xyes; then
  if test x$LCOV = x; then
388
389
    AC_MSG_ERROR("lcov testing requested but lcov not found")
  fi
390
  if test x$GCOV = x; then
391
392
    AC_MSG_ERROR("lcov testing requested but gcov not found")
  fi
393
  if test x$JAVA = x; then
394
395
    AC_MSG_ERROR("lcov testing requested but java not found")
  fi
396
397
398
  if test x$PYTHON = x; then
    AC_MSG_ERROR("lcov testing requested but python not found")
  fi
399
  if test x$GENHTML = x; then
400
401
    AC_MSG_ERROR("lcov testing requested but genhtml not found")
  fi
402
  if test x$use_comparison_tool = x; then
403
404
405
406
407
408
409
    AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
  fi
  LCOV="$LCOV --gcov-tool=$GCOV"
  AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
    [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
fi

410
411
dnl Check for endianness
AC_C_BIGENDIAN
412
413
414
415
416
417
418
419

dnl Check for pthread compile/link requirements
AX_PTHREAD

# The following macro will add the necessary defines to bitcoin-config.h, but
# they also need to be passed down to any subprojects. Pull the results out of
# the cache and add them to CPPFLAGS.
AC_SYS_LARGEFILE
420
421
# detect POSIX or GNU variant of strerror_r
AC_FUNC_STRERROR_R
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436

if test x$ac_cv_sys_file_offset_bits != x &&
   test x$ac_cv_sys_file_offset_bits != xno &&
   test x$ac_cv_sys_file_offset_bits != xunknown; then
  CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
fi

if test x$ac_cv_sys_large_files != x &&
   test x$ac_cv_sys_large_files != xno &&
   test x$ac_cv_sys_large_files != xunknown; then
  CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
fi

AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])

437
438
439
440
AX_GCC_FUNC_ATTRIBUTE([visibility])
AX_GCC_FUNC_ATTRIBUTE([dllexport])
AX_GCC_FUNC_ATTRIBUTE([dllimport])

441
442
if test x$use_glibc_compat != xno; then

443
444
445
446
  #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
  #in anyway for back-compat.
  AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))

447
448
449
  #__fdelt_chk's params and return type have changed from long unsigned int to long int.
  # See which one is present here.
  AC_MSG_CHECKING(__fdelt_chk type)
randy-waterhouse's avatar
randy-waterhouse committed
450
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
451
452
453
                    #undef _FORTIFY_SOURCE
                  #endif
                  #define _FORTIFY_SOURCE 2
454
                  #include <sys/select.h>
randy-waterhouse's avatar
randy-waterhouse committed
455
     extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
456
457
458
459
    [ fdelt_type="long unsigned int"],
    [ fdelt_type="long int"])
  AC_MSG_RESULT($fdelt_type)
  AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
460
461
else
  AC_SEARCH_LIBS([clock_gettime],[rt])
462
463
fi

464
465
466
if test x$TARGET_OS != xwindows; then
  # All windows code is PIC, forcing it on just adds useless compile warnings
  AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
467
468
fi

469
470
if test x$use_hardening != xno; then
  AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
471
  AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
472

473
474
475
476
477
478
  AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
    AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
      HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
    ])
    HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
  ])
479
480
481

  AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
  AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
482
483
  AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
  AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
484
485

  if test x$TARGET_OS != xwindows; then
486
    AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
487
488
489
    AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
  fi

490
491
492
493
494
  case $host in
    *mingw*)
       AC_CHECK_LIB([ssp],      [main],, AC_MSG_ERROR(lib missing))
    ;;
  esac
495
496
497
498
499
500
501
fi

dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
if test x$TARGET_OS = xdarwin; then
  AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
fi

502
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])
503
504
AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
505

506
507
AC_CHECK_DECLS([strnlen])

508
AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
509
510
		[#if HAVE_ENDIAN_H
                 #include <endian.h>
511
512
                 #elif HAVE_SYS_ENDIAN_H
                 #include <sys/endian.h>
513
                 #endif])
514

515
516
517
518
519
AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
		[#if HAVE_BYTESWAP_H
                 #include <byteswap.h>
                 #endif])

520
521
dnl Check for MSG_NOSIGNAL
AC_MSG_CHECKING(for MSG_NOSIGNAL)
randy-waterhouse's avatar
randy-waterhouse committed
522
523
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
 [[ int f = MSG_NOSIGNAL; ]])],
524
525
526
527
 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
 [ AC_MSG_RESULT(no)]
)

528
529
530
531
532
533
534
535
536
537
538
539
AC_MSG_CHECKING([for visibility attribute])
AC_LINK_IFELSE([AC_LANG_SOURCE([
  int foo_def( void ) __attribute__((visibility("default")));
  int main(){}
  ])],
  [
    AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
    AC_MSG_RESULT(yes)
  ],
  [
    AC_MSG_RESULT(no)
    if test x$use_reduce_exports = xyes; then
540
      AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
541
542
543
544
    fi
  ]
)

545
if test x$use_reduce_exports = xyes; then
546
  AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
547
  [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
548
549
fi

550
551
552
553
554
555
556
557
LEVELDB_CPPFLAGS=
LIBLEVELDB=
LIBMEMENV=
AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
AC_SUBST(LEVELDB_CPPFLAGS)
AC_SUBST(LIBLEVELDB)
AC_SUBST(LIBMEMENV)

558
559
560
561
if test x$enable_wallet != xno; then
    dnl Check for libdb_cxx only if wallet enabled
    BITCOIN_FIND_BDB48
fi
562
563
564

dnl Check for libminiupnpc (optional)
if test x$use_upnp != xno; then
565
566
  AC_CHECK_HEADERS(
    [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
567
    [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
568
569
    [have_miniupnpc=no]
  )
570
571
fi

572
573
574
BITCOIN_QT_INIT

dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
575
BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
576
577
578
579
580
581
582
583
584

if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
    use_boost=no
else
    use_boost=yes
fi

if test x$use_boost = xyes; then

585
586
587
588
589
590
591
dnl Check for boost libs
AX_BOOST_BASE
AX_BOOST_SYSTEM
AX_BOOST_FILESYSTEM
AX_BOOST_PROGRAM_OPTIONS
AX_BOOST_THREAD
AX_BOOST_CHRONO
592
AX_BOOST_LOCALE
593

594

595
if test x$use_reduce_exports = xyes; then
596
597
598
599
600
601
602
603
604
605
606
607
608
  AC_MSG_CHECKING([for working boost reduced exports])
  TEMP_CPPFLAGS="$CPPFLAGS"
  CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
  AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
      @%:@include <boost/version.hpp>
    ]], [[
      #if BOOST_VERSION >= 104900
      // Everything is okay
      #else
      #  error Boost version is too old
      #endif
    ]])],[
      AC_MSG_RESULT(yes)
609
    ],[
610
    AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
611
612
613
  ])
  CPPFLAGS="$TEMP_CPPFLAGS"
fi
614
615
fi

616
if test x$use_reduce_exports = xyes; then
617
618
619
620
    CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
    AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
fi

621
if test x$use_tests = xyes; then
622
623
624
625
626
627

  if test x$HEXDUMP = x; then
    AC_MSG_ERROR(hexdump is required for tests)
  fi


628
629
  if test x$use_boost = xyes; then

630
  AX_BOOST_UNIT_TEST_FRAMEWORK
631
632
633
634

  dnl Determine if -DBOOST_TEST_DYN_LINK is needed
  AC_MSG_CHECKING([for dynamic linked boost test])
  TEMP_LIBS="$LIBS"
635
  LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
636
637
638
639
640
641
642
643
644
645
646
647
648
  TEMP_CPPFLAGS="$CPPFLAGS"
  CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
  AC_LINK_IFELSE([AC_LANG_SOURCE([
       #define BOOST_TEST_DYN_LINK
       #define BOOST_TEST_MAIN
        #include <boost/test/unit_test.hpp>

       ])],
    [AC_MSG_RESULT(yes)]
    [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
    [AC_MSG_RESULT(no)])
  LIBS="$TEMP_LIBS"
  CPPFLAGS="$TEMP_CPPFLAGS"
649
650

  fi
651
652
fi

653
654
if test x$use_boost = xyes; then

655
BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB $BOOST_LOCALE_LIB"
656

657
658
659
660
661
662
663
664
665
666
667

dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
dnl the abi. This was fixed in 1.57.

dnl When building against that installed version using c++11, the headers pick up
dnl on the native c++11 scoped enum support and enable it, however it will fail to
dnl link. This can be worked around by disabling c++11 scoped enums if linking will
dnl fail.
dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.

668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
TEMP_LIBS="$LIBS"
LIBS="$BOOST_LIBS $LIBS"
TEMP_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  #include "boost/config.hpp"
  #include "boost/version.hpp"
  #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
  #define BOOST_NO_SCOPED_ENUMS
  #define BOOST_NO_CXX11_SCOPED_ENUMS
  #define CHECK
  #endif
  #include "boost/filesystem.hpp"
  ]],[[
  #if defined(CHECK)
    boost::filesystem::copy_file("foo", "bar");
  #else
    choke;
  #endif
  ]])],
689
  [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
690
691
692
LIBS="$TEMP_LIBS"
CPPFLAGS="$TEMP_CPPFLAGS"

693
694
695
696
697
698
dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
dnl a working version is available, else fall back to sleep. sleep was removed
dnl after 1.56.
dnl If neither is available, abort.
TEMP_LIBS="$LIBS"
699
LIBS="$BOOST_LIBS $LIBS"
700
701
TEMP_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
randy-waterhouse's avatar
randy-waterhouse committed
702
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
703
704
  #include <boost/thread/thread.hpp>
  #include <boost/version.hpp>
randy-waterhouse's avatar
randy-waterhouse committed
705
  ]],[[
706
707
708
709
710
  #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
      boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
  #else
   choke me
  #endif
randy-waterhouse's avatar
randy-waterhouse committed
711
  ]])],
712
  [boost_sleep=yes;
713
714
715
     AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
  [boost_sleep=no])
LIBS="$TEMP_LIBS"
716
CPPFLAGS="$TEMP_CPPFLAGS"
717
718
719

if test x$boost_sleep != xyes; then
TEMP_LIBS="$LIBS"
720
LIBS="$BOOST_LIBS $LIBS"
721
722
TEMP_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
randy-waterhouse's avatar
randy-waterhouse committed
723
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
724
725
726
  #include <boost/version.hpp>
  #include <boost/thread.hpp>
  #include <boost/date_time/posix_time/posix_time_types.hpp>
randy-waterhouse's avatar
randy-waterhouse committed
727
  ]],[[
728
729
730
731
732
  #if BOOST_VERSION <= 105600
      boost::this_thread::sleep(boost::posix_time::milliseconds(0));
  #else
   choke me
  #endif
randy-waterhouse's avatar
randy-waterhouse committed
733
  ]])],
734
735
736
  [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
  [boost_sleep=no])
LIBS="$TEMP_LIBS"
737
CPPFLAGS="$TEMP_CPPFLAGS"
738
739
740
fi

if test x$boost_sleep != xyes; then
741
  AC_MSG_ERROR(No working boost sleep implementation found.)
742
743
fi

744
fi
745

Brannon King's avatar
Brannon King committed
746
AS_IF([test "x$ICU_PREFIX" != xauto], [
747
748
749
750
  ICU_CPPFLAGS="-I$ICU_PREFIX/include"
  ICU_LIBS="-L$ICU_PREFIX/lib -licui18n -licuuc -licudata -ldl"
  PKG_CONFIG_PATH="${ICU_PREFIX}/lib/pkgconfig:$PKG_CONFIG_PATH"
  export PKG_CONFIG_PATH
Brannon King's avatar
Brannon King committed
751
752
])

753
754
755
756
757
758
AC_MSG_NOTICE([Using ICU_CPPFLAGS $ICU_CPPFLAGS])
AC_MSG_NOTICE([Using ICU_LIBS $ICU_LIBS])

CPPFLAGS="$CPPFLAGS $ICU_CPPFLAGS"
ORIG_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS $ICU_LIBS"
759

760
761
if test x$use_pkgconfig = xyes; then

762
  if test x"$PKG_CONFIG" = "x"; then
763
    AC_MSG_ERROR(pkg-config not found.)
764
765
766
767
768
769
  fi

  : #NOP
  m4_ifdef(
    [PKG_CHECK_MODULES],
    [
770
771
      PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
      PKG_CHECK_MODULES([CRYPTO], [libcrypto],, [AC_MSG_ERROR(libcrypto not found.)])
772

773
774
775
776
      BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
      if test x$use_qr != xno; then
        BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
      fi
777
778
779
780
781
782
      if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
        PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
        if test x$TARGET_OS != xwindows; then
          PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
        fi
      fi
783
784
785
786
787
788
789
790
791
792

      if test "x$use_zmq" = "xyes"; then
        PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
          [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
          [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
           AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
           use_zmq=no])
      else
          AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
      fi
793
794
    ]
  )
Brannon King's avatar
Brannon King committed
795
else # compiling on Windows:
796
797
798
799
800
  AC_MSG_NOTICE([Configuring for Windows])

  CPPFLAGS="$CPPFLAGS -Ii686-w64-mingw32/include"
  LDFLAGS="$LDFLAGS -Li686-w64-mingw32/lib"

801
  AC_CHECK_HEADER([unicode/errorcode.h],,AC_MSG_ERROR(libicu headers missing))
802
803
804
805
806
  AC_CHECK_LIB([icudata], [main], ICU_LIBS=$ICU_LIBS,
    AC_CHECK_LIB([icu18n], [main],ICU_LIBS=$ICU_LIBS, ICU_LIBS="-L$ICU_PREFIX/lib -lsicuio -lsicuin -lsiculx -lsicule -lsicuuc -lsicudt"))
  AC_MSG_NOTICE([Using ICU_LIBS=$ICU_LIBS])
  LDFLAGS="$ORIG_LDFLAGS $ICU_LIBS"
  AC_CHECK_LIB([sicudt], [main], ICU_LIBS=$ICU_LIBS, AC_MSG_ERROR(icu libraries missing))
807

808
  AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
809
  AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
810
811

  AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
812
  AC_CHECK_LIB([ssl],    [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
813

814
815
816
817
818
819
820
821
  if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
    AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
    AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
    if test x$TARGET_OS != xwindows; then
      AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
    fi
  fi

822
823
824
825
826
827
828
829
830
831
832
833
834
835
  if test "x$use_zmq" = "xyes"; then
     AC_CHECK_HEADER([zmq.h],
       [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
       [AC_MSG_WARN([zmq.h not found, disabling zmq support])
        use_zmq=no
        AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
     AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
       [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
        use_zmq=no
        AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
  else
    AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
  fi

836
  BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
837
  if test x$use_qr != xno; then
838
    BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
839
840
841
    BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
  fi
fi
842

843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
dnl univalue check

if test x$system_univalue != xno ; then
  found_univalue=no
  if test x$use_pkgconfig = xyes; then
    : #NOP
    m4_ifdef(
      [PKG_CHECK_MODULES],
      [
        PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
      ]
    )
  else
    AC_CHECK_HEADER([univalue.h],[
      AC_CHECK_LIB([univalue],  [main],[
        UNIVALUE_LIBS=-lunivalue
        found_univalue=yes
      ],[true])
    ],[true])
  fi

  if test x$found_univalue = xyes ; then
    system_univalue=yes
  elif test x$system_univalue = xyes ; then
    AC_MSG_ERROR([univalue not found])
  else
    system_univalue=no
  fi
fi

if test x$system_univalue = xno ; then
  UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
  UNIVALUE_LIBS='univalue/libunivalue.la'
fi
AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$system_univalue = xno])
AC_SUBST(UNIVALUE_CFLAGS)
AC_SUBST(UNIVALUE_LIBS)

881
CXXFLAGS_TEMP="$CXXFLAGS"
882
LIBS_TEMP="$LIBS"
883
CXXFLAGS="$CXXFLAGS $CPPFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
Brannon King's avatar
Brannon King committed
884
LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
885
AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
886
CXXFLAGS="$CXXFLAGS_TEMP"
887
888
LIBS="$LIBS_TEMP"

889
BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
890

891
AC_MSG_CHECKING([whether to build bitcoind])
892
893
894
AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
AC_MSG_RESULT($build_bitcoind)

895
896
897
AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
AC_MSG_RESULT($build_bitcoin_utils)
898

899
900
901
902
AC_MSG_CHECKING([whether to build libraries])
AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
if test x$build_bitcoin_libs = xyes; then
  AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
903
  AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
904
905
906
fi
AC_MSG_RESULT($build_bitcoin_libs)

907
908
909
AC_LANG_POP

if test "x$use_ccache" != "xno"; then
910
  AC_MSG_CHECKING(if ccache should be used)
911
912
913
914
915
916
917
918
919
920
921
922
923
  if test x$CCACHE = x; then
    if test "x$use_ccache" = "xyes"; then
      AC_MSG_ERROR([ccache not found.]);
    else
      use_ccache=no
    fi
  else
    use_ccache=yes
    CC="$ac_cv_path_CCACHE $CC"
    CXX="$ac_cv_path_CCACHE $CXX"
  fi
  AC_MSG_RESULT($use_ccache)
fi
924
925
926
if test "x$use_ccache" = "xyes"; then
    AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
fi
927

928
929
930
931
932
933
934
935
936
937
dnl enable wallet
AC_MSG_CHECKING([if wallet should be enabled])
if test x$enable_wallet != xno; then
  AC_MSG_RESULT(yes)
  AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])

else
  AC_MSG_RESULT(no)
fi

938
dnl enable upnp support
939
AC_MSG_CHECKING([whether to build with support for UPnP])
940
941
if test x$have_miniupnpc = xno; then
  if test x$use_upnp = xyes; then
942
     AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
943
944
945
946
947
  fi
  AC_MSG_RESULT(no)
else
  if test x$use_upnp != xno; then
    AC_MSG_RESULT(yes)
948
    AC_MSG_CHECKING([whether to build with UPnP enabled by default])
949
950
951
952
953
954
955
    use_upnp=yes
    upnp_setting=0
    if test x$use_upnp_default != xno; then
      use_upnp_default=yes
      upnp_setting=1
    fi
    AC_MSG_RESULT($use_upnp_default)
956
    AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
957
    if test x$TARGET_OS = xwindows; then
958
      MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
959
960
961
962
963
964
965
    fi
  else
    AC_MSG_RESULT(no)
  fi
fi

dnl these are only used when qt is enabled
966
BUILD_TEST_QT=""
967
if test x$bitcoin_enable_qt != xno; then
968
  dnl enable dbus support
969
  AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
970
  if test x$bitcoin_enable_qt_dbus != xno; then
971
972
    AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
  fi
973
  AC_MSG_RESULT($bitcoin_enable_qt_dbus)
974
975

  dnl enable qr support
976
  AC_MSG_CHECKING([whether to build GUI with support for QR codes])
977
  if test x$have_qrencode = xno; then
978
    if test x$use_qr = xyes; then
979
980
981
982
983
984
985
986
987
988
989
990
991
     AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
    fi
    AC_MSG_RESULT(no)
  else
    if test x$use_qr != xno; then
      AC_MSG_RESULT(yes)
      AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
      use_qr=yes
    else
      AC_MSG_RESULT(no)
    fi
  fi

992
  if test x$XGETTEXT = x; then
993
994
995
    AC_MSG_WARN("xgettext is required to update qt translations")
  fi

996
  AC_MSG_CHECKING([whether to build test_bitcoin-qt])
997
  if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
998
    AC_MSG_RESULT([yes])
999
    BUILD_TEST_QT="yes"
1000
1001
  else
    AC_MSG_RESULT([no])
1002
  fi
1003
1004
fi

1005
1006
AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])

1007
AC_MSG_CHECKING([whether to build test_bitcoin])
1008
if test x$use_tests = xyes; then
1009
  AC_MSG_RESULT([yes])
1010
  BUILD_TEST="yes"
1011
1012
else
  AC_MSG_RESULT([no])
1013
  BUILD_TEST=""
1014
1015
fi

1016
AC_MSG_CHECKING([whether to reduce exports])
1017
if test x$use_reduce_exports = xyes; then
1018
1019
1020
1021
1022
  AC_MSG_RESULT([yes])
else
  AC_MSG_RESULT([no])
fi

1023
if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
1024
  AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
1025
1026
fi

1027
AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1028
AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1029
AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1030
AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1031
AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1032
AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1033
AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
Gavin Andresen's avatar
Gavin Andresen committed
1034
AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1035
AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1036
AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1037
AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
1038
AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
1039
AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1040
AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1041
1042
1043
1044
1045
1046

AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1047
AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1048
AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1049
AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1050
define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1051
AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1052
1053
1054
1055
1056
1057
AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1058
AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1059
AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1060
AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1061
1062
1063
1064
AC_SUBST(BITCOIN_DAEMON_NAME)
AC_SUBST(BITCOIN_GUI_NAME)
AC_SUBST(BITCOIN_CLI_NAME)
AC_SUBST(BITCOIN_TX_NAME)
1065

1066
AC_SUBST(RELDFLAGS)
1067
1068
1069
1070
1071
AC_SUBST(HARDENED_CXXFLAGS)
AC_SUBST(HARDENED_CPPFLAGS)
AC_SUBST(HARDENED_LDFLAGS)
AC_SUBST(PIC_FLAGS)
AC_SUBST(PIE_FLAGS)
1072
AC_SUBST(LIBTOOL_APP_LDFLAGS)
1073
1074
1075
AC_SUBST(USE_UPNP)
AC_SUBST(USE_QRCODE)
AC_SUBST(BOOST_LIBS)
1076
1077
AC_SUBST(ICU_CPPFLAGS)
AC_SUBST(ICU_LIBS)
1078
1079
AC_SUBST(TESTDEFS)
AC_SUBST(LEVELDB_TARGET_FLAGS)
1080
AC_SUBST(MINIUPNPC_CPPFLAGS)
1081
AC_SUBST(MINIUPNPC_LIBS)
1082
AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1083
AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1084
AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1085
1086
1087
1088

dnl boost's m4 checks do something really nasty: they export these vars. As a
dnl result, they leak into secp256k1's configure and crazy things happen.
dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1089
CPPFLAGS_TEMP="$CPPFLAGS"
1090
unset CPPFLAGS
1091
1092
1093
CPPFLAGS="$CPPFLAGS_TEMP"

LDFLAGS_TEMP="$LDFLAGS"
1094
unset LDFLAGS
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
LDFLAGS="$LDFLAGS_TEMP"

LIBS_TEMP="$LIBS"
unset LIBS
LIBS="$LIBS_TEMP"

PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
unset PKG_CONFIG_PATH
PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"

PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
unset PKG_CONFIG_LIBDIR
PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"

1109
1110
1111
1112
if test x$system_univalue = xno; then
  AC_CONFIG_SUBDIRS([src/univalue])
fi

1113
ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1114
AC_CONFIG_SUBDIRS([src/secp256k1])
1115

1116
AC_OUTPUT
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127

dnl Taken from https://wiki.debian.org/RpathIssue
case $host in
   *-*-linux-gnu)
     AC_MSG_RESULT([Fixing libtool for -rpath problems.])
     sed < libtool > libtool-2 \
     's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
     mv libtool-2 libtool
     chmod 755 libtool
   ;;
esac
1128
1129
1130
1131
1132
1133
1134
1135

dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
case ${OS} in
   *Windows*)
     sed  's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/'  qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
     mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
   ;;
esac