1# - try to find part of DirectX SDK 2# 3# Cache Variables: (probably not for direct use in your scripts) 4# DIRECTX_INCLUDE_DIR 5# 6# Variables you should use in your CMakeLists.txt: 7# DIRECTX_DXGUID_LIBRARY - deprecated, see below 8# DIRECTX_DXERR_LIBRARY - deprecated, see http://blogs.msdn.com/b/chuckw/archive/2012/04/24/where-s-dxerr-lib.aspx 9# DIRECTX_DINPUT_LIBRARY 10# DIRECTX_DINPUT_INCLUDE_DIR 11# DIRECTX_D3D9_LIBRARY 12# DIRECTX_D3DXOF_LIBRARY 13# DIRECTX_D3DX9_LIBRARIES 14# DIRECTX_INCLUDE_DIRS 15# DIRECTX_FOUND - if this is not true, do not attempt to use this library 16# 17# Defines these macros: 18# find_directx_include - wrapper for find_path that provides PATHS, HINTS, and PATH_SUFFIXES. 19# find_directx_library - wrapper for find_library that provides PATHS, HINTS, and PATH_SUFFIXES. 20# Requires these CMake modules: 21# FindPackageHandleStandardArgs (known included with CMake >=2.6.2) 22# SelectLibraryConfigurations 23# 24# Original Author: 25# 2012 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net> 26# http://academic.cleardefinition.com 27# Iowa State University HCI Graduate Program/VRAC 28# 29# Copyright Iowa State University 2012. 30# Distributed under the Boost Software License, Version 1.0. 31# (See accompanying file LICENSE_1_0.txt or copy at 32# http://www.boost.org/LICENSE_1_0.txt) 33 34 35set(DIRECTX_ROOT_DIR 36 "${DIRECTX_ROOT_DIR}" 37 CACHE 38 PATH 39 "Root directory to search for DirectX") 40 41if(MSVC) 42 file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _PROG_FILES) 43 set(_PF86 "ProgramFiles(x86)") 44 file(TO_CMAKE_PATH "$ENV{${_PF86}}" _PROG_FILES_X86) 45 if(_PROG_FILES_X86) 46 set(_PROG_FILES "${_PROG_FILES_X86}") 47 endif() 48 if(CMAKE_SIZEOF_VOID_P EQUAL 8) 49 set(_dx_lib_suffixes lib/x64 lib) 50 else() 51 set(_dx_lib_suffixes lib/x86 lib) 52 endif() 53 set(DXSDK_DIRS) 54 55 set(_dx_quiet) 56 if(DirectX_FIND_QUIETLY) 57 set(_dx_quiet QUIET) 58 endif() 59 find_package(WindowsSDK ${_dx_quiet}) 60 if(WINDOWSSDK_FOUND) 61 foreach(_dir ${WINDOWSSDK_DIRS}) 62 get_windowssdk_include_dirs(${_dir} _include_dirs) 63 if(_include_dirs) 64 list(APPEND DXSDK_DIRS ${_include_dirs}) 65 endif() 66 endforeach() 67 endif() 68 69 macro(_append_dxsdk_in_inclusive_range _low _high) 70 if((NOT MSVC_VERSION LESS ${_low}) AND (NOT MSVC_VERSION GREATER ${_high})) 71 list(APPEND DXSDK_DIRS ${ARGN}) 72 endif() 73 endmacro() 74 _append_dxsdk_in_inclusive_range(1500 1600 "${_PROG_FILES}/Microsoft DirectX SDK (June 2010)") 75 _append_dxsdk_in_inclusive_range(1400 1600 76 "${_PROG_FILES}/Microsoft DirectX SDK (February 2010)" 77 "${_PROG_FILES}/Microsoft DirectX SDK (August 2009)" 78 "${_PROG_FILES}/Microsoft DirectX SDK (March 2009)" 79 "${_PROG_FILES}/Microsoft DirectX SDK (November 2008)" 80 "${_PROG_FILES}/Microsoft DirectX SDK (August 2008)" 81 "${_PROG_FILES}/Microsoft DirectX SDK (June 2008)" 82 "${_PROG_FILES}/Microsoft DirectX SDK (March 2008)") 83 _append_dxsdk_in_inclusive_range(1310 1500 84 "${_PROG_FILES}/Microsoft DirectX SDK (November 2007)" 85 "${_PROG_FILES}/Microsoft DirectX SDK (August 2007)" 86 "${_PROG_FILES}/Microsoft DirectX SDK (June 2007)" 87 "${_PROG_FILES}/Microsoft DirectX SDK (April 2007)" 88 "${_PROG_FILES}/Microsoft DirectX SDK (February 2007)" 89 "${_PROG_FILES}/Microsoft DirectX SDK (December 2006)" 90 "${_PROG_FILES}/Microsoft DirectX SDK (October 2006)" 91 "${_PROG_FILES}/Microsoft DirectX SDK (August 2006)" 92 "${_PROG_FILES}/Microsoft DirectX SDK (June 2006)" 93 "${_PROG_FILES}/Microsoft DirectX SDK (April 2006)" 94 "${_PROG_FILES}/Microsoft DirectX SDK (February 2006)") 95 96 file(TO_CMAKE_PATH "$ENV{DXSDK_DIR}" ENV_DXSDK_DIR) 97 if(ENV_DXSDK_DIR) 98 list(APPEND DXSDK_DIRS ${ENV_DXSDK_DIR}) 99 endif() 100else() 101 set(_dx_lib_suffixes lib) 102 set(DXSDK_DIRS /mingw) 103endif() 104 105find_path(DIRECTX_INCLUDE_DIR 106 NAMES 107 dxdiag.h 108 dinput.h 109 dxerr8.h 110 PATHS 111 ${DXSDK_DIRS} 112 HINTS 113 "${DIRECTX_ROOT_DIR}" 114 PATH_SUFFIXES 115 include) 116find_path(DIRECTX_DINPUT_INCLUDE_DIR 117 NAMES 118 dinput.h 119 PATHS 120 ${DXSDK_DIRS} 121 HINTS 122 "${DIRECTX_ROOT_DIR}" 123 PATH_SUFFIXES 124 include) 125 126set(DXLIB_HINTS) 127if(WINDOWSSDK_FOUND AND DIRECTX_INCLUDE_DIR) 128 get_windowssdk_from_component("${DIRECTX_INCLUDE_DIR}" _winsdk) 129 if(_winsdk) 130 get_windowssdk_library_dirs("${_winsdk}" _libdirs) 131 if(_libdirs) 132 list(APPEND DXLIB_HINTS ${_libdirs}) 133 endif() 134 endif() 135endif() 136 137if(WINDOWSSDK_FOUND AND DIRECTX_DINPUT_INCLUDE_DIR) 138 get_windowssdk_from_component("${DIRECTX_DINPUT_INCLUDE_DIR}" _winsdk) 139 if(_winsdk) 140 get_windowssdk_library_dirs("${_winsdk}" _includes) 141 if(_includes) 142 list(APPEND DXLIB_HINTS ${_includes}) 143 endif() 144 endif() 145endif() 146 147find_library(DIRECTX_DXGUID_LIBRARY 148 NAMES 149 dxguid 150 PATHS 151 ${DXLIB_HINTS} 152 ${DXSDK_DIRS} 153 HINTS 154 "${DIRECTX_ROOT_DIR}" 155 PATH_SUFFIXES 156 ${_dx_lib_suffixes}) 157 158if(DIRECTX_DXGUID_LIBRARY) 159 get_filename_component(_dxsdk_lib_dir ${DIRECTX_DXGUID_LIBRARY} PATH) 160 list(APPEND DXLIB_HINTS "${_dxsdk_lib_dir}") 161endif() 162 163find_library(DIRECTX_DINPUT_LIBRARY 164 NAMES 165 dinput8 166 dinput 167 PATHS 168 ${DXSDK_DIRS} 169 HINTS 170 ${DXLIB_HINTS} 171 "${DIRECTX_ROOT_DIR}" 172 PATH_SUFFIXES 173 ${_dx_lib_suffixes}) 174 175find_library(DIRECTX_DXERR_LIBRARY 176 NAMES 177 dxerr 178 dxerr9 179 dxerr8 180 PATHS 181 ${DXSDK_DIRS} 182 HINTS 183 ${DXLIB_HINTS} 184 "${DIRECTX_ROOT_DIR}" 185 PATH_SUFFIXES 186 ${_dx_lib_suffixes}) 187 188find_library(DIRECTX_D3D9_LIBRARY 189 NAMES 190 d3d9 191 PATHS 192 ${DXSDK_DIRS} 193 HINTS 194 ${DXLIB_HINTS} 195 "${DIRECTX_ROOT_DIR}" 196 PATH_SUFFIXES 197 ${_dx_lib_suffixes}) 198 199find_library(DIRECTX_D3DXOF_LIBRARY 200 NAMES 201 d3dxof 202 PATHS 203 ${DXSDK_DIRS} 204 HINTS 205 ${DXLIB_HINTS} 206 "${DIRECTX_ROOT_DIR}" 207 PATH_SUFFIXES 208 ${_dx_lib_suffixes}) 209 210find_library(DIRECTX_D3DX9_LIBRARY_RELEASE 211 NAMES 212 d3dx9 213 PATHS 214 ${DXSDK_DIRS} 215 HINTS 216 ${DXLIB_HINTS} 217 "${DIRECTX_ROOT_DIR}" 218 PATH_SUFFIXES 219 ${_dx_lib_suffixes}) 220 221find_library(DIRECTX_D3DX9_LIBRARY_DEBUG 222 NAMES 223 d3dx9d 224 PATHS 225 ${DXSDK_DIRS} 226 HINTS 227 ${DXLIB_HINTS} 228 "${DIRECTX_ROOT_DIR}" 229 PATH_SUFFIXES 230 ${_dx_lib_suffixes}) 231 232find_library(DIRECTX_XINPUT_LIBRARY 233 NAMES 234 Xinput9_1_0 235 Xinput 236 PATHS 237 ${DXSDK_DIRS} 238 HINTS 239 ${DXLIB_HINTS} 240 "${DIRECTX_ROOT_DIR}" 241 PATH_SUFFIXES 242 ${_dx_lib_suffixes}) 243 244include(SelectLibraryConfigurations) 245select_library_configurations(DIRECTX_D3DX9) 246 247set(DIRECTX_EXTRA_CHECK) 248if(DIRECTX_INCLUDE_DIR) 249 if(MSVC80) 250 set(DXSDK_DEPRECATION_BUILD 1962) 251 endif() 252 253 if(DXSDK_DEPRECATION_BUILD) 254 include(CheckCSourceCompiles) 255 set(_dinput_old_includes ${CMAKE_REQUIRED_INCLUDES}) 256 set(CMAKE_REQUIRED_INCLUDES "${DIRECTX_INCLUDE_DIR}") 257 check_c_source_compiles(" 258 #include <dxsdkver.h> 259 #if _DXSDK_BUILD_MAJOR >= ${DXSDK_DEPRECATION_BUILD} 260 #error 261 #else 262 int main(int argc, char * argv[]) { 263 return 0; 264 } 265 #endif 266 " 267 DIRECTX_SDK_SUPPORTS_COMPILER) 268 set(DIRECTX_EXTRA_CHECK DIRECTX_SDK_SUPPORTS_COMPILER) 269 set(CMAKE_REQUIRED_INCLUDES "${_dinput_old_includes}") 270 else() 271 # Until proven otherwise. 272 set(DIRECTX_SDK_SUPPORTS_COMPILER TRUE) 273 endif() 274endif() 275 276include(FindPackageHandleStandardArgs) 277find_package_handle_standard_args(DirectX 278 DEFAULT_MSG 279 DIRECTX_DXGUID_LIBRARY 280 DIRECTX_DINPUT_LIBRARY 281 DIRECTX_INCLUDE_DIR 282 ${DIRECTX_EXTRA_CHECK}) 283 284if(DIRECTX_FOUND) 285 set(DIRECTX_LIBRARIES 286 "${DIRECTX_DXGUID_LIBRARY}" 287 "${DIRECTX_DINPUT_LIBRARY}") 288 289 set(DIRECTX_INCLUDE_DIRS "${DIRECTX_INCLUDE_DIR}") 290 291 mark_as_advanced(DIRECTX_ROOT_DIR) 292endif() 293 294macro(find_directx_library) 295 find_library(${ARGN} 296 PATHS 297 ${DXSDK_DIRS} 298 HINTS 299 ${DXLIB_HINTS} 300 "${DIRECTX_ROOT_DIR}" 301 PATH_SUFFIXES 302 ${_dx_lib_suffixes}) 303endmacro() 304macro(find_directx_include) 305 find_path(${ARGN} 306 PATHS 307 ${DXSDK_DIRS} 308 HINTS 309 ${DIRECTX_INCLUDE_DIR} 310 "${DIRECTX_ROOT_DIR}" 311 PATH_SUFFIXES 312 include) 313endmacro() 314 315mark_as_advanced(DIRECTX_DINPUT_LIBRARY 316 DIRECTX_DXGUID_LIBRARY 317 DIRECTX_DXERR_LIBRARY 318 DIRECTX_D3D9_LIBRARY 319 DIRECTX_D3DXOF_LIBRARY 320 DIRECTX_D3DX9_LIBRARY_RELEASE 321 DIRECTX_D3DX9_LIBRARY_DEBUG 322 DIRECTX_INCLUDE_DIR) 323