blob: cb16c324ef241c3f95ab482b3f7b1ab819395c40 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
include(CheckCXXSymbolExists)
# strnlen, gmtime_r, and localtime_r are POSIX extensions, not strictly ANSI C.
# timegm is a nonstandard extension present on Linux and the BSDs, but missing
# on other systems.
CHECK_CXX_SYMBOL_EXISTS(strnlen "cstring" QUICKSTEP_HAVE_STRNLEN)
CHECK_CXX_SYMBOL_EXISTS(gmtime_r "ctime" QUICKSTEP_HAVE_GMTIME_R)
CHECK_CXX_SYMBOL_EXISTS(localtime_r "ctime" QUICKSTEP_HAVE_LOCALTIME_R)
CHECK_CXX_SYMBOL_EXISTS(timegm "ctime" QUICKSTEP_HAVE_TIMEGM)
if (NOT QUICKSTEP_HAVE_GMTIME_R)
# Try Windows gmtime_s
CHECK_CXX_SYMBOL_EXISTS(gmtime_s "ctime" QUICKSTEP_HAVE_GMTIME_S)
endif()
if (NOT (QUICKSTEP_HAVE_GMTIME_R OR QUICKSTEP_HAVE_GMTIME_S))
message(FATAL_ERROR "Unable to find a reentrant (threadsafe) version of "
"gmtime (tried POSIX gmtime_r and Windows gmtime_s).")
endif()
if (NOT QUICKSTEP_HAVE_LOCALTIME_R)
# Try Windows localtime_s
CHECK_CXX_SYMBOL_EXISTS(localtime_s "ctime" QUICKSTEP_HAVE_LOCALTIME_S)
endif()
if (NOT (QUICKSTEP_HAVE_LOCALTIME_R OR QUICKSTEP_HAVE_LOCALTIME_S))
message(FATAL_ERROR "Unable to find a reentrant (threadsafe) version of "
"localtime (tried POSIX localtime_r and Windows localtime_s).")
endif()
CHECK_CXX_SYMBOL_EXISTS(setenv "stdlib.h" QUICKSTEP_HAVE_SETENV)
CHECK_CXX_SYMBOL_EXISTS(tzset "time.h" QUICKSTEP_HAVE_TZSET)
configure_file (
"${CMAKE_CURRENT_SOURCE_DIR}/TypesPortConfig.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/TypesPortConfig.h"
)
# Declare micro-libs:
add_library(quickstep_types_port_gmtime_r ../../empty_src.cpp gmtime_r.hpp)
add_library(quickstep_types_port_localtime_r ../../empty_src.cpp localtime_r.hpp)
add_library(quickstep_types_port_strnlen ../../empty_src.cpp strnlen.hpp)
add_library(quickstep_types_port_timegm timegm.cpp timegm.hpp)
# Link dependencies:
target_link_libraries(quickstep_types_port_gmtime_r
quickstep_utility_Macros)
target_link_libraries(quickstep_types_port_localtime_r
quickstep_utility_Macros)
target_link_libraries(quickstep_types_port_timegm
quickstep_types_port_gmtime_r
quickstep_utility_Macros)
# Module all-in-one library:
add_library(quickstep_types_port ../../empty_src.cpp)
target_link_libraries(quickstep_types_port
quickstep_types_port_gmtime_r
quickstep_types_port_localtime_r
quickstep_types_port_strnlen
quickstep_types_port_timegm)
# Tests
add_executable(timegm_unittest "${CMAKE_CURRENT_SOURCE_DIR}/tests/timegm_unittest.cpp")
target_link_libraries(timegm_unittest
glog
gtest
gtest_main
quickstep_types_port_timegm)
add_test(timegm_unittest timegm_unittest)
# Benchmarks
if (UNIX)
add_executable(timegm_benchmark "${CMAKE_CURRENT_SOURCE_DIR}/tests/timegm_benchmark.cpp")
target_link_libraries(timegm_benchmark
${LIBS}
benchmark
quickstep_types_port_timegm)
endif()