Give the option to build uvw as lib without fetching the libuv dependency
creating a fake lib to re-activate the lib test closes #231 Signed-off-by: Fiorentino Ing. Stefano <stefano.fiore84@gmail.com>
This commit is contained in:
parent
6ed211328e
commit
2ea56b1dd1
@ -65,26 +65,30 @@ if(NOT WIN32 AND USE_LIBCPP)
|
||||
cmake_pop_check_state()
|
||||
endif()
|
||||
|
||||
option(FETCH_LIBUV "Fetch the libuv repo using CMake FetchContent facility" ON)
|
||||
function(fetch_libuv)
|
||||
include(FetchContent)
|
||||
if (FETCH_LIBUV)
|
||||
include(FetchContent)
|
||||
|
||||
FetchContent_Declare(
|
||||
libuv
|
||||
GIT_REPOSITORY https://github.com/libuv/libuv.git
|
||||
GIT_TAG v1.40.0
|
||||
GIT_SHALLOW 1
|
||||
)
|
||||
FetchContent_Declare(
|
||||
libuv
|
||||
GIT_REPOSITORY https://github.com/libuv/libuv.git
|
||||
GIT_TAG v1.40.0
|
||||
GIT_SHALLOW 1
|
||||
)
|
||||
|
||||
FetchContent_GetProperties(libuv)
|
||||
FetchContent_GetProperties(libuv)
|
||||
|
||||
if(NOT libuv_POPULATED)
|
||||
FetchContent_Populate(libuv)
|
||||
add_subdirectory(${libuv_SOURCE_DIR} ${libuv_BINARY_DIR})
|
||||
endif()
|
||||
if(NOT libuv_POPULATED)
|
||||
FetchContent_Populate(libuv)
|
||||
add_subdirectory(${libuv_SOURCE_DIR} ${libuv_BINARY_DIR})
|
||||
endif()
|
||||
|
||||
add_library(uv::uv-static ALIAS uv_a)
|
||||
set_target_properties(uv_a PROPERTIES POSITION_INDEPENDENT_CODE 1)
|
||||
set_target_properties(uv PROPERTIES POSITION_INDEPENDENT_CODE 1)
|
||||
add_library(uv::uv-static ALIAS uv_a)
|
||||
|
||||
set_target_properties(uv_a PROPERTIES POSITION_INDEPENDENT_CODE 1)
|
||||
set_target_properties(uv PROPERTIES POSITION_INDEPENDENT_CODE 1)
|
||||
endif(FETCH_LIBUV)
|
||||
endfunction()
|
||||
|
||||
#
|
||||
@ -93,10 +97,11 @@ endfunction()
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
|
||||
if(BUILD_UVW_LIBS)
|
||||
fetch_libuv()
|
||||
add_subdirectory(src)
|
||||
|
||||
add_subdirectory(src)
|
||||
file(GLOB HEADERS src/uvw/*.h src/uvw/*.hpp)
|
||||
else()
|
||||
add_library(uvw INTERFACE)
|
||||
@ -167,6 +172,7 @@ if(BUILD_TESTING)
|
||||
option(FIND_GTEST_PACKAGE "Enable finding gtest package." OFF)
|
||||
|
||||
fetch_libuv()
|
||||
|
||||
enable_testing()
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
|
||||
@ -63,7 +63,7 @@ endfunction()
|
||||
|
||||
add_library(uvw-static STATIC)
|
||||
add_library(uvw::uvw-static ALIAS uvw-static)
|
||||
target_link_libraries(uvw-static PUBLIC uv::uv-static)
|
||||
target_link_libraries(uvw-static PUBLIC $<$<TARGET_EXISTS:uv::uv-static>:uv::uv-static> $<$<NOT:$<TARGET_EXISTS:uv::uv-static>>:uv_a dl>)
|
||||
set_target_properties(uvw-static PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
|
||||
add_uvw_library(uvw-static)
|
||||
|
||||
@ -73,5 +73,7 @@ add_uvw_library(uvw-static)
|
||||
|
||||
install(EXPORT uvw NAMESPACE uvw:: DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(TARGETS uvw-static EXPORT uvw ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(TARGETS uv_a EXPORT uvw ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(TARGETS uv EXPORT uvw LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
if(FETCH_LIBUV)
|
||||
install(TARGETS uv_a EXPORT uvw ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(TARGETS uv EXPORT uvw LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
endif(FETCH_LIBUV)
|
||||
|
||||
@ -48,7 +48,7 @@ function(ADD_UVW_TEST TEST_NAME TEST_SOURCE)
|
||||
${TEST_NAME}
|
||||
PRIVATE
|
||||
$<$<TARGET_EXISTS:uvw::uvw>:uvw::uvw>
|
||||
$<$<TARGET_EXISTS:uvw::uvw>:uv::uv-static>
|
||||
$<$<TARGET_EXISTS:uv::uv-static>:uv::uv-static>
|
||||
$<$<TARGET_EXISTS:uvw::uvw-static>:uvw::uvw-static>
|
||||
GTest::Main
|
||||
Threads::Threads
|
||||
@ -78,9 +78,11 @@ endfunction()
|
||||
function(ADD_UVW_LIB_TEST TEST_NAME TEST_SOURCE)
|
||||
ADD_UVW_TEST(${TEST_NAME} ${TEST_SOURCE})
|
||||
target_link_libraries(${TEST_NAME} PRIVATE ${CMAKE_DL_LIBS})
|
||||
target_compile_definitions(${TEST_NAME} PRIVATE TARGET_LIB_SO="$<TARGET_FILE:uv>")
|
||||
target_compile_definitions(${TEST_NAME} PRIVATE TARGET_LIB_SO="$<TARGET_FILE:fake>")
|
||||
endfunction()
|
||||
|
||||
add_library(fake SHARED fake.cpp)
|
||||
|
||||
# List of available targets
|
||||
|
||||
option(BUILD_DNS_TEST "Build DNS test." OFF)
|
||||
|
||||
9
test/fake.cpp
Normal file
9
test/fake.cpp
Normal file
@ -0,0 +1,9 @@
|
||||
#include <stdio.h>
|
||||
|
||||
extern "C" int fake_func(double *);
|
||||
|
||||
int fake_func(double *d) {
|
||||
if (d)
|
||||
*d = -*d;
|
||||
return -42;
|
||||
}
|
||||
@ -22,7 +22,10 @@ TEST(SharedLib, Success) {
|
||||
ASSERT_TRUE(static_cast<bool>(*lib));
|
||||
ASSERT_EQ(&lib->loop(), loop.get());
|
||||
ASSERT_EQ(lib->sym<int(double *)>("foobar"), nullptr);
|
||||
ASSERT_NE(lib->sym<int(double *)>("uv_uptime"), nullptr);
|
||||
ASSERT_NE(lib->sym<int(double *)>("fake_func"), nullptr);
|
||||
double d{1.};
|
||||
ASSERT_EQ(-42, lib->sym<int(double *)>("fake_func")(&d));
|
||||
ASSERT_DOUBLE_EQ(-1., d);
|
||||
|
||||
// this forces a call to the destructor to invoke uv_dlclose
|
||||
lib.reset();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user