]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Fix pcre checks to work on visual studio builds using pcre static libraries built...
authorAndres Mejia <amejia004@gmail.com>
Tue, 5 Feb 2013 22:51:13 +0000 (17:51 -0500)
committerAndres Mejia <amejia004@gmail.com>
Tue, 5 Feb 2013 22:51:13 +0000 (17:51 -0500)
CMakeLists.txt
build/cmake/FindPCREPOSIX.cmake

index da8a0bdbfea7a19b476d1596aff250f00ba93731..055992ccfb4dfd4d671eeaa9bcf8f008f38805fc 100644 (file)
@@ -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 <pcreposix.h>\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)$")
 
 #
index 9e40620fe27cb24eb105f9b072e2b0d6f058e46c..cfcf5bce92d4c9a65bc40fb64079c8570673d60f 100644 (file)
@@ -4,6 +4,7 @@
 #  PCRE_INCLUDE_DIR    - where to find pcreposix.h, etc.\r
 #  PCREPOSIX_LIBRARIES - List of libraries when using libpcreposix.\r
 #  PCREPOSIX_FOUND     - True if libpcreposix found.\r
+#  PCRE_FOUND          - True if libpcre found.\r
 \r
 IF (PCRE_INCLUDE_DIR)\r
   # Already in cache, be silent\r
@@ -18,8 +19,15 @@ FIND_LIBRARY(PCRE_LIBRARY NAMES pcre libpcre)
 # all listed variables are TRUE\r
 INCLUDE(FindPackageHandleStandardArgs)\r
 FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCREPOSIX DEFAULT_MSG PCREPOSIX_LIBRARY PCRE_INCLUDE_DIR)\r
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCRE DEFAULT_MSG PCRE_LIBRARY PCRE_INCLUDE_DIR)\r
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCRE DEFAULT_MSG PCRE_LIBRARY)\r
 \r
-IF(PCREPOSIX_FOUND AND PCRE_FOUND)\r
-  SET(PCREPOSIX_LIBRARIES ${PCREPOSIX_LIBRARY} ${PCRE_LIBRARY})\r
-ENDIF(PCREPOSIX_FOUND AND PCRE_FOUND)\r
+IF(PCREPOSIX_FOUND)\r
+  SET(PCREPOSIX_LIBRARIES ${PCREPOSIX_LIBRARY})\r
+  SET(HAVE_LIBPCREPOSIX 1)\r
+  SET(HAVE_PCREPOSIX_H 1)\r
+ENDIF(PCREPOSIX_FOUND)\r
+\r
+IF(PCRE_FOUND)\r
+  SET(PCREPOSIX_LIBRARIES ${PCREPOSIX_LIBRARIES} ${PCRE_LIBRARY})\r
+  SET(HAVE_LIBPCRE 1)\r
+ENDIF(PCRE_FOUND)\r