101
101
# 2021-08-28 PH added test for realpath()
102
102
# 2022-12-10 PH added support for pcre2posix_test
103
103
# 2023-01-15 Carlo added C99 as the minimum required
104
+ # 2023-06-03 Theodore used standard CMake constructs to export the library's targets.
104
105
105
106
# Increased minimum to 3.3 to support visibility.
106
107
CMAKE_MINIMUM_REQUIRED (VERSION 3.3)
@@ -141,6 +142,7 @@ INCLUDE(CheckFunctionExists)
141
142
INCLUDE (CheckSymbolExists)
142
143
INCLUDE (CheckIncludeFile)
143
144
INCLUDE (CheckTypeSize)
145
+ INCLUDE (CMakePackageConfigHelpers)
144
146
INCLUDE (GNUInstallDirs) # for CMAKE_INSTALL_LIBDIR
145
147
146
148
CHECK_INCLUDE_FILE(dirent.h HAVE_DIRENT_H)
@@ -722,28 +724,32 @@ SET(targets)
722
724
723
725
IF (PCRE2_BUILD_PCRE2_8)
724
726
IF (BUILD_STATIC_LIBS)
725
- ADD_LIBRARY (pcre2-8-static STATIC ${PCRE2_HEADERS} ${ PCRE2_SOURCES} ${PROJECT_BINARY_DIR} /config.h )
727
+ ADD_LIBRARY (pcre2-8-static STATIC ${PCRE2_SOURCES} )
726
728
SET_TARGET_PROPERTIES (pcre2-8-static PROPERTIES
727
729
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
728
730
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION} "
729
731
MACHO_CURRENT_VERSION "${LIBPCRE2_8_MACHO_CURRENT_VERSION} "
730
732
VERSION ${LIBPCRE2_8_VERSION}
731
733
SOVERSION ${LIBPCRE2_8_SOVERSION} )
732
734
TARGET_COMPILE_DEFINITIONS (pcre2-8-static PUBLIC PCRE2_STATIC)
733
- TARGET_INCLUDE_DIRECTORIES (pcre2-8-static PUBLIC ${PROJECT_BINARY_DIR} )
735
+ TARGET_INCLUDE_DIRECTORIES (pcre2-8-static PUBLIC
736
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
737
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
734
738
IF (REQUIRE_PTHREAD)
735
739
TARGET_LINK_LIBRARIES (pcre2-8-static Threads::Threads)
736
740
ENDIF (REQUIRE_PTHREAD)
737
741
SET (targets ${targets} pcre2-8-static )
738
- ADD_LIBRARY (pcre2-posix-static STATIC ${PCRE2POSIX_HEADERS} ${ PCRE2POSIX_SOURCES} )
742
+ ADD_LIBRARY (pcre2-posix-static STATIC ${PCRE2POSIX_SOURCES} )
739
743
SET_TARGET_PROPERTIES (pcre2-posix-static PROPERTIES
740
744
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
741
745
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION} "
742
746
MACHO_CURRENT_VERSION "${LIBPCRE2_POSIX_MACHO_CURRENT_VERSION} "
743
747
VERSION ${LIBPCRE2_POSIX_VERSION}
744
748
SOVERSION ${LIBPCRE2_POSIX_SOVERSION} )
745
749
TARGET_LINK_LIBRARIES (pcre2-posix-static pcre2-8-static )
746
- TARGET_INCLUDE_DIRECTORIES (pcre2-posix-static PUBLIC ${PROJECT_BINARY_DIR} )
750
+ TARGET_INCLUDE_DIRECTORIES (pcre2-posix-static PUBLIC
751
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
752
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
747
753
SET (targets ${targets} pcre2-posix-static )
748
754
749
755
IF (MSVC )
@@ -759,8 +765,10 @@ IF(PCRE2_BUILD_PCRE2_8)
759
765
ENDIF (BUILD_STATIC_LIBS)
760
766
761
767
IF (BUILD_SHARED_LIBS )
762
- ADD_LIBRARY (pcre2-8-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR} /config.h)
763
- TARGET_INCLUDE_DIRECTORIES (pcre2-8-shared PUBLIC ${PROJECT_BINARY_DIR} )
768
+ ADD_LIBRARY (pcre2-8-shared SHARED ${PCRE2_SOURCES} )
769
+ TARGET_INCLUDE_DIRECTORIES (pcre2-8-shared PUBLIC
770
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
771
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
764
772
SET_TARGET_PROPERTIES (pcre2-8-shared PROPERTIES
765
773
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
766
774
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION} "
@@ -773,8 +781,10 @@ IF(PCRE2_BUILD_PCRE2_8)
773
781
ENDIF (REQUIRE_PTHREAD)
774
782
SET (targets ${targets} pcre2-8-shared)
775
783
776
- ADD_LIBRARY (pcre2-posix-shared SHARED ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES} )
777
- TARGET_INCLUDE_DIRECTORIES (pcre2-posix-shared PUBLIC ${PROJECT_BINARY_DIR} )
784
+ ADD_LIBRARY (pcre2-posix-shared SHARED ${PCRE2POSIX_SOURCES} )
785
+ TARGET_INCLUDE_DIRECTORIES (pcre2-posix-shared PUBLIC
786
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
787
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
778
788
SET_TARGET_PROPERTIES (pcre2-posix-shared PROPERTIES
779
789
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
780
790
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION} "
@@ -811,8 +821,10 @@ ENDIF(PCRE2_BUILD_PCRE2_8)
811
821
812
822
IF (PCRE2_BUILD_PCRE2_16)
813
823
IF (BUILD_STATIC_LIBS)
814
- ADD_LIBRARY (pcre2-16-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR} /config.h)
815
- TARGET_INCLUDE_DIRECTORIES (pcre2-16-static PUBLIC ${PROJECT_BINARY_DIR} )
824
+ ADD_LIBRARY (pcre2-16-static STATIC ${PCRE2_SOURCES} )
825
+ TARGET_INCLUDE_DIRECTORIES (pcre2-16-static PUBLIC
826
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
827
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
816
828
SET_TARGET_PROPERTIES (pcre2-16-static PROPERTIES
817
829
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
818
830
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION} "
@@ -836,8 +848,10 @@ IF(PCRE2_BUILD_PCRE2_16)
836
848
ENDIF (BUILD_STATIC_LIBS)
837
849
838
850
IF (BUILD_SHARED_LIBS )
839
- ADD_LIBRARY (pcre2-16-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR} /config.h)
840
- TARGET_INCLUDE_DIRECTORIES (pcre2-16-shared PUBLIC ${PROJECT_BINARY_DIR} )
851
+ ADD_LIBRARY (pcre2-16-shared SHARED ${PCRE2_SOURCES} )
852
+ TARGET_INCLUDE_DIRECTORIES (pcre2-16-shared PUBLIC
853
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
854
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
841
855
SET_TARGET_PROPERTIES (pcre2-16-shared PROPERTIES
842
856
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
843
857
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION} "
@@ -873,8 +887,10 @@ ENDIF(PCRE2_BUILD_PCRE2_16)
873
887
874
888
IF (PCRE2_BUILD_PCRE2_32)
875
889
IF (BUILD_STATIC_LIBS)
876
- ADD_LIBRARY (pcre2-32-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR} /config.h)
877
- TARGET_INCLUDE_DIRECTORIES (pcre2-32-static PUBLIC ${PROJECT_BINARY_DIR} )
890
+ ADD_LIBRARY (pcre2-32-static STATIC ${PCRE2_SOURCES} )
891
+ TARGET_INCLUDE_DIRECTORIES (pcre2-32-static PUBLIC
892
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
893
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
878
894
SET_TARGET_PROPERTIES (pcre2-32-static PROPERTIES
879
895
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
880
896
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION} "
@@ -898,8 +914,10 @@ IF(PCRE2_BUILD_PCRE2_32)
898
914
ENDIF (BUILD_STATIC_LIBS)
899
915
900
916
IF (BUILD_SHARED_LIBS )
901
- ADD_LIBRARY (pcre2-32-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR} /config.h)
902
- TARGET_INCLUDE_DIRECTORIES (pcre2-32-shared PUBLIC ${PROJECT_BINARY_DIR} )
917
+ ADD_LIBRARY (pcre2-32-shared SHARED ${PCRE2_SOURCES} )
918
+ TARGET_INCLUDE_DIRECTORIES (pcre2-32-shared PUBLIC
919
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
920
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
903
921
SET_TARGET_PROPERTIES (pcre2-32-shared PROPERTIES
904
922
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
905
923
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION} "
@@ -956,7 +974,6 @@ IF(PCRE2_BUILD_TESTS)
956
974
ENDIF (MSVC )
957
975
958
976
ADD_EXECUTABLE (pcre2test ${PCRE2TEST_SOURCES} )
959
- SET (targets ${targets} pcre2test)
960
977
IF (PCRE2_BUILD_PCRE2_8)
961
978
LIST (APPEND PCRE2TEST_LIBS pcre2-posix pcre2-8)
962
979
ENDIF (PCRE2_BUILD_PCRE2_8)
@@ -970,13 +987,11 @@ IF(PCRE2_BUILD_TESTS)
970
987
971
988
IF (PCRE2_BUILD_PCRE2_8)
972
989
ADD_EXECUTABLE (pcre2posix_test src/pcre2posix_test.c)
973
- SET (targets ${targets} pcre2posix_test)
974
990
TARGET_LINK_LIBRARIES (pcre2posix_test pcre2-posix pcre2-8)
975
991
ENDIF (PCRE2_BUILD_PCRE2_8)
976
992
977
993
IF (PCRE2_SUPPORT_JIT)
978
994
ADD_EXECUTABLE (pcre2_jit_test src/pcre2_jit_test.c)
979
- SET (targets ${targets} pcre2_jit_test)
980
995
SET (PCRE2_JIT_TEST_LIBS)
981
996
IF (PCRE2_BUILD_PCRE2_8)
982
997
LIST (APPEND PCRE2_JIT_TEST_LIBS pcre2-8)
@@ -1099,11 +1114,17 @@ ENDIF(PCRE2_BUILD_TESTS)
1099
1114
# Installation
1100
1115
1101
1116
SET (CMAKE_INSTALL_ALWAYS 1)
1117
+ set (TARGETS_EXPORT_NAME pcre2-targets)
1102
1118
1103
1119
INSTALL (TARGETS ${targets}
1104
- RUNTIME DESTINATION bin
1120
+ EXPORT ${TARGETS_EXPORT_NAME}
1121
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
1105
1122
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1106
1123
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
1124
+ INSTALL (EXPORT ${TARGETS_EXPORT_NAME}
1125
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/pcre2
1126
+ NAMESPACE pcre2::
1127
+ FILE ${TARGETS_EXPORT_NAME} .cmake)
1107
1128
INSTALL (FILES ${pkg_config_files} DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
1108
1129
INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR} /pcre2-config"
1109
1130
DESTINATION bin
@@ -1115,11 +1136,12 @@ INSTALL(FILES ${PCRE2_HEADERS} ${PCRE2POSIX_HEADERS} DESTINATION include)
1115
1136
# CMake config files.
1116
1137
set (PCRE2_CONFIG_IN ${CMAKE_CURRENT_SOURCE_DIR} /cmake/pcre2-config.cmake.in)
1117
1138
set (PCRE2_CONFIG_OUT ${CMAKE_CURRENT_BINARY_DIR} /cmake/pcre2-config.cmake)
1118
- configure_file (${PCRE2_CONFIG_IN} ${PCRE2_CONFIG_OUT} @ONLY)
1119
- set (PCRE2_CONFIG_VERSION_IN ${CMAKE_CURRENT_SOURCE_DIR} /cmake/pcre2-config-version .cmake.in)
1139
+ configure_package_config_file(${PCRE2_CONFIG_IN} ${PCRE2_CONFIG_OUT} INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/pcre2)
1120
1140
set (PCRE2_CONFIG_VERSION_OUT ${CMAKE_CURRENT_BINARY_DIR} /cmake/pcre2-config-version .cmake)
1121
- configure_file (${PCRE2_CONFIG_VERSION_IN} ${PCRE2_CONFIG_VERSION_OUT} @ONLY)
1122
- install (FILES ${PCRE2_CONFIG_OUT} ${PCRE2_CONFIG_VERSION_OUT} DESTINATION cmake)
1141
+ write_basic_package_version_file(${PCRE2_CONFIG_VERSION_OUT}
1142
+ VERSION ${PCRE2_MAJOR} .${PCRE2_MINOR} .0
1143
+ COMPATIBILITY SameMajorVersion)
1144
+ install (FILES ${PCRE2_CONFIG_OUT} ${PCRE2_CONFIG_VERSION_OUT} DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/pcre2)
1123
1145
1124
1146
FILE (GLOB html ${PROJECT_SOURCE_DIR} /doc /html/*.html)
1125
1147
FILE (GLOB man1 ${PROJECT_SOURCE_DIR} /doc /*.1)
0 commit comments