diff --git a/cmake/FindWinHID.cmake b/cmake/FindWinHID.cmake new file mode 100644 index 0000000..af3e29a --- /dev/null +++ b/cmake/FindWinHID.cmake @@ -0,0 +1,127 @@ +# - try to find Windows HID support, part of the WDK/DDK +# +# Cache Variables: (probably not for direct use in your scripts) +# WINHID_INCLUDE_DIR +# WINHID_CRT_INCLUDE_DIR +# WINHID_LIBRARY +# +# Non-cache variables you might use in your CMakeLists.txt: +# WINHID_FOUND +# WINHID_INCLUDE_DIRS +# WINHID_LIBRARIES +# +# Requires these CMake modules: +# FindPackageHandleStandardArgs (known included with CMake >=2.6.2) +# PrefixListGlob +# CleanDirectoryList +# +# Original Author: +# 2009-2010 Ryan Pavlik +# http://academic.cleardefinition.com +# Iowa State University HCI Graduate Program/VRAC +# +# Copyright Iowa State University 2009-2010 +# 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) + +if(NOT WIN32) + find_package_handle_standard_args(WinHID + "Skipping search for Windows HID on non-Windows platform" + WIN32) + return() +endif() + +if( (NOT WINHID_ROOT_DIR) AND (NOT ENV{DDKROOT} STREQUAL "") ) + set(WINHID_ROOT_DIR "$ENV{DDKROOT}") +endif() +set(WINHID_ROOT_DIR + "${WINHID_ROOT_DIR}" + CACHE + PATH + "Directory to search") + +if(CMAKE_SIZEOF_VOID_P MATCHES "8") + set(_arch amd64) +else() + set(_arch i386) +endif() + +include(PrefixListGlob) +include(CleanDirectoryList) +prefix_list_glob(_prefixed "*/" "$ENV{SYSTEMDRIVE}/WinDDK/" "c:/WinDDK/") +clean_directory_list(_prefixed) + +find_library(WINHID_LIBRARY + NAMES + hid + HINTS + "${WINHID_ROOT_DIR}" + ${_prefixed} + PATH_SUFFIXES + "lib/w2k/${_arch}" # Win2k min requirement + "lib/wxp/${_arch}" # WinXP min requirement + "lib/wnet/${_arch}" # Win Server 2003 min requirement + "lib/wlh/${_arch}" # Win Vista ("Long Horn") min requirement + "lib/win7/${_arch}" # Win 7 min requirement + ) + +# Might want to look close to the library first for the includes. +get_filename_component(_libdir "${WINHID_LIBRARY}" PATH) +get_filename_component(_basedir "${_libdir}/../../.." ABSOLUTE) + +find_path(WINHID_INCLUDE_DIR + NAMES + hidsdi.h + HINTS + "${_basedir}" + PATHS + "${WINHID_ROOT_DIR}" + PATH_SUFFIXES + inc/api) + +find_path(WINHID_CRT_INCLUDE_DIR # otherwise you get weird compile errors + NAMES + stdio.h + HINTS + "${_basedir}" + PATHS + "${WINHID_ROOT_DIR}" + PATH_SUFFIXES + inc/crt + NO_DEFAULT_PATH) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(WinHID + DEFAULT_MSG + WINHID_LIBRARY + WINHID_INCLUDE_DIR + WINHID_CRT_INCLUDE_DIR) + +if(WINHID_FOUND) + set(_winreq "Unknown") + if(WINHID_LIBRARY MATCHES "lib/w2k") + set(_winreq "Windows 2000") + elseif(WINHID_LIBRARY MATCHES "lib/wxp") + set(_winreq "Windows XP") + elseif(WINHID_LIBRARY MATCHES "lib/wnet") + set(_winreq "Windows Server 2003") + elseif(WINHID_LIBRARY MATCHES "lib/wlh") + set(_winreq "Windows Vista") + elseif(WINHID_LIBRARY MATCHES "lib/win7") + set(_winreq "Windows 7") + endif() + if(NOT "${WINHID_MIN_WINDOWS_VER}" STREQUAL "${_winreq}") + if(NOT WinHID_FIND_QUIETLY) + message(STATUS "Linking against WINHID_LIBRARY will enforce this minimum version: ${_winreq}") + endif() + set(WINHID_MIN_WINDOWS_VER "${_winreq}" CACHE INTERNAL "" FORCE) + endif() + set(WINHID_LIBRARIES "${WINHID_LIBRARY}") + set(WINHID_INCLUDE_DIRS "${WINHID_CRT_INCLUDE_DIR}" "${WINHID_INCLUDE_DIR}") + mark_as_advanced(WINHID_ROOT_DIR) +endif() + +mark_as_advanced(WINHID_INCLUDE_DIR + WINHID_CRT_INCLUDE_DIR + WINHID_LIBRARY)