From 198046e21d08f7af67287c0ea7260163c424fe0d Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Tue, 27 Jan 2015 15:34:43 -0500
Subject: [PATCH] Include MSVCP120.DLL and MSVCR120.DLL in Windows viewer
 package. Generalize Copy3rdPartyLibs.cmake to eliminate some clone-and-tweak
 redundancy.

---
 indra/cmake/Copy3rdPartyLibs.cmake | 116 +++++++++--------------------
 indra/newview/viewer_manifest.py   |   8 +-
 2 files changed, 39 insertions(+), 85 deletions(-)

diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 28202f85d64..84947adaae5 100755
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -66,126 +66,80 @@ if(WINDOWS)
       set(release_files ${release_files} fmodex.dll)
     endif (FMODEX)
 
-#*******************************
-# Copy MS C runtime dlls, required for packaging.
-# *TODO - Adapt this to support VC9
-if (MSVC80)
-    FIND_PATH(debug_msvc8_redist_path msvcr80d.dll
-        PATHS
-        ${MSVC_DEBUG_REDIST_PATH}
-         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT
-        NO_DEFAULT_PATH
-        NO_DEFAULT_PATH
-        )
-
-    if(EXISTS ${debug_msvc8_redist_path})
-        set(debug_msvc8_files
-            msvcr80d.dll
-            msvcp80d.dll
-            Microsoft.VC80.DebugCRT.manifest
-            )
-
-        copy_if_different(
-            ${debug_msvc8_redist_path}
-            "${SHARED_LIB_STAGING_DIR_DEBUG}"
-            out_targets
-            ${debug_msvc8_files}
-            )
-        set(third_party_targets ${third_party_targets} ${out_targets})
-
-    endif (EXISTS ${debug_msvc8_redist_path})
-
-    FIND_PATH(release_msvc8_redist_path msvcr80.dll
-        PATHS
-        ${MSVC_REDIST_PATH}
-         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT
-        NO_DEFAULT_PATH
-        NO_DEFAULT_PATH
-        )
-
-    if(EXISTS ${release_msvc8_redist_path})
-        set(release_msvc8_files
-            msvcr80.dll
-            msvcp80.dll
-            Microsoft.VC80.CRT.manifest
-            )
-
-        copy_if_different(
-            ${release_msvc8_redist_path}
-            "${SHARED_LIB_STAGING_DIR_RELEASE}"
-            out_targets
-            ${release_msvc8_files}
-            )
-        set(third_party_targets ${third_party_targets} ${out_targets})
-
-        copy_if_different(
-            ${release_msvc8_redist_path}
-            "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
-            out_targets
-            ${release_msvc8_files}
-            )
-        set(third_party_targets ${third_party_targets} ${out_targets})
-          
-    endif (EXISTS ${release_msvc8_redist_path})
-elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010
-    FIND_PATH(debug_msvc10_redist_path msvcr100d.dll
+    #*******************************
+    # Copy MS C runtime dlls, required for packaging.
+    # *TODO - Adapt this to support VC9
+    if (MSVC80)
+        set(MSVC_VER 80)
+        set(MSVC_VERDOT 8.0)
+    elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010
+        set(MSVC_VER 100)
+        set(MSVC_VERDOT 10.0)
+    elseif (MSVC_VERSION EQUAL 1800) # VisualStudio 2013, which is (sigh) VS 12
+        set(MSVC_VER 120)
+        set(MSVC_VERDOT 12.0)
+    else (MSVC80)
+        MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake")
+    endif (MSVC80)
+
+    FIND_PATH(debug_msvc_redist_path msvcr${MSVC_VER}d.dll
         PATHS
         ${MSVC_DEBUG_REDIST_PATH}
-         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC100.DebugCRT
+         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC${MSVC_VER}.DebugCRT
         [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64
         [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32
         NO_DEFAULT_PATH
         )
 
-    if(EXISTS ${debug_msvc10_redist_path})
-        set(debug_msvc10_files
-            msvcr100d.dll
-            msvcp100d.dll
+    if(EXISTS ${debug_msvc_redist_path})
+        set(debug_msvc_files
+            msvcr${MSVC_VER}d.dll
+            msvcp${MSVC_VER}d.dll
             )
 
         copy_if_different(
-            ${debug_msvc10_redist_path}
+            ${debug_msvc_redist_path}
             "${SHARED_LIB_STAGING_DIR_DEBUG}"
             out_targets
-            ${debug_msvc10_files}
+            ${debug_msvc_files}
             )
         set(third_party_targets ${third_party_targets} ${out_targets})
 
     endif ()
 
-    FIND_PATH(release_msvc10_redist_path msvcr100.dll
+    FIND_PATH(release_msvc_redist_path msvcr${MSVC_VER}.dll
         PATHS
         ${MSVC_REDIST_PATH}
-         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC100.CRT
+         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC${MSVC_VER}.CRT
         [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64
         [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32
         NO_DEFAULT_PATH
         )
 
-    if(EXISTS ${release_msvc10_redist_path})
-        set(release_msvc10_files
-            msvcr100.dll
-            msvcp100.dll
+    if(EXISTS ${release_msvc_redist_path})
+        set(release_msvc_files
+            msvcr${MSVC_VER}.dll
+            msvcp${MSVC_VER}.dll
             )
 
         copy_if_different(
-            ${release_msvc10_redist_path}
+            ${release_msvc_redist_path}
             "${SHARED_LIB_STAGING_DIR_RELEASE}"
             out_targets
-            ${release_msvc10_files}
+            ${release_msvc_files}
             )
         set(third_party_targets ${third_party_targets} ${out_targets})
 
         copy_if_different(
-            ${release_msvc10_redist_path}
+            ${release_msvc_redist_path}
             "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
             out_targets
-            ${release_msvc10_files}
+            ${release_msvc_files}
             )
         set(third_party_targets ${third_party_targets} ${out_targets})
           
     endif ()
-endif (MSVC80)
+
 
 elseif(DARWIN)
     set(SHARED_LIB_STAGING_DIR_DEBUG            "${SHARED_LIB_STAGING_DIR}/Debug/Resources")
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 176f2570050..a20ca8802a8 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -385,11 +385,11 @@ def construct(self):
             # These need to be installed as a SxS assembly, currently a 'private' assembly.
             # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
             if self.args['configuration'].lower() == 'debug':
-                 self.path("msvcr100d.dll")
-                 self.path("msvcp100d.dll")
+                 self.path("msvcr120d.dll")
+                 self.path("msvcp120d.dll")
             else:
-                 self.path("msvcr100.dll")
-                 self.path("msvcp100.dll")
+                 self.path("msvcr120.dll")
+                 self.path("msvcp120.dll")
 
             # Vivox runtimes
             self.path("SLVoice.exe")
-- 
GitLab