Update CMake modules.
Merge commit 'dd2c7e902aa095fd7844329e38bca7cd7c51e6d9' into osx-refactor_sync-mplus Conflicts: cmake/FindWinHID.cmake
This commit is contained in:
163
cmake/FindWindowsSDK.cmake
Normal file
163
cmake/FindWindowsSDK.cmake
Normal file
@@ -0,0 +1,163 @@
|
||||
# - Find the Windows SDK aka Platform SDK
|
||||
#
|
||||
# Variables:
|
||||
# WINDOWSSDK_FOUND - if any version of the windows or platform SDK was found that is usable with the current version of visual studio
|
||||
# WINDOWSSDK_LATEST_DIR
|
||||
# WINDOWSSDK_LATEST_NAME
|
||||
# WINDOWSSDK_FOUND_PREFERENCE - if we found an entry indicating a "preferred" SDK listed for this visual studio version
|
||||
# WINDOWSSDK_PREFERRED_DIR
|
||||
# WINDOWSSDK_PREFERRED_NAME
|
||||
#
|
||||
# WINDOWSSDK_DIRS - contains no duplicates, ordered most recent first.
|
||||
# WINDOWSSDK_PREFERRED_FIRST_DIRS - contains no duplicates, ordered with preferred first, followed by the rest in descending recency
|
||||
#
|
||||
# Functions:
|
||||
# windowssdk_name_lookup(<directory> <output variable>) - Find the name corresponding with the SDK directory you pass in, or
|
||||
# NOTFOUND if not recognized. Your directory must be one of WINDOWSSDK_DIRS for this to work.
|
||||
#
|
||||
# Requires these CMake modules:
|
||||
# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
|
||||
#
|
||||
# Original Author:
|
||||
# 2012 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
||||
# http://academic.cleardefinition.com
|
||||
# Iowa State University HCI Graduate Program/VRAC
|
||||
#
|
||||
# Copyright Iowa State University 2012.
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
set(_preferred_sdk_dirs)
|
||||
set(_win_sdk_dirs)
|
||||
set(_win_sdk_versanddirs)
|
||||
if(MSVC_VERSION GREATER 1310) # Newer than VS .NET/VS Toolkit 2003
|
||||
|
||||
# Environment variable for SDK dir
|
||||
if(EXISTS "$ENV{WindowsSDKDir}" AND (NOT "$ENV{WindowsSDKDir}" STREQUAL ""))
|
||||
message(STATUS "Got $ENV{WindowsSDKDir} - Windows/Platform SDK directories: ${_win_sdk_dirs}")
|
||||
list(APPEND _preferred_sdk_dirs "$ENV{WindowsSDKDir}")
|
||||
endif()
|
||||
|
||||
if(MSVC_VERSION LESS 1600)
|
||||
# Per-user current Windows SDK for VS2005/2008
|
||||
get_filename_component(_sdkdir
|
||||
"[HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]"
|
||||
ABSOLUTE)
|
||||
if(EXISTS "${_sdkdir}")
|
||||
list(APPEND _preferred_sdk_dirs "${_sdkdir}")
|
||||
endif()
|
||||
|
||||
# System-wide current Windows SDK for VS2005/2008
|
||||
get_filename_component(_sdkdir
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]"
|
||||
ABSOLUTE)
|
||||
if(EXISTS "${_sdkdir}")
|
||||
list(APPEND _preferred_sdk_dirs "${_sdkdir}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
foreach(_winsdkver v8.0A v7.1 v7.0A v6.1 v6.0A v6.0)
|
||||
get_filename_component(_sdkdir
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\${_winsdkver};InstallationFolder]"
|
||||
ABSOLUTE)
|
||||
if(EXISTS "${_sdkdir}")
|
||||
list(APPEND _win_sdk_dirs "${_sdkdir}")
|
||||
list(APPEND
|
||||
_win_sdk_versanddirs
|
||||
"Windows SDK ${_winsdkver}"
|
||||
"${_sdkdir}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
if(MSVC_VERSION GREATER 1200)
|
||||
foreach(_platformsdkinfo
|
||||
"D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1_Microsoft Platform SDK for Windows Server 2003 R2"
|
||||
"8F9E5EF3-A9A5-491B-A889-C58EFFECE8B3_Microsoft Platform SDK for Windows Server 2003 SP1")
|
||||
string(SUBSTRING "${_platformsdkinfo}" 0 36 _platformsdkguid)
|
||||
string(SUBSTRING "${_platformsdkinfo}" 37 -1 _platformsdkname)
|
||||
get_filename_component(_sdkdir
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\${_platformsdkguid};Install Dir]"
|
||||
ABSOLUTE)
|
||||
if(EXISTS "${_sdkdir}")
|
||||
list(APPEND _win_sdk_dirs "${_sdkdir}")
|
||||
list(APPEND _win_sdk_versanddirs "${_platformsdkname}" "${_sdkdir}")
|
||||
endif()
|
||||
|
||||
get_filename_component(_sdkdir
|
||||
"[HKEY_CURRENT_USER\\Software\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\${_platformsdkguid};Install Dir]"
|
||||
ABSOLUTE)
|
||||
if(EXISTS "${_sdkdir}")
|
||||
list(APPEND _win_sdk_dirs "${_sdkdir}")
|
||||
list(APPEND _win_sdk_versanddirs "${_platformsdkname}" "${_sdkdir}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
set(_win_sdk_versanddirs
|
||||
"${_win_sdk_versanddirs}"
|
||||
CACHE
|
||||
INTERNAL
|
||||
"mapping between windows sdk version locations and names"
|
||||
FORCE)
|
||||
|
||||
function(windowssdk_name_lookup _dir _outvar)
|
||||
list(FIND _win_sdk_versanddirs "${_dir}" _diridx)
|
||||
math(EXPR _nameidx "${_diridx} - 1")
|
||||
if(${_nameidx} GREATER -1)
|
||||
list(GET _win_sdk_versanddirs ${_nameidx} _sdkname)
|
||||
else()
|
||||
set(_sdkname "NOTFOUND")
|
||||
endif()
|
||||
set(${_outvar} "${_sdkname}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
if(_win_sdk_dirs)
|
||||
# Remove duplicates
|
||||
list(REMOVE_DUPLICATES _win_sdk_dirs)
|
||||
list(GET _win_sdk_dirs 0 WINDOWSSDK_LATEST_DIR)
|
||||
windowssdk_name_lookup("${WINDOWSSDK_LATEST_DIR}"
|
||||
WINDOWSSDK_LATEST_NAME)
|
||||
set(WINDOWSSDK_DIRS ${_win_sdk_dirs})
|
||||
endif()
|
||||
if(_preferred_sdk_dirs)
|
||||
list(GET _preferred_sdk_dirs 0 WINDOWSSDK_PREFERRED_DIR)
|
||||
windowssdk_name_lookup("${WINDOWSSDK_LATEST_DIR}"
|
||||
WINDOWSSDK_PREFERRED_NAME)
|
||||
set(WINDOWSSDK_PREFERRED_FIRST_DIRS
|
||||
${_preferred_sdk_dirs}
|
||||
${_win_sdk_dirs})
|
||||
list(REMOVE_DUPLICATES WINDOWSSDK_PREFERRED_FIRST_DIRS)
|
||||
set(WINDOWSSDK_FOUND_PREFERENCE ON)
|
||||
|
||||
# In case a preferred dir was found that isn't found otherwise
|
||||
#set(WINDOWSSDK_DIRS ${WINDOWSSDK_DIRS} ${WINDOWSSDK_PREFERRED_FIRST_DIRS})
|
||||
#list(REMOVE_DUPLICATES WINDOWSSDK_DIRS)
|
||||
else()
|
||||
set(WINDOWSSDK_PREFERRED_DIR "${WINDOWSSDK_LATEST_DIR}")
|
||||
set(WINDOWSSDK_PREFERRED_NAME "${WINDOWSSDK_LATEST_NAME}")
|
||||
set(WINDOWSSDK_PREFERRED_FIRST_DIRS ${WINDOWSSDK_DIRS})
|
||||
set(WINDOWSSDK_FOUND_PREFERENCE OFF)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(WindowsSDK
|
||||
"No compatible version of the Windows SDK or Platform SDK found."
|
||||
WINDOWSSDK_DIRS)
|
||||
|
||||
if(WINDOWSSDK_FOUND)
|
||||
if(NOT _winsdk_remembered_dirs STREQUAL WINDOWSSDK_DIRS)
|
||||
set(_winsdk_remembered_dirs
|
||||
"${WINDOWSSDK_DIRS}"
|
||||
CACHE
|
||||
INTERNAL
|
||||
""
|
||||
FORCE)
|
||||
if(NOT WindowsSDK_FIND_QUIETLY)
|
||||
foreach(_sdkdir ${WINDOWSSDK_DIRS})
|
||||
windowssdk_name_lookup("${_sdkdir}" _sdkname)
|
||||
message(STATUS " - Found ${_sdkname} at ${_sdkdir}")
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
Reference in New Issue
Block a user