CMake: Modernize config-file package support

A CMake config-file package provides support for downstreams using
CMake and Wireshark libraries to easily configure the libwireshark
dependency with:
  find_package(Wireshark CONFIG [REQUIRED])
  target_link_libraries(foo epan)

The FindWireshark.cmake file is no longer needed.

See cmake-package(7) for more details on CMake's package system.

Change-Id: Ie8af1d44417a99dd08d37959f7b2ffca88572ec2
Reviewed-on: https://code.wireshark.org/review/29208
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot
Reviewed-by: João Valverde <j@v6e.pt>
This commit is contained in:
João Valverde 2018-08-23 22:03:28 +01:00 committed by João Valverde
parent e75905a583
commit d0b97a420d
9 changed files with 102 additions and 112 deletions

View File

@ -2140,6 +2140,7 @@ if(BUILD_wireshark AND QT_FOUND)
ui ui
capchild capchild
caputils caputils
wiretap
${QT_LIBRARIES} ${QT_LIBRARIES}
${GTHREAD2_LIBRARIES} ${GTHREAD2_LIBRARIES}
wscodecs wscodecs
@ -2261,6 +2262,7 @@ if(BUILD_tshark)
ui ui
capchild capchild
caputils caputils
wiretap
${LIBEPAN_LIBS} ${LIBEPAN_LIBS}
${APPLE_CORE_FOUNDATION_LIBRARY} ${APPLE_CORE_FOUNDATION_LIBRARY}
${APPLE_SYSTEM_CONFIGURATION_LIBRARY} ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
@ -2284,6 +2286,7 @@ endif()
if(BUILD_tfshark) if(BUILD_tfshark)
set(tfshark_LIBS set(tfshark_LIBS
ui ui
wiretap
${LIBEPAN_LIBS} ${LIBEPAN_LIBS}
${APPLE_CORE_FOUNDATION_LIBRARY} ${APPLE_CORE_FOUNDATION_LIBRARY}
${APPLE_SYSTEM_CONFIGURATION_LIBRARY} ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
@ -2305,6 +2308,7 @@ if(BUILD_rawshark AND PCAP_FOUND)
set(rawshark_LIBS set(rawshark_LIBS
caputils caputils
ui ui
wiretap
${LIBEPAN_LIBS} ${LIBEPAN_LIBS}
${APPLE_CORE_FOUNDATION_LIBRARY} ${APPLE_CORE_FOUNDATION_LIBRARY}
${APPLE_SYSTEM_CONFIGURATION_LIBRARY} ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
@ -2325,6 +2329,7 @@ if(BUILD_sharkd)
set(sharkd_LIBS set(sharkd_LIBS
ui ui
wscodecs wscodecs
wiretap
${LIBEPAN_LIBS} ${LIBEPAN_LIBS}
${APPLE_CORE_FOUNDATION_LIBRARY} ${APPLE_CORE_FOUNDATION_LIBRARY}
${APPLE_SYSTEM_CONFIGURATION_LIBRARY} ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
@ -2345,6 +2350,7 @@ endif()
if(BUILD_dftest) if(BUILD_dftest)
set(dftest_LIBS set(dftest_LIBS
ui ui
wiretap
${LIBEPAN_LIBS} ${LIBEPAN_LIBS}
) )
set(dftest_FILES set(dftest_FILES
@ -2380,6 +2386,7 @@ endif()
if(BUILD_fuzzshark) if(BUILD_fuzzshark)
set(fuzzshark_LIBS set(fuzzshark_LIBS
wiretap
${LIBEPAN_LIBS} ${LIBEPAN_LIBS}
) )
set(fuzzshark_FILES set(fuzzshark_FILES
@ -2893,22 +2900,50 @@ install(
) )
set(CMAKE_INSTALL_MODULES_DIR "${CMAKE_INSTALL_LIBDIR}/${CPACK_PACKAGE_NAME}/cmake") set(CMAKE_INSTALL_MODULES_DIR "${CMAKE_INSTALL_LIBDIR}/${CPACK_PACKAGE_NAME}/cmake")
configure_file("${CMAKE_MODULE_PATH}/WiresharkConfig.cmake.in" "${CMAKE_BINARY_DIR}/WiresharkConfig.cmake" @ONLY)
configure_file("${CMAKE_MODULE_PATH}/WiresharkConfigVersion.cmake.in" "${CMAKE_BINARY_DIR}/WiresharkConfigVersion.cmake" @ONLY)
install( install(
FILES FILES
${CMAKE_MODULE_PATH}/FindGLIB2.cmake ${CMAKE_MODULE_PATH}/FindGLIB2.cmake
${CMAKE_MODULE_PATH}/FindWireshark.cmake
${CMAKE_MODULE_PATH}/FindWSWinLibs.cmake ${CMAKE_MODULE_PATH}/FindWSWinLibs.cmake
${CMAKE_MODULE_PATH}/UseAsn2Wrs.cmake ${CMAKE_MODULE_PATH}/UseAsn2Wrs.cmake
${CMAKE_MODULE_PATH}/LocatePythonModule.cmake ${CMAKE_MODULE_PATH}/LocatePythonModule.cmake
${CMAKE_MODULE_PATH}/UseMakePluginReg.cmake ${CMAKE_MODULE_PATH}/UseMakePluginReg.cmake
${CMAKE_BINARY_DIR}/WiresharkConfig.cmake
${CMAKE_BINARY_DIR}/WiresharkConfigVersion.cmake
DESTINATION DESTINATION
${CMAKE_INSTALL_MODULES_DIR} ${CMAKE_INSTALL_MODULES_DIR}
) )
include(CMakePackageConfigHelpers)
configure_package_config_file(WiresharkConfig.cmake.in
${CMAKE_BINARY_DIR}/WiresharkConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_MODULES_DIR}
PATH_VARS
CMAKE_INSTALL_LIBDIR
CMAKE_INSTALL_INCLUDEDIR
PLUGIN_INSTALL_VERSION_LIBDIR
EXTCAP_INSTALL_LIBDIR
)
write_basic_package_version_file(
${CMAKE_BINARY_DIR}/WiresharkConfigVersion.cmake
COMPATIBILITY AnyNewerVersion
)
# XXX On Windows wsutil depends on a CMake zlib target for which there are no
# exports.
if(NOT WIN32)
install(
FILES
${CMAKE_BINARY_DIR}/WiresharkConfig.cmake
${CMAKE_BINARY_DIR}/WiresharkConfigVersion.cmake
DESTINATION
${CMAKE_INSTALL_MODULES_DIR}
)
install(EXPORT WiresharkTargets
DESTINATION ${CMAKE_INSTALL_MODULES_DIR}
)
endif()
if (DOXYGEN_EXECUTABLE) if (DOXYGEN_EXECUTABLE)
# API reference # API reference
# We don't have a good way of tracking dependencies, so we simply # We don't have a good way of tracking dependencies, so we simply

19
WiresharkConfig.cmake.in Normal file
View File

@ -0,0 +1,19 @@
set(Wireshark_MAJOR_VERSION @PROJECT_MAJOR_VERSION@)
set(Wireshark_MINOR_VERSION @PROJECT_MINOR_VERSION@)
set(Wireshark_PATCH_VERSION @PROJECT_PATCH_VERSION@)
set(Wireshark_VERSION "@PROJECT_VERSION@")
set(Wireshark_PLUGINS_ENABLED @HAVE_PLUGINS@)
@PACKAGE_INIT@
set_and_check(Wireshark_LIB_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@")
set_and_check(Wireshark_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@/wireshark")
if(Wireshark_PLUGINS_ENABLED)
set_and_check(Wireshark_PLUGIN_INSTALL_DIR "@PACKAGE_PLUGIN_INSTALL_VERSION_LIBDIR@")
endif()
set_and_check(Wireshark_EXTCAP_INSTALL_DIR "@PACKAGE_EXTCAP_INSTALL_LIBDIR@")
include("${CMAKE_CURRENT_LIST_DIR}/WiresharkTargets.cmake")
check_required_components(Wireshark)

View File

@ -1,26 +0,0 @@
# Locate the Wireshark library.
#
# This file is meant to be copied into projects that want to use Wireshark.
# It will search for WiresharkConfig.cmake, which ships with Wireshark
# and will provide up-to-date buildsystem changes. Thus there should not be
# any need to update FindWiresharkVc.cmake again after you integrated it into
# your project.
#
# This module defines the following variables:
# Wireshark_FOUND
# Wireshark_VERSION_MAJOR
# Wireshark_VERSION_MINOR
# Wireshark_VERSION_PATCH
# Wireshark_VERSION
# Wireshark_VERSION_STRING
# Wireshark_INSTALL_DIR
# Wireshark_PLUGIN_INSTALL_DIR
# Wireshark_LIB_DIR
# Wireshark_LIBRARY
# Wireshark_INCLUDE_DIR
# Wireshark_CMAKE_MODULES_DIR
find_package(Wireshark ${Wireshark_FIND_VERSION} QUIET NO_MODULE PATHS $ENV{HOME} /opt/Wireshark)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Wireshark CONFIG_MODE)

View File

@ -1,25 +0,0 @@
set(Wireshark_MAJOR_VERSION "@PROJECT_MAJOR_VERSION@" )
set(Wireshark_MINOR_VERSION "@PROJECT_MINOR_VERSION@" )
set(Wireshark_PATCH_VERSION "@PROJECT_PATCH_VERSION@" )
set(Wireshark_VERSION @PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_PATCH_VERSION@)
set(Wireshark_VERSION_STRING "@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_PATCH_VERSION@")
set(Wireshark_INSTALL_DIR "@CMAKE_INSTALL_PREFIX@")
set(Wireshark_PLUGIN_INSTALL_DIR "@CMAKE_INSTALL_PREFIX@/@PLUGIN_INSTALL_VERSION_LIBDIR@")
set(Wireshark_EXTCAP_INSTALL_DIR "@CMAKE_INSTALL_PREFIX@/@EXTCAP_INSTALL_LIBDIR@")
set(Wireshark_LIB_DIR "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@")
set(Wireshark_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include/wireshark")
set(Wireshark_CMAKE_MODULES_DIR "@CMAKE_INSTALL_MODULES_DIR@")
find_library( Wireshark_LIBRARY
NAMES
wireshark
libwireshark
HINTS
${Wireshark_LIB_DIR}
PATHS
/opt/lib/
/usr/lib64
/usr/lib
)

View File

@ -1,10 +0,0 @@
set(PACKAGE_VERSION @PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_PATCH_VERSION@)
if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
set(PACKAGE_VERSION_COMPATIBLE TRUE)
if("${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
set(PACKAGE_VERSION_EXACT TRUE)
endif()
endif()

View File

@ -12,25 +12,9 @@ cmake_policy(SET CMP0048 NEW)
project(Hello VERSION 0.0.1 DESCRIPTION "Wireshark Hello Plugin" LANGUAGES C) project(Hello VERSION 0.0.1 DESCRIPTION "Wireshark Hello Plugin" LANGUAGES C)
find_package(PkgConfig REQUIRED) find_package(Wireshark CONFIG REQUIRED)
pkg_check_modules(WIRESHARK REQUIRED wireshark>=2.5) if(NOT Wireshark_PLUGINS_ENABLED)
### CMake Bug: Use PKG_CONFIG_PATH instead of CMAKE_PREFIX_PATH
# https://gitlab.kitware.com/cmake/cmake/issues/15805
# Note: If using PKG_CONFIG_PATH the variable needs to be set as exported
# in the execution environment.
pkg_get_variable(WIRESHARK_PLUGIN_DIR wireshark plugindir)
set(PLUGIN_INSTALL_LIBDIR "${WIRESHARK_PLUGIN_DIR}/epan")
include(CMakePushCheckState)
include(CheckFunctionExists)
cmake_push_check_state()
set(CMAKE_REQUIRED_LIBRARIES ${WIRESHARK_LDFLAGS})
check_function_exists("proto_register_plugin" HAVE_PROTO_REGISTER_PLUGIN)
cmake_pop_check_state()
if(NOT HAVE_PROTO_REGISTER_PLUGIN)
message(FATAL_ERROR "Wireshark was compiled without support for plugins") message(FATAL_ERROR "Wireshark was compiled without support for plugins")
endif() endif()
@ -39,13 +23,12 @@ if (CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS "-Wall -Wextra ${CMAKE_C_FLAGS}") set(CMAKE_C_FLAGS "-Wall -Wextra ${CMAKE_C_FLAGS}")
endif() endif()
add_definitions(-DHAVE_PLUGINS -DVERSION=\"${PROJECT_VERSION}\") add_definitions(-DVERSION=\"${PROJECT_VERSION}\")
add_library(hello MODULE hello.c) add_library(hello MODULE hello.c)
set_target_properties(hello PROPERTIES PREFIX "" DEFINE_SYMBOL "") set_target_properties(hello PROPERTIES PREFIX "" DEFINE_SYMBOL "")
target_link_libraries(hello ${WIRESHARK_LDFLAGS}) target_link_libraries(hello epan)
target_compile_options(hello PUBLIC ${WIRESHARK_CFLAGS})
install(TARGETS hello install(TARGETS hello
LIBRARY DESTINATION "${PLUGIN_INSTALL_LIBDIR}" NAMELINK_SKIP LIBRARY DESTINATION "${Wireshark_PLUGIN_INSTALL_DIR}/epan" NAMELINK_SKIP
) )

View File

@ -263,29 +263,6 @@ add_lemon_files(LEMON_FILES LIBWIRESHARK_FILES
dtd_grammar.lemon dtd_grammar.lemon
) )
set(epan_LIBS
wiretap
wsutil
${CARES_LIBRARIES}
${GCRYPT_LIBRARIES}
#${GEOIP_LIBRARIES}
${GLIB2_LIBRARIES}
${GIO2_LIBRARIES}
${GTHREAD2_LIBRARIES}
${GNUTLS_LIBRARIES}
${KERBEROS_LIBRARIES}
${LUA_LIBRARIES}
${LZ4_LIBRARIES}
${M_LIBRARIES}
${NGHTTP2_LIBRARIES}
${PCAP_LIBRARIES}
${SMI_LIBRARIES}
${SNAPPY_LIBRARIES}
${WIN_PSAPI_LIBRARY}
${LIBXML2_LIBRARIES}
${JSONGLIB_LIBRARIES}
)
set_source_files_properties( set_source_files_properties(
${LIBWIRESHARK_FILES} ${LIBWIRESHARK_FILES}
PROPERTIES PROPERTIES
@ -306,6 +283,10 @@ add_library(epan
add_dependencies(epan version) add_dependencies(epan version)
if(ENABLE_PLUGINS)
target_compile_definitions(epan PUBLIC HAVE_PLUGINS)
endif()
set_target_properties(epan PROPERTIES set_target_properties(epan PROPERTIES
COMPILE_DEFINITIONS "WS_BUILD_DLL" COMPILE_DEFINITIONS "WS_BUILD_DLL"
LINK_FLAGS "${WS_LINK_FLAGS}" LINK_FLAGS "${WS_LINK_FLAGS}"
@ -374,11 +355,42 @@ set_target_properties(epan PROPERTIES
FOLDER "DLLs" FOLDER "DLLs"
) )
target_link_libraries(epan ${epan_LIBS}) target_link_libraries(epan
PUBLIC
wiretap
wsutil
${GLIB2_LIBRARIES}
PRIVATE
${CARES_LIBRARIES}
${GCRYPT_LIBRARIES}
${GIO2_LIBRARIES}
${GTHREAD2_LIBRARIES}
${GNUTLS_LIBRARIES}
${KERBEROS_LIBRARIES}
${LUA_LIBRARIES}
${LZ4_LIBRARIES}
${M_LIBRARIES}
${NGHTTP2_LIBRARIES}
${PCAP_LIBRARIES}
${SMI_LIBRARIES}
${SNAPPY_LIBRARIES}
${WIN_PSAPI_LIBRARY}
${LIBXML2_LIBRARIES}
${JSONGLIB_LIBRARIES}
)
target_include_directories(epan
INTERFACE
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
$<INSTALL_INTERFACE:include/wireshark>
PUBLIC
${GLIB2_INCLUDE_DIRS}
)
add_dependencies(epan lemon) add_dependencies(epan lemon)
install(TARGETS epan install(TARGETS epan
EXPORT WiresharkTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}

View File

@ -154,6 +154,7 @@ add_custom_command(OUTPUT libwiretap.abi.tar.gz
target_link_libraries(wiretap ${wiretap_LIBS}) target_link_libraries(wiretap ${wiretap_LIBS})
install(TARGETS wiretap install(TARGETS wiretap
EXPORT WiresharkTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}

View File

@ -296,6 +296,7 @@ add_custom_command(OUTPUT libwsutil.abi.tar.gz
target_link_libraries(wsutil ${wsutil_LIBS}) target_link_libraries(wsutil ${wsutil_LIBS})
install(TARGETS wsutil install(TARGETS wsutil
EXPORT WiresharkTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}