Add support for pkgconfig etc and versioning to CMake builds.
This commit is contained in:
parent
d4e4533240
commit
b940ed7520
|
@ -88,6 +88,8 @@
|
||||||
# 2020-03-24 PH changed CMAKE_MODULE_PATH definition to add, not replace
|
# 2020-03-24 PH changed CMAKE_MODULE_PATH definition to add, not replace
|
||||||
# 2020-04-08 Carlo added function check for secure_getenv, fixed strerror
|
# 2020-04-08 Carlo added function check for secure_getenv, fixed strerror
|
||||||
# 2020-04-16 enh added check for __attribute__((uninitialized))
|
# 2020-04-16 enh added check for __attribute__((uninitialized))
|
||||||
|
# 2020=04-25 PH applied patches from Uwe Korn to support pkg-config and
|
||||||
|
# library versioning.
|
||||||
|
|
||||||
PROJECT(PCRE2 C)
|
PROJECT(PCRE2 C)
|
||||||
|
|
||||||
|
@ -417,12 +419,13 @@ file(STRINGS ${PROJECT_SOURCE_DIR}/configure.ac
|
||||||
LIMIT_COUNT 50 # Read only the first 50 lines of the file
|
LIMIT_COUNT 50 # Read only the first 50 lines of the file
|
||||||
)
|
)
|
||||||
|
|
||||||
set(SEARCHED_VARIABLES "pcre2_major" "pcre2_minor" "pcre2_prerelease" "pcre2_date")
|
set(SEARCHED_VARIABLES "pcre2_major" "pcre2_minor" "pcre2_prerelease" "pcre2_date"
|
||||||
|
"libpcre2_posix_version" "libpcre2_8_version" "libpcre2_16_version" "libpcre2_32_version")
|
||||||
foreach(configure_line ${configure_lines})
|
foreach(configure_line ${configure_lines})
|
||||||
foreach(_substitution_variable ${SEARCHED_VARIABLES})
|
foreach(_substitution_variable ${SEARCHED_VARIABLES})
|
||||||
string(TOUPPER ${_substitution_variable} _substitution_variable_upper)
|
string(TOUPPER ${_substitution_variable} _substitution_variable_upper)
|
||||||
if (NOT ${_substitution_variable_upper})
|
if (NOT ${_substitution_variable_upper})
|
||||||
string(REGEX MATCH "m4_define\\(${_substitution_variable}, \\[(.*)\\]" MACTHED_STRING ${configure_line})
|
string(REGEX MATCH "m4_define\\(${_substitution_variable}, *\\[(.*)\\]" MACTHED_STRING ${configure_line})
|
||||||
if (CMAKE_MATCH_1)
|
if (CMAKE_MATCH_1)
|
||||||
set(${_substitution_variable_upper} ${CMAKE_MATCH_1})
|
set(${_substitution_variable_upper} ${CMAKE_MATCH_1})
|
||||||
endif()
|
endif()
|
||||||
|
@ -430,11 +433,64 @@ foreach(configure_line ${configure_lines})
|
||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
macro(PARSE_LIB_VERSION VARIABLE_PREFIX)
|
||||||
|
string(REPLACE ":" ";" ${VARIABLE_PREFIX}_VERSION_LIST ${${VARIABLE_PREFIX}_VERSION})
|
||||||
|
list(GET ${VARIABLE_PREFIX}_VERSION_LIST 0 ${VARIABLE_PREFIX}_VERSION_CURRENT)
|
||||||
|
list(GET ${VARIABLE_PREFIX}_VERSION_LIST 1 ${VARIABLE_PREFIX}_VERSION_REVISION)
|
||||||
|
list(GET ${VARIABLE_PREFIX}_VERSION_LIST 2 ${VARIABLE_PREFIX}_VERSION_AGE)
|
||||||
|
|
||||||
|
math(EXPR ${VARIABLE_PREFIX}_SOVERSION "${${VARIABLE_PREFIX}_VERSION_CURRENT} - ${${VARIABLE_PREFIX}_VERSION_AGE}")
|
||||||
|
math(EXPR ${VARIABLE_PREFIX}_MACHO_COMPATIBILITY_VERSION "${${VARIABLE_PREFIX}_VERSION_CURRENT} + 1")
|
||||||
|
math(EXPR ${VARIABLE_PREFIX}_MACHO_CURRENT_VERSION "${${VARIABLE_PREFIX}_VERSION_CURRENT} + 1")
|
||||||
|
set(${VARIABLE_PREFIX}_MACHO_CURRENT_VERSION "${${VARIABLE_PREFIX}_MACHO_CURRENT_VERSION}.${${VARIABLE_PREFIX}_VERSION_REVISION}}")
|
||||||
|
set(${VARIABLE_PREFIX}_VERSION "${${VARIABLE_PREFIX}_SOVERSION}.${${VARIABLE_PREFIX}_VERSION_AGE}.${${VARIABLE_PREFIX}_VERSION_REVISION}")
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
PARSE_LIB_VERSION(LIBPCRE2_POSIX)
|
||||||
|
PARSE_LIB_VERSION(LIBPCRE2_8)
|
||||||
|
PARSE_LIB_VERSION(LIBPCRE2_16)
|
||||||
|
PARSE_LIB_VERSION(LIBPCRE2_32)
|
||||||
|
|
||||||
CONFIGURE_FILE(src/pcre2.h.in
|
CONFIGURE_FILE(src/pcre2.h.in
|
||||||
${PROJECT_BINARY_DIR}/pcre2.h
|
${PROJECT_BINARY_DIR}/pcre2.h
|
||||||
@ONLY)
|
@ONLY)
|
||||||
|
|
||||||
# What about pcre2-config and libpcre2.pc?
|
# Generate pkg-config files
|
||||||
|
|
||||||
|
SET(PACKAGE_VERSION "${PCRE2_MAJOR}.${PCRE2_MINOR}")
|
||||||
|
SET(prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
|
||||||
|
SET(exec_prefix "\${prefix}")
|
||||||
|
SET(libdir "\${exec_prefix}/lib")
|
||||||
|
SET(includedir "\${prefix}/include")
|
||||||
|
CONFIGURE_FILE(libpcre2-posix.pc.in libpcre2-posix.pc @ONLY)
|
||||||
|
SET(pkg_config_files ${pkg_config_files} "${CMAKE_CURRENT_BINARY_DIR}/libpcre2-posix.pc")
|
||||||
|
|
||||||
|
IF(PCRE2_BUILD_PCRE2_8)
|
||||||
|
CONFIGURE_FILE(libpcre2-8.pc.in libpcre2-8.pc @ONLY)
|
||||||
|
SET(pkg_config_files ${pkg_config_files} "${CMAKE_CURRENT_BINARY_DIR}/libpcre2-8.pc")
|
||||||
|
SET(enable_pcre2_8 "yes")
|
||||||
|
ELSE()
|
||||||
|
SET(enable_pcre2_8 "no")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(PCRE2_BUILD_PCRE2_16)
|
||||||
|
CONFIGURE_FILE(libpcre2-16.pc.in libpcre2-16.pc @ONLY)
|
||||||
|
SET(pkg_config_files ${pkg_config_files} "${CMAKE_CURRENT_BINARY_DIR}/libpcre2-16.pc")
|
||||||
|
SET(enable_pcre2_16 "yes")
|
||||||
|
ELSE()
|
||||||
|
SET(enable_pcre2_16 "no")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(PCRE2_BUILD_PCRE2_32)
|
||||||
|
CONFIGURE_FILE(libpcre2-32.pc.in libpcre2-32.pc @ONLY)
|
||||||
|
SET(pkg_config_files ${pkg_config_files} "${CMAKE_CURRENT_BINARY_DIR}/libpcre2-32.pc")
|
||||||
|
SET(enable_pcre2_32 "yes")
|
||||||
|
ELSE()
|
||||||
|
SET(enable_pcre2_32 "no")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
CONFIGURE_FILE(pcre2-config.in pcre2-config @ONLY)
|
||||||
|
|
||||||
# Character table generation
|
# Character table generation
|
||||||
|
|
||||||
|
@ -558,12 +614,20 @@ SET(targets)
|
||||||
|
|
||||||
IF(PCRE2_BUILD_PCRE2_8)
|
IF(PCRE2_BUILD_PCRE2_8)
|
||||||
ADD_LIBRARY(pcre2-8 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
|
ADD_LIBRARY(pcre2-8 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
|
||||||
SET_PROPERTY(TARGET pcre2-8
|
SET_TARGET_PROPERTIES(pcre2-8 PROPERTIES
|
||||||
PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8)
|
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
|
||||||
|
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION}"
|
||||||
|
MACHO_CURRENT_VERSION "${LIBPCRE2_8_MACHO_CURRENT_VERSION}"
|
||||||
|
VERSION ${LIBPCRE2_8_VERSION}
|
||||||
|
SOVERSION ${LIBPCRE2_8_SOVERSION})
|
||||||
SET(targets ${targets} pcre2-8)
|
SET(targets ${targets} pcre2-8)
|
||||||
ADD_LIBRARY(pcre2-posix ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})
|
ADD_LIBRARY(pcre2-posix ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})
|
||||||
SET_PROPERTY(TARGET pcre2-posix
|
SET_TARGET_PROPERTIES(pcre2-posix PROPERTIES
|
||||||
PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8)
|
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8
|
||||||
|
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION}"
|
||||||
|
MACHO_CURRENT_VERSION "${LIBPCRE2_POSIX_MACHO_CURRENT_VERSION}"
|
||||||
|
VERSION ${LIBPCRE2_POSIX_VERSION}
|
||||||
|
SOVERSION ${LIBPCRE2_POSIX_SOVERSION})
|
||||||
SET(targets ${targets} pcre2-posix)
|
SET(targets ${targets} pcre2-posix)
|
||||||
TARGET_LINK_LIBRARIES(pcre2-posix pcre2-8)
|
TARGET_LINK_LIBRARIES(pcre2-posix pcre2-8)
|
||||||
|
|
||||||
|
@ -581,8 +645,12 @@ ENDIF(PCRE2_BUILD_PCRE2_8)
|
||||||
|
|
||||||
IF(PCRE2_BUILD_PCRE2_16)
|
IF(PCRE2_BUILD_PCRE2_16)
|
||||||
ADD_LIBRARY(pcre2-16 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
|
ADD_LIBRARY(pcre2-16 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
|
||||||
SET_PROPERTY(TARGET pcre2-16
|
SET_TARGET_PROPERTIES(pcre2-16 PROPERTIES
|
||||||
PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16)
|
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16
|
||||||
|
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
|
||||||
|
MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION}"
|
||||||
|
VERSION ${LIBPCRE2_16_VERSION}
|
||||||
|
SOVERSION ${LIBPCRE2_16_SOVERSION})
|
||||||
SET(targets ${targets} pcre2-16)
|
SET(targets ${targets} pcre2-16)
|
||||||
|
|
||||||
IF(MINGW AND NOT PCRE2_STATIC)
|
IF(MINGW AND NOT PCRE2_STATIC)
|
||||||
|
@ -599,8 +667,12 @@ ENDIF(PCRE2_BUILD_PCRE2_16)
|
||||||
|
|
||||||
IF(PCRE2_BUILD_PCRE2_32)
|
IF(PCRE2_BUILD_PCRE2_32)
|
||||||
ADD_LIBRARY(pcre2-32 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
|
ADD_LIBRARY(pcre2-32 ${PCRE2_HEADERS} ${PCRE2_SOURCES} ${PROJECT_BINARY_DIR}/config.h)
|
||||||
SET_PROPERTY(TARGET pcre2-32
|
SET_TARGET_PROPERTIES(pcre2-32 PROPERTIES
|
||||||
PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32)
|
COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32
|
||||||
|
MACHO_COMPATIBILITY_VERSION "${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}"
|
||||||
|
MACHO_CURRENT_VERSION "${LIBPCRE2_32_MACHO_CURRENT_VERSION}"
|
||||||
|
VERSION ${LIBPCRE2_32_VERSION}
|
||||||
|
SOVERSION ${LIBPCRE2_32_SOVERSION})
|
||||||
SET(targets ${targets} pcre2-32)
|
SET(targets ${targets} pcre2-32)
|
||||||
|
|
||||||
IF(MINGW AND NOT PCRE2_STATIC)
|
IF(MINGW AND NOT PCRE2_STATIC)
|
||||||
|
@ -773,6 +845,11 @@ INSTALL(TARGETS ${targets}
|
||||||
RUNTIME DESTINATION bin
|
RUNTIME DESTINATION bin
|
||||||
LIBRARY DESTINATION lib
|
LIBRARY DESTINATION lib
|
||||||
ARCHIVE DESTINATION lib)
|
ARCHIVE DESTINATION lib)
|
||||||
|
INSTALL(FILES ${pkg_config_files} DESTINATION lib/pkgconfig)
|
||||||
|
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pcre2-config"
|
||||||
|
DESTINATION bin
|
||||||
|
# Set 0755 permissions
|
||||||
|
PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
||||||
|
|
||||||
INSTALL(FILES ${PCRE2_HEADERS} ${PCRE2POSIX_HEADERS} DESTINATION include)
|
INSTALL(FILES ${PCRE2_HEADERS} ${PCRE2POSIX_HEADERS} DESTINATION include)
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,10 @@ stack_frames_vector[] in pcre2_match(). When implemented, this disables
|
||||||
automatic initialization (a facility in clang), which can take time on big
|
automatic initialization (a facility in clang), which can take time on big
|
||||||
variables.
|
variables.
|
||||||
|
|
||||||
|
27. Updated CMakeLists.txt (patches by Uwe Korn) to add support for
|
||||||
|
pcre2-config, the libpcre*.pc files, SOVERSION, VERSION and the
|
||||||
|
MACHO_*_VERSIONS settings for CMake builds.
|
||||||
|
|
||||||
|
|
||||||
Version 10.34 21-November-2019
|
Version 10.34 21-November-2019
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
|
@ -13,15 +13,15 @@ m4_define(pcre2_minor, [35])
|
||||||
m4_define(pcre2_prerelease, [-RC2])
|
m4_define(pcre2_prerelease, [-RC2])
|
||||||
m4_define(pcre2_date, [2020-04-15])
|
m4_define(pcre2_date, [2020-04-15])
|
||||||
|
|
||||||
# NOTE: The CMakeLists.txt file searches for the above variables in the first
|
|
||||||
# 50 lines of this file. Please update that if the variables above are moved.
|
|
||||||
|
|
||||||
# Libtool shared library interface versions (current:revision:age)
|
# Libtool shared library interface versions (current:revision:age)
|
||||||
m4_define(libpcre2_8_version, [10:0:10])
|
m4_define(libpcre2_8_version, [10:0:10])
|
||||||
m4_define(libpcre2_16_version, [10:0:10])
|
m4_define(libpcre2_16_version, [10:0:10])
|
||||||
m4_define(libpcre2_32_version, [10:0:10])
|
m4_define(libpcre2_32_version, [10:0:10])
|
||||||
m4_define(libpcre2_posix_version, [2:3:0])
|
m4_define(libpcre2_posix_version, [2:3:0])
|
||||||
|
|
||||||
|
# NOTE: The CMakeLists.txt file searches for the above variables in the first
|
||||||
|
# 50 lines of this file. Please update that if the variables above are moved.
|
||||||
|
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
AC_INIT(PCRE2, pcre2_major.pcre2_minor[]pcre2_prerelease, , pcre2)
|
AC_INIT(PCRE2, pcre2_major.pcre2_minor[]pcre2_prerelease, , pcre2)
|
||||||
AC_CONFIG_SRCDIR([src/pcre2.h.in])
|
AC_CONFIG_SRCDIR([src/pcre2.h.in])
|
||||||
|
|
Loading…
Reference in New Issue