diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -772,6 +772,14 @@ [ AC_MSG_RESULT(no)] ) +AC_MSG_CHECKING(for if type char equals int8_t) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include + #include ]], + [[ static_assert(std::is_same::value, ""); ]])], + [ AC_MSG_RESULT(yes); AC_DEFINE(CHAR_EQUALS_INT8, 1,[Define this symbol if type char equals int8_t]) ], + [ AC_MSG_RESULT(no)] +) + # Check for reduced exports if test x$use_reduce_exports = xyes; then AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"], diff --git a/src/config/CMakeLists.txt b/src/config/CMakeLists.txt --- a/src/config/CMakeLists.txt +++ b/src/config/CMakeLists.txt @@ -146,6 +146,15 @@ } " HAVE_SYSCTL_ARND) +check_cxx_source_compiles(" + #include + #include + int main() { + static_assert(std::is_same::value, \"\"); + return 0; + } +" CHAR_EQUALS_INT8) + # OpenSSL functionality set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_CRYPTO_INCLUDES}) set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY}) diff --git a/src/config/bitcoin-config.h.cmake.in b/src/config/bitcoin-config.h.cmake.in --- a/src/config/bitcoin-config.h.cmake.in +++ b/src/config/bitcoin-config.h.cmake.in @@ -50,6 +50,8 @@ #cmakedefine HAVE_SYS_GETRANDOM 1 #cmakedefine HAVE_SYSCTL_ARND 1 +#cmakedefine CHAR_EQUALS_INT8 0 + #cmakedefine HAVE_DECL_EVP_MD_CTX_NEW 1 #cmakedefine ENABLE_WALLET 1 diff --git a/src/serialize.h b/src/serialize.h --- a/src/serialize.h +++ b/src/serialize.h @@ -179,9 +179,12 @@ SerializationOp(s, CSerActionUnserialize()); \ } +#ifndef CHAR_EQUALS_INT8 +// TODO Get rid of bare char template inline void Serialize(Stream &s, char a) { ser_writedata8(s, a); -} // TODO Get rid of bare char +} +#endif template inline void Serialize(Stream &s, int8_t a) { ser_writedata8(s, a); } @@ -212,10 +215,12 @@ template inline void Serialize(Stream &s, double a) { ser_writedata64(s, ser_double_to_uint64(a)); } +#ifndef CHAR_EQUALS_INT8 // TODO Get rid of bare char template inline void Unserialize(Stream &s, char &a) { a = ser_readdata8(s); } +#endif template inline void Unserialize(Stream &s, int8_t &a) { a = ser_readdata8(s); }