Files
transmission/cmake/Findlibutp.cmake

95 lines
3.1 KiB
CMake

if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB)
set(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
if(WIN32)
set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
else()
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
endif()
endif()
if(UNIX)
find_package(PkgConfig QUIET)
pkg_check_modules(_UTP QUIET libutp)
endif()
find_path(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR
NAMES libutp/utp.h
HINTS ${_UTP_INCLUDEDIR})
find_library(${CMAKE_FIND_PACKAGE_NAME}_LIBRARY
NAMES utp
HINTS ${_UTP_LIBDIR})
include(CheckCXXSymbolExists)
set(_UTP_FUNCS
utp_check_timeouts
utp_close
utp_connect
utp_context_get_userdata
utp_context_set_option
utp_context_set_userdata
utp_create_socket
utp_destroy
utp_getpeername
utp_get_userdata
utp_init
utp_issue_deferred_acks
utp_process_udp
utp_read_drained
utp_set_callback
utp_set_userdata
utp_write
utp_writev)
set(_UTP_OLD_CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}")
set(_UTP_OLD_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
set(_UTP_OLD_CMAKE_REQUIRED_QUIET "${CMAKE_REQUIRED_QUIET}")
set(CMAKE_REQUIRED_INCLUDES "${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR}")
set(CMAKE_REQUIRED_LIBRARIES "${${CMAKE_FIND_PACKAGE_NAME}_LIBRARY}")
set(CMAKE_REQUIRED_QUIET ON)
foreach(_UTP_FUNC IN LISTS _UTP_FUNCS)
string(MAKE_C_IDENTIFIER "HAVE_${_UTP_FUNC}" _UTP_FUNC_VAR)
string(TOUPPER "${_UTP_FUNC_VAR}" _UTP_FUNC_VAR)
check_cxx_symbol_exists(${_UTP_FUNC} libutp/utp.h ${_UTP_FUNC_VAR})
if(NOT ${_UTP_FUNC_VAR})
unset(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR CACHE)
unset(${CMAKE_FIND_PACKAGE_NAME}_LIBRARY CACHE)
break()
endif()
endforeach()
set(CMAKE_REQUIRED_INCLUDES "${_UTP_OLD_CMAKE_REQUIRED_INCLUDES}")
set(CMAKE_REQUIRED_LIBRARIES "${_UTP_OLD_CMAKE_REQUIRED_LIBRARIES}")
set(CMAKE_REQUIRED_QUIET "${_UTP_OLD_CMAKE_REQUIRED_QUIET}")
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME}
REQUIRED_VARS
${CMAKE_FIND_PACKAGE_NAME}_LIBRARY
${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR)
if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
set(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
set(${CMAKE_FIND_PACKAGE_NAME}_LIBRARIES ${${CMAKE_FIND_PACKAGE_NAME}_LIBRARY})
if(NOT TARGET libutp::libutp)
add_library(libutp::libutp INTERFACE IMPORTED)
target_include_directories(libutp::libutp
INTERFACE
${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
target_link_libraries(libutp::libutp
INTERFACE
${${CMAKE_FIND_PACKAGE_NAME}_LIBRARY})
endif()
endif()
mark_as_advanced(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR ${CMAKE_FIND_PACKAGE_NAME}_LIBRARY)
if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
unset(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
endif()