diff --git a/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt b/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt index 1ecdd6500b5d4..41363c5625cc1 100644 --- a/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt +++ b/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt @@ -7,6 +7,7 @@ builtin_gl2ps=ON builtin_jpeg=ON builtin_lz4=ON builtin_lzma=ON +builtin_pcre=ON builtin_png=ON builtin_vdt=ON builtin_zlib=ON diff --git a/builtins/pcre/CMakeLists.txt b/builtins/pcre/CMakeLists.txt index 32248c1e9bd3d..08b655d864e5a 100644 --- a/builtins/pcre/CMakeLists.txt +++ b/builtins/pcre/CMakeLists.txt @@ -4,49 +4,59 @@ # For the licensing terms see $ROOTSYS/LICENSE. # For the list of contributors see $ROOTSYS/README/CREDITS. +# **PLEASE UPDATE ALSO THE FOLLOWING LINE WHEN UPDATING THE VERSION** +# 21 Oct 2025, https://github.com/PCRE2Project/pcre2/releases/tag/pcre2-10.47 +set(ROOT_PCRE2_VERSION 10.47) +set(ROOT_PCRE2_HASH "47fe8c99461250d42f89e6e8fdaeba9da057855d06eb7fc08d9ca03fd08d7bc7") + include(ExternalProject) -# Clear cache variables set by find_package(PCRE) +# Clear cache variables set by find_package(PCRE) and/or find_package(PCRE2) # to ensure that we use the builtin version -foreach(var PCRE_FOUND PCRE_VERSION PCRE_INCLUDE_DIR PCRE_PCRE_LIBRARY PCRE_LIBRARIES) +foreach(var PCRE_FOUND PCRE_VERSION PCRE_INCLUDE_DIR PCRE_PCRE_LIBRARY PCRE_LIBRARIES PCRE2_FOUND PCRE2_VERSION PCRE2_INCLUDE_DIR PCRE2_PCRE2_LIBRARY PCRE2_LIBRARIES) + unset(${var}) unset(${var} CACHE) endforeach() if(WIN32) if(CMAKE_GENERATOR MATCHES Ninja) if (CMAKE_BUILD_TYPE MATCHES Debug) - set(PCRE_POSTFIX d) + set(PCRE2_POSTFIX d) endif() else() if(winrtdebug) - set(PCRE_POSTFIX $<$:d>) - set(pcre_config_kind "Debug") + set(PCRE2_POSTFIX $<$:d>) + set(pcre2_config_kind "Debug") else() - set(pcre_config_kind "Release") + set(pcre2_config_kind "Release") endif() - set(pcre_config "--config ${pcre_config_kind}") + set(pcre2_config "--config ${pcre2_config_kind}") endif() endif() -set(PCRE_VERSION "8.43" CACHE INTERNAL "" FORCE) -set(PCRE_LIBNAME ${CMAKE_STATIC_LIBRARY_PREFIX}pcre${PCRE_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) +if(MSVC) + set(PCRE2_LIBNAME ${CMAKE_STATIC_LIBRARY_PREFIX}pcre2-8-static${PCRE2_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) +else() + set(PCRE2_LIBNAME ${CMAKE_STATIC_LIBRARY_PREFIX}pcre2-8${PCRE2_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) +endif() # build byproducts only needed by Ninja if("${CMAKE_GENERATOR}" STREQUAL "Ninja") - set(PCRE_BYPRODUCTS - /pcre.h - /${PCRE_LIBNAME} + set(PCRE2_BYPRODUCTS + /interface/pcre2.h + /${PCRE2_LIBNAME} ) endif() -ExternalProject_Add(PCRE - URL ${CMAKE_CURRENT_SOURCE_DIR}/pcre-${PCRE_VERSION}.tar.bz2 - URL_HASH SHA256=f1026a7f455b8ba726d6fff94d5f989e55ad55f7b4eb946938803ac2aa41743c +ExternalProject_Add(BUILTIN_PCRE + URL ${lcgpackages}/pcre2-${ROOT_PCRE2_VERSION}.tar.bz2 + URL_HASH SHA256=${ROOT_PCRE2_HASH} LOG_DOWNLOAD TRUE LOG_CONFIGURE TRUE LOG_BUILD TRUE LOG_INSTALL TRUE + LOG_OUTPUT_ON_FAILURE TRUE CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH= @@ -56,35 +66,35 @@ ExternalProject_Add(PCRE -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} -DCMAKE_BUILD_SHARED_LIBS:BOOL=FALSE -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE - -DCMAKE_POLICY_VERSION_MINIMUM:STRING=3.5 - -DPCRE_BUILD_TESTS:BOOL=FALSE + -DPCRE2_BUILD_TESTS:BOOL=FALSE BUILD_COMMAND - ${CMAKE_COMMAND} --build ${pcre_config} --target pcre + ${CMAKE_COMMAND} --build ${pcre2_config} --target pcre2-8-static BUILD_BYPRODUCTS - ${PCRE_BYPRODUCTS} + ${PCRE2_BYPRODUCTS} INSTALL_COMMAND "" TIMEOUT 600 ) -ExternalProject_Get_Property(PCRE BINARY_DIR) +ExternalProject_Get_Property(BUILTIN_PCRE BINARY_DIR) -set(PCRE_FOUND TRUE CACHE INTERNAL "" FORCE) -set(PCRE_INCLUDE_DIR "${BINARY_DIR}" CACHE INTERNAL "" FORCE) +set(ROOT_PCRE2_INCLUDE_DIR "${BINARY_DIR}/interface") if(WIN32) - set(PCRE_PCRE_LIBRARY "${BINARY_DIR}/${pcre_config_kind}/${PCRE_LIBNAME}" CACHE INTERNAL "" FORCE) + set(ROOT_PCRE2_LIBRARY "${BINARY_DIR}/${pcre2_config_kind}/${PCRE2_LIBNAME}") else() - set(PCRE_PCRE_LIBRARY "${BINARY_DIR}/${CMAKE_CFG_INTDIR}/${PCRE_LIBNAME}" CACHE INTERNAL "" FORCE) + set(ROOT_PCRE2_LIBRARY "${BINARY_DIR}/${CMAKE_CFG_INTDIR}/${PCRE2_LIBNAME}") endif() -set(PCRE_LIBRARIES "${PCRE_PCRE_LIBRARY}" CACHE INTERNAL "" FORCE) -set(PCRE_TARGET PCRE) -add_library(pcre_builtin INTERFACE) -target_include_directories(pcre_builtin INTERFACE $) -target_link_libraries(pcre_builtin INTERFACE $) -add_library(PCRE::PCRE ALIAS pcre_builtin) -add_dependencies(pcre_builtin PCRE) +add_library(pcre2_builtin INTERFACE) +target_include_directories(pcre2_builtin INTERFACE $) +target_link_libraries(pcre2_builtin INTERFACE $) +add_library(PCRE2::PCRE2 ALIAS pcre2_builtin) +add_dependencies(pcre2_builtin BUILTIN_PCRE) -set_property(GLOBAL APPEND PROPERTY ROOT_BUILTIN_TARGETS PCRE) +set_property(GLOBAL APPEND PROPERTY ROOT_BUILTIN_TARGETS BUILTIN_PCRE) +set(PCRE2_FOUND TRUE PARENT_SCOPE) +set(PCRE2_VERSION ${ROOT_PCRE2_VERSION} PARENT_SCOPE) +set(PCRE2_LIBRARIES ${ROOT_PCRE2_LIBRARY} PARENT_SCOPE) +set(PCRE2_INCLUDE_DIRS ${ROOT_PCRE2_INCLUDE_DIR} PARENT_SCOPE) diff --git a/builtins/pcre/pcre-8.43.tar.bz2 b/builtins/pcre/pcre-8.43.tar.bz2 deleted file mode 100644 index a4aa0621b2c56..0000000000000 Binary files a/builtins/pcre/pcre-8.43.tar.bz2 and /dev/null differ diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index ec812855ad905..31c545ae65fd0 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -274,21 +274,16 @@ if(NOT builtin_pcre) endforeach() find_package(PCRE2) if(NOT PCRE2_FOUND) - if(fail-on-missing) - find_package(PCRE REQUIRED) - else() - find_package(PCRE) - if(NOT PCRE_FOUND) - message(STATUS "PCRE not found. Switching on builtin_pcre option") - set(builtin_pcre ON CACHE BOOL "Enabled because PCRE not found (${builtin_pcre_description})" FORCE) - endif() + find_package(PCRE) + if(NOT PCRE_FOUND) + message(SEND_ERROR "PCRE2 required but not found. Install it on the system (preferred), or explicitly request the builtin version.") endif() endif() endif() if(builtin_pcre) - list(APPEND ROOT_BUILTINS PCRE) add_subdirectory(builtins/pcre) + list(APPEND ROOT_BUILTINS BUILTIN_PCRE) endif() #---Check for LZMA-------------------------------------------------------------------