THRIFT-3437 Fixed MinGW-w64 build
Client: Build
Patch: Antonio Di Monaco
This closes #771
diff --git a/build/cmake/DefineOptions.cmake b/build/cmake/DefineOptions.cmake
index 695a615..3198db4 100644
--- a/build/cmake/DefineOptions.cmake
+++ b/build/cmake/DefineOptions.cmake
@@ -120,6 +120,8 @@
message(FATAL_ERROR "Cannot build with both shared and static outputs disabled!")
endif()
+option(WITH_DYN_LINK_TEST "Build with Boost dynamic link test library" OFF)
+
#NOTE: C++ compiler options are defined in the lib/cpp/CMakeLists.txt
# Visual Studio only options
@@ -135,23 +137,23 @@
macro(PRINT_CONFIG_SUMMARY)
message(STATUS "----------------------------------------------------------")
-message(STATUS "Thrift version: ${thrift_VERSION} (${thrift_VERSION_MAJOR}.${thrift_VERSION_MINOR}.${thrift_VERSION_PATCH})")
-message(STATUS "Thrift package version: ${PACKAGE_VERSION}")
+message(STATUS "Thrift version: ${thrift_VERSION} (${thrift_VERSION_MAJOR}.${thrift_VERSION_MINOR}.${thrift_VERSION_PATCH})")
+message(STATUS "Thrift package version: ${PACKAGE_VERSION}")
message(STATUS "Build configuration Summary")
-message(STATUS " Build Thrift compiler: ${BUILD_COMPILER}")
-message(STATUS " Build with unit tests: ${BUILD_TESTING}")
+message(STATUS " Build Thrift compiler: ${BUILD_COMPILER}")
+message(STATUS " Build with unit tests: ${BUILD_TESTING}")
MESSAGE_DEP(HAVE_COMPILER "Disabled because BUILD_THRIFT=OFF and no valid THRIFT_COMPILER is given")
-message(STATUS " Build examples: ${BUILD_EXAMPLES}")
+message(STATUS " Build examples: ${BUILD_EXAMPLES}")
MESSAGE_DEP(HAVE_COMPILER "Disabled because BUILD_THRIFT=OFF and no valid THRIFT_COMPILER is given")
-message(STATUS " Build Thrift libraries: ${BUILD_LIBRARIES}")
+message(STATUS " Build Thrift libraries: ${BUILD_LIBRARIES}")
message(STATUS " Language libraries:")
-message(STATUS " Build C++ library: ${BUILD_CPP}")
+message(STATUS " Build C++ library: ${BUILD_CPP}")
MESSAGE_DEP(WITH_CPP "Disabled by via WITH_CCP=OFF")
MESSAGE_DEP(Boost_FOUND "Boost headers missing")
-message(STATUS " Build C (GLib) library: ${BUILD_C_GLIB}")
+message(STATUS " Build C (GLib) library: ${BUILD_C_GLIB}")
MESSAGE_DEP(WITH_C_GLIB "Disabled by via WITH_C_GLIB=OFF")
MESSAGE_DEP(GLIB_FOUND "GLib missing")
-message(STATUS " Build Java library: ${BUILD_JAVA}")
+message(STATUS " Build Java library: ${BUILD_JAVA}")
MESSAGE_DEP(WITH_JAVA "Disabled by via WITH_JAVA=OFF")
if(ANDROID)
MESSAGE_DEP(GRADLE_FOUND "Gradle missing")
@@ -159,22 +161,23 @@
MESSAGE_DEP(JAVA_FOUND "Java Runtime missing")
MESSAGE_DEP(ANT_FOUND "Ant missing")
endif()
-message(STATUS " Build Python library: ${BUILD_PYTHON}")
+message(STATUS " Build Python library: ${BUILD_PYTHON}")
MESSAGE_DEP(WITH_PYTHON "Disabled by via WITH_PYTHON=OFF")
MESSAGE_DEP(PYTHONLIBS_FOUND "Python libraries missing")
-message(STATUS " Build Haskell library: ${BUILD_HASKELL}")
+message(STATUS " Build Haskell library: ${BUILD_HASKELL}")
MESSAGE_DEP(WITH_HASKELL "Disabled by via WITH_HASKELL=OFF")
MESSAGE_DEP(GHC_FOUND "GHC missing")
MESSAGE_DEP(CABAL_FOUND "Cabal missing")
message(STATUS " Library features:")
-message(STATUS " Build shared libraries: ${WITH_SHARED_LIB}")
-message(STATUS " Build static libraries: ${WITH_STATIC_LIB}")
-message(STATUS " Build with ZLIB support: ${WITH_ZLIB}")
-message(STATUS " Build with libevent support: ${WITH_LIBEVENT}")
-message(STATUS " Build with Qt4 support: ${WITH_QT4}")
-message(STATUS " Build with Qt5 support: ${WITH_QT5}")
-message(STATUS " Build with OpenSSL support: ${WITH_OPENSSL}")
-message(STATUS " Build with Boost thread support: ${WITH_BOOSTTHREADS}")
-message(STATUS " Build with C++ std::thread support: ${WITH_STDTHREADS}")
+message(STATUS " Build shared libraries: ${WITH_SHARED_LIB}")
+message(STATUS " Build static libraries: ${WITH_STATIC_LIB}")
+message(STATUS " Build with ZLIB support: ${WITH_ZLIB}")
+message(STATUS " Build with libevent support: ${WITH_LIBEVENT}")
+message(STATUS " Build with Qt4 support: ${WITH_QT4}")
+message(STATUS " Build with Qt5 support: ${WITH_QT5}")
+message(STATUS " Build with OpenSSL support: ${WITH_OPENSSL}")
+message(STATUS " Build with Boost thread support: ${WITH_BOOSTTHREADS}")
+message(STATUS " Build with C++ std::thread support: ${WITH_STDTHREADS}")
+message(STATUS " Build with Boost dynamic link test library: ${WITH_DYN_LINK_TEST}")
message(STATUS "----------------------------------------------------------")
endmacro(PRINT_CONFIG_SUMMARY)
diff --git a/lib/cpp/CMakeLists.txt b/lib/cpp/CMakeLists.txt
index 9404112..33cefcb 100755
--- a/lib/cpp/CMakeLists.txt
+++ b/lib/cpp/CMakeLists.txt
@@ -169,7 +169,11 @@
include(ThriftMacros)
ADD_LIBRARY_THRIFT(thrift ${thriftcpp_SOURCES} ${thriftcpp_threads_SOURCES})
-TARGET_LINK_LIBRARIES_THRIFT(thrift ${SYSLIBS})
+if(WIN32)
+ TARGET_LINK_LIBRARIES_THRIFT(thrift ${SYSLIBS} ws2_32)
+else()
+ TARGET_LINK_LIBRARIES_THRIFT(thrift ${SYSLIBS})
+endif()
if(WITH_LIBEVENT)
find_package(Libevent REQUIRED) # Libevent comes with CMake support form upstream
diff --git a/lib/cpp/src/thrift/cxxfunctional.h b/lib/cpp/src/thrift/cxxfunctional.h
index dadaac3..32933a4 100644
--- a/lib/cpp/src/thrift/cxxfunctional.h
+++ b/lib/cpp/src/thrift/cxxfunctional.h
@@ -34,7 +34,7 @@
* In MSVC 11 all of the implementations live in std, with aliases
* in std::tr1 to point to the ones in std.
*/
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__MINGW32__)
#define _THRIFT_USING_MICROSOFT_STDLIB 1
#endif
@@ -105,7 +105,11 @@
}}} // apache::thrift::stdcxx
#elif _THRIFT_USING_GNU_LIBSTDCXX
- #include <tr1/functional>
+ #ifdef USE_BOOST_THREAD
+ #include <boost/tr1/functional.hpp>
+ #else
+ #include <tr1/functional>
+ #endif
namespace apache { namespace thrift { namespace stdcxx {
using ::std::tr1::function;
diff --git a/lib/cpp/src/thrift/protocol/TCompactProtocol.tcc b/lib/cpp/src/thrift/protocol/TCompactProtocol.tcc
index 4d660e8..6bbf9ef 100644
--- a/lib/cpp/src/thrift/protocol/TCompactProtocol.tcc
+++ b/lib/cpp/src/thrift/protocol/TCompactProtocol.tcc
@@ -21,6 +21,8 @@
#include <limits>
+#include "thrift/config.h"
+
/*
* TCompactProtocol::i*ToZigzag depend on the fact that the right shift
* operator on a signed integer is an arithmetic (sign-extending) shift.
diff --git a/lib/cpp/src/thrift/server/TNonblockingServer.cpp b/lib/cpp/src/thrift/server/TNonblockingServer.cpp
index 7344b8b..96ee517 100644
--- a/lib/cpp/src/thrift/server/TNonblockingServer.cpp
+++ b/lib/cpp/src/thrift/server/TNonblockingServer.cpp
@@ -69,6 +69,10 @@
#define PRIu64 "I64u"
#endif
+#if (_WIN32_WINNT < 0x0600)
+ #define AI_ADDRCONFIG 0x0400
+#endif
+
namespace apache {
namespace thrift {
namespace server {
@@ -1024,6 +1028,10 @@
* Creates a socket to listen on and binds it to the local port.
*/
void TNonblockingServer::createAndListenOnSocket() {
+#ifdef _WIN32
+ TWinsockSingleton::create();
+#endif // _WIN32
+
THRIFT_SOCKET s;
struct addrinfo hints, *res, *res0;
@@ -1129,10 +1137,16 @@
serverSocket_ = s;
if (!port_) {
- sockaddr_in addr;
+ struct sockaddr_storage addr;
socklen_t size = sizeof(addr);
if (!getsockname(serverSocket_, reinterpret_cast<sockaddr*>(&addr), &size)) {
- listenPort_ = ntohs(addr.sin_port);
+ if (addr.ss_family == AF_INET6) {
+ const struct sockaddr_in6* sin = reinterpret_cast<const struct sockaddr_in6*>(&addr);
+ listenPort_ = ntohs(sin->sin6_port);
+ } else {
+ const struct sockaddr_in* sin = reinterpret_cast<const struct sockaddr_in*>(&addr);
+ listenPort_ = ntohs(sin->sin_port);
+ }
} else {
GlobalOutput.perror("TNonblocking: failed to get listen port: ", THRIFT_GET_SOCKET_ERROR);
}
diff --git a/lib/cpp/src/thrift/transport/THttpServer.cpp b/lib/cpp/src/thrift/transport/THttpServer.cpp
index a20d612..c89ab94 100644
--- a/lib/cpp/src/thrift/transport/THttpServer.cpp
+++ b/lib/cpp/src/thrift/transport/THttpServer.cpp
@@ -23,8 +23,8 @@
#include <thrift/transport/THttpServer.h>
#include <thrift/transport/TSocket.h>
-#ifdef _MSC_VER
-#include <Shlwapi.h>
+#if defined(_MSC_VER) || defined(__MINGW32__)
+ #include <Shlwapi.h>
#endif
namespace apache {
@@ -39,7 +39,7 @@
THttpServer::~THttpServer() {
}
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__MINGW32__)
#define THRIFT_strncasecmp(str1, str2, len) _strnicmp(str1, str2, len)
#define THRIFT_strcasestr(haystack, needle) StrStrIA(haystack, needle)
#else
diff --git a/lib/cpp/src/thrift/transport/TPipe.cpp b/lib/cpp/src/thrift/transport/TPipe.cpp
index b1e1b72..75ce5d2 100644
--- a/lib/cpp/src/thrift/transport/TPipe.cpp
+++ b/lib/cpp/src/thrift/transport/TPipe.cpp
@@ -45,7 +45,7 @@
class TPipeImpl : boost::noncopyable {
public:
TPipeImpl() {}
- virtual ~TPipeImpl() = 0 {}
+ virtual ~TPipeImpl() {}
virtual uint32_t read(uint8_t* buf, uint32_t len) = 0;
virtual void write(const uint8_t* buf, uint32_t len) = 0;
virtual HANDLE getPipeHandle() = 0; // doubles as the read handle for anon pipe
diff --git a/lib/cpp/src/thrift/transport/TPipeServer.cpp b/lib/cpp/src/thrift/transport/TPipeServer.cpp
index 7923102..cf6b410 100644
--- a/lib/cpp/src/thrift/transport/TPipeServer.cpp
+++ b/lib/cpp/src/thrift/transport/TPipeServer.cpp
@@ -43,7 +43,7 @@
class TPipeServerImpl : boost::noncopyable {
public:
TPipeServerImpl() {}
- virtual ~TPipeServerImpl() = 0 {}
+ virtual ~TPipeServerImpl() {}
virtual void interrupt() = 0;
virtual boost::shared_ptr<TTransport> acceptImpl() = 0;
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.cpp b/lib/cpp/src/thrift/transport/TServerSocket.cpp
index 347da4d..dad0882 100644
--- a/lib/cpp/src/thrift/transport/TServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp
@@ -60,6 +60,10 @@
#endif // _WIN32
#endif
+#if defined(_WIN32) && (_WIN32_WINNT < 0x0600)
+ #define AI_ADDRCONFIG 0x0400
+#endif
+
template <class T>
inline const SOCKOPT_CAST_T* const_cast_sockopt(const T* v) {
return reinterpret_cast<const SOCKOPT_CAST_T*>(v);
diff --git a/lib/cpp/src/thrift/transport/TSocket.cpp b/lib/cpp/src/thrift/transport/TSocket.cpp
index 6ce524b..6de6d4e 100644
--- a/lib/cpp/src/thrift/transport/TSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TSocket.cpp
@@ -53,6 +53,10 @@
#endif // _WIN32
#endif
+#if defined(_WIN32) && (_WIN32_WINNT < 0x0600)
+ #define AI_ADDRCONFIG 0x0400
+#endif
+
template <class T>
inline const SOCKOPT_CAST_T* const_cast_sockopt(const T* v) {
return reinterpret_cast<const SOCKOPT_CAST_T*>(v);
diff --git a/lib/cpp/src/thrift/windows/GetTimeOfDay.cpp b/lib/cpp/src/thrift/windows/GetTimeOfDay.cpp
index 654d005..fba077c 100644
--- a/lib/cpp/src/thrift/windows/GetTimeOfDay.cpp
+++ b/lib/cpp/src/thrift/windows/GetTimeOfDay.cpp
@@ -23,17 +23,28 @@
// win32
#include <time.h>
+#if defined(__MINGW32__)
+ #include <sys/time.h>
+#endif
+
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64
#else
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
#endif
+#if !defined(__MINGW32__)
struct timezone {
int tz_minuteswest; /* minutes W of Greenwich */
int tz_dsttime; /* type of dst correction */
};
+#endif
+#if defined(__MINGW32__)
+int thrift_gettimeofday(struct timeval* tv, struct timezone* tz) {
+ return gettimeofday(tv,tz);
+}
+#else
int thrift_gettimeofday(struct timeval* tv, struct timezone* tz) {
FILETIME ft;
unsigned __int64 tmpres(0);
@@ -79,6 +90,7 @@
return 0;
}
+#endif
int thrift_sleep(unsigned int seconds) {
::Sleep(seconds * 1000);
diff --git a/lib/cpp/test/CMakeLists.txt b/lib/cpp/test/CMakeLists.txt
index 5d017b4..7fb2aa3 100644
--- a/lib/cpp/test/CMakeLists.txt
+++ b/lib/cpp/test/CMakeLists.txt
@@ -23,6 +23,10 @@
include_directories(SYSTEM "${Boost_INCLUDE_DIRS}")
include_directories(SYSTEM "${ZLIB_INCLUDE_DIRS}")
+if (WITH_DYN_LINK_TEST)
+ add_definitions( -DBOOST_TEST_DYN_LINK )
+endif()
+
#Make sure gen-cpp files can be included
include_directories("${CMAKE_CURRENT_BINARY_DIR}")
@@ -106,7 +110,7 @@
${Boost_LIBRARIES}
)
LINK_AGAINST_THRIFT_LIBRARY(TInterruptTest thrift)
-if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND NOT MINGW)
target_link_libraries(TInterruptTest -lrt)
endif ()
add_test(NAME TInterruptTest COMMAND TInterruptTest "${CMAKE_CURRENT_SOURCE_DIR}/../../../test/keys")
@@ -117,7 +121,7 @@
${Boost_LIBRARIES}
)
LINK_AGAINST_THRIFT_LIBRARY(TServerIntegrationTest thrift)
-if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND NOT MINGW)
target_link_libraries(TServerIntegrationTest -lrt)
endif ()
add_test(NAME TServerIntegrationTest COMMAND TServerIntegrationTest)
@@ -303,7 +307,7 @@
${Boost_LIBRARIES}
)
LINK_AGAINST_THRIFT_LIBRARY(SecurityTest thrift)
-if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+if (NOT MSVC AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND NOT MINGW)
target_link_libraries(SecurityTest -lrt)
endif ()
add_test(NAME SecurityTest COMMAND SecurityTest "${CMAKE_CURRENT_SOURCE_DIR}/../../../test/keys")
diff --git a/lib/cpp/test/OpenSSLManualInitTest.cpp b/lib/cpp/test/OpenSSLManualInitTest.cpp
index 6afd7ce..5cd5e48 100644
--- a/lib/cpp/test/OpenSSLManualInitTest.cpp
+++ b/lib/cpp/test/OpenSSLManualInitTest.cpp
@@ -67,6 +67,20 @@
openssl_cleanup();
}
+#ifdef BOOST_TEST_DYN_LINK
+bool init_unit_test_suite() {
+ boost::unit_test::test_suite* suite = &boost::unit_test::framework::master_test_suite();
+ suite->p_name.value = "OpenSSLManualInit";
+
+ suite->add(BOOST_TEST_CASE(test_openssl_availability));
+
+ return true;
+}
+
+int main( int argc, char* argv[] ) {
+ return ::boost::unit_test::unit_test_main(&init_unit_test_suite,argc,argv);
+}
+#else
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]) {
THRIFT_UNUSED_VARIABLE(argc);
THRIFT_UNUSED_VARIABLE(argv);
@@ -77,3 +91,4 @@
return NULL;
}
+#endif
\ No newline at end of file
diff --git a/lib/cpp/test/SecurityTest.cpp b/lib/cpp/test/SecurityTest.cpp
index 213efd4..1369077 100644
--- a/lib/cpp/test/SecurityTest.cpp
+++ b/lib/cpp/test/SecurityTest.cpp
@@ -108,8 +108,8 @@
pServerSocketFactory.reset(new TSSLSocketFactory(static_cast<apache::thrift::transport::SSLProtocol>(protocol)));
pServerSocketFactory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
- pServerSocketFactory->loadCertificate(certFile("server.crt").native().c_str());
- pServerSocketFactory->loadPrivateKey(certFile("server.key").native().c_str());
+ pServerSocketFactory->loadCertificate(certFile("server.crt").string().c_str());
+ pServerSocketFactory->loadPrivateKey(certFile("server.key").string().c_str());
pServerSocketFactory->server(true);
pServerSocket.reset(new TSSLServerSocket("localhost", m_serverPort, pServerSocketFactory));
boost::shared_ptr<TTransport> connectedClient;
@@ -160,9 +160,9 @@
{
pClientSocketFactory.reset(new TSSLSocketFactory(static_cast<apache::thrift::transport::SSLProtocol>(protocol)));
pClientSocketFactory->authenticate(true);
- pClientSocketFactory->loadCertificate(certFile("client.crt").native().c_str());
- pClientSocketFactory->loadPrivateKey(certFile("client.key").native().c_str());
- pClientSocketFactory->loadTrustedCertificates(certFile("CA.pem").native().c_str());
+ pClientSocketFactory->loadCertificate(certFile("client.crt").string().c_str());
+ pClientSocketFactory->loadPrivateKey(certFile("client.key").string().c_str());
+ pClientSocketFactory->loadTrustedCertificates(certFile("CA.pem").string().c_str());
pClientSocket = pClientSocketFactory->createSocket("localhost", m_serverPort);
pClientSocket->open();
diff --git a/lib/cpp/test/TFileTransportTest.cpp b/lib/cpp/test/TFileTransportTest.cpp
index 294c9a6..8551b78 100644
--- a/lib/cpp/test/TFileTransportTest.cpp
+++ b/lib/cpp/test/TFileTransportTest.cpp
@@ -30,6 +30,14 @@
#include <thrift/transport/TFileTransport.h>
+#ifdef __MINGW32__
+ #include <io.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <fcntl.h>
+ #include <sys\stat.h>
+#endif
+
using namespace apache::thrift::transport;
/**************************************************************************
@@ -91,6 +99,19 @@
class TempFile {
public:
TempFile(const char* directory, const char* prefix) {
+ #ifdef __MINGW32__
+ size_t path_len = strlen(prefix) + 8;
+ path_ = new char[path_len];
+ snprintf(path_, path_len, "%sXXXXXX", prefix);
+ if (_mktemp_s(path_,path_len) == 0) {
+ fd_ = open(path_,O_CREAT | O_RDWR | O_BINARY,S_IREAD | S_IWRITE);
+ if (fd_ < 0) {
+ throw apache::thrift::TException("_mktemp_s() failed");
+ }
+ } else {
+ throw apache::thrift::TException("_mktemp_s() failed");
+ }
+ #else
size_t path_len = strlen(directory) + strlen(prefix) + 8;
path_ = new char[path_len];
snprintf(path_, path_len, "%s/%sXXXXXX", directory, prefix);
@@ -99,6 +120,7 @@
if (fd_ < 0) {
throw apache::thrift::TException("mkstemp() failed");
}
+ #endif
}
~TempFile() {
@@ -367,6 +389,24 @@
}
}
+#ifdef BOOST_TEST_DYN_LINK
+static int myArgc = 0;
+static char **myArgv = NULL;
+
+bool init_unit_test_suite() {
+ boost::unit_test::framework::master_test_suite().p_name.value = "TFileTransportTest";
+
+ // Parse arguments
+ parse_args(myArgc,myArgv);
+ return true;
+}
+
+int main( int argc, char* argv[] ) {
+ myArgc = argc;
+ myArgv = argv;
+ return ::boost::unit_test::unit_test_main(&init_unit_test_suite,argc,argv);
+}
+#else
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]) {
boost::unit_test::framework::master_test_suite().p_name.value = "TFileTransportTest";
@@ -374,3 +414,4 @@
parse_args(argc, argv);
return NULL;
}
+#endif
\ No newline at end of file
diff --git a/lib/cpp/test/TSSLSocketInterruptTest.cpp b/lib/cpp/test/TSSLSocketInterruptTest.cpp
index c723d0e..f19b159 100644
--- a/lib/cpp/test/TSSLSocketInterruptTest.cpp
+++ b/lib/cpp/test/TSSLSocketInterruptTest.cpp
@@ -119,8 +119,8 @@
pServerSocketFactory.reset(new TSSLSocketFactory());
pServerSocketFactory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
- pServerSocketFactory->loadCertificate(certFile("server.crt").native().c_str());
- pServerSocketFactory->loadPrivateKey(certFile("server.key").native().c_str());
+ pServerSocketFactory->loadCertificate(certFile("server.crt").string().c_str());
+ pServerSocketFactory->loadPrivateKey(certFile("server.key").string().c_str());
pServerSocketFactory->server(true);
return pServerSocketFactory;
}
@@ -130,9 +130,9 @@
pClientSocketFactory.reset(new TSSLSocketFactory());
pClientSocketFactory->authenticate(true);
- pClientSocketFactory->loadCertificate(certFile("client.crt").native().c_str());
- pClientSocketFactory->loadPrivateKey(certFile("client.key").native().c_str());
- pClientSocketFactory->loadTrustedCertificates(certFile("CA.pem").native().c_str());
+ pClientSocketFactory->loadCertificate(certFile("client.crt").string().c_str());
+ pClientSocketFactory->loadPrivateKey(certFile("client.key").string().c_str());
+ pClientSocketFactory->loadTrustedCertificates(certFile("CA.pem").string().c_str());
return pClientSocketFactory;
}
diff --git a/lib/cpp/test/TransportTest.cpp b/lib/cpp/test/TransportTest.cpp
index c056a5d..6cc2c87 100644
--- a/lib/cpp/test/TransportTest.cpp
+++ b/lib/cpp/test/TransportTest.cpp
@@ -1024,6 +1024,25 @@
BOOST_GLOBAL_FIXTURE(global_fixture)
#endif
+#ifdef BOOST_TEST_DYN_LINK
+bool init_unit_test_suite() {
+ struct timeval tv;
+ THRIFT_GETTIMEOFDAY(&tv, NULL);
+ int seed = tv.tv_sec ^ tv.tv_usec;
+
+ initrand(seed);
+
+ boost::unit_test::test_suite* suite = &boost::unit_test::framework::master_test_suite();
+ suite->p_name.value = "TransportTest";
+ TransportTestGen transport_test_generator(suite, 1);
+ transport_test_generator.generate();
+ return true;
+}
+
+int main( int argc, char* argv[] ) {
+ return ::boost::unit_test::unit_test_main(&init_unit_test_suite,argc,argv);
+}
+#else
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]) {
THRIFT_UNUSED_VARIABLE(argc);
THRIFT_UNUSED_VARIABLE(argv);
@@ -1039,3 +1058,4 @@
transport_test_generator.generate();
return NULL;
}
+#endif
diff --git a/lib/cpp/test/ZlibTest.cpp b/lib/cpp/test/ZlibTest.cpp
index fa237a2..e155970 100644
--- a/lib/cpp/test/ZlibTest.cpp
+++ b/lib/cpp/test/ZlibTest.cpp
@@ -412,6 +412,31 @@
fprintf(f, " --help\n");
}
+#ifdef BOOST_TEST_DYN_LINK
+bool init_unit_test_suite() {
+ uint32_t seed = static_cast<uint32_t>(time(NULL));
+#ifdef HAVE_INTTYPES_H
+ printf("seed: %" PRIu32 "\n", seed);
+#endif
+ rng.seed(seed);
+
+ boost::unit_test::test_suite* suite = &boost::unit_test::framework::master_test_suite();
+ suite->p_name.value = "ZlibTest";
+
+ uint32_t buf_len = 1024 * 32;
+ add_tests(suite, gen_uniform_buffer(buf_len, 'a'), buf_len, "uniform");
+ add_tests(suite, gen_compressible_buffer(buf_len), buf_len, "compressible");
+ add_tests(suite, gen_random_buffer(buf_len), buf_len, "random");
+
+ suite->add(BOOST_TEST_CASE(test_no_write));
+
+ return true;
+}
+
+int main( int argc, char* argv[] ) {
+ return ::boost::unit_test::unit_test_main(&init_unit_test_suite,argc,argv);
+}
+#else
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]) {
THRIFT_UNUSED_VARIABLE(argc);
THRIFT_UNUSED_VARIABLE(argv);
@@ -433,3 +458,4 @@
return NULL;
}
+#endif
diff --git a/lib/cpp/test/processor/ProcessorTest.cpp b/lib/cpp/test/processor/ProcessorTest.cpp
index 5aaa57e..0066657 100644
--- a/lib/cpp/test/processor/ProcessorTest.cpp
+++ b/lib/cpp/test/processor/ProcessorTest.cpp
@@ -908,9 +908,20 @@
// TODO: We should test TEventServer in the future.
// For now, it is known not to work correctly with TProcessorEventHandler.
+#ifdef BOOST_TEST_DYN_LINK
+bool init_unit_test_suite() {
+ unit_test::framework::master_test_suite().p_name.value = "ProcessorTest";
+ return true;
+}
+
+int main( int argc, char* argv[] ) {
+ return ::boost::unit_test::unit_test_main(&init_unit_test_suite,argc,argv);
+}
+#else
unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]) {
THRIFT_UNUSED_VARIABLE(argc);
THRIFT_UNUSED_VARIABLE(argv);
unit_test::framework::master_test_suite().p_name.value = "ProcessorTest";
return NULL;
}
+#endif
diff --git a/lib/cpp/test/qt/TQTcpServerTest.cpp b/lib/cpp/test/qt/TQTcpServerTest.cpp
index 79c0dfc..0cad6a9 100644
--- a/lib/cpp/test/qt/TQTcpServerTest.cpp
+++ b/lib/cpp/test/qt/TQTcpServerTest.cpp
@@ -1,18 +1,20 @@
#define BOOST_TEST_MODULE TQTcpServerTest
#include <QTest>
-#include <boost/smart_ptr.hpp>
#include <iostream>
#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress>
-#include "thrift/protocol/TBinaryProtocol.h"
-#include "thrift/async/TAsyncProcessor.h"
-#include "thrift/qt/TQTcpServer.h"
-#include "thrift/qt/TQIODeviceTransport.h"
-
-#include "gen-cpp/ParentService.h"
+#ifndef Q_MOC_RUN
+ #include <boost/smart_ptr.hpp>
+ #include "thrift/protocol/TBinaryProtocol.h"
+ #include "thrift/async/TAsyncProcessor.h"
+ #include "thrift/qt/TQTcpServer.h"
+ #include "thrift/qt/TQIODeviceTransport.h"
+
+ #include "gen-cpp/ParentService.h"
+#endif
using namespace apache::thrift;