mirror of https://github.com/getdnsapi/getdns.git
Add libuv extension.
This commit is contained in:
parent
3604add64f
commit
6a043d2fac
|
@ -113,6 +113,7 @@ option(BUILD_STUBBY "Compile and install stubby, the (stub) resolver daemon." OF
|
||||||
|
|
||||||
option(USE_LIBEV "Use libev if available." ON)
|
option(USE_LIBEV "Use libev if available." ON)
|
||||||
option(USE_LIBEVENT2 "Use libevent2 if available." ON)
|
option(USE_LIBEVENT2 "Use libevent2 if available." ON)
|
||||||
|
option(USE_LIBUV "Use libuv if available." ON)
|
||||||
option(USE_LIBIDN "Use libidn if available." ON)
|
option(USE_LIBIDN "Use libidn if available." ON)
|
||||||
option(USE_LIBIDN2 "Use libidn2 if available." ON)
|
option(USE_LIBIDN2 "Use libidn2 if available." ON)
|
||||||
|
|
||||||
|
@ -687,6 +688,45 @@ if (USE_LIBEVENT2)
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# libuv extension.
|
||||||
|
if (USE_LIBUV)
|
||||||
|
find_package(Libuv)
|
||||||
|
if (Libuv_FOUND)
|
||||||
|
# Copy module header to getdns include dir.
|
||||||
|
file(COPY src/getdns/getdns_ext_libuv.h DESTINATION getdns)
|
||||||
|
|
||||||
|
add_library(uv_objects OBJECT src/extension/libuv.c)
|
||||||
|
target_include_directories(uv_objects
|
||||||
|
PRIVATE
|
||||||
|
src
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
set_property(TARGET uv_objects PROPERTY POSITION_INDEPENDENT_CODE 1)
|
||||||
|
set_property(TARGET uv_objects PROPERTY C_STANDARD 11)
|
||||||
|
if (ENABLE_STATIC)
|
||||||
|
add_library(getdns_ex_uv STATIC $<TARGET_OBJECTS:uv_objects>)
|
||||||
|
target_include_directories(getdns_ex_uv PRIVATE Libuv::Libuv)
|
||||||
|
target_link_libraries(getdns_ex_uv PUBLIC getdns Libuv::Libuv)
|
||||||
|
set_target_properties(getdns_ex_uv PROPERTIES OUTPUT_NAME getdns_ex_uv${static_lib_suffix})
|
||||||
|
endif ()
|
||||||
|
if (ENABLE_SHARED)
|
||||||
|
add_library(getdns_ex_uv_shared SHARED $<TARGET_OBJECTS:uv_objects>)
|
||||||
|
target_include_directories(getdns_ex_uv_shared PRIVATE Libuv::Libuv)
|
||||||
|
target_link_libraries(getdns_ex_uv_shared PUBLIC getdns_shared Libuv::Libuv)
|
||||||
|
set_target_properties(getdns_ex_uv_shared PROPERTIES OUTPUT_NAME getdns_ex_uv)
|
||||||
|
target_shared_library_version(getdns_ex_uv_shared ${GETDNS_VERSION_CURRENT} ${GETDNS_VERSION_REVISION} ${GETDNS_VERSION_AGE})
|
||||||
|
file(STRINGS src/extension/libuv.symbols symbols)
|
||||||
|
target_shared_library_exports(getdns_ex_uv_shared getdns_ex_uv "${symbols}")
|
||||||
|
if (NOT ENABLE_STATIC)
|
||||||
|
add_library(getdns_ex_uv ALIAS getdns_ex_uv_shared)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
else ()
|
||||||
|
message(WARNING "Libuv not found, libuv extension not built.")
|
||||||
|
set(USE_LIBUV OFF)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
# The tools.
|
# The tools.
|
||||||
if (BUILD_GETDNS_QUERY)
|
if (BUILD_GETDNS_QUERY)
|
||||||
add_executable(getdns_query src/tools/getdns_query.c)
|
add_executable(getdns_query src/tools/getdns_query.c)
|
||||||
|
@ -812,6 +852,9 @@ if (ENABLE_STATIC)
|
||||||
if (USE_LIBEVENT2)
|
if (USE_LIBEVENT2)
|
||||||
install(TARGETS getdns_ex_event LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
install(TARGETS getdns_ex_event LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
||||||
endif ()
|
endif ()
|
||||||
|
if (USE_LIBUV)
|
||||||
|
install(TARGETS getdns_ex_uv LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
||||||
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
if (ENABLE_SHARED)
|
if (ENABLE_SHARED)
|
||||||
install(TARGETS getdns_shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
install(TARGETS getdns_shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
||||||
|
@ -821,6 +864,9 @@ if (ENABLE_SHARED)
|
||||||
if (USE_LIBEVENT2)
|
if (USE_LIBEVENT2)
|
||||||
install(TARGETS getdns_ex_event_shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
install(TARGETS getdns_ex_event_shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
||||||
endif ()
|
endif ()
|
||||||
|
if (USE_LIBUV)
|
||||||
|
install(TARGETS getdns_ex_uv_shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
|
||||||
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
if (BUILD_GETDNS_QUERY)
|
if (BUILD_GETDNS_QUERY)
|
||||||
install(TARGETS getdns_query RUNTIME DESTINATION bin)
|
install(TARGETS getdns_query RUNTIME DESTINATION bin)
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
#[=======================================================================[.rst:
|
||||||
|
FindLibuv
|
||||||
|
---------
|
||||||
|
|
||||||
|
Find the Libuv library.
|
||||||
|
|
||||||
|
Imported targets
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This module defines the following :prop_tgt:`IMPORTED` targets:
|
||||||
|
|
||||||
|
``Libuv::Libuv``
|
||||||
|
The Libuv library, if found.
|
||||||
|
|
||||||
|
Result variables
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This module will set the following variables in your project:
|
||||||
|
|
||||||
|
``Libuv_FOUND``
|
||||||
|
If false, do not try to use Libuv.
|
||||||
|
``LIBUV_INCLUDE_DIR``
|
||||||
|
where to find check.h, etc.
|
||||||
|
``LIBUV_LIBRARIES``
|
||||||
|
the libraries needed to use Libuv.
|
||||||
|
``LIBUV_VERSION``
|
||||||
|
the version of the Libuv library found
|
||||||
|
|
||||||
|
#]=======================================================================]
|
||||||
|
|
||||||
|
find_path(LIBUV_INCLUDE_DIR uv.h
|
||||||
|
HINTS
|
||||||
|
"${LIBUV_DIR}"
|
||||||
|
"${LIBUV_DIR}/include"
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(LIBUV_LIBRARY NAMES uv libuv
|
||||||
|
HINTS
|
||||||
|
"${LIBUV_DIR}"
|
||||||
|
"${LIBUV_DIR}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LIBUV_LIBRARIES "")
|
||||||
|
|
||||||
|
if (LIBUV_INCLUDE_DIR AND LIBUV_LIBRARY)
|
||||||
|
if (NOT TARGET Libuv::Libuv)
|
||||||
|
add_library(Libuv::Libuv UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(Libuv::Libuv PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${LIBUV_INCLUDE_DIR}"
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "${LIBUV_LIBRARY}"
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT LIBUV_VERSION AND LIBUV_INCLUDE_DIR)
|
||||||
|
if (EXISTS "${LIBUV_INCLUDE_DIR}/uv-version.h")
|
||||||
|
file(STRINGS "${LIBUV_INCLUDE_DIR}/uv-version.h" LIBUV_VER_H REGEX "^#define UV_VERSION_(MAJOR|MINOR|PATCH) ")
|
||||||
|
elseif (EXISTS "${LIBUV_INCLUDE_DIR}/uv/version.h")
|
||||||
|
file(STRINGS "${LIBUV_INCLUDE_DIR}/uv/version.h" LIBUV_VER_H REGEX "^#define UV_VERSION_(MAJOR|MINOR|PATCH) ")
|
||||||
|
endif ()
|
||||||
|
string(REGEX REPLACE "^.*_MAJOR ([0-9]+).*_MINOR ([0-9]+).*_PATCH ([0-9]+).*$" "\\1.\\2.\\3" LIBUV_VERSION "${LIBUV_VER_H}")
|
||||||
|
endif ()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND LIBUV_LIBRARIES "${LIBUV_LIBRARY}")
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Libuv
|
||||||
|
REQUIRED_VARS LIBUV_LIBRARIES LIBUV_INCLUDE_DIR
|
||||||
|
VERSION_VAR LIBUV_VERSION
|
||||||
|
)
|
||||||
|
|
||||||
|
mark_as_advanced(LIBUV_INCLUDE_DIR LIBUV_LIBRARIES LIBUV_LIBRARY)
|
Loading…
Reference in New Issue