From adf8acbccd642c8bc62256fb5580795320364895 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 7 Aug 2025 15:38:11 +0100 Subject: [PATCH] add pcre build step if it's not found locally * Unfortunately the new upcoming debian has made the really poor decision to actively *delete* the pcre package, breaking any programs depending on it even at build time. As far as I can see it's still available in most other common distributions. * Users could easily build it themselves but would have to install it system wide for it to be picked up. This kind of dependency absolutely should not be something the build system has to set up itself but when distributions make poor choices we have little choice but to adapt somehow. --- qrenderdoc/CMakeLists.txt | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/qrenderdoc/CMakeLists.txt b/qrenderdoc/CMakeLists.txt index c7e9c7a0c..ef1234dd4 100644 --- a/qrenderdoc/CMakeLists.txt +++ b/qrenderdoc/CMakeLists.txt @@ -11,6 +11,7 @@ endif() set(QMAKE_QT5_COMMAND ${QT_QMAKE_EXECUTABLE} CACHE STRING "Command to run to invoke Qt5's qmake. Normally this is qmake, possibly with qtchooser, but might be qmake-qt5") set(RENDERDOC_SWIG_PACKAGE https://github.com/baldurk/swig/archive/renderdoc-modified-7.zip CACHE STRING "The location where RenderDoc's swig fork source can be found. By default points to the URL on github but can be pointed to a local file.") +set(RENDERDOC_PCRE_PACKAGE https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz CACHE STRING "The location where the pcre library package can be found. By default points to the URL on sourceforge but can be pointed to a local file.") # Only check qt version if we're building qrenderdoc if(ENABLE_QRENDERDOC) @@ -111,6 +112,7 @@ else() endif() include(ExternalProject) +include(CheckIncludeFile) # Need bison for swig find_package(BISON) @@ -157,13 +159,37 @@ if(NOT ${CMAKE_VERSION} VERSION_LESS "3.24") cmake_policy(SET CMP0135 NEW) endif() +CHECK_INCLUDE_FILE(pcre.h PCRE_HEADER) + +set(PCRE_PREFIX_PATH "") + +if(PCRE_HEADER) + message(STATUS "pcre library is found, using it as-is") + + add_custom_target(local_pcre) +else() + message(STATUS "pcre header is not found! building pcre locally") + + # fetch pcre if missing + ExternalProject_Add(local_pcre + # using an URL to a zip directly so we don't clone the history etc + URL ${RENDERDOC_PCRE_PACKAGE} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND CC=${SWIG_CONFIGURE_CC} CXX=${SWIG_CONFIGURE_CXX} CFLAGS=-fPIC CXXFLAGS=-fPIC ${SET_SYSTEM_PATH_COMMAND} ./configure --prefix=${CMAKE_BINARY_DIR} --disable-shared > /dev/null + BUILD_COMMAND ${GENERATOR_MAKE} ${GENERATOR_MAKE_PARAMS} > /dev/null 2>&1 + INSTALL_COMMAND ${GENERATOR_MAKE} install > /dev/null 2>&1) + + set(PCRE_PREFIX_PATH "--with-pcre-prefix=${CMAKE_BINARY_DIR}") +endif() + # Compile our custom SWIG that will do scoped/strong enum classes ExternalProject_Add(custom_swig # using an URL to a zip directly so we don't clone the history etc URL ${RENDERDOC_SWIG_PACKAGE} + DEPENDS local_pcre BUILD_IN_SOURCE 1 CONFIGURE_COMMAND ${SET_SYSTEM_PATH_COMMAND} ./autogen.sh > /dev/null 2>&1 - COMMAND CC=${SWIG_CONFIGURE_CC} CXX=${SWIG_CONFIGURE_CXX} CFLAGS=-fPIC CXXFLAGS=-fPIC ${SET_SYSTEM_PATH_COMMAND} ./configure --with-pcre=yes --prefix=${CMAKE_BINARY_DIR} > /dev/null + COMMAND CC=${SWIG_CONFIGURE_CC} CXX=${SWIG_CONFIGURE_CXX} CFLAGS=-fPIC CXXFLAGS=-fPIC ${SET_SYSTEM_PATH_COMMAND} ./configure --with-pcre=yes ${PCRE_PREFIX_PATH} --prefix=${CMAKE_BINARY_DIR} > /dev/null BUILD_COMMAND ${GENERATOR_MAKE} ${GENERATOR_MAKE_PARAMS} > /dev/null 2>&1 INSTALL_COMMAND ${GENERATOR_MAKE} install > /dev/null 2>&1)