cmake_policy (SET CMP0063 NEW)
endif (POLICY CMP0063)
-project (google-glog)
+project (glog)
enable_testing ()
option (WITH_GFLAGS "Use gflags" ON)
option (WITH_THREADS "Enable multithreading support" ON)
+option (WITH_TLS "Enable Thread Local Storage (TLS) support" ON)
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include (CPack)
include (CTest)
include (DetermineGflagsNamespace)
+include (GNUInstallDirs)
set (CMAKE_THREAD_PREFER_PTHREAD 1)
check_include_file (ucontext.h HAVE_UCONTEXT_H)
check_include_file (unistd.h HAVE_UNISTD_H)
check_include_file (unwind.h HAVE_UNWIND_H)
+check_include_file (pwd.h HAVE_PWD_H)
check_include_file_cxx ("ext/hash_map" HAVE_EXT_HASH_MAP)
check_include_file_cxx ("ext/hash_set" HAVE_EXT_HASH_SET)
int main() { return i; }
" HAVE_NAMESPACES)
+check_cxx_source_compiles ("
+__thread int tls;
+int main() { }
+" HAVE_GCC_TLS)
+
+check_cxx_source_compiles ("
+__declspec(thread) int tls;
+int main() { }
+" HAVE_MSVC_TLS)
+
+check_cxx_source_compiles ("
+thread_local int tls;
+int main() { }
+" HAVE_CXX11_TLS)
+
+if (WITH_TLS)
+ # Cygwin does not support the thread attribute. Don't bother.
+ if (HAVE_GCC_TLS)
+ set (GLOG_THREAD_LOCAL_STORAGE "__thread")
+ elseif (HAVE_MSVC_TLS)
+ set (GLOG_THREAD_LOCAL_STORAGE "__declspec(thread)")
+ elseif (HAVE_CXX11_TLS)
+ set (GLOG_THREAD_LOCAL_STORAGE thread_local)
+ endif (HAVE_GCC_TLS)
+endif (WITH_TLS)
+
set (_PC_FIELDS
"gregs[REG_PC]"
"gregs[REG_EIP]"
src/vlog_is_on.cc
)
-if (HAVE_PTHREAD)
+if (HAVE_PTHREAD OR WIN32)
list (APPEND GLOG_SRCS src/signalhandler.cc)
-endif (HAVE_PTHREAD)
+endif (HAVE_PTHREAD OR WIN32)
if (WIN32)
list (APPEND GLOG_SRCS
set_target_properties (glog PROPERTIES PUBLIC_HEADER "${GLOG_PUBLIC_H}")
+set (_glog_CMake_BINDIR ${CMAKE_INSTALL_BINDIR})
+set (_glog_CMake_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
+set (_glog_CMake_LIBDIR ${CMAKE_INSTALL_LIBDIR})
+set (_glog_CMake_INSTALLDIR ${_glog_CMake_LIBDIR}/cmake/glog)
+
target_include_directories (glog BEFORE PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
- "$<INSTALL_INTERFACE:include>"
+ "$<INSTALL_INTERFACE:${_glog_CMake_INCLUDE_DIR}>"
PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
set (HAVE_STACKTRACE 1)
endif (HAVE_EXECINFO_H)
+if (WIN32)
+ set (HAVE_STACKTRACE 1)
+ set (HAVE_SYMBOLIZE 1)
+endif (WIN32)
+
if (UNIX OR (APPLE AND HAVE_DLADDR))
set (HAVE_SYMBOLIZE 1)
endif (UNIX OR (APPLE AND HAVE_DLADDR))
install (TARGETS glog
EXPORT glog-targets
- RUNTIME DESTINATION bin
- PUBLIC_HEADER DESTINATION include/glog
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
+ RUNTIME DESTINATION ${_glog_CMake_BINDIR}
+ PUBLIC_HEADER DESTINATION ${_glog_CMake_INCLUDE_DIR}/glog
+ LIBRARY DESTINATION ${_glog_CMake_LIBDIR}
+ ARCHIVE DESTINATION ${_glog_CMake_LIBDIR})
if (gflags_FOUND)
set (gflags_DEPENDENCY "find_dependency (gflags ${gflags_VERSION})")
configure_package_config_file (glog-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
- INSTALL_DESTINATION lib/cmake/glog
+ INSTALL_DESTINATION ${_glog_CMake_INSTALLDIR}
NO_CHECK_REQUIRED_COMPONENTS_MACRO)
write_basic_package_version_file (glog-config-version.cmake VERSION
install (FILES
${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
- DESTINATION lib/cmake/glog)
+ DESTINATION ${_glog_CMake_INSTALLDIR})
-install (EXPORT glog-targets NAMESPACE glog:: DESTINATION lib/cmake/glog)
+install (EXPORT glog-targets NAMESPACE glog:: DESTINATION
+ ${_glog_CMake_INSTALLDIR})