blob: d19cbd085adbb0389b950c2489adc96ce0d439d2 [file]
# ##############################################################################
#
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with this work for
# additional information regarding copyright ownership. The ASF licenses this
# file to you under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
# ##############################################################################
# We use fmt with cripts, contrary to ATS / libswoc. We also require PCRE2 and not PCRE,
# but hopefully ATS will migrate to PCRE2 soon.
pkg_check_modules(PCRE2 REQUIRED IMPORTED_TARGET libpcre2-8)
# The source files, globbed so we can drop in local / custom Bundles and extensions.
file(GLOB CPP_FILES ${PROJECT_SOURCE_DIR}/src/cripts/*.cc ${PROJECT_SOURCE_DIR}/src/cripts/*/*.cc)
file(GLOB TEST_CPP_FILES ${PROJECT_SOURCE_DIR}/src/cripts/tests/*.cc ${PROJECT_SOURCE_DIR}/src/cripts/unit_tests/*.cc)
list(REMOVE_ITEM CPP_FILES ${TEST_CPP_FILES})
set(CRIPTS_PUBLIC_HEADERS
${PROJECT_SOURCE_DIR}/include/cripts/Bundle.hpp
${PROJECT_SOURCE_DIR}/include/cripts/CacheGroup.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Certs.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Configs.hpp
${PROJECT_SOURCE_DIR}/include/cripts/ConfigsBase.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Connections.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Context.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Crypto.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Epilogue.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Error.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Files.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Headers.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Instance.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Lulu.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Matcher.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Metrics.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Plugins.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Preamble.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Time.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Transaction.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Urls.hpp
${PROJECT_SOURCE_DIR}/include/cripts/UUID.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Configs.hpp
)
set(CRIPTS_BUNDLE_HEADERS
${PROJECT_SOURCE_DIR}/include/cripts/Bundles/Common.hpp ${PROJECT_SOURCE_DIR}/include/cripts/Bundles/Headers.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Bundles/LogsMetrics.hpp
${PROJECT_SOURCE_DIR}/include/cripts/Bundles/Caching.hpp
)
add_library(cripts SHARED ${CPP_FILES})
add_library(ts::cripts ALIAS cripts)
target_link_libraries(cripts PUBLIC libswoc::libswoc OpenSSL::Crypto fmt::fmt PkgConfig::PCRE2 yaml-cpp::yaml-cpp)
set_target_properties(cripts PROPERTIES PUBLIC_HEADER "${CRIPTS_PUBLIC_HEADERS}")
set_target_properties(
cripts
PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
SOVERSION ${PROJECT_VERSION_MAJOR}
MACHO_COMPATIBILITY_VERSION ${PROJECT_VERSION_MAJOR}.0.0
)
install(TARGETS cripts PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cripts)
# The PUBLIC_HEADER target can't handle include files in a subdirectory, so do those manually.
install(FILES ${CRIPTS_BUNDLE_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cripts/Bundles)
if(APPLE)
target_link_options(cripts PRIVATE -undefined dynamic_lookup)
endif()
# This generates the src/cripts/Configs.cc file from the ATS source file with
# overridable confiugrations. This needs to be generated whenever we add new
# configurations to the ATS source file.
# This needs to be done manually as the generated file is checked in.
add_custom_target(
generate-cripts-config
COMMAND ${PROJECT_SOURCE_DIR}/tools/cripts/genconfig.py ${PROJECT_SOURCE_DIR}/src/shared/overridable_txn_vars.cc >
${PROJECT_SOURCE_DIR}/include/cripts/Configs.hpp
DEPENDS ${PROJECT_SOURCE_DIR}/src/shared/overridable_txn_vars.cc ${PROJECT_SOURCE_DIR}/tools/cripts/genconfig.py
VERBATIM
)
clang_tidy_check(cripts)
if(BUILD_TESTING)
add_executable(test_cripts unit_tests/test_CacheGroup.cc CacheGroup.cc unit_tests/stub.cc)
target_include_directories(test_cripts PRIVATE ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src)
target_link_libraries(test_cripts PRIVATE libswoc::libswoc fmt::fmt Catch2::Catch2WithMain)
add_test(NAME test_cripts COMMAND test_cripts)
endif()