Blame CMakeLists.txt

Packit 18d29c
cmake_minimum_required (VERSION 3.0)
Packit 18d29c
Packit 18d29c
if (POLICY CMP0042)
Packit 18d29c
  cmake_policy (SET CMP0042 NEW)
Packit 18d29c
endif (POLICY CMP0042)
Packit 18d29c
Packit 18d29c
if (POLICY CMP0063)
Packit 18d29c
  cmake_policy (SET CMP0063 NEW)
Packit 18d29c
endif (POLICY CMP0063)
Packit 18d29c
Packit 18d29c
project (google-glog)
Packit 18d29c
Packit 18d29c
enable_testing ()
Packit 18d29c
Packit 18d29c
set (GLOG_MAJOR_VERSION 0)
Packit 18d29c
set (GLOG_MINOR_VERSION 3)
Packit 18d29c
set (GLOG_PATCH_VERSION 5)
Packit 18d29c
Packit 18d29c
set (GLOG_VERSION
Packit 18d29c
  ${GLOG_MAJOR_VERSION}.${GLOG_MINOR_VERSION}.${GLOG_PATCH_VERSION})
Packit 18d29c
Packit 18d29c
set (CPACK_PACKAGE_NAME glog)
Packit 18d29c
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "")
Packit 18d29c
set (CPACK_PACKAGE_VERSION_MAJOR ${GLOG_MAJOR_VERSION})
Packit 18d29c
set (CPACK_PACKAGE_VERSION_MINOR ${GLOG_MINOR_VERSION})
Packit 18d29c
set (CPACK_PACKAGE_VERSION_PATCH ${GLOG_PATCH_VERSION})
Packit 18d29c
set (CPACK_PACKAGE_VERSION ${GLOG_VERSION})
Packit 18d29c
Packit 18d29c
option (WITH_GFLAGS "Use gflags" ON)
Packit 18d29c
option (WITH_THREADS "Enable multithreading support" ON)
Packit 18d29c
Packit 18d29c
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
Packit 18d29c
Packit 18d29c
include (CheckCSourceCompiles)
Packit 18d29c
include (CheckCXXCompilerFlag)
Packit 18d29c
include (CheckCXXSourceCompiles)
Packit 18d29c
include (CheckFunctionExists)
Packit 18d29c
include (CheckIncludeFile)
Packit 18d29c
include (CheckIncludeFileCXX)
Packit 18d29c
include (CheckLibraryExists)
Packit 18d29c
include (CheckStructHasMember)
Packit 18d29c
include (CheckSymbolExists)
Packit 18d29c
include (CheckTypeSize)
Packit 18d29c
include (CMakePackageConfigHelpers)
Packit 18d29c
include (CPack)
Packit 18d29c
include (CTest)
Packit 18d29c
include (DetermineGflagsNamespace)
Packit 18d29c
Packit 18d29c
set (CMAKE_THREAD_PREFER_PTHREAD 1)
Packit 18d29c
Packit 18d29c
if (WITH_GFLAGS)
Packit 18d29c
  find_package (gflags)
Packit 18d29c
Packit 18d29c
  if (gflags_FOUND)
Packit 18d29c
    set (HAVE_LIB_GFLAGS 1)
Packit 18d29c
    determine_gflags_namespace (gflags_NAMESPACE)
Packit 18d29c
  endif (gflags_FOUND)
Packit 18d29c
endif (WITH_GFLAGS)
Packit 18d29c
Packit 18d29c
if (WITH_THREADS)
Packit 18d29c
  find_package (Threads)
Packit 18d29c
endif (WITH_THREADS)
Packit 18d29c
Packit 18d29c
check_include_file (dlfcn.h HAVE_DLFCN_H)
Packit 18d29c
check_include_file (execinfo.h HAVE_EXECINFO_H)
Packit 18d29c
check_include_file (glob.h HAVE_GLOB_H)
Packit 18d29c
check_include_file (inttypes.h HAVE_INTTYPES_H)
Packit 18d29c
check_include_file (libunwind.h HAVE_LIBUNWIND_H)
Packit 18d29c
check_include_file (memory.h HAVE_MEMORY_H)
Packit 18d29c
check_include_file (pwd.h HAVE_PWD_H)
Packit 18d29c
check_include_file (stdint.h HAVE_STDINT_H)
Packit 18d29c
check_include_file (stdlib.h HAVE_STDLIB_H)
Packit 18d29c
check_include_file (string.h HAVE_STRING_H)
Packit 18d29c
check_include_file (strings.h HAVE_STRINGS_H)
Packit 18d29c
check_include_file (sys/stat.h HAVE_SYS_STAT_H)
Packit 18d29c
check_include_file (sys/syscall.h HAVE_SYS_SYSCALL_H)
Packit 18d29c
check_include_file (sys/time.h HAVE_SYS_TIME_H)
Packit 18d29c
check_include_file (sys/types.h HAVE_SYS_TYPES_H)
Packit 18d29c
check_include_file (sys/utsname.h HAVE_SYS_UTSNAME_H)
Packit 18d29c
check_include_file (syscall.h HAVE_SYSCALL_H)
Packit 18d29c
check_include_file (syslog.h HAVE_SYSLOG_H)
Packit 18d29c
check_include_file (ucontext.h HAVE_UCONTEXT_H)
Packit 18d29c
check_include_file (unistd.h HAVE_UNISTD_H)
Packit 18d29c
check_include_file (unwind.h HAVE_UNWIND_H)
Packit 18d29c
Packit 18d29c
check_include_file_cxx ("ext/hash_map" HAVE_EXT_HASH_MAP)
Packit 18d29c
check_include_file_cxx ("ext/hash_set" HAVE_EXT_HASH_SET)
Packit 18d29c
check_include_file_cxx ("ext/slist" HAVE_EXT_SLIST)
Packit 18d29c
check_include_file_cxx ("tr1/unordered_map" HAVE_TR1_UNORDERED_MAP)
Packit 18d29c
check_include_file_cxx ("tr1/unordered_set" HAVE_TR1_UNORDERED_SET)
Packit 18d29c
check_include_file_cxx ("unordered_map" HAVE_UNORDERED_MAP)
Packit 18d29c
check_include_file_cxx ("unordered_set" HAVE_UNORDERED_SET)
Packit 18d29c
Packit 18d29c
check_type_size ("unsigned __int16" HAVE___UINT16)
Packit 18d29c
check_type_size (u_int16_t HAVE_U_INT16_T)
Packit 18d29c
check_type_size (uint16_t HAVE_UINT16_T)
Packit 18d29c
Packit 18d29c
check_function_exists (dladdr HAVE_DLADDR)
Packit 18d29c
check_function_exists (fcntl HAVE_FCNTL)
Packit 18d29c
check_function_exists (pread HAVE_PREAD)
Packit 18d29c
check_function_exists (pwrite HAVE_PWRITE)
Packit 18d29c
check_function_exists (sigaction HAVE_SIGACTION)
Packit 18d29c
check_function_exists (sigaltstack HAVE_SIGALSTACK)
Packit 18d29c
Packit 18d29c
# NOTE gcc does not fail if you pass a non-existent -Wno-* option as an
Packit 18d29c
# argument. However, it will happily fail if you pass the corresponding -W*
Packit 18d29c
# option. So, we check whether options that disable warnings exist by testing
Packit 18d29c
# the availability of the corresponding option that enables the warning. This
Packit 18d29c
# eliminates the need to check for compiler for several (mainly Clang) options.
Packit 18d29c
Packit 18d29c
check_cxx_compiler_flag (-Wdeprecated HAVE_NO_DEPRECATED)
Packit 18d29c
check_cxx_compiler_flag (-Wunnamed-type-template-args
Packit 18d29c
    HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS)
Packit 18d29c
Packit 18d29c
# NOTE: Cannot use check_function_exists here since >=vc-14.0 can define
Packit 18d29c
# snprintf as an inline function
Packit 18d29c
check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF)
Packit 18d29c
Packit 18d29c
check_library_exists (unwind get_static_proc_name "" HAVE_LIB_UNWIND)
Packit 18d29c
Packit 18d29c
find_library (UNWIND_LIBRARY NAMES unwind DOC "unwind library")
Packit 18d29c
mark_as_advanced (UNWIND_LIBRARY)
Packit 18d29c
Packit 18d29c
check_c_source_compiles ("
Packit 18d29c
#include <stdlib.h>
Packit 18d29c
static void foo(void) __attribute__ ((unused));
Packit 18d29c
int main(void) { return 0; }
Packit 18d29c
" HAVE___ATTRIBUTE__)
Packit 18d29c
Packit 18d29c
check_c_source_compiles ("
Packit 18d29c
#include <stdlib.h>
Packit 18d29c
static void foo(void) __attribute__ ((visibility(\"default\")));
Packit 18d29c
int main(void) { return 0; }
Packit 18d29c
" HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
Packit 18d29c
Packit 18d29c
check_c_source_compiles ("
Packit 18d29c
#include <stdlib.h>
Packit 18d29c
static void foo(void) __attribute__ ((visibility(\"hidden\")));
Packit 18d29c
int main(void) { return 0; }
Packit 18d29c
" HAVE___ATTRIBUTE__VISIBILITY_HIDDEN)
Packit 18d29c
Packit 18d29c
check_c_source_compiles ("
Packit 18d29c
int main(void) { if (__builtin_expect(0, 0)) return 1; return 0; }
Packit 18d29c
" HAVE___BUILTIN_EXPECT)
Packit 18d29c
Packit 18d29c
check_c_source_compiles ("
Packit 18d29c
int main(void)
Packit 18d29c
{
Packit 18d29c
  int a; if (__sync_val_compare_and_swap(&a, 0, 1)) return 1; return 0;
Packit 18d29c
}
Packit 18d29c
" HAVE___SYNC_VAL_COMPARE_AND_SWAP)
Packit 18d29c
Packit 18d29c
check_c_source_compiles ("
Packit 18d29c
#define _XOPEN_SOURCE 500
Packit 18d29c
#include <pthread.h>
Packit 18d29c
int main(void)
Packit 18d29c
{
Packit 18d29c
  pthread_rwlock_t l;
Packit 18d29c
  pthread_rwlock_init(&l, NULL);
Packit 18d29c
  pthread_rwlock_rdlock(&l);
Packit 18d29c
  return 0;
Packit 18d29c
}
Packit 18d29c
" HAVE_RWLOCK)
Packit 18d29c
Packit 18d29c
check_c_source_compiles ("
Packit 18d29c
__declspec(selectany) int a;
Packit 18d29c
int main(void) { return 0; }
Packit 18d29c
" HAVE___DECLSPEC)
Packit 18d29c
Packit 18d29c
check_cxx_source_compiles ("
Packit 18d29c
#include <vector>
Packit 18d29c
vector<int> t; int main() { }
Packit 18d29c
" STL_NO_NAMESPACE)
Packit 18d29c
Packit 18d29c
check_cxx_source_compiles ("
Packit 18d29c
#include <vector>
Packit 18d29c
std::vector<int> t; int main() { }
Packit 18d29c
" STL_STD_NAMESPACE)
Packit 18d29c
Packit 18d29c
check_cxx_source_compiles ("
Packit 18d29c
#include <iostream>
Packit 18d29c
std::ostream& operator<<(std::ostream&, struct s);
Packit 18d29c
using ::operator<<;
Packit 18d29c
int main() { }
Packit 18d29c
" HAVE_USING_OPERATOR)
Packit 18d29c
Packit 18d29c
check_cxx_source_compiles ("
Packit 18d29c
namespace Outer { namespace Inner { int i = 0; }}
Packit 18d29c
using namespace Outer::Inner;;
Packit 18d29c
int main() { return i; }
Packit 18d29c
" HAVE_NAMESPACES)
Packit 18d29c
Packit 18d29c
set (_PC_FIELDS
Packit 18d29c
  "gregs[REG_PC]"
Packit 18d29c
  "gregs[REG_EIP]"
Packit 18d29c
  "gregs[REG_RIP]"
Packit 18d29c
  "sc_ip"
Packit 18d29c
  "uc_regs->gregs[PT_NIP]"
Packit 18d29c
  "gregs[R15]"
Packit 18d29c
  "arm_pc"
Packit 18d29c
  "mc_eip"
Packit 18d29c
  "mc_rip"
Packit 18d29c
  "__gregs[REG_EIP]"
Packit 18d29c
  "__gregs[REG_RIP]"
Packit 18d29c
  "ss.eip"
Packit 18d29c
  "__ss.__eip"
Packit 18d29c
  "ss.rip"
Packit 18d29c
  "__ss.__rip"
Packit 18d29c
  "ss.srr0"
Packit 18d29c
  "__ss.__srr0"
Packit 18d29c
)
Packit 18d29c
Packit 18d29c
set (_PC_HEADERS ucontext.h signal.h)
Packit 18d29c
Packit 18d29c
if (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
Packit 18d29c
  foreach (_PC_FIELD ${_PC_FIELDS})
Packit 18d29c
    foreach (_PC_HEADER ${_PC_HEADERS})
Packit 18d29c
      set (_TMP
Packit 18d29c
      ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/uctfield.c)
Packit 18d29c
      file (WRITE ${_TMP} "
Packit 18d29c
#define _GNU_SOURCE 1
Packit 18d29c
#include <${_PC_HEADER}>
Packit 18d29c
int main(void)
Packit 18d29c
{
Packit 18d29c
  ucontext_t u;
Packit 18d29c
  return u.${_PC_FIELD} == 0;
Packit 18d29c
}
Packit 18d29c
")
Packit 18d29c
      try_compile (HAVE_PC_FROM_UCONTEXT ${CMAKE_CURRENT_BINARY_DIR} ${_TMP}
Packit 18d29c
        COMPILE_DEFINITIONS _GNU_SOURCE=1)
Packit 18d29c
Packit 18d29c
      if (HAVE_PC_FROM_UCONTEXT)
Packit 18d29c
        set (PC_FROM_UCONTEXT ${_PC_FIELD} CACHE)
Packit 18d29c
      endif (HAVE_PC_FROM_UCONTEXT)
Packit 18d29c
    endforeach (_PC_HEADER)
Packit 18d29c
  endforeach (_PC_FIELD)
Packit 18d29c
endif  (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
Packit 18d29c
Packit 18d29c
if (STL_STD_NAMESPACE)
Packit 18d29c
  set (STL_NAMESPACE std)
Packit 18d29c
else (STL_STD_NAMESPACE)
Packit 18d29c
  set (STL_NAMESPACE "")
Packit 18d29c
endif (STL_STD_NAMESPACE)
Packit 18d29c
Packit 18d29c
set (GOOGLE_NAMESPACE google)
Packit 18d29c
set (_START_GOOGLE_NAMESPACE_ "namespace ${GOOGLE_NAMESPACE} {")
Packit 18d29c
set (_END_GOOGLE_NAMESPACE_ "}")
Packit 18d29c
Packit 18d29c
if (HAVE___UINT16)
Packit 18d29c
  set (ac_cv_have___uint16 1)
Packit 18d29c
else (HAVE___UINT16)
Packit 18d29c
  set (ac_cv_have___uint16 0)
Packit 18d29c
endif (HAVE___UINT16)
Packit 18d29c
Packit 18d29c
if (HAVE_INTTYPES_H)
Packit 18d29c
  set (ac_cv_have_inttypes_h 1)
Packit 18d29c
else (HAVE_INTTYPES_H)
Packit 18d29c
  set (ac_cv_have_inttypes_h 0)
Packit 18d29c
endif (HAVE_INTTYPES_H)
Packit 18d29c
Packit 18d29c
if (HAVE_LIB_GFLAGS)
Packit 18d29c
  set (ac_cv_have_libgflags 1)
Packit 18d29c
else (HAVE_LIB_GFLAGS)
Packit 18d29c
  set (ac_cv_have_libgflags 0)
Packit 18d29c
endif (HAVE_LIB_GFLAGS)
Packit 18d29c
Packit 18d29c
if (HAVE_STDINT_H)
Packit 18d29c
  set (ac_cv_have_stdint_h 1)
Packit 18d29c
else (HAVE_STDINT_H)
Packit 18d29c
  set (ac_cv_have_stdint_h 0)
Packit 18d29c
endif (HAVE_STDINT_H)
Packit 18d29c
Packit 18d29c
if (HAVE_SYS_TYPES_H)
Packit 18d29c
  set (ac_cv_have_systypes_h 1)
Packit 18d29c
else (HAVE_SYS_TYPES_H)
Packit 18d29c
  set (ac_cv_have_systypes_h 0)
Packit 18d29c
endif (HAVE_SYS_TYPES_H)
Packit 18d29c
Packit 18d29c
if (HAVE_U_INT16_T)
Packit 18d29c
  set (ac_cv_have_u_int16_t 1)
Packit 18d29c
else (HAVE_U_INT16_T)
Packit 18d29c
  set (ac_cv_have_u_int16_t 0)
Packit 18d29c
endif (HAVE_U_INT16_T)
Packit 18d29c
Packit 18d29c
if (HAVE_UINT16_T)
Packit 18d29c
  set (ac_cv_have_uint16_t 1)
Packit 18d29c
else (HAVE_UINT16_T)
Packit 18d29c
  set (ac_cv_have_uint16_t 0)
Packit 18d29c
endif (HAVE_UINT16_T)
Packit 18d29c
Packit 18d29c
if (HAVE_UNISTD_H)
Packit 18d29c
  set (ac_cv_have_unistd_h 1)
Packit 18d29c
else (HAVE_UNISTD_H)
Packit 18d29c
  set (ac_cv_have_unistd_h 0)
Packit 18d29c
endif (HAVE_UNISTD_H)
Packit 18d29c
Packit 18d29c
set (ac_google_namespace ${GOOGLE_NAMESPACE})
Packit 18d29c
set (ac_google_end_namespace ${_END_GOOGLE_NAMESPACE_})
Packit 18d29c
set (ac_google_start_namespace ${_START_GOOGLE_NAMESPACE_})
Packit 18d29c
Packit 18d29c
if (HAVE___ATTRIBUTE__)
Packit 18d29c
  set (ac_cv___attribute___noreturn "__attribute__((noreturn))")
Packit 18d29c
  set (ac_cv___attribute___noinline "__attribute__((noinline))")
Packit 18d29c
elseif (HAVE___DECLSPEC)
Packit 18d29c
  set (ac_cv___attribute___noreturn "__declspec(noreturn)")
Packit 18d29c
  #set (ac_cv___attribute___noinline "__declspec(noinline)")
Packit 18d29c
endif (HAVE___ATTRIBUTE__)
Packit 18d29c
Packit 18d29c
if (HAVE___BUILTIN_EXPECT)
Packit 18d29c
  set (ac_cv_have___builtin_expect 1)
Packit 18d29c
else (HAVE___BUILTIN_EXPECT)
Packit 18d29c
  set (ac_cv_have___builtin_expect 0)
Packit 18d29c
endif (HAVE___BUILTIN_EXPECT)
Packit 18d29c
Packit 18d29c
if (HAVE_USING_OPERATOR)
Packit 18d29c
  set (ac_cv_cxx_using_operator 1)
Packit 18d29c
else (HAVE_USING_OPERATOR)
Packit 18d29c
  set (ac_cv_cxx_using_operator 0)
Packit 18d29c
endif (HAVE_USING_OPERATOR)
Packit 18d29c
Packit 18d29c
set (SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
Packit 18d29c
Packit 18d29c
if (WITH_THREADS AND Threads_FOUND)
Packit 18d29c
  if (CMAKE_USE_PTHREADS_INIT)
Packit 18d29c
    set (HAVE_PTHREAD 1)
Packit 18d29c
  endif (CMAKE_USE_PTHREADS_INIT)
Packit 18d29c
else (WITH_THREADS AND Threads_FOUND)
Packit 18d29c
  set (NO_THREADS 1)
Packit 18d29c
endif (WITH_THREADS AND Threads_FOUND)
Packit 18d29c
Packit 18d29c
set (TEST_SRC_DIR \"${CMAKE_CURRENT_SOURCE_DIR}\")
Packit 18d29c
Packit 18d29c
configure_file (src/config.h.cmake.in config.h)
Packit 18d29c
configure_file (src/glog/logging.h.in glog/logging.h @ONLY)
Packit 18d29c
configure_file (src/glog/raw_logging.h.in glog/raw_logging.h @ONLY)
Packit 18d29c
configure_file (src/glog/stl_logging.h.in glog/stl_logging.h @ONLY)
Packit 18d29c
configure_file (src/glog/vlog_is_on.h.in glog/vlog_is_on.h @ONLY)
Packit 18d29c
Packit 18d29c
set (CMAKE_CXX_VISIBILITY_PRESET default)
Packit 18d29c
set (CMAKE_VISIBILITY_INLINES_HIDDEN 1)
Packit 18d29c
Packit 18d29c
set (GLOG_PUBLIC_H
Packit 18d29c
  ${CMAKE_CURRENT_BINARY_DIR}/config.h
Packit 18d29c
  ${CMAKE_CURRENT_BINARY_DIR}/glog/logging.h
Packit 18d29c
  ${CMAKE_CURRENT_BINARY_DIR}/glog/raw_logging.h
Packit 18d29c
  ${CMAKE_CURRENT_BINARY_DIR}/glog/stl_logging.h
Packit 18d29c
  ${CMAKE_CURRENT_BINARY_DIR}/glog/vlog_is_on.h
Packit 18d29c
  src/glog/log_severity.h
Packit 18d29c
)
Packit 18d29c
Packit 18d29c
set (GLOG_SRCS
Packit 18d29c
  ${GLOG_PUBLIC_H}
Packit 18d29c
  src/base/commandlineflags.h
Packit 18d29c
  src/base/googleinit.h
Packit 18d29c
  src/base/mutex.h
Packit 18d29c
  src/demangle.cc
Packit 18d29c
  src/demangle.h
Packit 18d29c
  src/logging.cc
Packit 18d29c
  src/raw_logging.cc
Packit 18d29c
  src/symbolize.cc
Packit 18d29c
  src/symbolize.h
Packit 18d29c
  src/utilities.cc
Packit 18d29c
  src/utilities.h
Packit 18d29c
  src/vlog_is_on.cc
Packit 18d29c
)
Packit 18d29c
Packit 18d29c
if (HAVE_PTHREAD)
Packit 18d29c
  list (APPEND GLOG_SRCS src/signalhandler.cc)
Packit 18d29c
endif (HAVE_PTHREAD)
Packit 18d29c
Packit 18d29c
if (WIN32)
Packit 18d29c
  list (APPEND GLOG_SRCS
Packit 18d29c
    src/windows/port.cc
Packit 18d29c
    src/windows/port.h
Packit 18d29c
  )
Packit 18d29c
endif (WIN32)
Packit 18d29c
Packit 18d29c
add_compile_options ($<$<BOOL:${HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS}>:-Wno-unnamed-type-template-args>)
Packit 18d29c
Packit 18d29c
add_library (glog
Packit 18d29c
  ${GLOG_SRCS}
Packit 18d29c
)
Packit 18d29c
Packit 18d29c
set_target_properties (glog PROPERTIES POSITION_INDEPENDENT_CODE ON)
Packit 18d29c
Packit 18d29c
if (UNWIND_LIBRARY)
Packit 18d29c
  target_link_libraries (glog PUBLIC ${UNWIND_LIBRARY})
Packit 18d29c
endif (UNWIND_LIBRARY)
Packit 18d29c
Packit 18d29c
if (HAVE_PTHREAD)
Packit 18d29c
  target_link_libraries (glog PUBLIC ${CMAKE_THREAD_LIBS_INIT})
Packit 18d29c
endif (HAVE_PTHREAD)
Packit 18d29c
Packit 18d29c
if (WIN32 AND HAVE_SNPRINTF)
Packit 18d29c
  set_property (SOURCE src/windows/port.cc APPEND PROPERTY COMPILE_DEFINITIONS
Packit 18d29c
    HAVE_SNPRINTF)
Packit 18d29c
endif (WIN32 AND HAVE_SNPRINTF)
Packit 18d29c
Packit 18d29c
if (gflags_FOUND)
Packit 18d29c
  target_include_directories (glog PUBLIC $<BUILD_INTERFACE:${gflags_INCLUDE_DIR}>)
Packit 18d29c
  target_link_libraries (glog PUBLIC ${gflags_LIBRARIES})
Packit 18d29c
Packit 18d29c
  if (NOT BUILD_SHARED_LIBS)
Packit 18d29c
    # Don't use __declspec(dllexport|dllimport) if this is a static build
Packit 18d29c
    targeT_compile_definitions (glog PUBLIC GFLAGS_DLL_DECLARE_FLAG= GFLAGS_DLL_DEFINE_FLAG=)
Packit 18d29c
  endif (NOT BUILD_SHARED_LIBS)
Packit 18d29c
endif (gflags_FOUND)
Packit 18d29c
Packit 18d29c
set_target_properties (glog PROPERTIES VERSION ${GLOG_MAJOR_VERSION})
Packit 18d29c
set_target_properties (glog PROPERTIES SOVERSION ${GLOG_VERSION})
Packit 18d29c
Packit 18d29c
if (WIN32)
Packit 18d29c
  target_compile_definitions (glog PUBLIC GLOG_NO_ABBREVIATED_SEVERITIES)
Packit 18d29c
endif (WIN32)
Packit 18d29c
Packit 18d29c
set_target_properties (glog PROPERTIES PUBLIC_HEADER "${GLOG_PUBLIC_H}")
Packit 18d29c
Packit 18d29c
target_include_directories (glog BEFORE PUBLIC
Packit 18d29c
  "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
Packit 18d29c
  "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
Packit 18d29c
  "$<INSTALL_INTERFACE:include>"
Packit 18d29c
  PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
Packit 18d29c
  PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
Packit 18d29c
Packit 18d29c
if (WIN32)
Packit 18d29c
  target_include_directories (glog PUBLIC
Packit 18d29c
    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/windows>"
Packit 18d29c
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/windows)
Packit 18d29c
endif (WIN32)
Packit 18d29c
Packit 18d29c
set_target_properties (glog PROPERTIES DEFINE_SYMBOL LIBGLOG_EXPORTS)
Packit 18d29c
Packit 18d29c
if (NOT BUILD_SHARED_LIBS)
Packit 18d29c
  target_compile_definitions (glog PUBLIC GOOGLE_GLOG_DLL_DECL=)
Packit 18d29c
else (NOT BUILD_SHARED_LIBS)
Packit 18d29c
  target_compile_definitions (glog PRIVATE GOOGLE_GLOG_IS_A_DLL=1)
Packit 18d29c
Packit 18d29c
  if (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
Packit 18d29c
    set (_EXPORT "__attribute__((visibility(\"default\")))")
Packit 18d29c
    set (_IMPORT "")
Packit 18d29c
  elseif (HAVE___DECLSPEC)
Packit 18d29c
    set (_EXPORT "__declspec(dllexport)")
Packit 18d29c
    set (_IMPORT "__declspec(dllimport)")
Packit 18d29c
  endif (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
Packit 18d29c
Packit 18d29c
  target_compile_definitions (glog PRIVATE
Packit 18d29c
    "GOOGLE_GLOG_DLL_DECL=${_EXPORT}")
Packit 18d29c
  target_compile_definitions (glog INTERFACE
Packit 18d29c
    "GOOGLE_GLOG_DLL_DECL=${_IMPORT}")
Packit 18d29c
  target_compile_definitions (glog INTERFACE
Packit 18d29c
    "GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=${_IMPORT}")
Packit 18d29c
endif (NOT BUILD_SHARED_LIBS)
Packit 18d29c
Packit 18d29c
if (HAVE_EXECINFO_H)
Packit 18d29c
  set (HAVE_STACKTRACE 1)
Packit 18d29c
endif (HAVE_EXECINFO_H)
Packit 18d29c
Packit 18d29c
if (UNIX OR (APPLE AND HAVE_DLADDR))
Packit 18d29c
  set (HAVE_SYMBOLIZE 1)
Packit 18d29c
endif (UNIX OR (APPLE AND HAVE_DLADDR))
Packit 18d29c
Packit 18d29c
# Unit testing
Packit 18d29c
Packit 18d29c
if (BUILD_TESTING)
Packit 18d29c
  add_executable (logging_unittest
Packit 18d29c
    src/logging_unittest.cc
Packit 18d29c
  )
Packit 18d29c
Packit 18d29c
  target_link_libraries (logging_unittest PRIVATE glog)
Packit 18d29c
Packit 18d29c
  add_executable (stl_logging_unittest
Packit 18d29c
    src/stl_logging_unittest.cc
Packit 18d29c
  )
Packit 18d29c
Packit 18d29c
  target_link_libraries (stl_logging_unittest PRIVATE glog)
Packit 18d29c
Packit 18d29c
  if (HAVE_NO_DEPRECATED)
Packit 18d29c
    set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS
Packit 18d29c
      -Wno-deprecated)
Packit 18d29c
  endif (HAVE_NO_DEPRECATED)
Packit 18d29c
Packit 18d29c
  if (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
Packit 18d29c
    target_compile_definitions (stl_logging_unittest PRIVATE
Packit 18d29c
      GLOG_STL_LOGGING_FOR_UNORDERED)
Packit 18d29c
  endif (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
Packit 18d29c
Packit 18d29c
  if (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
Packit 18d29c
    target_compile_definitions (stl_logging_unittest PRIVATE
Packit 18d29c
      GLOG_STL_LOGGING_FOR_TR1_UNORDERED)
Packit 18d29c
  endif (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
Packit 18d29c
Packit 18d29c
  if (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
Packit 18d29c
    target_compile_definitions (stl_logging_unittest PRIVATE
Packit 18d29c
      GLOG_STL_LOGGING_FOR_EXT_HASH)
Packit 18d29c
  endif (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
Packit 18d29c
Packit 18d29c
  if (HAVE_EXT_SLIST)
Packit 18d29c
    target_compile_definitions (stl_logging_unittest PRIVATE
Packit 18d29c
      GLOG_STL_LOGGING_FOR_EXT_SLIST)
Packit 18d29c
  endif (HAVE_EXT_SLIST)
Packit 18d29c
Packit 18d29c
  if (HAVE_SYMBOLIZE)
Packit 18d29c
    add_executable (symbolize_unittest
Packit 18d29c
      src/symbolize_unittest.cc
Packit 18d29c
    )
Packit 18d29c
Packit 18d29c
    target_link_libraries (symbolize_unittest PRIVATE glog)
Packit 18d29c
  endif (HAVE_SYMBOLIZE)
Packit 18d29c
Packit 18d29c
  add_executable (demangle_unittest
Packit 18d29c
    src/demangle_unittest.cc
Packit 18d29c
  )
Packit 18d29c
Packit 18d29c
  target_link_libraries (demangle_unittest PRIVATE glog)
Packit 18d29c
Packit 18d29c
  if (HAVE_STACKTRACE)
Packit 18d29c
    add_executable (stacktrace_unittest
Packit 18d29c
      src/stacktrace_unittest.cc
Packit 18d29c
    )
Packit 18d29c
Packit 18d29c
    target_link_libraries (stacktrace_unittest PRIVATE glog)
Packit 18d29c
  endif (HAVE_STACKTRACE)
Packit 18d29c
Packit 18d29c
  add_executable (utilities_unittest
Packit 18d29c
    src/utilities_unittest.cc
Packit 18d29c
  )
Packit 18d29c
Packit 18d29c
  target_link_libraries (utilities_unittest PRIVATE glog)
Packit 18d29c
Packit 18d29c
  if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
Packit 18d29c
    add_executable (signalhandler_unittest
Packit 18d29c
      src/signalhandler_unittest.cc
Packit 18d29c
    )
Packit 18d29c
Packit 18d29c
    target_link_libraries (signalhandler_unittest PRIVATE glog)
Packit 18d29c
  endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
Packit 18d29c
Packit 18d29c
  add_test (NAME demangle COMMAND demangle_unittest)
Packit 18d29c
  add_test (NAME logging COMMAND logging_unittest)
Packit 18d29c
Packit 18d29c
  if (TARGET signalhandler_unittest)
Packit 18d29c
    add_test (NAME signalhandler COMMAND signalhandler_unittest)
Packit 18d29c
  endif (TARGET signalhandler_unittest)
Packit 18d29c
Packit 18d29c
  if (TARGET stacktrace_unittest)
Packit 18d29c
    add_test (NAME stacktrace COMMAND stacktrace_unittest)
Packit 18d29c
  endif (TARGET stacktrace_unittest)
Packit 18d29c
Packit 18d29c
  add_test (NAME stl_logging COMMAND stl_logging_unittest)
Packit 18d29c
Packit 18d29c
  if (TARGET symbolize_unittest)
Packit 18d29c
    add_test (NAME symbolize COMMAND symbolize_unittest)
Packit 18d29c
  endif (TARGET symbolize_unittest)
Packit 18d29c
endif (BUILD_TESTING)
Packit 18d29c
Packit 18d29c
install (TARGETS glog
Packit 18d29c
  EXPORT glog-targets
Packit 18d29c
  RUNTIME DESTINATION bin
Packit 18d29c
  PUBLIC_HEADER DESTINATION include/glog
Packit 18d29c
  LIBRARY DESTINATION lib
Packit 18d29c
  ARCHIVE DESTINATION lib)
Packit 18d29c
Packit 18d29c
if (gflags_FOUND)
Packit 18d29c
  set (gflags_DEPENDENCY "find_dependency (gflags ${gflags_VERSION})")
Packit 18d29c
endif (gflags_FOUND)
Packit 18d29c
Packit 18d29c
configure_package_config_file (glog-config.cmake.in
Packit 18d29c
  ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
Packit 18d29c
  INSTALL_DESTINATION lib/cmake/glog
Packit 18d29c
  NO_CHECK_REQUIRED_COMPONENTS_MACRO)
Packit 18d29c
Packit 18d29c
write_basic_package_version_file (glog-config-version.cmake VERSION
Packit 18d29c
  ${GLOG_VERSION} COMPATIBILITY SameMajorVersion)
Packit 18d29c
Packit 18d29c
export (TARGETS glog NAMESPACE glog:: FILE glog-targets.cmake)
Packit 18d29c
export (PACKAGE glog)
Packit 18d29c
Packit 18d29c
install (FILES
Packit 18d29c
  ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
Packit 18d29c
  ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
Packit 18d29c
  DESTINATION lib/cmake/glog)
Packit 18d29c
Packit 18d29c
install (EXPORT glog-targets NAMESPACE glog:: DESTINATION lib/cmake/glog)