summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzat Khuzhin <azat@libevent.org>2023-05-14 22:56:02 +0200
committerAzat Khuzhin <azat@libevent.org>2023-05-14 22:56:02 +0200
commit4dee61c02cc777c306227cd8378767ad544ce8bf (patch)
treec11d17e96adf777d8d6f9a73028fd83c29c06700
parentfe610f2cdcca98402ec6d104ab6b565699dcc3e6 (diff)
parent16be768dac438efafbafb6395066f262410459ca (diff)
downloadlibevent-4dee61c02cc777c306227cd8378767ad544ce8bf.tar.gz
Merge remote-tracking branch 'upstream/pr/1397' - #1397
* upstream/pr/1397: Make sure exported include dirs are correct Fix Configure_RPATH() Install LibeventConfig.cmake similar to other cmake files Use GNUInstallDirs for mapping installation directories
-rw-r--r--CMakeLists.txt35
-rw-r--r--cmake/AddEventLibrary.cmake8
-rw-r--r--cmake/LibeventConfig.cmake.in83
-rw-r--r--cmake/UseDoxygen.cmake4
-rw-r--r--test-export/test-export.py16
5 files changed, 28 insertions, 118 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7ce72bbd..ab53b8b0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -172,20 +172,21 @@ if (NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
endif()
+include(GNUInstallDirs)
+
# The RPATH to be used when installing, but only if it's not a system directory
#
# Refs: https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
macro(Configure_RPATH)
- # NOTE: that CMAKE_INSTALL_PREFIX not always normalized correctly, i.e.:
+ # NOTE: that CMAKE_INSTALL_LIBDIR not always normalized correctly, i.e.:
# - "///" -> "/"
# - "/////usr///" -> "//usr"
# So it should be normalized again.
-
- get_filename_component(CMAKE_INSTALL_PREFIX_NORMALIZED "${CMAKE_INSTALL_PREFIX}" REALPATH)
- list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX_NORMALIZED}/lib" isSystemDir)
+ get_filename_component(CMAKE_INSTALL_LIBDIR_NORMALIZED "${CMAKE_INSTALL_PREFIX}" REALPATH)
+ list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_LIBDIR_NORMALIZED}/lib" isSystemDir)
if("${isSystemDir}" STREQUAL "-1")
- set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX_NORMALIZED}/lib")
+ set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR_NORMALIZED}")
endif()
endmacro()
Configure_RPATH()
@@ -1622,22 +1623,13 @@ endif()
#
set(EVENT_INSTALL_CMAKE_DIR
- "${CMAKE_INSTALL_PREFIX}/lib/cmake/libevent")
+ "${CMAKE_INSTALL_LIBDIR}/cmake/libevent")
export(PACKAGE libevent)
-function(gen_package_config forinstall)
- if(${forinstall})
- set(CONFIG_FOR_INSTALL_TREE 1)
- set(dir "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}")
- else()
- set(CONFIG_FOR_INSTALL_TREE 0)
- set(dir "${PROJECT_BINARY_DIR}")
- endif()
- configure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfig.cmake.in
- "${dir}/LibeventConfig.cmake"
- @ONLY)
-endfunction()
+configure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfig.cmake.in
+ "${PROJECT_BINARY_DIR}/LibeventConfig.cmake"
+ @ONLY)
# Generate the config file for the build-tree.
set(EVENT__INCLUDE_DIRS
@@ -1648,11 +1640,6 @@ set(LIBEVENT_INCLUDE_DIRS
${EVENT__INCLUDE_DIRS}
CACHE PATH "Libevent include directories")
-gen_package_config(0)
-
-# Generate the config file for the installation tree.
-gen_package_config(1)
-
# Generate version info for both build-tree and install-tree.
configure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfigVersion.cmake.in
${PROJECT_BINARY_DIR}/LibeventConfigVersion.cmake
@@ -1670,7 +1657,7 @@ install(FILES ${HDR_PUBLIC}
# Install the configs.
install(FILES
- ${PROJECT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/LibeventConfig.cmake
+ ${PROJECT_BINARY_DIR}/LibeventConfig.cmake
${PROJECT_BINARY_DIR}/LibeventConfigVersion.cmake
DESTINATION "${EVENT_INSTALL_CMAKE_DIR}"
COMPONENT dev)
diff --git a/cmake/AddEventLibrary.cmake b/cmake/AddEventLibrary.cmake
index 9af39441..3d53258c 100644
--- a/cmake/AddEventLibrary.cmake
+++ b/cmake/AddEventLibrary.cmake
@@ -13,8 +13,8 @@ endmacro()
macro(generate_pkgconfig LIB_NAME)
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
- set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
- set(includedir ${CMAKE_INSTALL_PREFIX}/include)
+ set(libdir ${CMAKE_INSTALL_LIBDIR})
+ set(includedir ${CMAKE_INSTALL_INCLUDEDIR})
set(VERSION ${EVENT_ABI_LIBVERSION})
@@ -31,7 +31,7 @@ macro(generate_pkgconfig LIB_NAME)
configure_file("lib${LIB_NAME}.pc.in" "lib${LIB_NAME}.pc" @ONLY)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_NAME}.pc"
- DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
)
endmacro()
@@ -151,7 +151,7 @@ macro(add_event_library LIB_NAME)
set_target_properties(
"${LIB_NAME}_shared" PROPERTIES
OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}.${CURRENT_MINUS_AGE}"
- INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
+ INSTALL_NAME_DIR "${CMAKE_INSTALL_LIBDIR}"
LINK_FLAGS "-compatibility_version ${COMPATIBILITY_VERSION} -current_version ${COMPATIBILITY_VERSION}.${EVENT_ABI_LIBVERSION_REVISION}")
else()
math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}")
diff --git a/cmake/LibeventConfig.cmake.in b/cmake/LibeventConfig.cmake.in
index a12fc23c..f9b00363 100644
--- a/cmake/LibeventConfig.cmake.in
+++ b/cmake/LibeventConfig.cmake.in
@@ -32,8 +32,6 @@
# find_package() can handle dependencies automatically. For example, given the 'openssl' component,
# all dependencies (libevent_core, libssl, libcrypto and openssl include directories) will be found.
-set(CONFIG_FOR_INSTALL_TREE @CONFIG_FOR_INSTALL_TREE@)
-
set(LIBEVENT_VERSION @EVENT_PACKAGE_VERSION@)
# IMPORTED targets from LibeventTargets.cmake
@@ -45,21 +43,14 @@ if(NOT DEFINED LIBEVENT_STATIC_LINK)
set(LIBEVENT_STATIC_LINK NOT @EVENT_LIBRARY_SHARED@)
endif()
-set(CMAKE_FIND_LIBRARY_SUFFIXES_SAVE "${CMAKE_FIND_LIBRARY_SUFFIXES}")
if(${LIBEVENT_STATIC_LINK})
set(_LIB_TYPE static)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
set(_AVAILABLE_LIBS "${LIBEVENT_STATIC_LIBRARIES}")
else()
set(_LIB_TYPE shared)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
set(_AVAILABLE_LIBS "${LIBEVENT_SHARED_LIBRARIES}")
endif()
-# Get the path of the current file.
-get_filename_component(LIBEVENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
-get_filename_component(_INSTALL_PREFIX "${LIBEVENT_CMAKE_DIR}/../../.." ABSOLUTE)
-
macro(message_if_needed _flag _msg)
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
message(${_flag} "${_msg}")
@@ -110,73 +101,22 @@ macro(set_case_insensitive_found _comp)
endforeach()
endmacro()
-if(CONFIG_FOR_INSTALL_TREE)
- ## Config for install tree ----------------------------------------
- # Find includes
- unset(_event_h CACHE)
- find_path(_event_h
- NAMES event2/event.h
- PATHS "${_INSTALL_PREFIX}/include"
- NO_DEFAULT_PATH)
- if(_event_h)
- set(LIBEVENT_INCLUDE_DIRS "${_event_h}")
- message_if_needed(STATUS "Found libevent include directory: ${_event_h}")
- else()
- message_if_needed(WARNING "Your libevent library does not contain header files!")
- endif()
+foreach(_comp ${_EVENT_COMPONENTS})
+ list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}")
+ set_case_insensitive_found(${_comp})
+endforeach()
- # Find libraries
- macro(find_event_lib _comp)
- unset(_event_lib_dbg CACHE)
- unset(_event_lib_rel CACHE)
- find_library(_event_lib_dbg
- NAMES "event_${_comp}d"
- PATHS "${_INSTALL_PREFIX}/lib"
- NO_DEFAULT_PATH)
- find_library(_event_lib_rel
- NAMES "event_${_comp}"
- PATHS "${_INSTALL_PREFIX}/lib"
- NO_DEFAULT_PATH)
- if(_event_lib_rel OR _event_lib_dbg)
- list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}")
- set_case_insensitive_found(${_comp})
- if(_event_lib_dbg)
- message_if_needed(STATUS "Found libevent component: ${_event_lib_dbg}")
- endif()
- if(_event_lib_rel)
- message_if_needed(STATUS "Found libevent component: ${_event_lib_rel}")
- endif()
- else()
- no_component_msg(${_comp})
- endif()
- endmacro()
-
- foreach(comp ${_EVENT_COMPONENTS})
- find_event_lib(${comp})
- endforeach()
-else()
- ## Config for build tree ----------------------------------------
- set(LIBEVENT_INCLUDE_DIRS "@EVENT__INCLUDE_DIRS@")
- foreach(_comp ${_EVENT_COMPONENTS})
- list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}")
- set_case_insensitive_found(${_comp})
- endforeach()
-endif()
-
-set(LIBEVENT_INCLUDE_DIR ${LIBEVENT_INCLUDE_DIRS})
if(LIBEVENT_LIBRARIES)
set(LIBEVENT_LIBRARY ${LIBEVENT_LIBRARIES})
- if(CONFIG_FOR_INSTALL_TREE)
- message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in ${_INSTALL_PREFIX}")
- else()
- message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in ${LIBEVENT_CMAKE_DIR}")
- endif()
- # Avoid including targets more than one times
- if(NOT TARGET event_core_${_LIB_TYPE})
+ # Avoid including targets more than once.
+ if(NOT TARGET libevent::core)
# Include the project Targets file, this contains definitions for IMPORTED targets.
- include(${LIBEVENT_CMAKE_DIR}/LibeventTargets-${_LIB_TYPE}.cmake)
+ include(${CMAKE_CURRENT_LIST_DIR}/LibeventTargets-${_LIB_TYPE}.cmake)
endif()
+ get_target_property(LIBEVENT_INCLUDE_DIRS libevent::core INTERFACE_INCLUDE_DIRECTORIES)
+ get_filename_component(LIBEVENT_INSTALL_PREFIX "${LIBEVENT_INCLUDE_DIRS}" PATH)
+ message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in ${LIBEVENT_INSTALL_PREFIX}")
else()
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED)
message(FATAL_ERROR "Can not find any libraries for libevent.")
@@ -184,10 +124,9 @@ else()
message_if_needed(WARNING "Can not find any libraries for libevent.")
endif()
endif()
+set(LIBEVENT_INCLUDE_DIR ${LIBEVENT_INCLUDE_DIRS})
-set(CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES_SAVE}")
unset(_LIB_TYPE)
unset(_AVAILABLE_LIBS)
unset(_EVENT_COMPONENTS)
unset(_POSSIBLE_PKG_NAMES)
-unset(_INSTALL_PREFIX)
diff --git a/cmake/UseDoxygen.cmake b/cmake/UseDoxygen.cmake
index c7e4b175..292aaaa4 100644
--- a/cmake/UseDoxygen.cmake
+++ b/cmake/UseDoxygen.cmake
@@ -90,7 +90,7 @@ macro(UseDoxygen)
if ("${DOXYGEN_GENERATE_HTML}" STREQUAL "YES")
install(DIRECTORY
${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}/html
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}
COMPONENT doc
)
endif()
@@ -106,7 +106,7 @@ macro(UseDoxygen)
# Install manual into <prefix>/share/man/man3
install(DIRECTORY
${MAN_PAGES_DIR}
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/man
COMPONENT doc
)
endif()
diff --git a/test-export/test-export.py b/test-export/test-export.py
index 9eaf0d63..84824350 100644
--- a/test-export/test-export.py
+++ b/test-export/test-export.py
@@ -109,18 +109,6 @@ def test_group():
testcase("mbedtls", "pthreads", 1)
-def config_restore():
- if os.path.isfile("tempconfig") and not os.path.isfile("LibeventConfig.cmake"):
- os.rename("tempconfig", "LibeventConfig.cmake")
-
-
-def config_backup():
- if os.path.isfile("tempconfig"):
- os.remove("tempconfig")
- if os.path.isfile("LibeventConfig.cmake"):
- os.rename("LibeventConfig.cmake", "tempconfig")
-
-
shutil.rmtree(os.path.join(script_dir, "build"), ignore_errors=True)
@@ -158,7 +146,6 @@ print("[test-export] use %s library" % link_type)
# Test for build tree.
print("[test-export] test for build tree")
dllpath = os.path.join(working_dir, "bin", "Debug")
-config_restore()
os.environ["CMAKE_PREFIX_PATH"] = working_dir
export_dll(dllpath)
run_test_group()
@@ -175,7 +162,6 @@ else:
prefix = "/usr/local"
exec_cmd('cmake -DCMAKE_SKIP_INSTALL_RPATH=OFF -DCMAKE_INSTALL_PREFIX="%s" ..' % prefix, True)
exec_cmd('cmake --build . -v --target install', True)
-config_backup()
os.environ["CMAKE_PREFIX_PATH"] = os.path.join(prefix, "lib/cmake/libevent")
export_dll(dllpath)
run_test_group()
@@ -191,13 +177,11 @@ tempdir = tempfile.TemporaryDirectory()
cmd = 'cmake -DCMAKE_SKIP_INSTALL_RPATH=OFF -DCMAKE_INSTALL_PREFIX="%s" ..' % tempdir.name
exec_cmd(cmd, True)
exec_cmd("cmake --build . -v --target install", True)
-config_backup()
os.environ["CMAKE_PREFIX_PATH"] = os.path.join(tempdir.name, "lib/cmake/libevent")
dllpath = os.path.join(tempdir.name, "lib")
export_dll(dllpath)
run_test_group()
unexport_dll(dllpath)
del os.environ["CMAKE_PREFIX_PATH"]
-config_restore()
print("[test-export] all testcases have run successfully")