--- cmake/Findlibutp.cmake.orig 2026-01-31 08:51:20 UTC +++ cmake/Findlibutp.cmake @@ -0,0 +1,94 @@ +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()