CMake: Fix time.h checks not running on second CMake run.

If CMake was configured more than once, HAVE_CLOCK_GETTIME and
HAVE_CLOCK_MONOTONIC would not be set as compile definitions. The check
for librt being needed to provide HAVE_CLOCK_GETTIME was also
simplified.

(cherry picked from commit a70e96d2da)
This commit is contained in:
Jia Tan 2023-09-12 22:36:12 +08:00 committed by Lasse Collin
parent df8daea282
commit ba791978d5
1 changed files with 10 additions and 8 deletions

View File

@ -167,24 +167,26 @@ tuklib_integer(ALL)
# Check for clock_gettime(). Do this before checking for threading so # Check for clock_gettime(). Do this before checking for threading so
# that we know there if CLOCK_MONOTONIC is available. # that we know there if CLOCK_MONOTONIC is available.
if(NOT WIN32 AND NOT DEFINED HAVE_CLOCK_GETTIME) if(NOT WIN32)
check_symbol_exists(clock_gettime time.h HAVE_CLOCK_GETTIME) check_symbol_exists(clock_gettime time.h HAVE_CLOCK_GETTIME)
if(NOT HAVE_CLOCK_GETTIME) if(NOT HAVE_CLOCK_GETTIME)
# With glibc <= 2.17 or Solaris 10 this needs librt. # With glibc <= 2.17 or Solaris 10 this needs librt.
unset(HAVE_CLOCK_GETTIME CACHE) # Add librt for the next check for HAVE_CLOCK_GETTIME. If it is
# found after including the library, we know that librt is required.
list(INSERT CMAKE_REQUIRED_LIBRARIES 0 rt) list(INSERT CMAKE_REQUIRED_LIBRARIES 0 rt)
check_symbol_exists(clock_gettime time.h HAVE_CLOCK_GETTIME) check_symbol_exists(clock_gettime time.h HAVE_CLOCK_GETTIME_LIBRT)
# If it was found now, add it to all targets and keep it # If it was found now, add librt to all targets and keep it in
# in CMAKE_REQUIRED_LIBRARIES for further tests too. # CMAKE_REQUIRED_LIBRARIES for further tests too.
if(HAVE_CLOCK_GETTIME) if(HAVE_CLOCK_GETTIME_LIBRT)
link_libraries(rt) link_libraries(rt)
else() else()
list(REMOVE_AT CMAKE_REQUIRED_LIBRARIES 0) list(REMOVE_AT CMAKE_REQUIRED_LIBRARIES 0)
endif() endif()
endif() endif()
if(HAVE_CLOCK_GETTIME)
if(HAVE_CLOCK_GETTIME OR HAVE_CLOCK_GETTIME_LIBRT)
# Check if CLOCK_MONOTONIC is available for clock_gettime(). # Check if CLOCK_MONOTONIC is available for clock_gettime().
check_symbol_exists(CLOCK_MONOTONIC time.h HAVE_DECL_CLOCK_MONOTONIC) check_symbol_exists(CLOCK_MONOTONIC time.h HAVE_DECL_CLOCK_MONOTONIC)