Merge release-5-0 into release-5-1
[alexxy/gromacs.git] / cmake / gmxTestLibXml2.cmake
index 99795968bdcf8499cf3a1659a59fe569bd5bcba8..e79b03fcd198fd8bbcd80847d915379c62885907 100644 (file)
@@ -45,33 +45,45 @@ include(CheckLibraryExists)
 include(CheckIncludeFiles)
 include(gmxOptionUtilities)
 function(GMX_TEST_LIBXML2 VARIABLE)
-    if(LIBXML2_FOUND)
-        gmx_check_if_changed(_do_libxml2_recompile LIBXML2_INCLUDE_DIR LIBXML2_LIBRARIES)
-        if(_do_libxml2_recompile)
-            unset(LIBXML2_LINKS_OK CACHE)
-        endif()
-        if(HAVE_ZLIB)
-            set(LIBXML2_LIBRARIES "${LIBXML2_LIBRARIES};${ZLIB_LIBRARIES}" PARENT_SCOPE) #not needed for dynamic but does not hurt
-        endif()
-        check_library_exists("${LIBXML2_LIBRARIES}" "xmlTextWriterEndAttribute" "" LIBXML2_LINKS_OK)
-        if(LIBXML2_LINKS_OK)
-            #check that xml headers can be included
-            set(CMAKE_REQUIRED_INCLUDES "${LIBXML2_INCLUDE_DIR}")
-            check_include_files("libxml/parser.h" LIBXML2_INCL_OK)
-            if(NOT LIBXML2_INCL_OK)
-                #xml headers depend on iconv.h. Test whether adding its path fixes the problem
-                find_path(ICONV_INCLUDE_DIR iconv.h)
-                if(ICONV_INCLUDE_DIR)
-                    set(CMAKE_REQUIRED_INCLUDES "${LIBXML2_INCLUDE_DIR};${ICONV_INCLUDE_DIR}")
-                    unset(LIBXML2_INCL_OK CACHE)
-                    check_include_files("libxml/parser.h" LIBXML2_INCL_OK)
-                    set(LIBXML2_INCLUDE_DIR "${LIBXML2_INCLUDE_DIR};${ICONV_INCLUDE_DIR}" CACHE PATH "Libxml2 include path" FORCE)
-                endif()
+    if(NOT LIBXML2_FOUND)
+        set(${VARIABLE} OFF PARENT_SCOPE)
+       return()
+    endif()
+
+    if(HAVE_ZLIB)
+        set(LIBXML2_LIBRARIES "${LIBXML2_LIBRARIES};${ZLIB_LIBRARIES}" PARENT_SCOPE) #not needed for dynamic but does not hurt
+    endif()
+
+    string(TOUPPER "${CMAKE_BUILD_TYPE}" _cmake_build_type)
+    if(${_cmake_build_type} STREQUAL "MSAN")
+        # Linking MSan-enabled libxml2 and zlib in a way that can be
+        # tested with try_compile setup is tricky, but someone doing
+        # an MSan build can take care of themselves (for now, at
+        # least).
+        set(${VARIABLE} ON PARENT_SCOPE)
+        return()
+    endif()
+
+    gmx_check_if_changed(_do_libxml2_recompile LIBXML2_INCLUDE_DIR LIBXML2_LIBRARIES)
+    if(_do_libxml2_recompile)
+        unset(LIBXML2_LINKS_OK CACHE)
+    endif()
+    check_library_exists("${LIBXML2_LIBRARIES}" "xmlTextWriterEndAttribute" "" LIBXML2_LINKS_OK)
+    if(LIBXML2_LINKS_OK)
+        #check that xml headers can be included
+        set(CMAKE_REQUIRED_INCLUDES "${LIBXML2_INCLUDE_DIR}")
+       check_include_files("libxml/parser.h" LIBXML2_INCL_OK)
+       if(NOT LIBXML2_INCL_OK)
+            #xml headers depend on iconv.h. Test whether adding its path fixes the problem
+            find_path(ICONV_INCLUDE_DIR iconv.h)
+            if(ICONV_INCLUDE_DIR)
+                set(CMAKE_REQUIRED_INCLUDES "${LIBXML2_INCLUDE_DIR};${ICONV_INCLUDE_DIR}")
+               unset(LIBXML2_INCL_OK CACHE)
+               check_include_files("libxml/parser.h" LIBXML2_INCL_OK)
+               set(LIBXML2_INCLUDE_DIR "${LIBXML2_INCLUDE_DIR};${ICONV_INCLUDE_DIR}" CACHE PATH "Libxml2 include path" FORCE)
             endif()
-            set(${VARIABLE} ${LIBXML2_INCL_OK} PARENT_SCOPE)
-        else()
-            set(${VARIABLE} OFF PARENT_SCOPE)
         endif()
+       set(${VARIABLE} ${LIBXML2_INCL_OK} PARENT_SCOPE)
     else()
         set(${VARIABLE} OFF PARENT_SCOPE)
     endif()