瀏覽代碼

BUG: Fix issue #7533. Revise fix for issue #7058 to use pragma comment libs in the source file rather than using TARGET_LINK_LIBRARIES in CMakeLists.txt because of the complex ifdef logic used in correct copies of comdef.h.

David Cole 17 年之前
父節點
當前提交
fdb0c8758a
共有 2 個文件被更改,包括 25 次插入13 次删除
  1. 0 13
      Source/CMakeLists.txt
  2. 25 0
      Source/cmCallVisualStudioMacro.cxx

+ 0 - 13
Source/CMakeLists.txt

@@ -302,19 +302,6 @@ IF(CMAKE_BUILD_ON_VISUAL_STUDIO OR MINGW)
   TARGET_LINK_LIBRARIES(CMakeLib rpcrt4)
 ENDIF(CMAKE_BUILD_ON_VISUAL_STUDIO OR MINGW)
 
-# With the Microsoft compiler (for _bstr_t support used from
-# cmCallVisualStudioMacro) we need the comsupp lib. Needed when
-# _MSC_VER and HAVE_COMDEF_H are defined...
-#
-IF(MSVC)
-  IF(MSVC60)
-    # comsuppd did not yet exist in VS6
-    TARGET_LINK_LIBRARIES(CMakeLib comsupp)
-  ELSE(MSVC60)
-    TARGET_LINK_LIBRARIES(CMakeLib optimized comsupp debug comsuppd)
-  ENDIF(MSVC60)
-ENDIF(MSVC)
-
 #
 # CTestLib
 #

+ 25 - 0
Source/cmCallVisualStudioMacro.cxx

@@ -35,6 +35,31 @@ static bool LogErrorsAsMessages;
 #include <comdef.h>
 
 
+//----------------------------------------------------------------------------
+// Copied from a correct comdef.h to avoid problems with deficient versions
+// of comdef.h that exist in the wild... Fixes issue #7533.
+//
+#if ( _MSC_VER >= 1300 )
+// VS7 and later:
+#ifdef _NATIVE_WCHAR_T_DEFINED
+# ifdef _DEBUG
+# pragma comment(lib, "comsuppwd.lib")
+# else
+# pragma comment(lib, "comsuppw.lib")
+# endif
+#else
+# ifdef _DEBUG
+# pragma comment(lib, "comsuppd.lib")
+# else
+# pragma comment(lib, "comsupp.lib")
+# endif
+#endif
+#else
+// VS6 only had comsupp.lib:
+# pragma comment(lib, "comsupp.lib")
+#endif
+
+
 //----------------------------------------------------------------------------
 ///! Use ReportHRESULT to make a cmSystemTools::Message after calling
 ///! a COM method that may have failed.