From 18532ae7128d2a9a8825a6574189b097ee2c0910 Mon Sep 17 00:00:00 2001 From: Andres Mejia Date: Tue, 5 Feb 2013 17:51:13 -0500 Subject: [PATCH] Fix pcre checks to work on visual studio builds using pcre static libraries built using mingw toolchain. --- CMakeLists.txt | 20 +++++++++++++++++--- build/cmake/FindPCREPOSIX.cmake | 16 ++++++++++++---- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index da8a0bdbf..055992ccf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -976,11 +976,9 @@ IF(NOT FOUND_POSIX_REGEX_LIB AND POSIX_REGEX_LIB MATCHES "^(AUTO|LIBPCREPOSIX)$" # # If requested, try finding library for PCREPOSIX # + FIND_PACKAGE(LibGCC) FIND_PACKAGE(PCREPOSIX) IF(PCREPOSIX_FOUND) - SET(HAVE_LIBPCREPOSIX 1) - SET(HAVE_LIBPCRE 1) - SET(HAVE_PCREPOSIX_H 1) INCLUDE_DIRECTORIES(${PCRE_INCLUDE_DIR}) LIST(APPEND ADDITIONAL_LIBS ${PCREPOSIX_LIBRARIES}) # Test if a macro is needed for the library. @@ -991,10 +989,26 @@ IF(NOT FOUND_POSIX_REGEX_LIB AND POSIX_REGEX_LIB MATCHES "^(AUTO|LIBPCREPOSIX)$" "WITHOUT_PCRE_STATIC;PCRE_STATIC") IF(NOT WITHOUT_PCRE_STATIC AND PCRE_STATIC) ADD_DEFINITIONS(-DPCRE_STATIC) + ELSEIF(MSVC AND NOT WITHOUT_PCRE_STATIC AND NOT PCRE_STATIC AND LIBGCC_FOUND) + # When doing a Visual Studio build using pcre static libraries + # built using the mingw toolchain, -lgcc is needed to resolve + # ___chkstk_ms. + MESSAGE(STATUS "Visual Studio build detected, trying again with -lgcc") + LIST(APPEND ADDITIONAL_LIBS ${LIBGCC_LIBRARIES}) + SET(TMP_LIBRARIES ${PCREPOSIX_LIBRARIES} ${LIBGCC_LIBRARIES}) + TRY_MACRO_FOR_LIBRARY( + "${PCRE_INCLUDE_DIR}" "${TMP_LIBRARIES}" + COMPILES + "#include \nint main() {regex_t r;return regcomp(&r, \"\", 0);}" + "WITHOUT_PCRE_STATIC;PCRE_STATIC") + IF(NOT WITHOUT_PCRE_STATIC AND PCRE_STATIC) + ADD_DEFINITIONS(-DPCRE_STATIC) + ENDIF(NOT WITHOUT_PCRE_STATIC AND PCRE_STATIC) ENDIF(NOT WITHOUT_PCRE_STATIC AND PCRE_STATIC) ENDIF(PCREPOSIX_FOUND) MARK_AS_ADVANCED(CLEAR PCRE_INCLUDE_DIR) MARK_AS_ADVANCED(CLEAR PCREPOSIX_LIBRARIES) + MARK_AS_ADVANCED(CLEAR LIBGCC_LIBRARIES) ENDIF(NOT FOUND_POSIX_REGEX_LIB AND POSIX_REGEX_LIB MATCHES "^(AUTO|LIBPCREPOSIX)$") # diff --git a/build/cmake/FindPCREPOSIX.cmake b/build/cmake/FindPCREPOSIX.cmake index 9e40620fe..cfcf5bce9 100644 --- a/build/cmake/FindPCREPOSIX.cmake +++ b/build/cmake/FindPCREPOSIX.cmake @@ -4,6 +4,7 @@ # PCRE_INCLUDE_DIR - where to find pcreposix.h, etc. # PCREPOSIX_LIBRARIES - List of libraries when using libpcreposix. # PCREPOSIX_FOUND - True if libpcreposix found. +# PCRE_FOUND - True if libpcre found. IF (PCRE_INCLUDE_DIR) # Already in cache, be silent @@ -18,8 +19,15 @@ FIND_LIBRARY(PCRE_LIBRARY NAMES pcre libpcre) # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCREPOSIX DEFAULT_MSG PCREPOSIX_LIBRARY PCRE_INCLUDE_DIR) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCRE DEFAULT_MSG PCRE_LIBRARY PCRE_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCRE DEFAULT_MSG PCRE_LIBRARY) -IF(PCREPOSIX_FOUND AND PCRE_FOUND) - SET(PCREPOSIX_LIBRARIES ${PCREPOSIX_LIBRARY} ${PCRE_LIBRARY}) -ENDIF(PCREPOSIX_FOUND AND PCRE_FOUND) +IF(PCREPOSIX_FOUND) + SET(PCREPOSIX_LIBRARIES ${PCREPOSIX_LIBRARY}) + SET(HAVE_LIBPCREPOSIX 1) + SET(HAVE_PCREPOSIX_H 1) +ENDIF(PCREPOSIX_FOUND) + +IF(PCRE_FOUND) + SET(PCREPOSIX_LIBRARIES ${PCREPOSIX_LIBRARIES} ${PCRE_LIBRARY}) + SET(HAVE_LIBPCRE 1) +ENDIF(PCRE_FOUND) -- 2.47.2