Skip to content
Snippets Groups Projects
Commit 28d3b030 authored by Ramin Yaghoubzadeh Torky's avatar Ramin Yaghoubzadeh Torky
Browse files

cpp: towards VS2015 build

parent 521321f4
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,8 @@ cmake_minimum_required (VERSION 2.6)
# project name
project (ipaaca_cpp)
set (CMAKE_CXX_STANDARD 11)
# use C++11 (starting with proto v2 / ipaaca-c++ release 12)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
......@@ -43,19 +45,18 @@ if(WIN32) # Check if we are on Windows
# On the other hand, if you simply want to use the precompiled rsb from inside
# "rsx" (it works but has no debug info), uncomment the following four lines.
#
include_directories( ${PROJECT_SOURCE_DIR}/../../../rsx/RSC-0.11.0-win32/include/rsc0.11 )
include_directories( ${PROJECT_SOURCE_DIR}/../../../rsx/RSB-0.11.2-win32/include/rsb0.11 )
link_directories( ${PROJECT_SOURCE_DIR}/../../../rsx/RSC-0.11.0-win32/lib )
link_directories( ${PROJECT_SOURCE_DIR}/../../../rsx/RSB-0.11.2-win32/lib )
include_directories( ${PROJECT_SOURCE_DIR}/../../../rsx/RSC-0.14.5-win32/include/rsc0.14 )
include_directories( ${PROJECT_SOURCE_DIR}/../../../rsx/RSB-0.14.2-win32/include/rsb0.14 )
link_directories( ${PROJECT_SOURCE_DIR}/../../../rsx/RSC-0.14.5-win32/lib )
link_directories( ${PROJECT_SOURCE_DIR}/../../../rsx/RSB-0.14.2-win32/lib )
set(RSBLIBS rsc0.11 rsb0.11)
#set(RSBLIBS rsc0.14 rsb0.14)
set(RSBLIBS ${PROJECT_SOURCE_DIR}/../../../rsx/RSC-0.14.5-win32/rsc0.14.lib ${PROJECT_SOURCE_DIR}/../../../rsx/RSB-0.14.2-win32/rsb0.14.lib )
set(LIBS ${LIBS} rpcrt4)
# Using custom Protobuf script (from rsc) because it honors PROTOBUF_ROOT
find_package(ProtocolBuffers REQUIRED)
link_directories(${PROTOBUF_LIBRARY_DIRS})
include_directories(${PROTOBUF_INCLUDE_DIRS})
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost COMPONENTS date_time program_options system filesystem thread signals regex REQUIRED)
link_directories(${Boost_LIBRARY_DIRS})
include_directories(${Boost_INCLUDE_DIRS})
......@@ -64,15 +65,23 @@ if(WIN32) # Check if we are on Windows
set(CORRECT_BOOST_LIBS "")
foreach(BLIB ${Boost_LIBRARIES})
#message(STATUS "Boost lib: ${BLIB}")
string(REGEX MATCH "boost_thread[^/]+$" drop_item ${BLIB})
if(drop_item)
message(STATUS "(Windows hack:) Removing boost_thread library from the linkage list.")
else(drop_item)
##message(STATUS "(Windows hack:) forcing vc110")
##string(REPLACE "-vc140" "-vc110" BLIB_CONV ${BLIB})
#string(REGEX MATCH "boost_thread[^/]+$" drop_item ${BLIB_CONV})
#if(drop_item)
# message(STATUS "(Windows hack:) =====> Removing boost_thread library from the linkage list.")
# else(drop_item)
list(APPEND CORRECT_BOOST_LIBS ${BLIB})
endif(drop_item)
# endif(drop_item)
endforeach(BLIB ${Boost_LIBRARIES})
set(Boost_LIBRARIES ${CORRECT_BOOST_LIBS})
# Using custom Protobuf script (from rsc) because it honors PROTOBUF_ROOT
find_package(ProtocolBuffers REQUIRED)
link_directories(${PROTOBUF_LIBRARY_DIRS})
include_directories(${PROTOBUF_INCLUDE_DIRS})
else()
message(SEND_ERROR "Unsupported compiler! Please build with MSVC (2010).")
endif()
......@@ -111,7 +120,11 @@ else()
endif(WIN32)
set(LIBS ${LIBS} ${PROTOBUF_LIBRARY} ${Boost_LIBRARIES} ${RSBLIBS} pthread)
set(LIBS ${LIBS} ${PROTOBUF_LIBRARY} ${Boost_LIBRARIES} ${RSBLIBS})
if(!WIN32)
set(LIBS ${LIBS} pthread)
endif(!WIN32)
# Hide the rsb-induced boost-signals warning (FOR NOW)
set(IPAACA_CXX_DEFINES "${IPAACA_CXX_DEFINES} -DBOOST_SIGNALS_NO_DEPRECATION_WARNING")
......@@ -179,8 +192,8 @@ add_library(ipaaca SHARED ${SOURCE})
# and link all the required external libs (found above using find_package etc.)
target_link_libraries(ipaaca ${LIBS})
add_executable (ipaaca-test-json ${JSON_TEST_SOURCE})
target_link_libraries (ipaaca-test-json ${LIBS})
#add_executable (ipaaca-test-json ${JSON_TEST_SOURCE})
#target_link_libraries (ipaaca-test-json ${LIBS})
set(DEFAULT_BIN_SUBDIR bin)
set(DEFAULT_LIB_SUBDIR lib)
......@@ -203,11 +216,11 @@ install(
DESTINATION include/ipaaca/
)
install (
TARGETS ipaaca-test-json
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
#install (
#TARGETS ipaaca-test-json
#RUNTIME DESTINATION bin
#LIBRARY DESTINATION lib
#ARCHIVE DESTINATION lib
# )
@echo off
md build
cd build
md ipaaca
\Users\ryaghoub\Documents\Develop\repo\protobuf\bin\protoc.exe --proto_path=../../proto ../../proto/ipaaca.proto --cpp_out=build/ipaaca/
cmake .. -DBoost_DEBUG:bool=True -DBOOST_LIBRARYDIR:string=C:\Users\ryaghoub\Downloads\boost_1_57_0__built__boost_subdir_moved_to_stage_include\stage\lib -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_MULTITHREADED=ON -DPROTOBUF_ROOT:string=C:\Users\ryaghoub\Documents\Develop\repo\protobuf
msbuild INSTALL.vcxproj
......@@ -53,16 +53,16 @@
// casting operators from Value&
/// 'Smart' type conversions, allowing for some leeway type-wise (e.g. string "1.3" can be successfully cast to double or long). Used by PayloadEntryProxy.
IPAACA_HEADER_EXPORT template<typename T> T json_value_cast(const rapidjson::Value&);
IPAACA_HEADER_EXPORT template<typename T> T json_value_cast(const rapidjson::Value* value) { if (!value) return T(); return json_value_cast<T>(*value); }
IPAACA_HEADER_EXPORT template<> long json_value_cast(const rapidjson::Value&);
IPAACA_HEADER_EXPORT template<> int json_value_cast(const rapidjson::Value&);
IPAACA_HEADER_EXPORT template<> double json_value_cast(const rapidjson::Value&);
IPAACA_HEADER_EXPORT template<> bool json_value_cast(const rapidjson::Value&);
IPAACA_HEADER_EXPORT template<> std::string json_value_cast(const rapidjson::Value&);
IPAACA_HEADER_EXPORT template<> std::vector<std::string> json_value_cast(const rapidjson::Value&);
IPAACA_HEADER_EXPORT template<> std::list<std::string> json_value_cast(const rapidjson::Value&);
IPAACA_HEADER_EXPORT template<> std::map<std::string, std::string> json_value_cast(const rapidjson::Value&);
template<typename T> IPAACA_HEADER_EXPORT T json_value_cast(const rapidjson::Value&);
template<typename T> IPAACA_HEADER_EXPORT T json_value_cast(const rapidjson::Value* value) { if (!value) return T(); return json_value_cast<T>(*value); }
template<> IPAACA_HEADER_EXPORT long json_value_cast(const rapidjson::Value&);
template<> IPAACA_HEADER_EXPORT int json_value_cast(const rapidjson::Value&);
template<> IPAACA_HEADER_EXPORT double json_value_cast(const rapidjson::Value&);
template<> IPAACA_HEADER_EXPORT bool json_value_cast(const rapidjson::Value&);
template<> IPAACA_HEADER_EXPORT std::string json_value_cast(const rapidjson::Value&);
template<> IPAACA_HEADER_EXPORT std::vector<std::string> json_value_cast(const rapidjson::Value&);
template<> IPAACA_HEADER_EXPORT std::list<std::string> json_value_cast(const rapidjson::Value&);
template<> IPAACA_HEADER_EXPORT std::map<std::string, std::string> json_value_cast(const rapidjson::Value&);
// helpers to set Value& from various standard types
//IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::Value&, rapidjson::Document::AllocatorType&, T t);
......@@ -80,7 +80,7 @@ IPAACA_HEADER_EXPORT void pack_into_json_value(rapidjson::Value&, rapidjson::Doc
IPAACA_HEADER_EXPORT void pack_into_json_value(rapidjson::Value&, rapidjson::Document::AllocatorType&, const char*);
// helpers to set Value& from several standard containers containing the above standard types
/// Setter to store a vector of supported basic types into json value, used by PayloadEntryProxy.
IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::vector<T>& ts)
template<typename T> IPAACA_HEADER_EXPORT void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::vector<T>& ts)
{
valueobject.SetArray();
for (auto& val: ts) {
......@@ -90,7 +90,7 @@ IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::V
}
}
/// Setter to store a list of supported basic types into json value, used by PayloadEntryProxy.
IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::list<T>& ts)
template<typename T> IPAACA_HEADER_EXPORT void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::list<T>& ts)
{
valueobject.SetArray();
for (auto& val: ts) {
......@@ -100,7 +100,7 @@ IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::V
}
}
/// Setter to store a map of string -> supported basic types into json value, used by PayloadEntryProxy.
IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::map<std::string, T>& ts)
template<typename T> IPAACA_HEADER_EXPORT void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::map<std::string, T>& ts)
{
valueobject.SetObject();
for (auto& val: ts) {
......@@ -388,7 +388,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](const char* key);
//
/// Set or overwrite some portion of a payload from the point navigated to
IPAACA_HEADER_EXPORT template<typename T> PayloadEntryProxy& operator=(T t)
template<typename T> IPAACA_HEADER_EXPORT PayloadEntryProxy& operator=(T t)
{
PayloadDocumentEntry::ptr new_entry = document_entry->clone(); // copy-on-write, no lock required
rapidjson::Value& newval = new_entry->get_or_create_nested_value_from_proxy_path(this);
......@@ -401,7 +401,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
/// Value comparison with other proxy contents
IPAACA_HEADER_EXPORT inline bool operator!=(const PayloadEntryProxy& otherproxy) { return !operator==(otherproxy); }
/// Value comparison with supported basic types
IPAACA_HEADER_EXPORT template<typename T> bool operator==(T othervalue)
template<typename T> IPAACA_HEADER_EXPORT bool operator==(T othervalue)
{
if (!json_value) return false;
try {
......@@ -412,7 +412,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
}
}
/// Value comparison with supported basic types
IPAACA_HEADER_EXPORT template<typename T> bool operator!=(T othervalue) { return !operator==(othervalue); }
template<typename T> IPAACA_HEADER_EXPORT bool operator!=(T othervalue) { return !operator==(othervalue); }
/// Value comparison with char* (required to be explicitly added)
IPAACA_HEADER_EXPORT inline bool operator==(const char* othervalue)
{
......@@ -434,7 +434,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
/// Conversion to bool (explicit or implicit)
IPAACA_HEADER_EXPORT operator bool();
/// Conversion to uniform std::vector of supported basic type
IPAACA_HEADER_EXPORT template<typename Inner> operator std::vector<Inner>() {
template<typename Inner> IPAACA_HEADER_EXPORT operator std::vector<Inner>() {
if ((!json_value) || (!json_value->IsArray())) throw PayloadAddressingError();
std::vector<Inner> result;
for (auto it = json_value->Begin(); it != json_value->End(); ++it) {
......@@ -443,7 +443,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
return result;
}
/// Conversion to uniform std::list of supported basic type
IPAACA_HEADER_EXPORT template<typename Inner> operator std::list<Inner>() {
template<typename Inner> IPAACA_HEADER_EXPORT operator std::list<Inner>() {
if ((!json_value) || (!json_value->IsArray())) throw PayloadAddressingError();
std::list<Inner> result;
for (auto it = json_value->Begin(); it != json_value->End(); ++it) {
......@@ -452,7 +452,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
return result;
}
/// Conversion to uniform std::map of string -> supported basic type
IPAACA_HEADER_EXPORT template<typename Inner> operator std::map<std::string, Inner>() {
template<typename Inner> IPAACA_HEADER_EXPORT operator std::map<std::string, Inner>() {
if ((!json_value) || (!json_value->IsObject())) throw PayloadAddressingError();
std::map<std::string, Inner> result;
for (auto it = json_value->MemberBegin(); it != json_value->MemberEnd(); ++it) {
......@@ -475,7 +475,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
[[deprecated("Use operator bool() instead (i.e. explicit or implicit cast)")]]
IPAACA_HEADER_EXPORT bool to_bool();
/// Append a supported type to a list-type payload value
IPAACA_HEADER_EXPORT template<typename T> void push_back(T t)
template<typename T> IPAACA_HEADER_EXPORT void push_back(T t)
{
if ((!json_value) || (!json_value->IsArray())) throw PayloadAddressingError();
PayloadDocumentEntry::ptr new_entry = document_entry->clone(); // copy-on-write, no lock required
......@@ -500,7 +500,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
_payload->set(_key, new_entry);
}
/// Extend a list-type payload value with a vector containing items of a supported type
IPAACA_HEADER_EXPORT template<typename T> void extend(const std::vector<T>& ts)
template<typename T> IPAACA_HEADER_EXPORT void extend(const std::vector<T>& ts)
{
if ((!json_value) || (!json_value->IsArray())) throw PayloadAddressingError();
PayloadDocumentEntry::ptr new_entry = document_entry->clone(); // copy-on-write, no lock required
......@@ -513,7 +513,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
_payload->set(_key, new_entry);
}
/// Extend a list-type payload value with a list containing items of a supported type
IPAACA_HEADER_EXPORT template<typename T> void extend(const std::list<T>& ts)
template<typename T> IPAACA_HEADER_EXPORT void extend(const std::list<T>& ts)
{
if ((!json_value) || (!json_value->IsArray())) throw PayloadAddressingError();
PayloadDocumentEntry::ptr new_entry = document_entry->clone(); // copy-on-write, no lock required
......
......@@ -157,10 +157,16 @@ IU payload contents: Payload, PayloadEntryProxy
#ifdef WIN32
// for Windows
// time
#include <time.h>
// and env
#define IPAACA_SETENV(k, v) _putenv_s(k, v);
#else
// for Linux and OS X
// for Linux and MacOS
// time
#include <sys/time.h>
// and env
#define IPAACA_SETENV(k, v) setenv(k, v, 1);
#endif
#include <cstdlib>
......
......@@ -100,28 +100,28 @@ IPAACA_EXPORT void Initializer::auto_configure_rsb()//{{{
// set RSB host and port iff provided using cmdline arguments
if (__ipaaca_static_option_rsb_host!="") {
IPAACA_INFO("Overriding RSB host with " << __ipaaca_static_option_rsb_host)
setenv("RSB_TRANSPORT_SPREAD_HOST", __ipaaca_static_option_rsb_host.c_str(), 1);
setenv("RSB_TRANSPORT_SOCKET_HOST", __ipaaca_static_option_rsb_host.c_str(), 1);
IPAACA_SETENV("RSB_TRANSPORT_SPREAD_HOST", __ipaaca_static_option_rsb_host.c_str())
IPAACA_SETENV("RSB_TRANSPORT_SOCKET_HOST", __ipaaca_static_option_rsb_host.c_str());
}
if (__ipaaca_static_option_rsb_port!="") {
IPAACA_INFO("Overriding RSB port with " << __ipaaca_static_option_rsb_port)
setenv("RSB_TRANSPORT_SPREAD_PORT", __ipaaca_static_option_rsb_port.c_str(), 1);
setenv("RSB_TRANSPORT_SOCKET_PORT", __ipaaca_static_option_rsb_port.c_str(), 1);
IPAACA_SETENV("RSB_TRANSPORT_SPREAD_PORT", __ipaaca_static_option_rsb_port.c_str());
IPAACA_SETENV("RSB_TRANSPORT_SOCKET_PORT", __ipaaca_static_option_rsb_port.c_str());
}
if (__ipaaca_static_option_rsb_transport!="") {
if (__ipaaca_static_option_rsb_transport == "spread") {
IPAACA_INFO("Overriding RSB transport mode - using 'spread' ")
setenv("RSB_TRANSPORT_SPREAD_ENABLED", "1", 1);
setenv("RSB_TRANSPORT_SOCKET_ENABLED", "0", 1);
IPAACA_SETENV("RSB_TRANSPORT_SPREAD_ENABLED", "1", 1);
IPAACA_SETENV("RSB_TRANSPORT_SOCKET_ENABLED", "0", 1);
} else if (__ipaaca_static_option_rsb_transport == "socket") {
IPAACA_INFO("Overriding RSB transport mode - using 'socket' ")
setenv("RSB_TRANSPORT_SPREAD_ENABLED", "0", 1);
setenv("RSB_TRANSPORT_SOCKET_ENABLED", "1", 1);
IPAACA_SETENV("RSB_TRANSPORT_SPREAD_ENABLED", "0", 1);
IPAACA_SETENV("RSB_TRANSPORT_SOCKET_ENABLED", "1", 1);
if (__ipaaca_static_option_rsb_socketserver!="") {
const std::string& srv = __ipaaca_static_option_rsb_socketserver;
if ((srv=="1")||(srv=="0")||(srv=="auto")) {
IPAACA_INFO("Overriding RSB transport.socket.server with " << srv)
setenv("RSB_TRANSPORT_SOCKET_SERVER", srv.c_str(), 1);
IPAACA_SETENV("RSB_TRANSPORT_SOCKET_SERVER", srv.c_str());
} else {
IPAACA_INFO("Unknown RSB transport.socket.server mode " << srv << " - using config default ")
}
......@@ -134,7 +134,7 @@ IPAACA_EXPORT void Initializer::auto_configure_rsb()//{{{
const char* plugin_path = getenv("RSB_PLUGINS_CPP_PATH");
if (!plugin_path) {
#ifdef WIN32
IPAACA_WARN("WARNING: RSB_PLUGINS_CPP_PATH not set - in Windows it has to be specified.")
IPAACA_WARNING("WARNING: RSB_PLUGINS_CPP_PATH not set - in Windows it has to be specified.")
//throw NotImplementedError();
#else
IPAACA_INFO("RSB_PLUGINS_CPP_PATH not set; looking here and up to 7 dirs up.")
......@@ -147,7 +147,7 @@ IPAACA_EXPORT void Initializer::auto_configure_rsb()//{{{
if (g.gl_pathc>0) {
const char* found_path = g.gl_pathv[0];
IPAACA_INFO("Found an RSB plugin dir which will be used automatically: " << found_path)
setenv("RSB_PLUGINS_CPP_PATH", found_path, 1);
IPAACA_SETENV("RSB_PLUGINS_CPP_PATH", found_path);
break;
} // else keep going
globfree(&g);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment