diff --git a/.travis.yml b/.travis.yml index 7c926b2..b04f55a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -81,12 +81,12 @@ install: script: # Download and build libbitcoin-client and all dependencies. - - if [[ $OSX && $CLANG && $STATIC ]]; then CC=$CC CXX=$CXX ./install.sh --disable-shared --build-boost --build-zmq --prefix=$TRAVIS_BUILD_DIR/my-prefix; fi - - if [[ $LINUX && $CLANG && $STATIC ]]; then CC=$CC CXX=$CXX ./install.sh --disable-shared --build-boost --build-zmq --prefix=$TRAVIS_BUILD_DIR/my-prefix CFLAGS='-Os' CXXFLAGS='-Os'; fi - - if [[ $LINUX && $GCC && $STATIC ]]; then CC=$CC CXX=$CXX ./install.sh --build-boost --build-zmq --disable-shared --build-dir=my-build --prefix=$TRAVIS_BUILD_DIR/my-prefix CFLAGS='-Og -g --coverage' CXXFLAGS='-Og -g --coverage'; fi - - if [[ $OSX && $CLANG && $DYNAMIC ]]; then CC=$CC CXX=$CXX ./install.sh --disable-static --build-zmq; fi - - if [[ $LINUX && $CLANG && $DYNAMIC ]]; then CC=$CC CXX=$CXX ./install.sh --build-boost --build-zmq --disable-ndebug --disable-static --prefix=$TRAVIS_BUILD_DIR/my-prefix CFLAGS='-Os' CXXFLAGS='-Os'; fi - - if [[ $LINUX && $GCC && $DYNAMIC ]]; then CC=$CC CXX=$CXX ./install.sh --disable-static --build-boost --build-zmq --prefix=$TRAVIS_BUILD_DIR/my-prefix CFLAGS='-Os -s' CXXFLAGS='-Os -s'; fi + - if [[ $OSX && $CLANG && $STATIC ]]; then CC=$CC CXX=$CXX ./install.sh --enable-isystem --disable-shared --build-boost --build-zmq --prefix=$TRAVIS_BUILD_DIR/my-prefix; fi + - if [[ $LINUX && $CLANG && $STATIC ]]; then CC=$CC CXX=$CXX ./install.sh --enable-isystem --disable-shared --build-boost --build-zmq --prefix=$TRAVIS_BUILD_DIR/my-prefix CFLAGS='-Os' CXXFLAGS='-Os'; fi + - if [[ $LINUX && $GCC && $STATIC ]]; then CC=$CC CXX=$CXX ./install.sh --enable-isystem --build-boost --build-zmq --disable-shared --build-dir=my-build --prefix=$TRAVIS_BUILD_DIR/my-prefix CFLAGS='-Og -g --coverage' CXXFLAGS='-Og -g --coverage'; fi + - if [[ $OSX && $CLANG && $DYNAMIC ]]; then CC=$CC CXX=$CXX ./install.sh --enable-isystem --disable-static --build-zmq; fi + - if [[ $LINUX && $CLANG && $DYNAMIC ]]; then CC=$CC CXX=$CXX ./install.sh --enable-isystem --build-boost --build-zmq --disable-ndebug --disable-static --prefix=$TRAVIS_BUILD_DIR/my-prefix CFLAGS='-Os' CXXFLAGS='-Os'; fi + - if [[ $LINUX && $GCC && $DYNAMIC ]]; then CC=$CC CXX=$CXX ./install.sh --enable-isystem --disable-static --build-boost --build-zmq --prefix=$TRAVIS_BUILD_DIR/my-prefix CFLAGS='-Os -s' CXXFLAGS='-Os -s'; fi after_success: diff --git a/Makefile.am b/Makefile.am index 4025826..9e6404d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -32,7 +32,7 @@ doc_DATA = \ # src/libbitcoin-client.la => ${libdir} #------------------------------------------------------------------------------ lib_LTLIBRARIES = src/libbitcoin-client.la -src_libbitcoin_client_la_CPPFLAGS = -I${srcdir}/include ${bitcoin_CPPFLAGS} ${bitcoin_protocol_CPPFLAGS} +src_libbitcoin_client_la_CPPFLAGS = -I${srcdir}/include ${bitcoin_BUILD_CPPFLAGS} ${bitcoin_protocol_BUILD_CPPFLAGS} src_libbitcoin_client_la_LIBADD = ${bitcoin_LIBS} ${bitcoin_protocol_LIBS} src_libbitcoin_client_la_SOURCES = \ src/dealer.cpp \ @@ -47,7 +47,7 @@ if WITH_TESTS TESTS = libbitcoin-client-test_runner.sh check_PROGRAMS = test/libbitcoin-client-test -test_libbitcoin_client_test_CPPFLAGS = -I${srcdir}/include ${bitcoin_CPPFLAGS} ${bitcoin_protocol_CPPFLAGS} +test_libbitcoin_client_test_CPPFLAGS = -I${srcdir}/include ${bitcoin_BUILD_CPPFLAGS} ${bitcoin_protocol_BUILD_CPPFLAGS} test_libbitcoin_client_test_LDADD = src/libbitcoin-client.la ${boost_unit_test_framework_LIBS} ${bitcoin_LIBS} ${bitcoin_protocol_LIBS} test_libbitcoin_client_test_SOURCES = \ test/main.cpp \ @@ -60,7 +60,7 @@ endif WITH_TESTS if WITH_EXAMPLES noinst_PROGRAMS = examples/console/console -examples_console_console_CPPFLAGS = -I${srcdir}/include ${bitcoin_CPPFLAGS} ${bitcoin_protocol_CPPFLAGS} +examples_console_console_CPPFLAGS = -I${srcdir}/include ${bitcoin_BUILD_CPPFLAGS} ${bitcoin_protocol_BUILD_CPPFLAGS} examples_console_console_LDADD = src/libbitcoin-client.la ${bitcoin_LIBS} ${bitcoin_protocol_LIBS} examples_console_console_SOURCES = \ examples/console/client.cpp \ @@ -78,7 +78,7 @@ endif WITH_EXAMPLES if WITH_EXAMPLES noinst_PROGRAMS += examples/get_height/get_height -examples_get_height_get_height_CPPFLAGS = -I${srcdir}/include ${bitcoin_CPPFLAGS} ${bitcoin_protocol_CPPFLAGS} +examples_get_height_get_height_CPPFLAGS = -I${srcdir}/include ${bitcoin_BUILD_CPPFLAGS} ${bitcoin_protocol_BUILD_CPPFLAGS} examples_get_height_get_height_LDADD = src/libbitcoin-client.la ${bitcoin_LIBS} ${bitcoin_protocol_LIBS} examples_get_height_get_height_SOURCES = \ examples/get_height/main.cpp diff --git a/configure.ac b/configure.ac index 8750877..abc1a85 100644 --- a/configure.ac +++ b/configure.ac @@ -44,6 +44,9 @@ AC_PROG_CXX # Enable shared libraries if available, and static if they don't conflict. AC_PROG_LIBTOOL +# Enable sed for substitution. +AC_PROG_SED + # Compute the canonical host-system type variable host, including host_os. AC_CANONICAL_HOST @@ -52,6 +55,9 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # Check for pkg-config. PKG_PROG_PKG_CONFIG +AS_IF([test -n "$PKG_CONFIG"], [], + [AC_MSG_ERROR([pkg-config is required but was not found.])]) + # Declare environment variables that affect the build. #------------------------------------------------------------------------------ @@ -114,6 +120,16 @@ AS_CASE([${enable_ndebug}], [yes], AC_DEFINE([NDEBUG])) #------------------------------------------------------------------------------ AS_CASE([${enable_shared}], [yes], AC_DEFINE([BOOST_ALL_DYN_LINK])) +# Implement --enable-isystem. +#------------------------------------------------------------------------------ +AC_MSG_CHECKING([--enable-isystem option]) +AC_ARG_ENABLE([isystem], + AS_HELP_STRING([--enable-isystem], + [Substitute -isystem for -I in dependencies. @<:@default=no@:>@]), + [enable_isystem=$enableval], + [enable_isystem=no]) +AC_MSG_RESULT([$enable_isystem]) + # Check dependencies. #============================================================================== @@ -122,11 +138,19 @@ AS_CASE([${enable_shared}], [yes], AC_DEFINE([BOOST_ALL_DYN_LINK])) AS_CASE([${CC}], [*], [AX_BOOST_BASE([1.62.0], [AC_SUBST([boost_CPPFLAGS], [${BOOST_CPPFLAGS}]) + AC_SUBST([boost_ISYS_CPPFLAGS], [`echo ${BOOST_CPPFLAGS} | $SED s/^-I/-isystem/g | $SED s/' -I'/' -isystem'/g`]) AC_SUBST([boost_LDFLAGS], [${BOOST_LDFLAGS}]) AC_MSG_NOTICE([boost_CPPFLAGS : ${boost_CPPFLAGS}]) + AC_MSG_NOTICE([boost_ISYS_CPPFLAGS : ${boost_ISYS_CPPFLAGS}]) AC_MSG_NOTICE([boost_LDFLAGS : ${boost_LDFLAGS}])], [AC_MSG_ERROR([Boost 1.62.0 or later is required but was not found.])])]) +AS_CASE([${enable_isystem}],[yes], + [AC_SUBST([boost_BUILD_CPPFLAGS], [${boost_ISYS_CPPFLAGS}])], + [AC_SUBST([boost_BUILD_CPPFLAGS], [${boost_CPPFLAGS}])]) + +AC_MSG_NOTICE([boost_BUILD_CPPFLAGS : ${boost_BUILD_CPPFLAGS}]) + AS_CASE([${with_tests}], [yes], [AX_BOOST_UNIT_TEST_FRAMEWORK AC_SUBST([boost_unit_test_framework_LIBS], [${BOOST_UNIT_TEST_FRAMEWORK_LIB}]) @@ -135,20 +159,52 @@ AS_CASE([${with_tests}], [yes], # Require bitcoin of at least version 4.0.0 and output ${bitcoin_CPPFLAGS/LIBS/PKG}. #------------------------------------------------------------------------------ -PKG_CHECK_MODULES([bitcoin], [libbitcoin >= 4.0.0]) +PKG_CHECK_MODULES([bitcoin], [libbitcoin >= 4.0.0], + [bitcoin_INCLUDEDIR="`$PKG_CONFIG --variable=includedir "libbitcoin >= 4.0.0" 2>/dev/null`" + bitcoin_OTHER_CFLAGS="`$PKG_CONFIG --cflags-only-other "libbitcoin >= 4.0.0" 2>/dev/null`"], + [bitcoin_INCLUDEDIR="" + bitcoin_OTHER_CFLAGS=""]) AC_SUBST([bitcoin_PKG], ['libbitcoin >= 4.0.0']) AC_SUBST([bitcoin_CPPFLAGS], [${bitcoin_CFLAGS}]) +AS_IF([test x${bitcoin_INCLUDEDIR} != "x"], + [AC_SUBST([bitcoin_ISYS_CPPFLAGS], ["-isystem${bitcoin_INCLUDEDIR} ${bitcoin_OTHER_CFLAGS}"])], + [AC_SUBST([bitcoin_ISYS_CPPFLAGS], [${bitcoin_OTHER_CFLAGS}])]) AC_MSG_NOTICE([bitcoin_CPPFLAGS : ${bitcoin_CPPFLAGS}]) +AC_MSG_NOTICE([bitcoin_ISYS_CPPFLAGS : ${bitcoin_ISYS_CPPFLAGS}]) +AC_MSG_NOTICE([bitcoin_OTHER_CFLAGS : ${bitcoin_OTHER_CFLAGS}]) +AC_MSG_NOTICE([bitcoin_INCLUDEDIR : ${bitcoin_INCLUDEDIR}]) AC_MSG_NOTICE([bitcoin_LIBS : ${bitcoin_LIBS}]) +AS_CASE([${enable_isystem}],[yes], + [AC_SUBST([bitcoin_BUILD_CPPFLAGS], [${bitcoin_ISYS_CPPFLAGS}])], + [AC_SUBST([bitcoin_BUILD_CPPFLAGS], [${bitcoin_CPPFLAGS}])]) + +AC_MSG_NOTICE([bitcoin_BUILD_CPPFLAGS : ${bitcoin_BUILD_CPPFLAGS}]) + # Require bitcoin-protocol of at least version 4.0.0 and output ${bitcoin_protocol_CPPFLAGS/LIBS/PKG}. #------------------------------------------------------------------------------ -PKG_CHECK_MODULES([bitcoin_protocol], [libbitcoin-protocol >= 4.0.0]) +PKG_CHECK_MODULES([bitcoin_protocol], [libbitcoin-protocol >= 4.0.0], + [bitcoin_protocol_INCLUDEDIR="`$PKG_CONFIG --variable=includedir "libbitcoin-protocol >= 4.0.0" 2>/dev/null`" + bitcoin_protocol_OTHER_CFLAGS="`$PKG_CONFIG --cflags-only-other "libbitcoin-protocol >= 4.0.0" 2>/dev/null`"], + [bitcoin_protocol_INCLUDEDIR="" + bitcoin_protocol_OTHER_CFLAGS=""]) AC_SUBST([bitcoin_protocol_PKG], ['libbitcoin-protocol >= 4.0.0']) AC_SUBST([bitcoin_protocol_CPPFLAGS], [${bitcoin_protocol_CFLAGS}]) +AS_IF([test x${bitcoin_protocol_INCLUDEDIR} != "x"], + [AC_SUBST([bitcoin_protocol_ISYS_CPPFLAGS], ["-isystem${bitcoin_protocol_INCLUDEDIR} ${bitcoin_protocol_OTHER_CFLAGS}"])], + [AC_SUBST([bitcoin_protocol_ISYS_CPPFLAGS], [${bitcoin_protocol_OTHER_CFLAGS}])]) AC_MSG_NOTICE([bitcoin_protocol_CPPFLAGS : ${bitcoin_protocol_CPPFLAGS}]) +AC_MSG_NOTICE([bitcoin_protocol_ISYS_CPPFLAGS : ${bitcoin_protocol_ISYS_CPPFLAGS}]) +AC_MSG_NOTICE([bitcoin_protocol_OTHER_CFLAGS : ${bitcoin_protocol_OTHER_CFLAGS}]) +AC_MSG_NOTICE([bitcoin_protocol_INCLUDEDIR : ${bitcoin_protocol_INCLUDEDIR}]) AC_MSG_NOTICE([bitcoin_protocol_LIBS : ${bitcoin_protocol_LIBS}]) +AS_CASE([${enable_isystem}],[yes], + [AC_SUBST([bitcoin_protocol_BUILD_CPPFLAGS], [${bitcoin_protocol_ISYS_CPPFLAGS}])], + [AC_SUBST([bitcoin_protocol_BUILD_CPPFLAGS], [${bitcoin_protocol_CPPFLAGS}])]) + +AC_MSG_NOTICE([bitcoin_protocol_BUILD_CPPFLAGS : ${bitcoin_protocol_BUILD_CPPFLAGS}]) + # Set flags. #============================================================================== @@ -164,12 +220,24 @@ AS_CASE([${CC}], [*], [AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"])]) +# Warn on all stuff. +#------------------------------------------------------------------------------ +AS_CASE([${CC}], [*], + [AX_CHECK_COMPILE_FLAG([-Wall], + [CXXFLAGS="$CXXFLAGS -Wall"])]) + # Warn on extra stuff. #------------------------------------------------------------------------------ AS_CASE([${CC}], [*], [AX_CHECK_COMPILE_FLAG([-Wextra], [CFLAGS="$CFLAGS -Wextra"])]) +# Warn on extra stuff. +#------------------------------------------------------------------------------ +AS_CASE([${CC}], [*], + [AX_CHECK_COMPILE_FLAG([-Wextra], + [CXXFLAGS="$CXXFLAGS -Wextra"])]) + # Be really annoying. #------------------------------------------------------------------------------ AS_CASE([${CC}], [*], @@ -178,6 +246,26 @@ AS_CASE([${CC}], [*], [AX_CHECK_COMPILE_FLAG([-pedantic], [CFLAGS="$CFLAGS -pedantic"])])]) +# Be really annoying. +#------------------------------------------------------------------------------ +AS_CASE([${CC}], [*], + [AX_CHECK_COMPILE_FLAG([-Wpedantic], + [CXXFLAGS="$CXXFLAGS -Wpedantic"], + [AX_CHECK_COMPILE_FLAG([-pedantic], + [CXXFLAGS="$CXXFLAGS -pedantic"])])]) + +# Disallow warning on style order of declarations. +#------------------------------------------------------------------------------ +AS_CASE([${CC}], [*], + [AX_CHECK_COMPILE_FLAG([-Wno-reorder], + [CXXFLAGS="$CXXFLAGS -Wno-reorder"])]) + +# Suppress warning for incomplete field initialization. +#------------------------------------------------------------------------------ +AS_CASE([${CC}], [*], + [AX_CHECK_COMPILE_FLAG([-Wno-missing-field-initializers], + [CXXFLAGS="$CXXFLAGS -Wno-missing-field-initializers"])]) + # Conform to style. #------------------------------------------------------------------------------ AS_CASE([${CC}], [*], @@ -190,12 +278,6 @@ AS_CASE([${CC}], [*clang*], [AX_CHECK_COMPILE_FLAG([-Wno-mismatched-tags], [CXXFLAGS="$CXXFLAGS -Wno-mismatched-tags"])]) -# Clean up boost 1.55 headers. Enabled in gcc only. -#------------------------------------------------------------------------------ -AS_CASE([${CC}], [*gcc*], - [AX_CHECK_COMPILE_FLAG([-Wno-deprecated-declarations], - [CXXFLAGS="$CXXFLAGS -Wno-deprecated-declarations"])]) - # Protect stack. #------------------------------------------------------------------------------ AS_CASE([${CC}], [*], @@ -208,12 +290,6 @@ AS_CASE([${CC}], [*], [AX_CHECK_LINK_FLAG([-fstack-protector-all], [LDFLAGS="$LDFLAGS -fstack-protector-all"])]) -# Hide internal functions from external libs. Enabled in gcc only. -#------------------------------------------------------------------------------ -AS_CASE([${CC}], [*gcc*], - [AX_CHECK_COMPILE_FLAG([-fvisibility-hidden], - [CXXFLAGS="$CXXFLAGS -fvisibility-hidden"])]) - # Hide inlines from external libs. Enabled in gcc only. #------------------------------------------------------------------------------ AS_CASE([${CC}], [*gcc*], diff --git a/src/dealer.cpp b/src/dealer.cpp index 66d99f4..c4f0c05 100644 --- a/src/dealer.cpp +++ b/src/dealer.cpp @@ -185,7 +185,7 @@ bool dealer::send(const obelisk_message& message) } // Stream interface, not utilized on this class. -bool dealer::read(stream& stream) +bool dealer::read(stream& ) { return false; } diff --git a/src/obelisk_client.cpp b/src/obelisk_client.cpp index d832800..6477fa3 100644 --- a/src/obelisk_client.cpp +++ b/src/obelisk_client.cpp @@ -35,7 +35,7 @@ static uint32_t to_milliseconds(uint16_t seconds) { const auto milliseconds = static_cast(seconds) * 1000; return std::min(milliseconds, max_uint32); -}; +} static const auto on_unknown = [](const std::string&){}; diff --git a/test/proxy.cpp b/test/proxy.cpp index d945a0f..9f3b122 100644 --- a/test/proxy.cpp +++ b/test/proxy.cpp @@ -38,7 +38,7 @@ class stream_fixture return 0; } - virtual bool read(stream& stream) override + virtual bool read(stream& ) override { return false; }