From b5fef75dad1c0992c63ede83b96da0b1db1f9a37 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Thu, 9 Jul 2009 17:03:20 -0700
Subject: [PATCH] Moveing around DLL copying to support building llcommon.dll
 and using llcommon.dll while running unit tests.

---
 indra/cmake/LLAddBuildTest.cmake |  9 ++++++++-
 indra/cmake/Linking.cmake        |  1 +
 indra/llcommon/CMakeLists.txt    | 10 ++++++++++
 indra/newview/CMakeLists.txt     | 22 +++++++++++++++++-----
 indra/newview/viewer_manifest.py | 12 +++++++-----
 5 files changed, 43 insertions(+), 11 deletions(-)

diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake
index 4a61725e091..5717bc620a5 100644
--- a/indra/cmake/LLAddBuildTest.cmake
+++ b/indra/cmake/LLAddBuildTest.cmake
@@ -118,9 +118,16 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
     IF(LL_TEST_VERBOSE)
       MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_cmd  = ${TEST_CMD}")
     ENDIF(LL_TEST_VERBOSE)
+	
+	IF(WINDOWS)
+	  set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR})
+	ELSE(WINDOWS)
+	  set(LD_LIBRARY_PATH ${ARCH_PREBUILT_DIRS}:/usr/lib)
+	ENDIF(WINDOWS)
+
     SET(TEST_SCRIPT_CMD 
       ${CMAKE_COMMAND} 
-      -DLD_LIBRARY_PATH=${ARCH_PREBUILT_DIRS}:/usr/lib
+      -DLD_LIBRARY_PATH=${LD_LIBRARY_PATH}
       -DTEST_CMD:STRING="${TEST_CMD}" 
       -P ${CMAKE_SOURCE_DIR}/cmake/RunBuildTest.cmake
       )
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
index eaa8a6dc291..ad52a82b20d 100644
--- a/indra/cmake/Linking.cmake
+++ b/indra/cmake/Linking.cmake
@@ -5,6 +5,7 @@ if (NOT STANDALONE)
     set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib)
     set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
     set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug)
+	set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
   elseif (LINUX)
     if (VIEWER)
       set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client)
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 06a295b4104..aaeb4eebc36 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -9,6 +9,10 @@ include(Linking)
 include(Boost)
 include (Pth)
 
+if (WINDOWS)
+    include(CopyWinLibs)
+endif (WINDOWS)
+
 include_directories(
     ${EXPAT_INCLUDE_DIRS}
     ${LLCOMMON_INCLUDE_DIRS}
@@ -234,6 +238,10 @@ list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES})
 if(LLCOMMON_LINK_SHARED)
     add_library (llcommon SHARED ${llcommon_SOURCE_FILES})
     add_definitions(-DLL_COMMON_BUILD=1)
+	# *FIX:Mani ---
+	# llcommon.dll get written to the DLL staging directory.
+	# Also this directory is shared with RunBuildTest.cmake, y'know, for the tests.
+	set_target_properties(llcommon PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SHARED_LIB_STAGING_DIR})
 else(LLCOMMON_LINK_SHARED)
     add_library (llcommon ${llcommon_SOURCE_FILES})
 endif(LLCOMMON_LINK_SHARED)
@@ -250,6 +258,8 @@ target_link_libraries(
     ${PTH_LIBRARIES}
     )
 
+add_dependencies(llcommon stage_third_party_libs)
+
 include(LLAddBuildTest)
 SET(llcommon_TEST_SOURCE_FILES
   # WARNING: Please don't write tests against LLCommon or LLMath until this issue is resolved: https://jira.lindenlab.com/jira/browse/DEV-29456
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 53a59031edb..d6108ab06ee 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -38,10 +38,6 @@ include(LLKDU)
 include(ViewerMiscLibs)
 include(LLLogin)
 
-if (WINDOWS)
-    include(CopyWinLibs)
-endif (WINDOWS)
-
 include_directories(
     ${DBUSGLIB_INCLUDE_DIRS}
     ${ELFIO_INCLUDE_DIR}
@@ -1252,7 +1248,23 @@ if (WINDOWS)
         COMMENT "Copying message.xml to the runtime folder."
         )
        
-    add_dependencies(${VIEWER_BINARY_NAME} copy_win_libs)
+	if(WINDOWS)
+      # Copy Win Libs...
+	  # This happens at build time, not config time. We can't glob files in this cmake.
+	  # *FIX:Mani Write a sub script to glob the files...
+	  add_custom_command(
+        TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
+        COMMAND ${CMAKE_COMMAND}
+        ARGS
+          -E
+          copy_directory
+          ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}
+         ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
+        COMMENT "Copying staged dlls."
+		)
+	endif(WINDOWS)
+	
+	
 
     if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
       add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 7edf0bad6b6..0217c8f8647 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -168,9 +168,8 @@ def construct(self):
 
         # need to get the llcommon.dll from any of the build directories as well
         try:
-            self.path(self.find_existing_file('../llcommon/%s/llcommon.dll' % self.args['configuration']),
-                  dst='llcommon.dll')
             if self.prefix(src=self.args['configuration'], dst=""):
+                self.path('llcommon.dll')
                 self.path('libapr-1.dll')
                 self.path('libaprutil-1.dll')
                 self.path('libapriconv-1.dll')
@@ -181,8 +180,7 @@ def construct(self):
 
         # need to get the kdu dll from any of the build directories as well
         try:
-            self.path(self.find_existing_file('../llkdu/%s/llkdu.dll' % self.args['configuration'],
-                '../../libraries/i686-win32/lib/release/llkdu.dll'), 
+            self.path(self.find_existing_file('%s/llkdu.dll' % self.args['configuration']), 
                   dst='llkdu.dll')
             pass
         except:
@@ -394,7 +392,11 @@ def package_finish(self):
 
         # We use the Unicode version of NSIS, available from
         # http://www.scratchpaper.com/
-        NSIS_path = 'C:\\Program Files\\NSIS\\Unicode\\makensis.exe'
+        # Check two paths, one for Program Files, and one for Program Files (x86).
+        # Yay 64bit windows.
+        NSIS_path = os.path.expandvars('${ProgramFiles}\\NSIS\\Unicode\\makensis.exe')
+        if not os.path.exists(NSIS_path):
+            NSIS_path = os.path.expandvars('${ProgramFiles(x86)}\\NSIS\\Unicode\\makensis.exe')
         self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
         # self.remove(self.dst_path_of(tempfile))
         # If we're on a build machine, sign the code using our Authenticode certificate. JC
-- 
GitLab