diff --git a/CMakeLists.txt b/CMakeLists.txt index c49a44d103d2bc31a2c070ff1d22c879b257c79c..f61fbe562f33f19f8998659f554851accf01f914 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) +IF (WIN32) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) +ENDIF() + ########################################### ### DEPENDENCY MANAGEMENT with CONAN ########################################### @@ -79,8 +83,13 @@ set(PROTO_FILES set(PROTO_PATH ${PROJECT_SOURCE_DIR}/proto/proto) # compiler binaries -set(_PROTOBUF_PROTOC "${CMAKE_BINARY_DIR}/build_tools/protoc") -set(_GRPC_CPP_PLUGIN_EXECUTABLE "${CMAKE_BINARY_DIR}/build_tools/grpc_cpp_plugin") +IF (WIN32) + set(_PROTOBUF_PROTOC "${CMAKE_BINARY_DIR}/build_tools/protoc.exe") + set(_GRPC_CPP_PLUGIN_EXECUTABLE "${CMAKE_BINARY_DIR}/build_tools/grpc_cpp_plugin.exe") +ELSE() + set(_PROTOBUF_PROTOC "${CMAKE_BINARY_DIR}/build_tools/protoc") + set(_GRPC_CPP_PLUGIN_EXECUTABLE "${CMAKE_BINARY_DIR}/build_tools/grpc_cpp_plugin") +ENDIF() # Generated sources list(LENGTH PROTO_FILES len_proto_files) @@ -248,6 +257,7 @@ if(_LINTING) add_compiler_flag("-pedantic") add_compiler_flag("-Werror") + message(STATUS "PEDANTIC_CMAKE_CXX_FLAGS: [${PEDANTIC_CMAKE_CXX_FLAGS}]") set(TARGET_CAOSDB_COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS} ${PEDANTIC_CMAKE_CXX_FLAGS}") set(TARGET_CCAOSDB_COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS} ${PEDANTIC_CMAKE_C_FLAGS}") set(TARGET_CXXCAOSDBCLI_COMPILE_FLAGS "${TARGET_CXXCAOSDBCLI_COMPILE_FLAGS} ${PEDANTIC_CMAKE_CXX_FLAGS}") diff --git a/README_SETUP.md b/README_SETUP.md index 1bcf2d914133e37c301f75d25f05ce0e2336c254..0599ba49bdf874f904481a8efc0151ff75a9e280 100644 --- a/README_SETUP.md +++ b/README_SETUP.md @@ -34,6 +34,20 @@ have to add `build/lib/` (or, alternatively after installation, `CMAKE_INSTALL_PREFIX/lib`) to your `DYLD_LIBRARY_PATH` environmental variable. +### How to build on Windows + +We use [Visual Studio 2019](https://visualstudio.microsoft.com/de/vs/features/cplusplus/) +as compiler. We use [cmake](https://cmake.org/download/) as build tool. + +0. clone/update the subrepo `git submodule update --init proto` +1. `mkdir build` +2. `cd build` +3. `conan install .. -g visual_studio -s arch=x86_64 -s build_type=Release -s compiler.toolset=v142 -s compiler.version=16 -s compiler.runtime=MD --build=missing --update` +4. `cmake -B . ..` +5. open ` libcaosdb.sln` with Visual Studio, change the buildtype to `Release` + and build the project. (You can open Tools/Command Line/Developer Command + Prompt and execute `msbuild libcaosdb.sln /property:Configuration=Release`) + ## Creating a Local Conan Build ## Building and installing libcaosdb with Conan is just a single command: diff --git a/conanfile.py b/conanfile.py index cba22bb4f2f39da55b5b0fb6ab46ab7e37511912..23e04a68a1b2a6881edbfe8c30e9612fea908a5f 100644 --- a/conanfile.py +++ b/conanfile.py @@ -28,7 +28,7 @@ class CaosdbConan(ConanFile): def imports(self): self.copy("protoc*", "build_tools", "bin") - self.copy("grpc_cpp_plugin", "build_tools", "bin") + self.copy("grpc_cpp_plugin*", "build_tools", "bin") def build(self): cmake = CMake(self) diff --git a/include/caosdb/entity.h b/include/caosdb/entity.h index 2819244f65214b8a444896b76e526cd10316fe24..2ea2935a07063dfaeea9f1823d0843bbeda0eba5 100644 --- a/include/caosdb/entity.h +++ b/include/caosdb/entity.h @@ -228,6 +228,7 @@ public: return out; } + auto SetRole(const std::string &role) -> void; auto SetId(const std::string &id) -> void; auto SetName(const std::string &name) -> void; auto SetVersionId(const std::string &id) -> void; diff --git a/src/caosdb/configuration.cpp b/src/caosdb/configuration.cpp index 4bcfaeb979b19f08ca4cfb71101ffc3367bd78f0..ee81b71ed1bb717abc235ae1ea7a2a107476b4c1 100644 --- a/src/caosdb/configuration.cpp +++ b/src/caosdb/configuration.cpp @@ -19,29 +19,30 @@ * */ #include "caosdb/configuration.h" -#include "boost/iterator/iterator_facade.hpp" // for iterator_facad... -#include "boost/json/impl/object.hpp" // for object::at -#include "boost/json/string.hpp" // for string -#include "boost/json/string_view.hpp" // for string_view -#include "boost/log/core/record.hpp" // for record -#include "boost/log/sources/record_ostream.hpp" // for basic_record_o... -#include "boost/preprocessor/seq/limits/enum_256.hpp" // for BOOST_PP_SEQ_E... -#include "boost/preprocessor/seq/limits/size_256.hpp" // for BOOST_PP_SEQ_S... -#include "caosdb/authentication.h" // for Authenticator -#include "caosdb/connection.h" // for ConnectionManager -#include "caosdb/constants.h" // for LIBCAOSDB_CONF... -#include "caosdb/exceptions.h" // for ConfigurationE... -#include "caosdb/log_level.h" // for CAOSDB_DEFAULT... -#include "caosdb/status_code.h" // for StatusCode -#include "caosdb/utility.h" // for get_home_direc... -#include <bits/exception.h> // for exception -#include <cassert> // for assert -#include <cstdlib> // for getenv -#include <grpcpp/security/credentials.h> // for SslCredentials -#include <iterator> // for next -#include <map> // for map -#include <stdexcept> // for out_of_range -#include <string> // for string, operator+ +#include "boost/iterator/iterator_facade.hpp" // for iterator_facad... +#include "boost/json/impl/object.hpp" // for object::at +#include "boost/json/string.hpp" // for string +#include "boost/json/string_view.hpp" // for string_view +#include "boost/log/core/record.hpp" // for record +#include "boost/log/detail/attachable_sstream_buf.hpp" // for basic_ostring... +#include "boost/log/sources/record_ostream.hpp" // for basic_record_o... +#include "boost/preprocessor/seq/limits/enum_256.hpp" // for BOOST_PP_SEQ_E... +#include "boost/preprocessor/seq/limits/size_256.hpp" // for BOOST_PP_SEQ_S... +#include "caosdb/authentication.h" // for Authenticator +#include "caosdb/connection.h" // for ConnectionManager +#include "caosdb/constants.h" // for LIBCAOSDB_CONF... +#include "caosdb/exceptions.h" // for ConfigurationE... +#include "caosdb/log_level.h" // for CAOSDB_DEFAULT... +#include "caosdb/status_code.h" // for StatusCode +#include "caosdb/utility.h" // for get_home_direc... +#include <bits/exception.h> // for exception +#include <cassert> // for assert +#include <cstdlib> // for getenv +#include <grpcpp/security/credentials.h> // for SslCredentials +#include <iterator> // for next +#include <map> // for map +#include <stdexcept> // for out_of_range +#include <string> // for string, operator+ namespace caosdb::configuration { using boost::filesystem::exists; @@ -506,7 +507,7 @@ auto ConfigurationManager::InitializeDefaults() -> int { if (configuration_file_path != nullptr) { mLoadSingleJSONConfiguration(*configuration_file_path); CAOSDB_LOG_INFO(logger_name) - << "Loaded configuration from" << configuration_file_path << "."; + << "Loaded configuration from" << *(configuration_file_path.get()) << "."; } if (this->json_configuration.is_object() && diff --git a/src/caosdb/entity.cpp b/src/caosdb/entity.cpp index c4bd56575e204ea97b4b2b84528c3ae452e6362e..0ef5172842eacde57f63f3c81ceb1876390dcee6 100644 --- a/src/caosdb/entity.cpp +++ b/src/caosdb/entity.cpp @@ -94,4 +94,12 @@ auto Entity::Switch(ProtoEntity *entity) -> void { this->wrapped = entity; } +auto Entity::SetRole(const std::string &role) -> void { + this->wrapped->set_role(role); +} + +auto Entity::SetName(const std::string &name) -> void { + this->wrapped->set_name(name); +} + } // namespace caosdb::entity diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6a9216af93b4106461438836965f6a70ebfee88d..fc8e134ea90db40f0d67fde6f44de9ca826adcd8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -84,6 +84,7 @@ include(CodeCoverage) if (LCOV_PATH) message(STATUS "Found LCOV: ${LCOV_PATH}") target_link_libraries(caosdb gcov) + target_link_libraries(ccaosdb gcov) setup_target_for_coverage_lcov( NAME unit_test_coverage EXECUTABLE ctest -L caosdb-cpplib-unit-tests @@ -93,11 +94,13 @@ if (LCOV_PATH) GENHTML_ARGS --rc lcov_branch_coverage=1 ) message(STATUS "Adding COMPILE_FLAGS for coverage: ${COVERAGE_COMPILER_FLAGS}") - set(TARGET_CAOSDB_COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - set(TARGET_CCAOSDB_COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) + set(TARGET_CAOSDB_COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS} ${COVERAGE_COMPILER_FLAGS}") + set(TARGET_CCAOSDB_COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS} ${COVERAGE_COMPILER_FLAGS}") + set(TARGET_CAOSDB_COMPILE_FLAGS ${TARGET_CAOSDB_COMPILE_FLAGS} PARENT_SCOPE) + set(TARGET_CCAOSDB_COMPILE_FLAGS ${TARGET_CCAOSDB_COMPILE_FLAGS} PARENT_SCOPE) set_target_properties(caosdb PROPERTIES COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS}") - set_target_properties(caosdb PROPERTIES + set_target_properties(ccaosdb PROPERTIES COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS}") else () message(WARNING "Could not generate code coverage report. Please install lcov.")