qt5base-lts/cmake/FindWrapRt.cmake
Alexandru Croitor 331b153be5 CMake: Fix FindWrapRt module when it's found multiple times
On Windows, when WrapRt is qt_find_pacakge()'d the first time, the
result is "not found", whereas a second time it would claim that the
package is found.

This is due to the WrapRt target being always created even if it has
no transitive dependencies, and thus a second search would check only
for the existence of the target.

Fix the module to only create the target if the relevant library
is found.

Change-Id: I5c838cbfbafb4029f96da815a0f72e4a8e6716b0
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2020-02-25 15:43:16 +01:00

38 lines
854 B
CMake

# We can't create the same interface imported target multiple times, CMake will complain if we do
# that. This can happen if the find_package call is done in multiple different subdirectories.
if(TARGET WrapRt)
set(WrapRt_FOUND ON)
return()
endif()
set(WrapRt_FOUND OFF)
include(CheckCXXSourceCompiles)
include(CMakePushCheckState)
find_library(LIBRT rt)
cmake_push_check_state()
if(LIBRT_FOUND)
list(APPEND CMAKE_REQUIRED_LIBRARIES "${LIBRT}")
endif()
check_cxx_source_compiles("
#include <unistd.h>
#include <time.h>
int main(int argc, char *argv[]) {
timespec ts; clock_gettime(CLOCK_REALTIME, &ts);
}" HAVE_GETTIME)
cmake_pop_check_state()
if(HAVE_GETTIME)
set(WrapRt_FOUND ON)
add_library(WrapRt INTERFACE IMPORTED)
if (LIBRT_FOUND)
target_link_libraries(WrapRt INTERFACE "${LIBRT}")
endif()
endif()