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:
Fiorentino Ing. Stefano 2020-11-16 17:36:05 +01:00
parent 6ed211328e
commit 2ea56b1dd1
5 changed files with 44 additions and 22 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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
View 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;
}

View File

@ -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();