forked from PCRE2Project/pcre2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use standard CMake constructs to export the library's targets. (PCRE2…
…Project#260) * Use standard CMake constructs to export the library's targets. * Fix typo. * Document that PCRE2_USE_STATIC_LIBS is not required if only one edition of the library has been built. * Replace some missed stuff from previous review. * Don't explicitly set `PCRE2_FOUND` to true. * Avoid defining the target aliases if they are already defined. * Set `PCRE2_LIBRARIES` and `PCRE2_***_LIBRARY` for compatibility. * Change `PCRE2_USE_STATIC_LIBS` to prohibit loading the shared library if set.
- Loading branch information
1 parent
6bc8ccf
commit def175f
Showing
3 changed files
with
77 additions
and
127 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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@.@[email protected]") | ||
endif () | ||
set(PCRE2_VERSION "@PCRE2_MAJOR@.@[email protected]") | ||
|
||
# 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 () | ||
|
||
# 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") |