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,34 @@ 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
730
+ PUBLIC_HEADER ${PCRE2_HEADERS}
728
731
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION} "
729
732
MACHO_CURRENT_VERSION "${LIBPCRE2_8_MACHO_CURRENT_VERSION} "
730
733
VERSION ${LIBPCRE2_8_VERSION}
731
734
SOVERSION ${LIBPCRE2_8_SOVERSION} )
732
735
TARGET_COMPILE_DEFINITIONS (pcre2-8-static PUBLIC PCRE2_STATIC)
733
- TARGET_INCLUDE_DIRECTORIES (pcre2-8-static PUBLIC ${PROJECT_BINARY_DIR} )
736
+ TARGET_INCLUDE_DIRECTORIES (pcre2-8-static PUBLIC
737
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
738
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
734
739
IF (REQUIRE_PTHREAD)
735
740
TARGET_LINK_LIBRARIES (pcre2-8-static Threads::Threads)
736
741
ENDIF (REQUIRE_PTHREAD)
737
742
SET (targets ${targets} pcre2-8-static )
738
- ADD_LIBRARY (pcre2-posix-static STATIC ${PCRE2POSIX_HEADERS} ${ PCRE2POSIX_SOURCES} )
743
+ ADD_LIBRARY (pcre2-posix-static STATIC ${PCRE2POSIX_SOURCES} )
739
744
SET_TARGET_PROPERTIES (pcre2-posix-static PROPERTIES
740
745
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
746
+ PUBLIC_HEADER ${PCRE2POSIX_HEADERS}
741
747
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION} "
742
748
MACHO_CURRENT_VERSION "${LIBPCRE2_POSIX_MACHO_CURRENT_VERSION} "
743
749
VERSION ${LIBPCRE2_POSIX_VERSION}
744
750
SOVERSION ${LIBPCRE2_POSIX_SOVERSION} )
745
751
TARGET_LINK_LIBRARIES (pcre2-posix-static pcre2-8-static )
746
- TARGET_INCLUDE_DIRECTORIES (pcre2-posix-static PUBLIC ${PROJECT_BINARY_DIR} )
752
+ TARGET_INCLUDE_DIRECTORIES (pcre2-posix-static PUBLIC
753
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
754
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
747
755
SET (targets ${targets} pcre2-posix-static )
748
756
749
757
IF (MSVC )
@@ -759,10 +767,13 @@ IF(PCRE2_BUILD_PCRE2_8)
759
767
ENDIF (BUILD_STATIC_LIBS)
760
768
761
769
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} )
770
+ ADD_LIBRARY (pcre2-8-shared SHARED ${PCRE2_SOURCES} )
771
+ TARGET_INCLUDE_DIRECTORIES (pcre2-8-shared PUBLIC
772
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
773
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
764
774
SET_TARGET_PROPERTIES (pcre2-8-shared PROPERTIES
765
775
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
776
+ PUBLIC_HEADER ${PCRE2_HEADERS}
766
777
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION} "
767
778
MACHO_CURRENT_VERSION "${LIBPCRE2_8_MACHO_CURRENT_VERSION} "
768
779
VERSION ${LIBPCRE2_8_VERSION}
@@ -773,10 +784,13 @@ IF(PCRE2_BUILD_PCRE2_8)
773
784
ENDIF (REQUIRE_PTHREAD)
774
785
SET (targets ${targets} pcre2-8-shared)
775
786
776
- ADD_LIBRARY (pcre2-posix-shared SHARED ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES} )
777
- TARGET_INCLUDE_DIRECTORIES (pcre2-posix-shared PUBLIC ${PROJECT_BINARY_DIR} )
787
+ ADD_LIBRARY (pcre2-posix-shared SHARED ${PCRE2POSIX_SOURCES} )
788
+ TARGET_INCLUDE_DIRECTORIES (pcre2-posix-shared PUBLIC
789
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
790
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
778
791
SET_TARGET_PROPERTIES (pcre2-posix-shared PROPERTIES
779
792
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
793
+ PUBLIC_HEADER ${PCRE2POSIX_HEADERS}
780
794
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION} "
781
795
MACHO_CURRENT_VERSION "${LIBPCRE2_POSIX_MACHO_CURRENT_VERSION} "
782
796
VERSION ${LIBPCRE2_POSIX_VERSION}
@@ -811,10 +825,13 @@ ENDIF(PCRE2_BUILD_PCRE2_8)
811
825
812
826
IF (PCRE2_BUILD_PCRE2_16)
813
827
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} )
828
+ ADD_LIBRARY (pcre2-16-static STATIC ${PCRE2_SOURCES} )
829
+ TARGET_INCLUDE_DIRECTORIES (pcre2-16-static PUBLIC
830
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
831
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
816
832
SET_TARGET_PROPERTIES (pcre2-16-static PROPERTIES
817
833
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
834
+ PUBLIC_HEADER ${PCRE2_HEADERS}
818
835
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION} "
819
836
MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION} "
820
837
VERSION ${LIBPCRE2_16_VERSION}
@@ -836,10 +853,13 @@ IF(PCRE2_BUILD_PCRE2_16)
836
853
ENDIF (BUILD_STATIC_LIBS)
837
854
838
855
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} )
856
+ ADD_LIBRARY (pcre2-16-shared SHARED ${PCRE2_SOURCES} )
857
+ TARGET_INCLUDE_DIRECTORIES (pcre2-16-shared PUBLIC
858
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
859
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
841
860
SET_TARGET_PROPERTIES (pcre2-16-shared PROPERTIES
842
861
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
862
+ PUBLIC_HEADER ${PCRE2_HEADERS}
843
863
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION} "
844
864
MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION} "
845
865
VERSION ${LIBPCRE2_16_VERSION}
@@ -873,10 +893,13 @@ ENDIF(PCRE2_BUILD_PCRE2_16)
873
893
874
894
IF (PCRE2_BUILD_PCRE2_32)
875
895
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} )
896
+ ADD_LIBRARY (pcre2-32-static STATIC ${PCRE2_SOURCES} )
897
+ TARGET_INCLUDE_DIRECTORIES (pcre2-32-static PUBLIC
898
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
899
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
878
900
SET_TARGET_PROPERTIES (pcre2-32-static PROPERTIES
879
901
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
902
+ PUBLIC_HEADER ${PCRE2_HEADERS}
880
903
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION} "
881
904
MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION} "
882
905
VERSION ${LIBPCRE2_32_VERSION}
@@ -898,10 +921,13 @@ IF(PCRE2_BUILD_PCRE2_32)
898
921
ENDIF (BUILD_STATIC_LIBS)
899
922
900
923
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} )
924
+ ADD_LIBRARY (pcre2-32-shared SHARED ${PCRE2_SOURCES} )
925
+ TARGET_INCLUDE_DIRECTORIES (pcre2-32-shared PUBLIC
926
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
927
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >)
903
928
SET_TARGET_PROPERTIES (pcre2-32-shared PROPERTIES
904
929
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
930
+ PUBLIC_HEADER ${PCRE2_HEADERS}
905
931
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION} "
906
932
MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION} "
907
933
VERSION ${LIBPCRE2_32_VERSION}
@@ -1099,27 +1125,33 @@ ENDIF(PCRE2_BUILD_TESTS)
1099
1125
# Installation
1100
1126
1101
1127
SET (CMAKE_INSTALL_ALWAYS 1)
1128
+ set (TARGETS_EXPORT_NAME pcre2-targets)
1102
1129
1103
1130
INSTALL (TARGETS ${targets}
1104
- RUNTIME DESTINATION bin
1131
+ EXPORT ${TARGETS_EXPORT_NAME}
1132
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1133
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
1105
1134
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1106
1135
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
1136
+ INSTALL (EXPORT ${TARGETS_EXPORT_NAME}
1137
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/pcre2
1138
+ NAMESPACE pcre2::
1139
+ FILE pcre2-targets.cmake)
1107
1140
INSTALL (FILES ${pkg_config_files} DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
1108
1141
INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR} /pcre2-config"
1109
1142
DESTINATION bin
1110
1143
# Set 0755 permissions
1111
1144
PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
1112
1145
1113
- INSTALL (FILES ${PCRE2_HEADERS} ${PCRE2POSIX_HEADERS} DESTINATION include )
1114
-
1115
1146
# CMake config files.
1116
1147
set (PCRE2_CONFIG_IN ${CMAKE_CURRENT_SOURCE_DIR} /cmake/pcre2-config.cmake.in)
1117
1148
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)
1149
+ configure_package_config_file(${PCRE2_CONFIG_IN} ${PCRE2_CONFIG_OUT} INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/pcre2)
1120
1150
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)
1151
+ write_basic_package_version_file(${PCRE2_CONFIG_VERSION_OUT}
1152
+ VERSION ${PCRE2_MAJOR} .${PCRE2_MINOR} .0
1153
+ COMPATIBILITY SameMajorVersion)
1154
+ install (FILES ${PCRE2_CONFIG_OUT} ${PCRE2_CONFIG_VERSION_OUT} DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/pcre2)
1123
1155
1124
1156
FILE (GLOB html ${PROJECT_SOURCE_DIR} /doc /html/*.html)
1125
1157
FILE (GLOB man1 ${PROJECT_SOURCE_DIR} /doc /*.1)
0 commit comments