blob: 2395924192d7199c4bd8baecbde0f26e81c3dda0 [file] [log] [blame]
# Copyright 2011-2015 Quickstep Technologies LLC.
# Copyright 2015 Pivotal Software, Inc.
#
# Licensed 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"
)
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)
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)
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
benchmark
quickstep_types_port_timegm
${LIBS})
endif()