diff --git a/CMakeLists.txt b/CMakeLists.txt index 2975794702fb01e92783518dbdbbdbd80901bba0..8b2c25ac82ce9b6789264afe3e3c0ce1a9af1cd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,70 +86,86 @@ add_subdirectory(doc) # TODO: Replace this with the protobuf_generate_cpp function + # Protobuf/Grpc source files set(PROTO_FILES ${PROJECT_SOURCE_DIR}/proto/proto/caosdb/info/v1/main.proto ${PROJECT_SOURCE_DIR}/proto/proto/caosdb/entity/v1/main.proto ) + + IF (BUILD_ACM) list(APPEND PROTO_FILES ${PROJECT_SOURCE_DIR}/proto/proto/caosdb/acm/v1alpha1/main.proto ) ENDIF() -set(PROTO_PATH ${PROJECT_SOURCE_DIR}/proto/proto) +find_package(protobuf REQUIRED) +include_directories(${Protobuf_INCLUDE_DIRS}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +# protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES}) +protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROJECT_SOURCE_DIR}/proto/proto/caosdb/info/v1/main.proto) +protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROJECT_SOURCE_DIR}/proto/proto/caosdb/entity/v1/main.proto) +message(STATUS "PROTO_FILES: ${PROTO_FILES}") +message(STATUS "PROTO_SRCS: ${PROTO_SRCS}") +message(STATUS "PROTO_HDRS: ${PROTO_HDRS}") + +# set(PROTO_PATH ${PROJECT_SOURCE_DIR}/proto/proto) # compiler binaries -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) -math(EXPR len_proto_files "${len_proto_files} - 1") -foreach(i RANGE "${len_proto_files}") - list(GET PROTO_FILES ${i} next_proto_file) - - # strip away the prefix path and the ".proto" suffix - string(REPLACE - "${PROJECT_SOURCE_DIR}/proto/proto/caosdb/" - "" - next_proto_module - "${next_proto_file}") - string(REPLACE - ".proto" - "" - next_proto_module - "${next_proto_module}") - set(next_proto_src - "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}.pb.cc") - set(next_proto_hdr - "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}.pb.h") - set(next_grpc_src - "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}.grpc.pb.cc") - set(next_grpc_hdr - "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}.grpc.pb.h") - list(APPEND GRPC_GENERATED_HEADERS "${next_proto_hdr}" "${next_grpc_hdr}") - list(APPEND GRPC_GENERATED_SOURCES "${next_proto_src}" "${next_grpc_src}") -endforeach() - -set(GRPC_GENERATED - ${GRPC_GENERATED_SOURCES} - ${GRPC_GENERATED_HEADERS}) -add_custom_command( - OUTPUT ${GRPC_GENERATED} - COMMAND ${_PROTOBUF_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}" - ${PROTO_FILES} - DEPENDS ${PROTO_FILES}) + + +# 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) +# math(EXPR len_proto_files "${len_proto_files} - 1") +# foreach(i RANGE "${len_proto_files}") +# list(GET PROTO_FILES ${i} next_proto_file) + +# # strip away the prefix path and the ".proto" suffix +# string(REPLACE +# "${PROJECT_SOURCE_DIR}/proto/proto/caosdb/" +# "" +# next_proto_module +# "${next_proto_file}") +# string(REPLACE +# ".proto" +# "" +# next_proto_module +# "${next_proto_module}") +# set(next_proto_src +# "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}.pb.cc") +# set(next_proto_hdr +# "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}.pb.h") +# set(next_grpc_src +# "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}.grpc.pb.cc") +# set(next_grpc_hdr +# "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}.grpc.pb.h") +# list(APPEND GRPC_GENERATED_HEADERS "${next_proto_hdr}" "${next_grpc_hdr}") +# list(APPEND GRPC_GENERATED_SOURCES "${next_proto_src}" "${next_grpc_src}") +# endforeach() + +# set(GRPC_GENERATED +# ${GRPC_GENERATED_SOURCES} +# ${GRPC_GENERATED_HEADERS}) +# add_custom_command( +# OUTPUT ${GRPC_GENERATED} +# COMMAND ${_PROTOBUF_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}" +# ${PROTO_FILES} +# DEPENDS ${PROTO_FILES}) # show generated files message(DEBUG "GRPC_GENERATED: ${GRPC_GENERATED}") @@ -165,10 +181,24 @@ message(DEBUG "GRPC_GENERATED: ${GRPC_GENERATED}") ############################################################################### find_package(gRPC CONFIG REQUIRED) -find_package(Protobuf CONFIG REQUIRED) -find_package(Boost REQUIRED) +# find_package(protobuf CONFIG REQUIRED) + +# boost +find_package(boost_smart_ptr CONFIG REQUIRED) +find_package(boost_filesystem CONFIG REQUIRED) +find_package(boost_json CONFIG REQUIRED) +find_package(boost_log CONFIG REQUIRED) +find_package(boost_thread CONFIG REQUIRED) +find_package(boost_beast CONFIG REQUIRED) + + find_package(GTest REQUIRED) + +set(dependencies + gRPC::gpr gRPC::grpc gRPC::grpc++ protobuf::libprotoc protobuf::libprotobuf + Boost::beast Boost::smart_ptr Boost::filesystem Boost::json Boost::log Boost::thread) + # print include directories for debugging message(DEBUG "CMAKE_INCLUDE_PATH: ${CMAKE_INCLUDE_PATH}") message(DEBUG "PROTOBUF_INCLUDE_DIRS: ${PROTOBUF_INCLUDE_DIRS}") @@ -202,7 +232,7 @@ else() add_library(caosdb SHARED ${libcaosdb_INCL} ${libcaosdb_SRC} ${GRPC_GENERATED}) target_link_libraries(caosdb - grpc::grpc protobuf::protobuf boost::boost + ${dependencies} stdc++fs ) set(LIBCAOSDB caosdb) @@ -219,54 +249,54 @@ target_include_directories(caosdb PUBLIC -# libccaosdb -# ---------- -add_library(ccaosdb SHARED src/ccaosdb.cpp) -target_link_libraries(ccaosdb - grpc::grpc protobuf::protobuf boost::boost - ${LIBCAOSDB} - stdc++fs -) -target_include_directories(ccaosdb PUBLIC - $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include> - $<BUILD_INTERFACE:${libcaosdb_BINARY_DIR}/include> - $<INSTALL_INTERFACE:include> -) - - -# ccaosdbcli -# ---------- -add_executable(ccaosdbcli EXCLUDE_FROM_ALL src/ccaosdbcli.c) -target_include_directories(ccaosdbcli PUBLIC - $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include> - $<BUILD_INTERFACE:${libcaosdb_BINARY_DIR}/include> - $<INSTALL_INTERFACE:include> -) -target_include_directories(ccaosdbcli SYSTEM PUBLIC - ${CONAN_INCLUDE_DIRS} -) - -target_link_libraries(ccaosdbcli - grpc::grpc protobuf::protobuf boost::boost - ${LIBCAOSDB} - ccaosdb -) - -# cxxcaosdbcli -# ------------ -add_executable(cxxcaosdbcli EXCLUDE_FROM_ALL src/cxxcaosdbcli.cpp) -target_include_directories(cxxcaosdbcli PUBLIC - $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include> - $<BUILD_INTERFACE:${libcaosdb_BINARY_DIR}/include> - $<INSTALL_INTERFACE:include> -) -target_include_directories(cxxcaosdbcli SYSTEM PUBLIC - ${CONAN_INCLUDE_DIRS} -) -target_link_libraries(cxxcaosdbcli - ${LIBCAOSDB} - grpc::grpc protobuf::protobuf boost::boost -) +# # libccaosdb +# # ---------- +# add_library(ccaosdb SHARED src/ccaosdb.cpp) +# target_link_libraries(ccaosdb +# dependencies +# ${LIBCAOSDB} +# stdc++fs +# ) +# target_include_directories(ccaosdb PUBLIC +# $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include> +# $<BUILD_INTERFACE:${libcaosdb_BINARY_DIR}/include> +# $<INSTALL_INTERFACE:include> +# ) + + +# # ccaosdbcli +# # ---------- +# add_executable(ccaosdbcli EXCLUDE_FROM_ALL src/ccaosdbcli.c) +# target_include_directories(ccaosdbcli PUBLIC +# $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include> +# $<BUILD_INTERFACE:${libcaosdb_BINARY_DIR}/include> +# $<INSTALL_INTERFACE:include> +# ) +# target_include_directories(ccaosdbcli SYSTEM PUBLIC +# ${CONAN_INCLUDE_DIRS} +# ) + +# target_link_libraries(ccaosdbcli +# dependencies +# ${LIBCAOSDB} +# ccaosdb +# ) + +# # cxxcaosdbcli +# # ------------ +# add_executable(cxxcaosdbcli EXCLUDE_FROM_ALL src/cxxcaosdbcli.cpp) +# target_include_directories(cxxcaosdbcli PUBLIC +# $<BUILD_INTERFACE:${libcaosdb_SOURCE_DIR}/include> +# $<BUILD_INTERFACE:${libcaosdb_BINARY_DIR}/include> +# $<INSTALL_INTERFACE:include> +# ) +# target_include_directories(cxxcaosdbcli SYSTEM PUBLIC +# ${CONAN_INCLUDE_DIRS} +# ) +# target_link_libraries(cxxcaosdbcli +# ${LIBCAOSDB} +# dependencies +# ) @@ -274,213 +304,213 @@ target_link_libraries(cxxcaosdbcli ### LINTING with CLANG-TIDY and INCLUDE-WHAT-YOU-USE ####################################################### -include(CheckCXXCompilerFlag) -include(CheckCCompilerFlag) - -function(add_compiler_flag flag) - string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" cxx_present) - if(cxx_present EQUAL -1) - check_cxx_compiler_flag("${flag}" flag_supported) - if(flag_supported) - set(PEDANTIC_CMAKE_CXX_FLAGS "${PEDANTIC_CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE) - endif() - unset(flag_supported CACHE) - endif() - unset(cxx_present CACHE) - - string(FIND "${CMAKE_C_FLAGS}" "${flag}" c_present) - if(c_present EQUAL -1) - check_cxx_compiler_flag("${flag}" flag_supported) - if(flag_supported) - set(PEDANTIC_CMAKE_C_FLAGS "${PEDANTIC_CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE) - endif() - unset(flag_supported CACHE) - endif() - unset(c_present CACHE) -endfunction() - - - -option(LINTING "Enable linting with clang-tidy and iwyu when in non-Debug build-type" OFF) -if("${CMAKE_BUILD_TYPE}" MATCHES "Debug" OR LINTING) - set(_LINTING ON) -endif() -option(SKIP_LINTING "Skip linting even when in Debug build-type" OFF) -if("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND SKIP_LINTING) - message(WARNING "Skipping linting due to SKIP_LINTING option") - set(_LINTING OFF) -endif() -if(_LINTING) - - ### set paranoid compiler flags - add_compiler_flag("-Wall") - add_compiler_flag("-Wextra") - add_compiler_flag("-pedantic") - # add_compiler_flag("-Werror") # removed until issue #71 is resolved - - 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}") - set(TARGET_CCAOSDBCLI_COMPILE_FLAGS "${TARGET_CCAOSDBCLI_COMPILE_FLAGS} ${PEDANTIC_CMAKE_C_FLAGS}") - - set_target_properties(caosdb PROPERTIES - COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS}") - set_target_properties(ccaosdb PROPERTIES - COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS}") - set_target_properties(cxxcaosdbcli PROPERTIES - COMPILE_FLAGS "${TARGET_CXXCAOSDBCLI_COMPILE_FLAGS}") - set_target_properties(ccaosdbcli PROPERTIES - COMPILE_FLAGS "${TARGET_CCAOSDBCLI_COMPILE_FLAGS}") - - find_program(iwyu - NAMES include-what-you-use iwyu - PATHS ${CMAKE_SOURCE_DIR}/tools/include-what-you-use/${iwyu_os}/bin) - if(NOT iwyu) - message(WARNING "include-what-you-use: Not found") - else() - message(STATUS "include-what-you-use: ${iwyu}") - set(_CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${iwyu} - "-Xiwyu" "--cxx17ns" "-Xiwyu" "--no_fwd_decls") - - set_target_properties(caosdb PROPERTIES - CXX_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}" - ) - set_target_properties(cxxcaosdbcli PROPERTIES - CXX_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}" - ) - set_target_properties(ccaosdbcli PROPERTIES - C_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}" - ) - endif() - - find_program(clang_tidy NAMES clang-tidy clang-tidy-11) - if(NOT clang_tidy) - message(WARNING "clang-tidy: Not found") - else() - message(STATUS "clang-tidy: ${clang_tidy}") - set(_CMAKE_CXX_CLANG_TIDY_CHECKS - "--checks=*,-fuchsia-*,-llvmlibc-*,-readability-convert-member-functions-to-static,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-no-array-decay,-llvm-else-after-return,-readability-else-after-return,-modernize-use-trailing-return-type,-bugprone-branch-clone,-altera-*,-misc-include-cleaner,-readability-identifier-*,-llvm-include-order,-misc-const-correctness") - set(_CMAKE_C_CLANG_TIDY_CHECKS "${_CMAKE_CXX_CLANG_TIDY_CHECKS}") - set(_CMAKE_CXX_CLANG_TIDY "${clang_tidy}" - "--header-filter=caosdb/.*[^\(\.pb\.h\)]$") - # "--warnings-as-errors=*") - set(_CMAKE_C_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY}") - option(AUTO_FIX_LINTING "Append --fix option to clang-tidy" OFF) - if(AUTO_FIX_LINTING) - set(_CMAKE_CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY};--fix") - endif() - message(STATUS "Using clang-tidy with - '${_CMAKE_CXX_CLANG_TIDY};${_CMAKE_CXX_CLANG_TIDY_CHECKS}'") - set_target_properties(caosdb PROPERTIES - CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY};${_CMAKE_CXX_CLANG_TIDY_CHECKS}" - ) - set_target_properties(cxxcaosdbcli PROPERTIES - CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY};${_CMAKE_CXX_CLANG_TIDY_CHECKS}" - ) - set_target_properties(ccaosdb PROPERTIES - C_CLANG_TIDY "${_CMAKE_C_CLANG_TIDY};${_CMAKE_C_CLANG_TIDY_CHECKS}" - ) - set_target_properties(ccaosdbcli PROPERTIES - C_CLANG_TIDY "${_CMAKE_C_CLANG_TIDY};${_CMAKE_C_CLANG_TIDY_CHECKS}" - ) - endif() -endif() - - -####################################################### -### UNIT TEST -####################################################### - -if("${CMAKE_BUILD_TYPE}" MATCHES "Debug") - enable_testing() - add_subdirectory(test) -endif() - -# ############################################### -# ############ INSTALLATION ##################### -# ############################################### - -set(libcaosdb_INCLUDE_DEST "include/caosdb") -set(libcaosdb_LIB_DEST "lib") - -set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local/") -install( - # targets to install - TARGETS ${LIBCAOSDB} ccaosdb - # name of the CMake "export group" containing the targets we want to install - EXPORT caosdbTargets - # Dynamic, static library and include destination locations after running - # "make install" - LIBRARY DESTINATION ${libcaosdb_LIB_DEST} - ARCHIVE DESTINATION ${libcaosdb_LIB_DEST} - INCLUDES DESTINATION ${libcaosdb_INCLUDE_DEST} -) - - -set(libcaosdb_CMAKE_DEST "${libcaosdb_LIB_DEST}/cmake/caosdb") -install( - # The export we want to save (matches name defined above containing the - # install targets) - EXPORT caosdbTargets - # CMake file in which to store the export's information - FILE caosdbTargets.cmake - # Namespace prepends all targets in the export (when we import later, we - # will use caosdb::caosdb) - NAMESPACE caosdb:: - # where to place the resulting file (here, we're putting it with the library) - DESTINATION ${libcaosdb_CMAKE_DEST} -) - -install(FILES ${libcaosdb_INCL} ${PROJECT_SOURCE_DIR}/include/ccaosdb.h DESTINATION ${libcaosdb_INCLUDE_DEST}) -foreach(i RANGE "${len_proto_files}") - list(GET PROTO_FILES ${i} next_proto_file) - - # strip away the prefix path and the ".proto" suffix - string(REPLACE - "${PROJECT_SOURCE_DIR}/proto/proto/caosdb/" - "" - next_proto_module - "${next_proto_file}") - string(REPLACE - "/main.proto" - "" - next_proto_module - "${next_proto_module}") - set(next_proto_hdr - "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}/main.pb.h") - set(next_grpc_hdr - "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}/main.grpc.pb.h") - install(FILES ${next_proto_hdr} ${next_grpc_hdr} DESTINATION - ${libcaosdb_INCLUDE_DEST}/${next_proto_module}) -endforeach() - -install(FILES ${PROJECT_SOURCE_DIR}/caosdbConfig.cmake - DESTINATION ${libcaosdb_CMAKE_DEST}) - -#set_property(TARGET caosdb PROPERTY VERSION ${libcaosdb_VERSION}) -include(CMakePackageConfigHelpers) -write_basic_package_version_file( - "${PROJECT_SOURCE_DIR}/caosdbConfigVersion.cmake" - VERSION ${libcaosdb_VERSION} - COMPATIBILITY AnyNewerVersion -) -install(FILES ${PROJECT_SOURCE_DIR}/caosdbConfigVersion.cmake - DESTINATION ${libcaosdb_CMAKE_DEST}) - -####################################################### -### code formatting with clang-format -####################################################### -option(AUTOFORMATTING "call clang-format at configure time" ON) -if(AUTOFORMATTING AND NOT SKIP_LINTING) - find_program(clang_format NAMES clang-format-11 clang-format) - file(GLOB format_test_sources test/*.cpp test/*.h test/*.h.in) - execute_process(COMMAND ${clang_format} -i --verbose ${libcaosdb_INCL} - ${libcaosdb_SRC} ${libcaosdb_TEST_SRC} - ${PROJECT_SOURCE_DIR}/src/cxxcaosdbcli.cpp - ${PROJECT_SOURCE_DIR}/src/ccaosdbcli.c - ${PROJECT_SOURCE_DIR}/src/ccaosdb.cpp - ${PROJECT_SOURCE_DIR}/include/ccaosdb.h - ${format_test_sources} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) -endif() +# include(CheckCXXCompilerFlag) +# include(CheckCCompilerFlag) + +# function(add_compiler_flag flag) +# string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" cxx_present) +# if(cxx_present EQUAL -1) +# check_cxx_compiler_flag("${flag}" flag_supported) +# if(flag_supported) +# set(PEDANTIC_CMAKE_CXX_FLAGS "${PEDANTIC_CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE) +# endif() +# unset(flag_supported CACHE) +# endif() +# unset(cxx_present CACHE) + +# string(FIND "${CMAKE_C_FLAGS}" "${flag}" c_present) +# if(c_present EQUAL -1) +# check_cxx_compiler_flag("${flag}" flag_supported) +# if(flag_supported) +# set(PEDANTIC_CMAKE_C_FLAGS "${PEDANTIC_CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE) +# endif() +# unset(flag_supported CACHE) +# endif() +# unset(c_present CACHE) +# endfunction() + + + +# option(LINTING "Enable linting with clang-tidy and iwyu when in non-Debug build-type" OFF) +# if("${CMAKE_BUILD_TYPE}" MATCHES "Debug" OR LINTING) +# set(_LINTING ON) +# endif() +# option(SKIP_LINTING "Skip linting even when in Debug build-type" OFF) +# if("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND SKIP_LINTING) +# message(WARNING "Skipping linting due to SKIP_LINTING option") +# set(_LINTING OFF) +# endif() +# if(_LINTING) + +# ### set paranoid compiler flags +# add_compiler_flag("-Wall") +# add_compiler_flag("-Wextra") +# add_compiler_flag("-pedantic") +# # add_compiler_flag("-Werror") # removed until issue #71 is resolved + +# 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}") +# set(TARGET_CCAOSDBCLI_COMPILE_FLAGS "${TARGET_CCAOSDBCLI_COMPILE_FLAGS} ${PEDANTIC_CMAKE_C_FLAGS}") + +# set_target_properties(caosdb PROPERTIES +# COMPILE_FLAGS "${TARGET_CAOSDB_COMPILE_FLAGS}") +# set_target_properties(ccaosdb PROPERTIES +# COMPILE_FLAGS "${TARGET_CCAOSDB_COMPILE_FLAGS}") +# set_target_properties(cxxcaosdbcli PROPERTIES +# COMPILE_FLAGS "${TARGET_CXXCAOSDBCLI_COMPILE_FLAGS}") +# set_target_properties(ccaosdbcli PROPERTIES +# COMPILE_FLAGS "${TARGET_CCAOSDBCLI_COMPILE_FLAGS}") + +# find_program(iwyu +# NAMES include-what-you-use iwyu +# PATHS ${CMAKE_SOURCE_DIR}/tools/include-what-you-use/${iwyu_os}/bin) +# if(NOT iwyu) +# message(WARNING "include-what-you-use: Not found") +# else() +# message(STATUS "include-what-you-use: ${iwyu}") +# set(_CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${iwyu} +# "-Xiwyu" "--cxx17ns" "-Xiwyu" "--no_fwd_decls") + +# set_target_properties(caosdb PROPERTIES +# CXX_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}" +# ) +# set_target_properties(cxxcaosdbcli PROPERTIES +# CXX_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}" +# ) +# set_target_properties(ccaosdbcli PROPERTIES +# C_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}" +# ) +# endif() + +# find_program(clang_tidy NAMES clang-tidy clang-tidy-11) +# if(NOT clang_tidy) +# message(WARNING "clang-tidy: Not found") +# else() +# message(STATUS "clang-tidy: ${clang_tidy}") +# set(_CMAKE_CXX_CLANG_TIDY_CHECKS +# "--checks=*,-fuchsia-*,-llvmlibc-*,-readability-convert-member-functions-to-static,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-no-array-decay,-llvm-else-after-return,-readability-else-after-return,-modernize-use-trailing-return-type,-bugprone-branch-clone,-altera-*,-misc-include-cleaner,-readability-identifier-*,-llvm-include-order,-misc-const-correctness") +# set(_CMAKE_C_CLANG_TIDY_CHECKS "${_CMAKE_CXX_CLANG_TIDY_CHECKS}") +# set(_CMAKE_CXX_CLANG_TIDY "${clang_tidy}" +# "--header-filter=caosdb/.*[^\(\.pb\.h\)]$") +# # "--warnings-as-errors=*") +# set(_CMAKE_C_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY}") +# option(AUTO_FIX_LINTING "Append --fix option to clang-tidy" OFF) +# if(AUTO_FIX_LINTING) +# set(_CMAKE_CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY};--fix") +# endif() +# message(STATUS "Using clang-tidy with +# '${_CMAKE_CXX_CLANG_TIDY};${_CMAKE_CXX_CLANG_TIDY_CHECKS}'") +# set_target_properties(caosdb PROPERTIES +# CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY};${_CMAKE_CXX_CLANG_TIDY_CHECKS}" +# ) +# set_target_properties(cxxcaosdbcli PROPERTIES +# CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY};${_CMAKE_CXX_CLANG_TIDY_CHECKS}" +# ) +# set_target_properties(ccaosdb PROPERTIES +# C_CLANG_TIDY "${_CMAKE_C_CLANG_TIDY};${_CMAKE_C_CLANG_TIDY_CHECKS}" +# ) +# set_target_properties(ccaosdbcli PROPERTIES +# C_CLANG_TIDY "${_CMAKE_C_CLANG_TIDY};${_CMAKE_C_CLANG_TIDY_CHECKS}" +# ) +# endif() +# endif() + + +# ####################################################### +# ### UNIT TEST +# ####################################################### + +# if("${CMAKE_BUILD_TYPE}" MATCHES "Debug") +# enable_testing() +# add_subdirectory(test) +# endif() + +# # ############################################### +# # ############ INSTALLATION ##################### +# # ############################################### + +# set(libcaosdb_INCLUDE_DEST "include/caosdb") +# set(libcaosdb_LIB_DEST "lib") + +# set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local/") +# install( +# # targets to install +# TARGETS ${LIBCAOSDB} ccaosdb +# # name of the CMake "export group" containing the targets we want to install +# EXPORT caosdbTargets +# # Dynamic, static library and include destination locations after running +# # "make install" +# LIBRARY DESTINATION ${libcaosdb_LIB_DEST} +# ARCHIVE DESTINATION ${libcaosdb_LIB_DEST} +# INCLUDES DESTINATION ${libcaosdb_INCLUDE_DEST} +# ) + + +# set(libcaosdb_CMAKE_DEST "${libcaosdb_LIB_DEST}/cmake/caosdb") +# install( +# # The export we want to save (matches name defined above containing the +# # install targets) +# EXPORT caosdbTargets +# # CMake file in which to store the export's information +# FILE caosdbTargets.cmake +# # Namespace prepends all targets in the export (when we import later, we +# # will use caosdb::caosdb) +# NAMESPACE caosdb:: +# # where to place the resulting file (here, we're putting it with the library) +# DESTINATION ${libcaosdb_CMAKE_DEST} +# ) + +# install(FILES ${libcaosdb_INCL} ${PROJECT_SOURCE_DIR}/include/ccaosdb.h DESTINATION ${libcaosdb_INCLUDE_DEST}) +# foreach(i RANGE "${len_proto_files}") +# list(GET PROTO_FILES ${i} next_proto_file) + +# # strip away the prefix path and the ".proto" suffix +# string(REPLACE +# "${PROJECT_SOURCE_DIR}/proto/proto/caosdb/" +# "" +# next_proto_module +# "${next_proto_file}") +# string(REPLACE +# "/main.proto" +# "" +# next_proto_module +# "${next_proto_module}") +# set(next_proto_hdr +# "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}/main.pb.h") +# set(next_grpc_hdr +# "${CMAKE_CURRENT_BINARY_DIR}/include/caosdb/${next_proto_module}/main.grpc.pb.h") +# install(FILES ${next_proto_hdr} ${next_grpc_hdr} DESTINATION +# ${libcaosdb_INCLUDE_DEST}/${next_proto_module}) +# endforeach() + +# install(FILES ${PROJECT_SOURCE_DIR}/caosdbConfig.cmake +# DESTINATION ${libcaosdb_CMAKE_DEST}) + +# #set_property(TARGET caosdb PROPERTY VERSION ${libcaosdb_VERSION}) +# include(CMakePackageConfigHelpers) +# write_basic_package_version_file( +# "${PROJECT_SOURCE_DIR}/caosdbConfigVersion.cmake" +# VERSION ${libcaosdb_VERSION} +# COMPATIBILITY AnyNewerVersion +# ) +# install(FILES ${PROJECT_SOURCE_DIR}/caosdbConfigVersion.cmake +# DESTINATION ${libcaosdb_CMAKE_DEST}) + +# ####################################################### +# ### code formatting with clang-format +# ####################################################### +# option(AUTOFORMATTING "call clang-format at configure time" ON) +# if(AUTOFORMATTING AND NOT SKIP_LINTING) +# find_program(clang_format NAMES clang-format-11 clang-format) +# file(GLOB format_test_sources test/*.cpp test/*.h test/*.h.in) +# execute_process(COMMAND ${clang_format} -i --verbose ${libcaosdb_INCL} +# ${libcaosdb_SRC} ${libcaosdb_TEST_SRC} +# ${PROJECT_SOURCE_DIR}/src/cxxcaosdbcli.cpp +# ${PROJECT_SOURCE_DIR}/src/ccaosdbcli.c +# ${PROJECT_SOURCE_DIR}/src/ccaosdb.cpp +# ${PROJECT_SOURCE_DIR}/include/ccaosdb.h +# ${format_test_sources} +# WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) +# endif()