mirror of
https://github.com/zeek/zeek.git
synced 2025-10-08 17:48:21 +00:00
Fix builds with plugins that use zeek-config
When building plugins externally with `zeek-config` (as opposed to using `ZEEK_DIST`), they point into the install prefix. There, we add a new file `ZeekPluginBootstrap.cmake` that helps `ZeekPlugin.cmake` to find everything else it needs from there. Our template for plugins generates a `configure` script that sets various variables with values from `zeek-config`. We only need `BROKER_ROOT_DIR` with the new bootstrapping logic. Everything else, we can get from the new bootstrapping file and from the CMake package file for Zeek.
This commit is contained in:
parent
75245bd365
commit
1d81fb4fb0
5 changed files with 51 additions and 24 deletions
|
@ -13,6 +13,7 @@ option(ZEEK_STANDALONE "Build Zeek as stand-alone binary?" ON)
|
|||
option(ENABLE_ZEEK_UNIT_TESTS "Build the C++ (doctest) unit tests?" ON)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON
|
||||
CACHE INTERNAL "Write JSON compile commands database")
|
||||
set(ZEEK_CXX_STD cxx_std_17 CACHE STRING "The C++ standard to use.")
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
|
||||
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
|
||||
|
@ -133,7 +134,7 @@ add_library(zeek_internal INTERFACE)
|
|||
add_library(Zeek::Internal ALIAS zeek_internal)
|
||||
set_target_properties(zeek_internal PROPERTIES EXPORT_NAME Internal)
|
||||
install(TARGETS zeek_internal EXPORT ZeekTargets)
|
||||
target_compile_features(zeek_internal INTERFACE cxx_std_17)
|
||||
target_compile_features(zeek_internal INTERFACE ${ZEEK_CXX_STD})
|
||||
|
||||
# Target for bundling the creation of auto-generated files.
|
||||
add_custom_target(zeek_autogen_files)
|
||||
|
@ -212,25 +213,24 @@ function(zeek_add_dependencies dep)
|
|||
endfunction()
|
||||
|
||||
# Interface library for propagating extra flags and include paths to dynamically
|
||||
# loaded plugins.
|
||||
# loaded plugins. Also propagates include paths and C++17 mode on the install
|
||||
# interface.
|
||||
add_library(zeek_dynamic_plugin_base INTERFACE)
|
||||
target_link_libraries(zeek_dynamic_plugin_base
|
||||
INTERFACE
|
||||
$<BUILD_INTERFACE:zeek_internal>)
|
||||
target_include_directories(zeek_dynamic_plugin_base
|
||||
INTERFACE
|
||||
$<INSTALL_INTERFACE:include>
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>)
|
||||
target_compile_features(zeek_dynamic_plugin_base INTERFACE ${ZEEK_CXX_STD})
|
||||
add_library(Zeek::DynamicPluginBase ALIAS zeek_dynamic_plugin_base)
|
||||
set_target_properties(
|
||||
zeek_dynamic_plugin_base PROPERTIES
|
||||
EXPORT_NAME DynamicPluginBase)
|
||||
install(TARGETS zeek_dynamic_plugin_base EXPORT ZeekTargets)
|
||||
|
||||
# Tell dynamic plugins where to find scripts such as
|
||||
# zeek-plugin-create-package.sh.
|
||||
set(ZEEK_PLUGIN_SCRIPTS_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
||||
|
||||
# On macOS, we need to tell the linker that the modules are allowed to have
|
||||
# undefined symbols.
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
|
@ -426,6 +426,7 @@ set(cmake_current_binary_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
|||
set(cmake_install_prefix "${CMAKE_INSTALL_PREFIX}")
|
||||
set(cmake_source_dir "${CMAKE_SOURCE_DIR}")
|
||||
set(zeek_script_install_path "${ZEEK_SCRIPT_INSTALL_PATH}")
|
||||
set(ZEEK_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/zeek/cmake")
|
||||
if ( MSVC )
|
||||
string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" bro_plugin_install_path "${bro_plugin_install_path}")
|
||||
string(REGEX REPLACE "^([A-Za-z]):/(.*)" "/\\1/\\2" cmake_binary_dir "${cmake_binary_dir}")
|
||||
|
@ -1290,7 +1291,7 @@ configure_file(src/ZeekPluginConfig.cmake.in ZeekPluginConfig.cmake @ONLY)
|
|||
configure_package_config_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/ZeekConfig.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake"
|
||||
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Zeek")
|
||||
INSTALL_DESTINATION "${ZEEK_CMAKE_INSTALL_DIR}")
|
||||
write_basic_package_version_file(
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake"
|
||||
VERSION ${ZEEK_VERSION_NUMBER}
|
||||
|
@ -1299,17 +1300,22 @@ write_basic_package_version_file(
|
|||
# Write the CMake targets file.
|
||||
export(EXPORT ZeekTargets FILE ZeekTargets.cmake NAMESPACE Zeek::)
|
||||
|
||||
# TODO: Check whether installing these does not break any of our packages.
|
||||
# install(
|
||||
# FILES
|
||||
# "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake"
|
||||
# "${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake"
|
||||
# DESTINATION
|
||||
# "${CMAKE_INSTALL_LIBDIR}/cmake/Zeek")
|
||||
# install(
|
||||
# EXPORT ZeekTargets
|
||||
# DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Zeek"
|
||||
# NAMESPACE Zeek::)
|
||||
# Write the bootstrap file for dynamic plugins. Needed by ZeekPlugin.cmake.
|
||||
configure_file(src/ZeekPluginBootstrap.cmake.in ZeekPluginBootstrap.cmake @ONLY)
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ZeekPluginBootstrap.cmake"
|
||||
DESTINATION "${ZEEK_CMAKE_INSTALL_DIR}")
|
||||
|
||||
install(
|
||||
FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ZeekConfig.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/ZeekConfigVersion.cmake"
|
||||
DESTINATION
|
||||
"${ZEEK_CMAKE_INSTALL_DIR}")
|
||||
|
||||
install(
|
||||
EXPORT ZeekTargets
|
||||
DESTINATION "${ZEEK_CMAKE_INSTALL_DIR}"
|
||||
NAMESPACE Zeek::)
|
||||
|
||||
########################################################################
|
||||
## Build Summary
|
||||
|
|
2
cmake
2
cmake
|
@ -1 +1 @@
|
|||
Subproject commit f258c75659cec6e5dbd91ea18e21bc5dfad284a2
|
||||
Subproject commit 9d42fed6811d011890af99d5de57c4d0089deaf6
|
15
src/ZeekPluginBootstrap.cmake.in
Normal file
15
src/ZeekPluginBootstrap.cmake.in
Normal file
|
@ -0,0 +1,15 @@
|
|||
# This script is installed alongside ZeekPlugin.cmake for passing variables from
|
||||
# the CMake configuration step to plugins.
|
||||
|
||||
# Allows scripts such as ZeekPlugin.cmake to locate the Zeek CMake package.
|
||||
set(ZEEK_CMAKE_PACKAGE_DIR "@ZEEK_CMAKE_INSTALL_DIR@"
|
||||
CACHE PATH "Path the CMake package for Zeek." FORCE)
|
||||
|
||||
# Allows scripts to locate files in the Zeek install tree.
|
||||
set(ZEEK_CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@"
|
||||
CACHE PATH "Path the install prefix of Zeek." FORCE)
|
||||
|
||||
# Set ZEEK_PLUGIN_SCRIPTS_PATH for ZeekPlugin.cmake. We install the scripts into
|
||||
# the package directory.
|
||||
set(ZEEK_PLUGIN_SCRIPTS_PATH "${ZEEK_CMAKE_PACKAGE_DIR}"
|
||||
CACHE PATH "Path to utility scripts for building Zeek plugins." FORCE)
|
|
@ -6,10 +6,16 @@
|
|||
include(MacDependencyPaths)
|
||||
|
||||
# For finding zeek-plugin-create-package.sh and zeek-plugin-install-package.sh.
|
||||
set(ZEEK_PLUGIN_SCRIPTS_PATH "@ZEEK_PLUGIN_SCRIPTS_PATH@")
|
||||
if ( NOT ZEEK_PLUGIN_SCRIPTS_PATH )
|
||||
set(ZEEK_PLUGIN_SCRIPTS_PATH "@ZEEK_PLUGIN_SCRIPTS_PATH@"
|
||||
CACHE PATH "Path to utility shell scripts." FORCE)
|
||||
endif ()
|
||||
|
||||
# For finding Zeek sources.
|
||||
set(ZEEK_SOURCE_DIR "@ZEEK_SOURCE_DIR@")
|
||||
if ( NOT ZEEK_SOURCE_DIR )
|
||||
set(ZEEK_SOURCE_DIR "@ZEEK_SOURCE_DIR@"
|
||||
CACHE PATH "Path to the Zeek source tree." FORCE)
|
||||
endif ()
|
||||
|
||||
# Provide a hint to ZeekConfig.cmake where to find Broker from the build tree.
|
||||
# Note: the straightforward way would be setting `Broker_ROOT` instead, but
|
||||
|
|
|
@ -4,7 +4,7 @@ binpac_root=@ZEEK_CONFIG_BINPAC_ROOT_DIR@
|
|||
broker_root=@ZEEK_CONFIG_BROKER_ROOT_DIR@
|
||||
btest_tools_dir=@ZEEK_CONFIG_BTEST_TOOLS_DIR@
|
||||
build_type=@CMAKE_BUILD_TYPE_LOWER@
|
||||
cmake_dir=@CMAKE_INSTALL_PREFIX@/share/zeek/cmake
|
||||
cmake_dir=@ZEEK_CMAKE_INSTALL_DIR@
|
||||
config_dir=@ZEEK_ETC_INSTALL_DIR@
|
||||
have_spicy=@USE_SPICY_ANALYZERS@
|
||||
include_dir=@CMAKE_INSTALL_PREFIX@/include
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue