From d65e5882aa038baf1487ca609a6728bc7a966bdf Mon Sep 17 00:00:00 2001
From: Brad Davis <bdavis@saintandreas.org>
Date: Thu, 18 Jun 2015 17:42:45 -0700
Subject: [PATCH] Working on 64 bit builds

---
 cmake/externals/LibOVR/CMakeLists.txt |  6 +++++-
 cmake/externals/glew/CMakeLists.txt   | 15 ++++++++++-----
 cmake/externals/tbb/CMakeLists.txt    |  9 +++++++--
 cmake/modules/FindFaceshift.cmake     |  6 +++++-
 cmake/modules/FindNSIGHT.cmake        | 22 ++++++++++++++++------
 cmake/modules/FindSixense.cmake       | 18 +++++++++++++-----
 cmake/modules/FindTBB.cmake           |  2 +-
 interface/src/main.cpp                |  2 +-
 8 files changed, 58 insertions(+), 22 deletions(-)

diff --git a/cmake/externals/LibOVR/CMakeLists.txt b/cmake/externals/LibOVR/CMakeLists.txt
index d491434b5f..b7dbc8b598 100644
--- a/cmake/externals/LibOVR/CMakeLists.txt
+++ b/cmake/externals/LibOVR/CMakeLists.txt
@@ -21,7 +21,11 @@ if (WIN32)
 
   # FIXME need to account for different architectures 
   set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/LibOVR/Include CACHE TYPE INTERNAL)
-  set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/LibOVR/Lib/Windows/Win32/Release/VS2013/LibOVR.lib CACHE TYPE INTERNAL)
+  if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+    set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/LibOVR/Lib/Windows/x64/Release/VS2013/LibOVR.lib CACHE TYPE INTERNAL)
+  else()
+    set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/LibOVR/Lib/Windows/Win32/Release/VS2013/LibOVR.lib CACHE TYPE INTERNAL)
+  endif()
 
 elseif(APPLE)
 
diff --git a/cmake/externals/glew/CMakeLists.txt b/cmake/externals/glew/CMakeLists.txt
index 0d80e7a789..bcf175432c 100644
--- a/cmake/externals/glew/CMakeLists.txt
+++ b/cmake/externals/glew/CMakeLists.txt
@@ -16,11 +16,16 @@ if (WIN32)
 
   string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER)
   set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE PATH "List of glew include directories")
-  
-  set(_LIB_DIR ${SOURCE_DIR}/lib/Release/Win32)
-  
+
+  if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+    set(_LIB_DIR ${SOURCE_DIR}/lib/Release/x64)
+    set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${SOURCE_DIR}/bin/Release/x64 CACHE FILEPATH "Location of GLEW DLL")
+  else()
+    set(_LIB_DIR ${SOURCE_DIR}/lib/Release/Win32)
+    set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${SOURCE_DIR}/bin/Release/Win32 CACHE FILEPATH "Location of GLEW DLL")
+  endif()
+
   set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${_LIB_DIR}/glew32.lib CACHE FILEPATH "Location of GLEW release library")
   set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG "" CACHE FILEPATH "Location of GLEW debug library")
-  
-  set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${SOURCE_DIR}/bin/Release/Win32 CACHE FILEPATH "Location of GLEW DLL")
+
 endif ()
\ No newline at end of file
diff --git a/cmake/externals/tbb/CMakeLists.txt b/cmake/externals/tbb/CMakeLists.txt
index 8f327bd69f..365bd3cf14 100644
--- a/cmake/externals/tbb/CMakeLists.txt
+++ b/cmake/externals/tbb/CMakeLists.txt
@@ -73,9 +73,14 @@ if (APPLE)
   )
   
 elseif (WIN32)
-  set(_TBB_LIB_DIR "${SOURCE_DIR}/lib/ia32/vc12")
+  if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+    set(_TBB_LIB_DIR "${SOURCE_DIR}/lib/intel64/vc12")
+    set(${EXTERNAL_NAME_UPPER}_DLL_PATH "${SOURCE_DIR}/bin/intel64/vc12" CACHE PATH "Path to TBB DLLs")
+  else()
+    set(_TBB_LIB_DIR "${SOURCE_DIR}/lib/ia32/vc12")
+    set(${EXTERNAL_NAME_UPPER}_DLL_PATH "${SOURCE_DIR}/bin/ia32/vc12" CACHE PATH "Path to TBB DLLs")
+  endif()
   set(_LIB_EXT "lib")
-  set(${EXTERNAL_NAME_UPPER}_DLL_PATH "${SOURCE_DIR}/bin/ia32/vc12" CACHE PATH "Path to TBB DLLs")
 elseif (ANDROID)
   set(_TBB_LIB_DIR "${SOURCE_DIR}/lib")
   set(_LIB_PREFIX "lib")
diff --git a/cmake/modules/FindFaceshift.cmake b/cmake/modules/FindFaceshift.cmake
index 0dcbcbb7dd..1f8b7b19fe 100644
--- a/cmake/modules/FindFaceshift.cmake
+++ b/cmake/modules/FindFaceshift.cmake
@@ -28,7 +28,11 @@ if (APPLE)
 elseif (UNIX)
   set(ARCH_DIR "UNIX")
 elseif (WIN32)
-  set(ARCH_DIR "Win32")
+  if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+    set(ARCH_DIR "x64")
+  else()
+    set(ARCH_DIR "Win32")
+  endif()
 endif ()
 
 find_library(FACESHIFT_LIBRARY_RELEASE NAME faceshift PATH_SUFFIXES lib/${ARCH_DIR} HINTS ${FACESHIFT_SEARCH_DIRS})
diff --git a/cmake/modules/FindNSIGHT.cmake b/cmake/modules/FindNSIGHT.cmake
index 4df0686ebe..243c337adb 100644
--- a/cmake/modules/FindNSIGHT.cmake
+++ b/cmake/modules/FindNSIGHT.cmake
@@ -16,7 +16,16 @@
 # 
 
 if (WIN32)
-     
+    
+    if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+        set(ARCH_DIR "x64")
+        set(ARCH_NAME "64")
+    else()
+        set(ARCH_DIR "Win32")
+        set(ARCH_NAME "32")
+    endif()
+
+
 	find_path(NSIGHT_INCLUDE_DIRS
 		NAMES
 			nvToolsExt.h
@@ -25,17 +34,18 @@ if (WIN32)
 		PATHS
 		 	"C:/Program Files/NVIDIA Corporation/NvToolsExt")
   
-	find_library(NSIGHT_LIBRARY_RELEASE nvToolsExt32_1
+	find_library(NSIGHT_LIBRARY_RELEASE "nvToolsExt${ARCH_NAME}_1"
 	 	PATH_SUFFIXES
-	 		"lib/Win32" "lib"
+	 		"lib/${ARCH_DIR}" "lib"
 	 	PATHS
 	 		"C:/Program Files/NVIDIA Corporation/NvToolsExt")
-	find_library(NSIGHT_LIBRARY_DEBUG nvToolsExt32_1
+	find_library(NSIGHT_LIBRARY_DEBUG "nvToolsExt${ARCH_NAME}_1"
 	 	PATH_SUFFIXES
-	 		"lib/Win32" "lib"
+	 		"lib/${ARCH_DIR}" "lib"
 	 	PATHS
 	 		"C:/Program Files/NVIDIA Corporation/NvToolsExt")
-  
+
+  add_paths_to_fixup_libs("C:/Program Files/NVIDIA Corporation/NvToolsExt/bin/${ARCH_DIR}")
   include(SelectLibraryConfigurations)
   select_library_configurations(NSIGHT)
 endif ()
diff --git a/cmake/modules/FindSixense.cmake b/cmake/modules/FindSixense.cmake
index 0f4346c53d..98b37d5410 100644
--- a/cmake/modules/FindSixense.cmake
+++ b/cmake/modules/FindSixense.cmake
@@ -30,12 +30,20 @@ elseif (UNIX)
   find_library(SIXENSE_LIBRARY_RELEASE lib/linux_x64/release/libsixense_x64.so HINTS ${SIXENSE_SEARCH_DIRS})
   # find_library(SIXENSE_LIBRARY_DEBUG lib/linux_x64/debug/libsixensed_x64.so HINTS ${SIXENSE_SEARCH_DIRS})
 elseif (WIN32)
-  find_library(SIXENSE_LIBRARY_RELEASE lib/win32/release_dll/sixense.lib HINTS ${SIXENSE_SEARCH_DIRS})
-  find_library(SIXENSE_LIBRARY_DEBUG lib/win32/debug_dll/sixensed.lib HINTS ${SIXENSE_SEARCH_DIRS})
+    if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+        set(ARCH_DIR "x64")
+        set(ARCH_SUFFIX "_x64")
+    else()
+        set(ARCH_DIR "Win32")
+        set(ARCH_SUFFIX "")
+    endif()
+
+  find_library(SIXENSE_LIBRARY_RELEASE "lib/${ARCH_DIR}/release_dll/sixense${ARCH_SUFFIX}.lib" HINTS ${SIXENSE_SEARCH_DIRS})
+  find_library(SIXENSE_LIBRARY_DEBUG "lib/${ARCH_DIR}/debug_dll/sixensed.lib" HINTS ${SIXENSE_SEARCH_DIRS})
   
-  find_path(SIXENSE_DEBUG_DLL_PATH sixensed.dll PATH_SUFFIXES bin/win32/debug_dll HINTS ${SIXENSE_SEARCH_DIRS})
-  find_path(SIXENSE_RELEASE_DLL_PATH sixense.dll PATH_SUFFIXES bin/win32/release_dll HINTS ${SIXENSE_SEARCH_DIRS})
-  find_path(SIXENSE_DEVICE_DLL_PATH DeviceDLL.dll PATH_SUFFIXES samples/win32/sixense_simple3d HINTS ${SIXENSE_SEARCH_DIRS})
+  find_path(SIXENSE_DEBUG_DLL_PATH "sixensed${ARCH_SUFFIX}.dll" PATH_SUFFIXES bin/${ARCH_DIR}/debug_dll HINTS ${SIXENSE_SEARCH_DIRS})
+  find_path(SIXENSE_RELEASE_DLL_PATH "sixense${ARCH_SUFFIX}.dll" PATH_SUFFIXES bin/${ARCH_DIR}/release_dll HINTS ${SIXENSE_SEARCH_DIRS})
+  find_path(SIXENSE_DEVICE_DLL_PATH DeviceDLL.dll PATH_SUFFIXES samples/${ARCH_DIR}/sixense_simple3d HINTS ${SIXENSE_SEARCH_DIRS})
 endif ()
 
 include(SelectLibraryConfigurations)
diff --git a/cmake/modules/FindTBB.cmake b/cmake/modules/FindTBB.cmake
index 4d4b3ca504..1ccdcd792d 100644
--- a/cmake/modules/FindTBB.cmake
+++ b/cmake/modules/FindTBB.cmake
@@ -49,7 +49,7 @@ elseif (UNIX AND NOT ANDROID)
   endif ()
   
 elseif (WIN32)
-  if (CMAKE_CL_64)
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
     set(_TBB_ARCH_DIR "intel64")
   else()
     set(_TBB_ARCH_DIR "ia32")
diff --git a/interface/src/main.cpp b/interface/src/main.cpp
index 13ca17355b..e591034fb5 100644
--- a/interface/src/main.cpp
+++ b/interface/src/main.cpp
@@ -23,7 +23,7 @@
 #ifdef Q_OS_WIN
 static BOOL CALLBACK enumWindowsCallback(HWND hWnd, LPARAM lParam) {
     const UINT TIMEOUT = 200;  // ms
-    DWORD response;
+    DWORD_PTR response;
     LRESULT result = SendMessageTimeout(hWnd, UWM_IDENTIFY_INSTANCES, 0, 0, SMTO_BLOCK | SMTO_ABORTIFHUNG, TIMEOUT, &response);
     if (result == 0) {  // Timeout; continue search.
         return TRUE;