From 45ec5ce9c4bb7ad7a3967cd28bf61778962e8dea Mon Sep 17 00:00:00 2001 From: Guilherme Amadio <amadio@cern.ch> Date: Tue, 22 Jan 2019 13:45:14 +0100 Subject: [PATCH] builtins/pcre: unify configuration for UNIX and Windows --- builtins/pcre/CMakeLists.txt | 100 ++++++++++---------- cmake/modules/SearchInstalledSoftware.cmake | 5 +- 2 files changed, 54 insertions(+), 51 deletions(-) diff --git a/builtins/pcre/CMakeLists.txt b/builtins/pcre/CMakeLists.txt index 0ae374efbbd..ce235e65b88 100644 --- a/builtins/pcre/CMakeLists.txt +++ b/builtins/pcre/CMakeLists.txt @@ -1,58 +1,58 @@ include(ExternalProject) -set(PCRE_VERSION "8.42") -set(PCRE_URL "${CMAKE_CURRENT_SOURCE_DIR}/pcre-${PCRE_VERSION}.tar.gz") -set(PCRE_LIBNAME ${CMAKE_STATIC_LIBRARY_PREFIX}pcre${CMAKE_STATIC_LIBRARY_SUFFIX}) -set(PCRE_PCRE_LIBRARY ${CMAKE_BINARY_DIR}/lib/${PCRE_LIBNAME}) - -if(WIN32) - if (winrtdebug) - set(pcre_lib pcred.lib) - set(pcre_build_type Debug) - else() - set(pcre_lib pcre.lib) - set(pcre_build_type Release) - endif() - ExternalProject_Add(PCRE - URL ${PCRE_URL} - INSTALL_DIR ${CMAKE_BINARY_DIR} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${pcre_build_type} - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${pcre_build_type}/${pcre_lib} ${PCRE_PCRE_LIBRARY} - COMMAND ${CMAKE_COMMAND} -E copy_if_different pcre.h <INSTALL_DIR>/include - COMMAND ${CMAKE_COMMAND} -E copy_if_different pcre_scanner.h <INSTALL_DIR>/include - COMMAND ${CMAKE_COMMAND} -E copy_if_different pcre_stringpiece.h <INSTALL_DIR>/include - COMMAND ${CMAKE_COMMAND} -E copy_if_different pcrecpp.h <INSTALL_DIR>/include - COMMAND ${CMAKE_COMMAND} -E copy_if_different pcrecpparg.h <INSTALL_DIR>/include - COMMAND ${CMAKE_COMMAND} -E copy_if_different pcreposix.h <INSTALL_DIR>/include - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${PCRE_PCRE_LIBRARY}) -else() - set(PCREPOSIX_LIBNAME ${CMAKE_STATIC_LIBRARY_PREFIX}pcreposix${CMAKE_STATIC_LIBRARY_SUFFIX}) - set(PCRE_PCREPOSIX_LIBRARY ${CMAKE_BINARY_DIR}/lib/${PCREPOSIX_LIBNAME}) - - if(CMAKE_OSX_SYSROOT) - set(_pcre_cflags "-isysroot ${CMAKE_OSX_SYSROOT}") - endif() - ExternalProject_Add(PCRE - URL ${PCRE_URL} - INSTALL_DIR ${CMAKE_BINARY_DIR} - CONFIGURE_COMMAND ./configure --prefix <INSTALL_DIR> --with-pic --disable-shared - CC=${CMAKE_C_COMPILER} CFLAGS=${_pcre_cflags} - INSTALL_COMMAND make install-libLTLIBRARIES - install-includeHEADERS - install-nodist_includeHEADERS - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${PCRE_PCRE_LIBRARY} ${PCRE_PCREPOSIX_LIBRARY}) +# Clear cache variables set by find_package(PCRE) +# to ensure that we use the builtin version +foreach(var PCRE_FOUND PCRE_VERSION PCRE_INCLUDE_DIR PCRE_PCRE_LIBRARY PCRE_LIBRARIES) + unset(${var} CACHE) +endforeach() + +if(winrtdebug) + set(DEBUG_POSTFIX d) endif() -unset(PCRE_FOUND CACHE) -unset(PCRE_FOUND PARENT_SCOPE) -set(PCRE_FOUND TRUE CACHE BOOL "" FORCE) +set(PCRE_VERSION "8.42" CACHE INTERNAL "" FORCE) +set(PCRE_LIBNAME ${CMAKE_STATIC_LIBRARY_PREFIX}pcre${DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) + +ExternalProject_Add(PCRE + URL ${CMAKE_CURRENT_SOURCE_DIR}/pcre-${PCRE_VERSION}.tar.gz + URL_HASH SHA256=69acbc2fbdefb955d42a4c606dfde800c2885711d2979e356c0636efde9ec3b5 + + LOG_DOWNLOAD TRUE + LOG_CONFIGURE TRUE + LOG_BUILD TRUE + LOG_INSTALL TRUE + + CMAKE_CACHE_ARGS + -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> + -DCMAKE_GENERATOR:STRING=${CMAKE_GENERATOR} + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} + -DCMAKE_BUILD_SHARED_LIBS:BOOL=FALSE + -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE + + BUILD_COMMAND + ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> --target pcre -set(PCRE_INCLUDE_DIR ${CMAKE_BINARY_DIR}/include CACHE INTERNAL "" FORCE) -set(PCRE_PCRE_LIBRARY ${PCRE_PCRE_LIBRARY} CACHE INTERNAL "" FORCE) -set(PCRE_PCREPOSIX_LIBRARY ${PCRE_PCREPOSIX_LIBRARY} CACHE INTERNAL "" FORCE) -set(PCRE_LIBRARIES ${PCRE_PCRE_LIBRARY} ${PCRE_PCREPOSIX_LIBRARY} CACHE INTERNAL "" FORCE) + BUILD_BYPRODUCTS + <BINARY_DIR>/pcre.h + <BINARY_DIR>/${CMAKE_CFG_INTDIR}/${PCRE_LIBNAME} + + INSTALL_COMMAND "" +) + +ExternalProject_Get_Property(PCRE BINARY_DIR) + +set(PCRE_FOUND TRUE CACHE INTERNAL "" FORCE) +set(PCRE_INCLUDE_DIR "${BINARY_DIR}" CACHE INTERNAL "" FORCE) +set(PCRE_PCRE_LIBRARY "${BINARY_DIR}/${CMAKE_CFG_INTDIR}/${PCRE_LIBNAME}" CACHE INTERNAL "" FORCE) +set(PCRE_LIBRARIES "${PCRE_PCRE_LIBRARY}" CACHE INTERNAL "" FORCE) set(PCRE_TARGET PCRE) +add_library(pcre_builtin INTERFACE) +target_include_directories(pcre_builtin INTERFACE $<BUILD_INTERFACE:${PCRE_INCLUDE_DIR}>) +target_link_libraries(pcre_builtin INTERFACE $<BUILD_INTERFACE:${PCRE_LIBRARIES}>) +add_library(PCRE::PCRE ALIAS pcre_builtin) +add_dependencies(pcre_builtin PCRE) + set_property(GLOBAL APPEND PROPERTY ROOT_BUILTIN_TARGETS PCRE) diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index 2c9cd74a31f..270763a6aea 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -133,7 +133,10 @@ endif() #---Check for PCRE------------------------------------------------------------------- if(NOT builtin_pcre) message(STATUS "Looking for PCRE") - foreach(suffix FOUND INCLUDE_DIR PCRE_LIBRARY PCREPOSIX_LIBRARY) + # Clear cache before calling find_package(PCRE), + # necessary to be able to toggle builtin_pcre and + # not have find_package(PCRE) find builtin pcre. + foreach(suffix FOUND INCLUDE_DIR PCRE_LIBRARY) unset(PCRE_${suffix} CACHE) endforeach() find_package(PCRE) -- GitLab