vcpkg/ports/pcre2/fix-cmake.patch

335 lines
14 KiB
Diff
Raw Normal View History

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8b5081e..ba2e993 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -100,6 +100,9 @@
# 2021-08-28 PH increased minimum version
# 2021-08-28 PH added test for realpath()
# 2022-12-10 PH added support for pcre2posix_test
+# 2023-01-15 Carlo added C99 as the minimum required
+# 2023-06-03 Theodore used standard CMake constructs to export the library's targets.
+# 2023-08-06 PH added support for setting variable length lookbehind maximum
# Increased minimum to 2.8.5 to support GNUInstallDirs.
# Increased minimum to 3.1 to support imported targets.
@@ -136,6 +139,7 @@ INCLUDE(CheckFunctionExists)
INCLUDE(CheckSymbolExists)
INCLUDE(CheckIncludeFile)
INCLUDE(CheckTypeSize)
+INCLUDE(CMakePackageConfigHelpers)
INCLUDE(GNUInstallDirs) # for CMAKE_INSTALL_LIBDIR
CHECK_INCLUDE_FILE(dirent.h HAVE_DIRENT_H)
@@ -706,7 +710,9 @@ IF(PCRE2_BUILD_PCRE2_8)
VERSION ${LIBPCRE2_8_VERSION}
SOVERSION ${LIBPCRE2_8_SOVERSION})
TARGET_COMPILE_DEFINITIONS(pcre2-8-static PUBLIC PCRE2_STATIC)
- TARGET_INCLUDE_DIRECTORIES(pcre2-8-static PUBLIC ${PROJECT_BINARY_DIR})
+ TARGET_INCLUDE_DIRECTORIES(pcre2-8-static PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
IF(REQUIRE_PTHREAD)
TARGET_LINK_LIBRARIES(pcre2-8-static Threads::Threads)
ENDIF(REQUIRE_PTHREAD)
@@ -719,8 +725,9 @@ IF(PCRE2_BUILD_PCRE2_8)
VERSION ${LIBPCRE2_POSIX_VERSION}
SOVERSION ${LIBPCRE2_POSIX_SOVERSION})
TARGET_LINK_LIBRARIES(pcre2-posix-static pcre2-8-static)
- TARGET_COMPILE_DEFINITIONS(pcre2-posix-static PUBLIC PCRE2_STATIC)
- TARGET_INCLUDE_DIRECTORIES(pcre2-posix-static PUBLIC ${PROJECT_BINARY_DIR})
+ TARGET_INCLUDE_DIRECTORIES(pcre2-posix-static PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
SET(targets ${targets} pcre2-posix-static)
IF(MSVC)
@@ -737,7 +744,9 @@ IF(PCRE2_BUILD_PCRE2_8)
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(pcre2-8-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
- TARGET_INCLUDE_DIRECTORIES(pcre2-8-shared PUBLIC ${PROJECT_BINARY_DIR})
+ TARGET_INCLUDE_DIRECTORIES(pcre2-8-shared PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
SET_TARGET_PROPERTIES(pcre2-8-shared PROPERTIES
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION}"
@@ -750,7 +759,9 @@ IF(PCRE2_BUILD_PCRE2_8)
ENDIF(REQUIRE_PTHREAD)
SET(targets ${targets} pcre2-8-shared)
ADD_LIBRARY(pcre2-posix-shared SHARED ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})
- TARGET_INCLUDE_DIRECTORIES(pcre2-posix-shared PUBLIC ${PROJECT_BINARY_DIR})
+ TARGET_INCLUDE_DIRECTORIES(pcre2-posix-shared PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
SET_TARGET_PROPERTIES(pcre2-posix-shared PROPERTIES
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION}"
@@ -787,7 +798,9 @@ ENDIF(PCRE2_BUILD_PCRE2_8)
IF(PCRE2_BUILD_PCRE2_16)
IF(BUILD_STATIC_LIBS)
ADD_LIBRARY(pcre2-16-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
- TARGET_INCLUDE_DIRECTORIES(pcre2-16-static PUBLIC ${PROJECT_BINARY_DIR})
+ TARGET_INCLUDE_DIRECTORIES(pcre2-16-static PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
SET_TARGET_PROPERTIES(pcre2-16-static PROPERTIES
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
@@ -812,7 +825,9 @@ IF(PCRE2_BUILD_PCRE2_16)
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(pcre2-16-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
- TARGET_INCLUDE_DIRECTORIES(pcre2-16-shared PUBLIC ${PROJECT_BINARY_DIR})
+ TARGET_INCLUDE_DIRECTORIES(pcre2-16-shared PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
SET_TARGET_PROPERTIES(pcre2-16-shared PROPERTIES
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
@@ -849,7 +864,9 @@ ENDIF(PCRE2_BUILD_PCRE2_16)
IF(PCRE2_BUILD_PCRE2_32)
IF(BUILD_STATIC_LIBS)
ADD_LIBRARY(pcre2-32-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
- TARGET_INCLUDE_DIRECTORIES(pcre2-32-static PUBLIC ${PROJECT_BINARY_DIR})
+ TARGET_INCLUDE_DIRECTORIES(pcre2-32-static PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
SET_TARGET_PROPERTIES(pcre2-32-static PROPERTIES
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
@@ -874,7 +891,9 @@ IF(PCRE2_BUILD_PCRE2_32)
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(pcre2-32-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
- TARGET_INCLUDE_DIRECTORIES(pcre2-32-shared PUBLIC ${PROJECT_BINARY_DIR})
+ TARGET_INCLUDE_DIRECTORIES(pcre2-32-shared PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
SET_TARGET_PROPERTIES(pcre2-32-shared PROPERTIES
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
@@ -1076,9 +1095,13 @@ ENDIF(PCRE2_BUILD_TESTS)
SET(CMAKE_INSTALL_ALWAYS 1)
INSTALL(TARGETS ${targets}
- RUNTIME DESTINATION bin
+ EXPORT pcre2-targets
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+INSTALL(EXPORT pcre2-targets
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcre2
+ NAMESPACE pcre2::)
INSTALL(FILES ${pkg_config_files} DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pcre2-config"
DESTINATION bin
@@ -1090,11 +1113,12 @@ INSTALL(FILES ${PCRE2_HEADERS} ${PCRE2POSIX_HEADERS} DESTINATION include)
# CMake config files.
set(PCRE2_CONFIG_IN ${CMAKE_CURRENT_SOURCE_DIR}/cmake/pcre2-config.cmake.in)
set(PCRE2_CONFIG_OUT ${CMAKE_CURRENT_BINARY_DIR}/cmake/pcre2-config.cmake)
-configure_file(${PCRE2_CONFIG_IN} ${PCRE2_CONFIG_OUT} @ONLY)
-set(PCRE2_CONFIG_VERSION_IN ${CMAKE_CURRENT_SOURCE_DIR}/cmake/pcre2-config-version.cmake.in)
+configure_package_config_file(${PCRE2_CONFIG_IN} ${PCRE2_CONFIG_OUT} INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcre2)
set(PCRE2_CONFIG_VERSION_OUT ${CMAKE_CURRENT_BINARY_DIR}/cmake/pcre2-config-version.cmake)
-configure_file(${PCRE2_CONFIG_VERSION_IN} ${PCRE2_CONFIG_VERSION_OUT} @ONLY)
-install(FILES ${PCRE2_CONFIG_OUT} ${PCRE2_CONFIG_VERSION_OUT} DESTINATION cmake)
+write_basic_package_version_file(${PCRE2_CONFIG_VERSION_OUT}
+ VERSION ${PCRE2_MAJOR}.${PCRE2_MINOR}.0
+ COMPATIBILITY SameMajorVersion)
+install(FILES ${PCRE2_CONFIG_OUT} ${PCRE2_CONFIG_VERSION_OUT} DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcre2)
FILE(GLOB html ${PROJECT_SOURCE_DIR}/doc/html/*.html)
FILE(GLOB man1 ${PROJECT_SOURCE_DIR}/doc/*.1)
diff --git a/cmake/pcre2-config-version.cmake.in b/cmake/pcre2-config-version.cmake.in
deleted file mode 100644
index dac149e..0000000
--- a/cmake/pcre2-config-version.cmake.in
+++ /dev/null
@@ -1,15 +0,0 @@
-set(PACKAGE_VERSION_MAJOR @PCRE2_MAJOR@)
-set(PACKAGE_VERSION_MINOR @PCRE2_MINOR@)
-set(PACKAGE_VERSION_PATCH 0)
-set(PACKAGE_VERSION @PCRE2_MAJOR@.@PCRE2_MINOR@.0)
-
-# Check whether the requested PACKAGE_FIND_VERSION is compatible
-if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION OR
- PACKAGE_VERSION_MAJOR GREATER PACKAGE_FIND_VERSION_MAJOR)
- set(PACKAGE_VERSION_COMPATIBLE FALSE)
-else()
- set(PACKAGE_VERSION_COMPATIBLE TRUE)
- if(PACKAGE_VERSION VERSION_EQUAL PACKAGE_FIND_VERSION)
- set(PACKAGE_VERSION_EXACT TRUE)
- endif()
-endif()
diff --git a/cmake/pcre2-config.cmake.in b/cmake/pcre2-config.cmake.in
index b313d6d..5b2aafa 100644
--- a/cmake/pcre2-config.cmake.in
+++ b/cmake/pcre2-config.cmake.in
@@ -5,11 +5,17 @@
#
# Static vs. shared
# -----------------
-# To make use of the static library instead of the shared one, one needs
+# To force using the static library instead of the shared one, one needs
# to set the variable PCRE2_USE_STATIC_LIBS to ON before calling find_package.
+# If the variable is not set, the static library will be used if only that has
+# been built, otherwise the shared library will be used.
+#
+# The following components are supported: 8BIT, 16BIT, 32BIT and POSIX.
+# They used to be required but not anymore; all available targets will
+# be defined regardless of the requested components.
# Example:
# set(PCRE2_USE_STATIC_LIBS ON)
-# find_package(PCRE2 CONFIG COMPONENTS 8BIT)
+# find_package(PCRE2 CONFIG)
#
# This will define the following variables:
#
@@ -23,70 +29,42 @@
# PCRE2::32BIT - The 32 bit PCRE2 library.
# PCRE2::POSIX - The POSIX PCRE2 library.
-set(PCRE2_NON_STANDARD_LIB_PREFIX @NON_STANDARD_LIB_PREFIX@)
-set(PCRE2_NON_STANDARD_LIB_SUFFIX @NON_STANDARD_LIB_SUFFIX@)
-set(PCRE2_8BIT_NAME pcre2-8)
-set(PCRE2_16BIT_NAME pcre2-16)
-set(PCRE2_32BIT_NAME pcre2-32)
-set(PCRE2_POSIX_NAME pcre2-posix)
-find_path(PCRE2_INCLUDE_DIR NAMES pcre2.h DOC "PCRE2 include directory")
-if (PCRE2_USE_STATIC_LIBS)
- if (MSVC)
- set(PCRE2_8BIT_NAME pcre2-8-static)
- set(PCRE2_16BIT_NAME pcre2-16-static)
- set(PCRE2_32BIT_NAME pcre2-32-static)
- set(PCRE2_POSIX_NAME pcre2-posix-static)
- endif ()
+@PACKAGE_INIT@
- set(PCRE2_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
- set(PCRE2_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
-else ()
- set(PCRE2_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
- if (MINGW AND PCRE2_NON_STANDARD_LIB_PREFIX)
- set(PCRE2_PREFIX "")
- endif ()
+include(CMakeFindDependencyMacro)
+if("@REQUIRE_PTHREAD@") # REQUIRE_PTHREAD
+ find_dependency(Threads)
+endif()
- set(PCRE2_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
- if (MINGW AND PCRE2_NON_STANDARD_LIB_SUFFIX)
- set(PCRE2_SUFFIX "-0.dll")
- endif ()
-endif ()
-find_library(PCRE2_8BIT_LIBRARY NAMES ${PCRE2_PREFIX}${PCRE2_8BIT_NAME}${PCRE2_SUFFIX} ${PCRE2_PREFIX}${PCRE2_8BIT_NAME}d${PCRE2_SUFFIX} DOC "8 bit PCRE2 library")
-find_library(PCRE2_16BIT_LIBRARY NAMES ${PCRE2_PREFIX}${PCRE2_16BIT_NAME}${PCRE2_SUFFIX} ${PCRE2_PREFIX}${PCRE2_8BIT_NAME}d${PCRE2_SUFFIX} DOC "16 bit PCRE2 library")
-find_library(PCRE2_32BIT_LIBRARY NAMES ${PCRE2_PREFIX}${PCRE2_32BIT_NAME}${PCRE2_SUFFIX} ${PCRE2_PREFIX}${PCRE2_8BIT_NAME}d${PCRE2_SUFFIX} DOC "32 bit PCRE2 library")
-find_library(PCRE2_POSIX_LIBRARY NAMES ${PCRE2_PREFIX}${PCRE2_POSIX_NAME}${PCRE2_SUFFIX} ${PCRE2_PREFIX}${PCRE2_8BIT_NAME}d${PCRE2_SUFFIX} DOC "8 bit POSIX PCRE2 library")
-unset(PCRE2_NON_STANDARD_LIB_PREFIX)
-unset(PCRE2_NON_STANDARD_LIB_SUFFIX)
-unset(PCRE2_8BIT_NAME)
-unset(PCRE2_16BIT_NAME)
-unset(PCRE2_32BIT_NAME)
-unset(PCRE2_POSIX_NAME)
+include("${CMAKE_CURRENT_LIST_DIR}/pcre2-targets.cmake")
# Set version
-if (PCRE2_INCLUDE_DIR)
- set(PCRE2_VERSION "@PCRE2_MAJOR@.@PCRE2_MINOR@.0")
-endif ()
-
-# Which components have been found.
-if (PCRE2_8BIT_LIBRARY)
- set(PCRE2_8BIT_FOUND TRUE)
-endif ()
-if (PCRE2_16BIT_LIBRARY)
- set(PCRE2_16BIT_FOUND TRUE)
-endif ()
-if (PCRE2_32BIT_LIBRARY)
- set(PCRE2_32BIT_FOUND TRUE)
-endif ()
-if (PCRE2_POSIX_LIBRARY)
- set(PCRE2_POSIX_FOUND TRUE)
-endif ()
+set(PCRE2_VERSION "@PCRE2_MAJOR@.@PCRE2_MINOR@.0")
-# Check if at least one component has been specified.
-list(LENGTH PCRE2_FIND_COMPONENTS PCRE2_NCOMPONENTS)
-if (PCRE2_NCOMPONENTS LESS 1)
- message(FATAL_ERROR "No components have been specified. This is not allowed. Please, specify at least one component.")
-endif ()
-unset(PCRE2_NCOMPONENTS)
+# Chooses the linkage of the library to expose in the
+# unsuffixed edition of the target.
+macro(_pcre2_add_component_target component target)
+ # If the static library exists and either PCRE2_USE_STATIC_LIBS
+ # is defined, or the dynamic library does not exist, use the static library.
+ if(NOT TARGET PCRE2::${component})
+ if(TARGET pcre2::pcre2-${target}-static AND (PCRE2_USE_STATIC_LIBS OR NOT TARGET pcre2::pcre2-${target}-shared))
+ add_library(PCRE2::${component} ALIAS pcre2::pcre2-${target}-static)
+ set(PCRE2_${component}_FOUND TRUE)
+ # Otherwise use the dynamic library if it exists.
+ elseif(TARGET pcre2::pcre2-${target}-shared AND NOT PCRE2_USE_STATIC_LIBS)
+ add_library(PCRE2::${component} ALIAS pcre2::pcre2-${target}-shared)
+ set(PCRE2_${component}_FOUND TRUE)
+ endif()
+ if(PCRE2_${component}_FOUND)
+ get_target_property(PCRE2_${component}_LIBRARY PCRE2::${component} IMPORTED_LOCATION)
+ set(PCRE2_LIBRARIES ${PCRE2_LIBRARIES} ${PCRE2_${component}_LIBRARY})
+ endif()
+ endif()
+endmacro()
+_pcre2_add_component_target(8BIT 8)
+_pcre2_add_component_target(16BIT 16)
+_pcre2_add_component_target(32BIT 32)
+_pcre2_add_component_target(POSIX posix)
# When POSIX component has been specified make sure that also 8BIT component is specified.
set(PCRE2_8BIT_COMPONENT FALSE)
@@ -105,41 +83,5 @@ endif()
unset(PCRE2_8BIT_COMPONENT)
unset(PCRE2_POSIX_COMPONENT)
-include(FindPackageHandleStandardArgs)
-set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG "${CMAKE_CURRENT_LIST_FILE}")
-find_package_handle_standard_args(PCRE2
- FOUND_VAR PCRE2_FOUND
- REQUIRED_VARS PCRE2_INCLUDE_DIR
- HANDLE_COMPONENTS
- VERSION_VAR PCRE2_VERSION
- CONFIG_MODE
-)
-
-set(PCRE2_LIBRARIES)
-if (PCRE2_FOUND)
- foreach(component ${PCRE2_FIND_COMPONENTS})
- if (PCRE2_USE_STATIC_LIBS)
- add_library(PCRE2::${component} STATIC IMPORTED)
- target_compile_definitions(PCRE2::${component} INTERFACE PCRE2_STATIC)
- else ()
- add_library(PCRE2::${component} SHARED IMPORTED)
- endif ()
- set_target_properties(PCRE2::${component} PROPERTIES
- IMPORTED_LOCATION "${PCRE2_${component}_LIBRARY}"
- INTERFACE_INCLUDE_DIRECTORIES "${PCRE2_INCLUDE_DIR}"
- )
- if (component STREQUAL "POSIX")
- set_target_properties(PCRE2::${component} PROPERTIES
- INTERFACE_LINK_LIBRARIES "PCRE2::8BIT"
- LINK_LIBRARIES "PCRE2::8BIT"
- )
- endif ()
-
- set(PCRE2_LIBRARIES ${PCRE2_LIBRARIES} ${PCRE2_${component}_LIBRARY})
- mark_as_advanced(PCRE2_${component}_LIBRARY)
- endforeach()
-endif ()
-
-mark_as_advanced(
- PCRE2_INCLUDE_DIR
-)
+# Check for required components.
+check_required_components("PCRE2")