| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | #.rst:# FindWinSock# --------## Find the native realtime includes and library.## IMPORTED Targets# ^^^^^^^^^^^^^^^^## This module defines :prop_tgt:`IMPORTED` target ``WINSOCK::WINSOCK``, if# WINSOCK has been found.## Result Variables# ^^^^^^^^^^^^^^^^## This module defines the following variables:## ::##   WINSOCK_INCLUDE_DIRS  - where to find winsock.h, etc.#   WINSOCK_LIBRARIES     - List of libraries when using librt.#   WINSOCK_FOUND         - True if realtime library found.## Hints# ^^^^^## A user may set ``WINSOCK_ROOT`` to a realtime installation root to tell this# module where to look.macro(REMOVE_DUPLICATE_PATHS LIST_VAR)  set(WINSOCK_LIST "")  foreach(PATH IN LISTS ${LIST_VAR})    get_filename_component(PATH "${PATH}" REALPATH)    list(APPEND WINSOCK_LIST "${PATH}")  endforeach(PATH)  set(${LIST_VAR} ${WINSOCK_LIST})  list(REMOVE_DUPLICATES ${LIST_VAR})endmacro(REMOVE_DUPLICATE_PATHS)set(WINSOCK_INCLUDE_PATHS "${WINSOCK_ROOT}/include/")if(MINGW)  file(TOUCH ${CMAKE_BINARY_DIR}/nul)  execute_process(    COMMAND ${CMAKE_C_COMPILER} -xc -E -v -    RESULT_VARIABLE RESULT    INPUT_FILE nul    ERROR_VARIABLE ERR    OUTPUT_QUIET  )  if (NOT RESULT)    string(FIND "${ERR}" "#include <...> search starts here:" START)    string(FIND "${ERR}" "End of search list." END)    if (NOT ${START} EQUAL -1 AND NOT ${END} EQUAL -1)      math(EXPR START "${START} + 36")      math(EXPR END "${END} - 1")      math(EXPR LENGTH "${END} - ${START}")      string(SUBSTRING "${ERR}" ${START} ${LENGTH} WINSOCK_INCLUDE_PATHS)      string(REPLACE "\n " ";" WINSOCK_INCLUDE_PATHS "${WINSOCK_INCLUDE_PATHS}")      list(REVERSE WINSOCK_INCLUDE_PATHS)    endif()  endif()endif()remove_duplicate_paths(WINSOCK_INCLUDE_PATHS)set(WINSOCK_LIBRARY_PATHS "${WINSOCK_ROOT}/lib/")if(MINGW)  execute_process(    COMMAND ${CMAKE_C_COMPILER} -print-search-dirs    RESULT_VARIABLE RESULT    OUTPUT_VARIABLE OUT    ERROR_QUIET  )  if (NOT RESULT)    string(REGEX MATCH "libraries: =([^\r\n]*)" OUT "${OUT}")    if(CMAKE_HOST_WIN32)      message(STATUS "not replacing ${_SEARCH_PATHS}")      list(APPEND WINSOCK_LIBRARY_PATHS "${CMAKE_MATCH_1}")    else()      # On Unix-like host systems, search dirs are separated by ':'.      # Thus we need to replace ':' with ';' to make a valid cmake list.      string(REPLACE ":" ";" _SEARCH_PATHS "${CMAKE_MATCH_1}")      list(APPEND WINSOCK_LIBRARY_PATHS "${_SEARCH_PATHS}")      unset(_SEARCH_PATHS)    endif()  endif()endif()if ("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "AMD64" AND "${CMAKE_SIZEOF_VOID_P}" EQUAL 4)  list(APPEND WINSOCK_LIBRARY_PATHS "C:/Windows/SysWOW64")endif()list(APPEND WINSOCK_LIBRARY_PATHS "C:/Windows/System32")remove_duplicate_paths(WINSOCK_LIBRARY_PATHS)find_path(WINSOCK_INCLUDE_DIRS  NAMES winsock2.h  PATHS ${WINSOCK_INCLUDE_PATHS})find_library(WINSOCK_LIBRARIES ws2_32  PATHS ${WINSOCK_LIBRARY_PATHS}  NO_DEFAULT_PATH)include(FindPackageHandleStandardArgs)find_package_handle_standard_args(WinSock DEFAULT_MSG WINSOCK_LIBRARIES WINSOCK_INCLUDE_DIRS)mark_as_advanced(WINSOCK_INCLUDE_DIRS WINSOCK_LIBRARIES)if(WINSOCK_FOUND)    if(NOT TARGET WINSOCK::WINSOCK)      add_library(WINSOCK::WINSOCK UNKNOWN IMPORTED)      set_target_properties(WINSOCK::WINSOCK PROPERTIES        IMPORTED_LOCATION "${WINSOCK_LIBRARIES}"        INTERFACE_INCLUDE_DIRECTORIES "${WINSOCK_INCLUDE_DIRS}")    endif()endif()
 |