diff --git a/.docker/Dockerfile b/.docker/Dockerfile index ac68b939670a6da58cfa4f093380ee94abe21144..fae9c39282daf891a787bb3228d40bf5b7740554 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -8,38 +8,13 @@ RUN apt-get install -y doxygen RUN apt-get install -y clang-format-11 clang-tidy-11 RUN apt-get install -y python3-pip RUN apt-get install -y git - -COPY doc/requirements.txt requirements.txt -RUN pip3 install -r requirements.txt - -RUN apt-get install -y build-essential autoconf libtool pkg-config -RUN git clone --recurse-submodules -b v1.38.1 https://github.com/grpc/grpc - -WORKDIR /grpc -RUN mkdir -p cmake/build -WORKDIR cmake/build -RUN cmake -DgRPC_INSTALL=ON \ - -DgRPC_BUILD_CSHARP_EXT=OFF \ - -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \ - -DgRPC_BUILD_TESTS=OFF \ - ../.. -RUN make -j -RUN make install -WORKDIR /grpc -RUN mkdir -p third_party/abseil-cpp/cmake/build -WORKDIR third_party/abseil-cpp/cmake/build -RUN cmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ - ../.. -RUN make -j -RUN make install - RUN apt-get install -y curl +COPY doc/requirements.txt doc-requirements.txt +RUN pip3 install -r doc-requirements.txt +COPY requirements.txt build-requirements.txt +RUN pip3 install -r build-requirements.txt + COPY . /libcaosdb/ WORKDIR /libcaosdb RUN rm -rf .git diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2dab0843547efef8918e7a5a691e03dd73552e8c..3557063ce32b6b793495e9f2e8ccc6b7b75e095d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -62,7 +62,7 @@ build-testenv: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY # use here general latest or specific branch latest... - docker pull $CPPLIB_REGISTRY_IMAGE|| true - - docker build + - docker build --file .docker/Dockerfile --pull --cache-from $CPPLIB_REGISTRY_IMAGE @@ -84,7 +84,8 @@ test: script: - mkdir build - cd build - - cmake -DGRPC_FETCHCONTENT=OFF -DCMAKE_BUILD_TYPE=Debug .. + - conan install .. + - cmake -DCMAKE_BUILD_TYPE=Debug .. - cmake --build . - cmake --build . --target unit_test_coverage diff --git a/CMakeLists.txt b/CMakeLists.txt index 1da9e3af2977714d54b37dc8380c43f78bcb8e29..6827cdf89c6cce7001a78a1524629fd05bd5e50c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,11 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + +# dependency management with conan +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup() + set(PROJECT_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include") find_program(iwyu NAMES include-what-you-use iwyu PATHS ${CMAKE_SOURCE_DIR}/tools/include-what-you-use/${iwyu_os}/bin) @@ -68,7 +73,7 @@ set_target_properties(caosdbcli PROPERTIES CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY}" CXX_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}" ) -target_link_libraries(caosdbcli caosdb) +target_link_libraries(caosdbcli caosdb ${CONAN_LIBS}) if("${CMAKE_BUILD_TYPE}" MATCHES "Debug") # supress warnings during build of gtest @@ -83,8 +88,8 @@ endif() ## CODE GENERATION -option(GRPC_FETCHCONTENT "Fetch and build GRPC from the sources" OFF) -include(FetchGRPC) +#option(GRPC_FETCHCONTENT "Fetch and build GRPC from the sources" OFF) +#include(FetchGRPC) # # Protobuf/Grpc source files @@ -103,11 +108,11 @@ set(hw_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/info/v1alpha1/main. set(hw_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/include/${hw_hdrs_path}/main.grpc.pb.h") add_custom_command( OUTPUT "${hw_proto_srcs}" "${hw_proto_hdrs}" "${hw_grpc_srcs}" "${hw_grpc_hdrs}" - COMMAND ${_PROTOBUF_PROTOC} + COMMAND ${CMAKE_BINARY_DIR}/build_tools/protoc ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}/include" --cpp_out "${CMAKE_CURRENT_BINARY_DIR}/include" -I "${PROTO_PATH}" - --plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}" + --plugin=protoc-gen-grpc="${CMAKE_BINARY_DIR}/build_tools/grpc_cpp_plugin" "${PROTO_FILES}" DEPENDS "${PROTO_FILES}") @@ -120,9 +125,7 @@ add_library(caosdb_info_v1alpha1 ${hw_proto_srcs} ${hw_proto_hdrs}) target_link_libraries(caosdb_info_v1alpha1 - ${_REFLECTION} - ${_GRPC_GRPCPP} - ${_PROTOBUF_LIBPROTOBUF}) + ${CONAN_LIBS}) target_include_directories(caosdb_info_v1alpha1 PUBLIC # headers to include when building from source $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include> @@ -131,10 +134,8 @@ target_include_directories(caosdb_info_v1alpha1 PUBLIC ) target_link_libraries(caosdb -caosdb_info_v1alpha1 -${_REFLECTION} -${_GRPC_GRPCPP} -${_PROTOBUF_LIBPROTOBUF}) + caosdb_info_v1alpha1 + ${CONAN_LIBS}) ############################################### @@ -196,7 +197,7 @@ install( TARGETS caosdb caosdb_info_v1alpha1 - ${_GRPC_DEPS} + #${CONAN_LIBS_GRPC} # name of the CMake "export group" containing the targets we want to install EXPORT caosdbTargets # Dynamic, static library and include destination locations after running diff --git a/conanfile.txt b/conanfile.txt new file mode 100644 index 0000000000000000000000000000000000000000..b5d9a09828a19470c33b7220d0bb340535405e4f --- /dev/null +++ b/conanfile.txt @@ -0,0 +1,10 @@ +[requires] +boost/1.76.0 +grpc/1.38.0 + +[generators] +cmake + +[imports] +bin, protoc* -> ./build_tools +bin, grpc_cpp_plugin* -> ./build_tools diff --git a/src/caosdb/connection.cpp b/src/caosdb/connection.cpp index 071714b79fc39f44ffb74a85e6724189750684a6..635c8bd5f2ca472b32c67f2323eee296cbdb976a 100644 --- a/src/caosdb/connection.cpp +++ b/src/caosdb/connection.cpp @@ -20,9 +20,6 @@ * */ -#include "caosdb/connection.h" -#include "caosdb/utils.h" -#include "caosdb/authentication.h" #include <grpcpp/create_channel.h> #include <grpcpp/impl/codegen/client_context.h> #include <grpcpp/impl/codegen/status.h> @@ -33,6 +30,9 @@ #include "caosdb/info/v1alpha1/main.grpc.pb.h" #include "caosdb/info/v1alpha1/main.pb.h" #include "caosdb/exceptions.h" +#include "caosdb/connection.h" +#include "caosdb/utils.h" +#include "caosdb/authentication.h" namespace caosdb::connection { using caosdb::authentication::Authenticator;