diff options
Diffstat (limited to 'cmake/pcre.cmake')
-rw-r--r-- | cmake/pcre.cmake | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/cmake/pcre.cmake b/cmake/pcre.cmake index a3a845bf30f..34db34176d6 100644 --- a/cmake/pcre.cmake +++ b/cmake/pcre.cmake @@ -1,8 +1,50 @@ INCLUDE (CheckCSourceRuns) +INCLUDE (ExternalProject) SET(WITH_PCRE "auto" CACHE STRING "Which pcre to use (possible values are 'bundled', 'system', or 'auto')") +MACRO(BUNDLE_PCRE2) + SET(dir "${CMAKE_BINARY_DIR}/extra/pcre2") + SET(PCRE_INCLUDES ${dir}/src/pcre2-build ${dir}/src/pcre2/src) + SET(byproducts) + FOREACH(lib pcre2-posix pcre2-8) + ADD_LIBRARY(${lib} STATIC IMPORTED GLOBAL) + ADD_DEPENDENCIES(${lib} pcre2) + IF(WIN32) # same condition as in pcre2 CMakeLists.txt that adds "d" + SET(file ${dir}/src/pcre2-build/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}) + SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LOCATION_DEBUG ${dir}/src/pcre2-build/Debug/${lib}d.lib) + ELSE() + SET(file ${dir}/src/pcre2-build/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}) + SET(byproducts ${byproducts} BUILD_BYPRODUCTS ${file}) + ENDIF() + SET_TARGET_PROPERTIES(${lib} PROPERTIES IMPORTED_LOCATION ${file}) + ENDFOREACH() + FOREACH(v "" "_DEBUG" "_RELWITHDEBINFO" "_RELEASE" "_MINZISEREL") + STRING(REPLACE "/WX" "" pcre2_flags${v} "${CMAKE_C_FLAGS${v}}") + ENDFOREACH() + ExternalProject_Add( + pcre2 + PREFIX "${dir}" + URL "https://ftp.pcre.org/pub/pcre/pcre2-10.34.zip" + URL_MD5 fdb10dba7f3be43730966bebdd3755ef + INSTALL_COMMAND "" + CMAKE_ARGS + "-DPCRE2_BUILD_TESTS=OFF" + "-DPCRE2_BUILD_PCRE2GREP=OFF" + "-DBUILD_SHARED_LIBS=OFF" + "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" + "-DCMAKE_C_FLAGS=${pcre2_flags} ${PIC_FLAG}" + "-DCMAKE_C_FLAGS_DEBUG=${pcre2_flags_DEBUG}" + "-DCMAKE_C_FLAGS_RELWITHDEBINFO=${pcre2_flags_RELWITHDEBINFO}" + "-DCMAKE_C_FLAGS_RELEASE=${pcre2_flags_RELEASE}" + "-DCMAKE_C_FLAGS_MINSIZEREL=${pcre2_flags_MINSIZEREL}" + "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}" + ${byproducts} + ) +SET_TARGET_PROPERTIES(pcre2 PROPERTIES EXCLUDE_FROM_ALL TRUE) +ENDMACRO() + MACRO (CHECK_PCRE) IF(WITH_PCRE STREQUAL "system" OR WITH_PCRE STREQUAL "auto") CHECK_LIBRARY_EXISTS(pcre2-8 pcre2_match_8 "" HAVE_PCRE2) @@ -11,11 +53,7 @@ MACRO (CHECK_PCRE) IF (WITH_PCRE STREQUAL "system") MESSAGE(FATAL_ERROR "system pcre2-8 library is not found or unusable") ENDIF() - SET(PCRE_INCLUDES ${CMAKE_BINARY_DIR}/pcre2 ${CMAKE_SOURCE_DIR}/pcre2 - ${CMAKE_BINARY_DIR}/pcre2/src ${CMAKE_SOURCE_DIR}/pcre2/src) - SET(PCRE2_BUILD_TESTS OFF CACHE BOOL "Disable tests.") - SET(PCRE2_BUILD_PCRE2GREP OFF CACHE BOOL "Disable pcre2grep") - ADD_SUBDIRECTORY(pcre2) + BUNDLE_PCRE2() ENDIF() ENDMACRO() |