github.com/igggame/nebulas-go@v2.1.0+incompatible/nbre/3rd_party/build_option_bak/CMakeLists.txt-glog (about)

     1  cmake_minimum_required (VERSION 3.0)
     2  
     3  if (POLICY CMP0042)
     4    cmake_policy (SET CMP0042 NEW)
     5  endif (POLICY CMP0042)
     6  
     7  if (POLICY CMP0063)
     8    cmake_policy (SET CMP0063 NEW)
     9  endif (POLICY CMP0063)
    10  
    11  project(glog VERSION 0.3.5 LANGUAGES C CXX)
    12  include_directories(${PROJECT_SOURCE_DIR}/../../lib/include/)
    13  link_directories (${PROJECT_SOURCE_DIR}/../../lib/lib/)
    14  
    15  set (CPACK_PACKAGE_NAME glog)
    16  set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "")
    17  set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
    18  set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
    19  set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
    20  set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
    21  
    22  option (WITH_GFLAGS "Use gflags" ON)
    23  option (WITH_THREADS "Enable multithreading support" ON)
    24  option (WITH_TLS "Enable Thread Local Storage (TLS) support" ON)
    25  option (BUILD_SHARED_LIBS "Build shared libraries" OFF)
    26  option (PRINT_UNSYMBOLIZED_STACK_TRACES
    27    "Print raw pc values on symbolization failure" OFF)
    28  
    29  list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
    30  
    31  include (CheckCSourceCompiles)
    32  include (CheckCXXCompilerFlag)
    33  include (CheckCXXSourceCompiles)
    34  include (CheckCXXSourceRuns)
    35  include (CheckFunctionExists)
    36  include (CheckIncludeFile)
    37  include (CheckIncludeFileCXX)
    38  include (CheckLibraryExists)
    39  include (CheckStructHasMember)
    40  include (CheckSymbolExists)
    41  include (CheckTypeSize)
    42  include (CMakePackageConfigHelpers)
    43  include (CMakePushCheckState)
    44  include (CPack)
    45  include (CTest)
    46  include (DetermineGflagsNamespace)
    47  include (GNUInstallDirs)
    48  
    49  set (CMAKE_DEBUG_POSTFIX d)
    50  set (CMAKE_THREAD_PREFER_PTHREAD 1)
    51  
    52  if (WITH_GFLAGS)
    53    find_package (gflags 2.2.0)
    54  
    55    if (gflags_FOUND)
    56      set (HAVE_LIB_GFLAGS 1)
    57      determine_gflags_namespace (gflags_NAMESPACE)
    58    endif (gflags_FOUND)
    59  endif (WITH_GFLAGS)
    60  
    61  if (WITH_THREADS)
    62    find_package (Threads)
    63  endif (WITH_THREADS)
    64  
    65  check_include_file (dlfcn.h HAVE_DLFCN_H)
    66  check_include_file (execinfo.h HAVE_EXECINFO_H)
    67  check_include_file (glob.h HAVE_GLOB_H)
    68  check_include_file (inttypes.h HAVE_INTTYPES_H)
    69  check_include_file (libunwind.h HAVE_LIBUNWIND_H)
    70  check_include_file (memory.h HAVE_MEMORY_H)
    71  check_include_file (pwd.h HAVE_PWD_H)
    72  check_include_file (stdint.h HAVE_STDINT_H)
    73  check_include_file (stdlib.h HAVE_STDLIB_H)
    74  check_include_file (string.h HAVE_STRING_H)
    75  check_include_file (strings.h HAVE_STRINGS_H)
    76  check_include_file (sys/stat.h HAVE_SYS_STAT_H)
    77  check_include_file (sys/syscall.h HAVE_SYS_SYSCALL_H)
    78  check_include_file (sys/time.h HAVE_SYS_TIME_H)
    79  check_include_file (sys/types.h HAVE_SYS_TYPES_H)
    80  check_include_file (sys/utsname.h HAVE_SYS_UTSNAME_H)
    81  check_include_file (syscall.h HAVE_SYSCALL_H)
    82  check_include_file (syslog.h HAVE_SYSLOG_H)
    83  check_include_file (ucontext.h HAVE_UCONTEXT_H)
    84  check_include_file (unistd.h HAVE_UNISTD_H)
    85  check_include_file (unwind.h HAVE_UNWIND_H)
    86  check_include_file (pwd.h HAVE_PWD_H)
    87  
    88  check_include_file_cxx ("ext/hash_map" HAVE_EXT_HASH_MAP)
    89  check_include_file_cxx ("ext/hash_set" HAVE_EXT_HASH_SET)
    90  check_include_file_cxx ("ext/slist" HAVE_EXT_SLIST)
    91  check_include_file_cxx ("tr1/unordered_map" HAVE_TR1_UNORDERED_MAP)
    92  check_include_file_cxx ("tr1/unordered_set" HAVE_TR1_UNORDERED_SET)
    93  check_include_file_cxx ("unordered_map" HAVE_UNORDERED_MAP)
    94  check_include_file_cxx ("unordered_set" HAVE_UNORDERED_SET)
    95  
    96  check_type_size ("unsigned __int16" HAVE___UINT16)
    97  check_type_size (u_int16_t HAVE_U_INT16_T)
    98  check_type_size (uint16_t HAVE_UINT16_T)
    99  
   100  check_function_exists (dladdr HAVE_DLADDR)
   101  check_function_exists (fcntl HAVE_FCNTL)
   102  check_function_exists (pread HAVE_PREAD)
   103  check_function_exists (pwrite HAVE_PWRITE)
   104  check_function_exists (sigaction HAVE_SIGACTION)
   105  check_function_exists (sigaltstack HAVE_SIGALSTACK)
   106  
   107  # NOTE gcc does not fail if you pass a non-existent -Wno-* option as an
   108  # argument. However, it will happily fail if you pass the corresponding -W*
   109  # option. So, we check whether options that disable warnings exist by testing
   110  # the availability of the corresponding option that enables the warning. This
   111  # eliminates the need to check for compiler for several (mainly Clang) options.
   112  
   113  check_cxx_compiler_flag (-Wdeprecated HAVE_NO_DEPRECATED)
   114  check_cxx_compiler_flag (-Wunnamed-type-template-args
   115      HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS)
   116  
   117  # NOTE: Cannot use check_function_exists here since >=vc-14.0 can define
   118  # snprintf as an inline function
   119  check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF)
   120  
   121  check_library_exists (unwind get_static_proc_name "" HAVE_LIB_UNWIND)
   122  check_library_exists (dbghelp UnDecorateSymbolName "" HAVE_DBGHELP)
   123  
   124  find_library (UNWIND_LIBRARY NAMES unwind DOC "unwind library")
   125  mark_as_advanced (UNWIND_LIBRARY)
   126  
   127  check_c_source_compiles ("
   128  #include <stdlib.h>
   129  static void foo(void) __attribute__ ((unused));
   130  int main(void) { return 0; }
   131  " HAVE___ATTRIBUTE__)
   132  
   133  check_c_source_compiles ("
   134  #include <stdlib.h>
   135  static void foo(void) __attribute__ ((visibility(\"default\")));
   136  int main(void) { return 0; }
   137  " HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
   138  
   139  check_c_source_compiles ("
   140  #include <stdlib.h>
   141  static void foo(void) __attribute__ ((visibility(\"hidden\")));
   142  int main(void) { return 0; }
   143  " HAVE___ATTRIBUTE__VISIBILITY_HIDDEN)
   144  
   145  check_c_source_compiles ("
   146  int main(void) { if (__builtin_expect(0, 0)) return 1; return 0; }
   147  " HAVE___BUILTIN_EXPECT)
   148  
   149  check_c_source_compiles ("
   150  int main(void)
   151  {
   152    int a; if (__sync_val_compare_and_swap(&a, 0, 1)) return 1; return 0;
   153  }
   154  " HAVE___SYNC_VAL_COMPARE_AND_SWAP)
   155  
   156  check_c_source_compiles ("
   157  #define _XOPEN_SOURCE 500
   158  #include <pthread.h>
   159  int main(void)
   160  {
   161    pthread_rwlock_t l;
   162    pthread_rwlock_init(&l, NULL);
   163    pthread_rwlock_rdlock(&l);
   164    return 0;
   165  }
   166  " HAVE_RWLOCK)
   167  
   168  check_c_source_compiles ("
   169  __declspec(selectany) int a;
   170  int main(void) { return 0; }
   171  " HAVE___DECLSPEC)
   172  
   173  check_cxx_source_compiles ("
   174  #include <vector>
   175  vector<int> t; int main() { }
   176  " STL_NO_NAMESPACE)
   177  
   178  check_cxx_source_compiles ("
   179  #include <vector>
   180  std::vector<int> t; int main() { }
   181  " STL_STD_NAMESPACE)
   182  
   183  check_cxx_source_compiles ("
   184  #include <iostream>
   185  std::ostream& operator<<(std::ostream&, struct s);
   186  using ::operator<<;
   187  int main() { }
   188  " HAVE_USING_OPERATOR)
   189  
   190  check_cxx_source_compiles ("
   191  namespace Outer { namespace Inner { int i = 0; }}
   192  using namespace Outer::Inner;;
   193  int main() { return i; }
   194  " HAVE_NAMESPACES)
   195  
   196  check_cxx_source_compiles ("
   197  __thread int tls;
   198  int main() { }
   199  " HAVE_GCC_TLS)
   200  
   201  check_cxx_source_compiles ("
   202  __declspec(thread) int tls;
   203  int main() { }
   204  " HAVE_MSVC_TLS)
   205  
   206  check_cxx_source_compiles ("
   207  thread_local int tls;
   208  int main() { }
   209  " HAVE_CXX11_TLS)
   210  
   211  check_cxx_source_compiles ("
   212  #include <type_traits>
   213  std::aligned_storage<sizeof(char), alignof(char)>::type data;
   214  int main() { }
   215  " HAVE_ALIGNED_STORAGE)
   216  
   217  if (WITH_TLS)
   218    # Cygwin does not support the thread attribute. Don't bother.
   219    if (HAVE_GCC_TLS)
   220      set (GLOG_THREAD_LOCAL_STORAGE "__thread")
   221    elseif (HAVE_MSVC_TLS)
   222      set (GLOG_THREAD_LOCAL_STORAGE "__declspec(thread)")
   223    elseif (HAVE_CXX11_TLS)
   224      set (GLOG_THREAD_LOCAL_STORAGE thread_local)
   225    endif (HAVE_GCC_TLS)
   226  endif (WITH_TLS)
   227  
   228  set (_PC_FIELDS
   229    "gregs[REG_PC]"
   230    "gregs[REG_EIP]"
   231    "gregs[REG_RIP]"
   232    "sc_ip"
   233    "uc_regs->gregs[PT_NIP]"
   234    "gregs[R15]"
   235    "arm_pc"
   236    "mc_eip"
   237    "mc_rip"
   238    "__gregs[REG_EIP]"
   239    "__gregs[REG_RIP]"
   240    "ss.eip"
   241    "__ss.__eip"
   242    "ss.rip"
   243    "__ss.__rip"
   244    "ss.srr0"
   245    "__ss.__srr0"
   246  )
   247  
   248  set (_PC_HEADERS ucontext.h signal.h)
   249  
   250  if (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
   251    foreach (_PC_FIELD ${_PC_FIELDS})
   252      foreach (_PC_HEADER ${_PC_HEADERS})
   253        set (_TMP
   254        ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/uctfield.c)
   255        file (WRITE ${_TMP} "
   256  #define _GNU_SOURCE 1
   257  #include <${_PC_HEADER}>
   258  int main(void)
   259  {
   260    ucontext_t u;
   261    return u.${_PC_FIELD} == 0;
   262  }
   263  ")
   264        try_compile (HAVE_PC_FROM_UCONTEXT ${CMAKE_CURRENT_BINARY_DIR} ${_TMP}
   265          COMPILE_DEFINITIONS _GNU_SOURCE=1)
   266  
   267        if (HAVE_PC_FROM_UCONTEXT)
   268          set (PC_FROM_UCONTEXT ${_PC_FIELD} CACHE)
   269        endif (HAVE_PC_FROM_UCONTEXT)
   270      endforeach (_PC_HEADER)
   271    endforeach (_PC_FIELD)
   272  endif  (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
   273  
   274  if (STL_STD_NAMESPACE)
   275    set (STL_NAMESPACE std)
   276  else (STL_STD_NAMESPACE)
   277    set (STL_NAMESPACE "")
   278  endif (STL_STD_NAMESPACE)
   279  
   280  set (GOOGLE_NAMESPACE google)
   281  set (_START_GOOGLE_NAMESPACE_ "namespace ${GOOGLE_NAMESPACE} {")
   282  set (_END_GOOGLE_NAMESPACE_ "}")
   283  
   284  if (HAVE___UINT16)
   285    set (ac_cv_have___uint16 1)
   286  else (HAVE___UINT16)
   287    set (ac_cv_have___uint16 0)
   288  endif (HAVE___UINT16)
   289  
   290  if (HAVE_INTTYPES_H)
   291    set (ac_cv_have_inttypes_h 1)
   292  else (HAVE_INTTYPES_H)
   293    set (ac_cv_have_inttypes_h 0)
   294  endif (HAVE_INTTYPES_H)
   295  
   296  if (HAVE_LIB_GFLAGS)
   297    set (ac_cv_have_libgflags 1)
   298  else (HAVE_LIB_GFLAGS)
   299    set (ac_cv_have_libgflags 0)
   300  endif (HAVE_LIB_GFLAGS)
   301  
   302  if (HAVE_STDINT_H)
   303    set (ac_cv_have_stdint_h 1)
   304  else (HAVE_STDINT_H)
   305    set (ac_cv_have_stdint_h 0)
   306  endif (HAVE_STDINT_H)
   307  
   308  if (HAVE_SYS_TYPES_H)
   309    set (ac_cv_have_systypes_h 1)
   310  else (HAVE_SYS_TYPES_H)
   311    set (ac_cv_have_systypes_h 0)
   312  endif (HAVE_SYS_TYPES_H)
   313  
   314  if (HAVE_U_INT16_T)
   315    set (ac_cv_have_u_int16_t 1)
   316  else (HAVE_U_INT16_T)
   317    set (ac_cv_have_u_int16_t 0)
   318  endif (HAVE_U_INT16_T)
   319  
   320  if (HAVE_UINT16_T)
   321    set (ac_cv_have_uint16_t 1)
   322  else (HAVE_UINT16_T)
   323    set (ac_cv_have_uint16_t 0)
   324  endif (HAVE_UINT16_T)
   325  
   326  if (HAVE_UNISTD_H)
   327    set (ac_cv_have_unistd_h 1)
   328  else (HAVE_UNISTD_H)
   329    set (ac_cv_have_unistd_h 0)
   330  endif (HAVE_UNISTD_H)
   331  
   332  set (ac_google_namespace ${GOOGLE_NAMESPACE})
   333  set (ac_google_end_namespace ${_END_GOOGLE_NAMESPACE_})
   334  set (ac_google_start_namespace ${_START_GOOGLE_NAMESPACE_})
   335  
   336  if (HAVE___ATTRIBUTE__)
   337    set (ac_cv___attribute___noreturn "__attribute__((noreturn))")
   338    set (ac_cv___attribute___noinline "__attribute__((noinline))")
   339  elseif (HAVE___DECLSPEC)
   340    set (ac_cv___attribute___noreturn "__declspec(noreturn)")
   341    #set (ac_cv___attribute___noinline "__declspec(noinline)")
   342  endif (HAVE___ATTRIBUTE__)
   343  
   344  if (HAVE___BUILTIN_EXPECT)
   345    set (ac_cv_have___builtin_expect 1)
   346  else (HAVE___BUILTIN_EXPECT)
   347    set (ac_cv_have___builtin_expect 0)
   348  endif (HAVE___BUILTIN_EXPECT)
   349  
   350  if (HAVE_USING_OPERATOR)
   351    set (ac_cv_cxx_using_operator 1)
   352  else (HAVE_USING_OPERATOR)
   353    set (ac_cv_cxx_using_operator 0)
   354  endif (HAVE_USING_OPERATOR)
   355  
   356  if (HAVE_EXECINFO_H)
   357    set (HAVE_STACKTRACE 1)
   358  endif (HAVE_EXECINFO_H)
   359  
   360  if (WIN32 OR CYGWIN)
   361    cmake_push_check_state (RESET)
   362    set (CMAKE_REQUIRED_LIBRARIES DbgHelp)
   363  
   364    check_cxx_source_runs ([=[
   365    #include <windows.h>
   366    #include <dbghelp.h>
   367    #include <cstdlib>
   368  
   369    void foobar() { }
   370  
   371    int main()
   372    {
   373        HANDLE process = GetCurrentProcess();
   374  
   375        if (!SymInitialize(process, NULL, TRUE))
   376            return EXIT_FAILURE;
   377  
   378        char buf[sizeof(SYMBOL_INFO) + MAX_SYM_NAME];
   379        SYMBOL_INFO *symbol = reinterpret_cast<SYMBOL_INFO *>(buf);
   380        symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
   381        symbol->MaxNameLen = MAX_SYM_NAME;
   382  
   383        void* const pc = reinterpret_cast<void*>(&foobar);
   384        BOOL ret = SymFromAddr(process, reinterpret_cast<DWORD64>(pc), 0, symbol);
   385  
   386        return ret ? EXIT_SUCCESS : EXIT_FAILURE;
   387    }
   388    ]=] HAVE_SYMBOLIZE)
   389  
   390    cmake_pop_check_state ()
   391  
   392    if (HAVE_SYMBOLIZE)
   393      set (HAVE_STACKTRACE 1)
   394    endif (HAVE_SYMBOLIZE)
   395  elseif (UNIX OR (APPLE AND HAVE_DLADDR))
   396    set (HAVE_SYMBOLIZE 1)
   397  endif (WIN32 OR CYGWIN)
   398  
   399  check_cxx_source_compiles ("
   400  #include <cstdlib>
   401  #include <time.h>
   402  int main()
   403  {
   404      time_t timep;
   405      struct tm result;
   406      localtime_r(&timep, &result);
   407      return EXIT_SUCCESS;
   408  }
   409  " HAVE_LOCALTIME_R)
   410  
   411  set (SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
   412  
   413  if (WITH_THREADS AND Threads_FOUND)
   414    if (CMAKE_USE_PTHREADS_INIT)
   415      set (HAVE_PTHREAD 1)
   416    endif (CMAKE_USE_PTHREADS_INIT)
   417  else (WITH_THREADS AND Threads_FOUND)
   418    set (NO_THREADS 1)
   419  endif (WITH_THREADS AND Threads_FOUND)
   420  
   421  set (TEST_SRC_DIR \"${CMAKE_CURRENT_SOURCE_DIR}\")
   422  
   423  configure_file (src/config.h.cmake.in config.h)
   424  configure_file (src/glog/logging.h.in glog/logging.h @ONLY)
   425  configure_file (src/glog/raw_logging.h.in glog/raw_logging.h @ONLY)
   426  configure_file (src/glog/stl_logging.h.in glog/stl_logging.h @ONLY)
   427  configure_file (src/glog/vlog_is_on.h.in glog/vlog_is_on.h @ONLY)
   428  
   429  set (CMAKE_CXX_VISIBILITY_PRESET default)
   430  set (CMAKE_VISIBILITY_INLINES_HIDDEN 1)
   431  
   432  set (GLOG_PUBLIC_H
   433    ${CMAKE_CURRENT_BINARY_DIR}/glog/logging.h
   434    ${CMAKE_CURRENT_BINARY_DIR}/glog/raw_logging.h
   435    ${CMAKE_CURRENT_BINARY_DIR}/glog/stl_logging.h
   436    ${CMAKE_CURRENT_BINARY_DIR}/glog/vlog_is_on.h
   437    src/glog/log_severity.h
   438  )
   439  
   440  set (GLOG_SRCS
   441    ${GLOG_PUBLIC_H}
   442    src/base/commandlineflags.h
   443    src/base/googleinit.h
   444    src/base/mutex.h
   445    src/demangle.cc
   446    src/demangle.h
   447    src/logging.cc
   448    src/raw_logging.cc
   449    src/symbolize.cc
   450    src/symbolize.h
   451    src/utilities.cc
   452    src/utilities.h
   453    src/vlog_is_on.cc
   454  )
   455  
   456  if (HAVE_PTHREAD OR WIN32)
   457    list (APPEND GLOG_SRCS src/signalhandler.cc)
   458  endif (HAVE_PTHREAD OR WIN32)
   459  
   460  if (WIN32)
   461    list (APPEND GLOG_SRCS
   462      src/windows/port.cc
   463      src/windows/port.h
   464    )
   465  endif (WIN32)
   466  
   467  add_compile_options ($<$<AND:$<BOOL:${HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS}>,$<NOT:$<CXX_COMPILER_ID:GNU>>>:-Wno-unnamed-type-template-args>)
   468  
   469  add_library (glog
   470    ${GLOG_SRCS}
   471  )
   472  add_library(glog::glog ALIAS glog)
   473  
   474  set_target_properties (glog PROPERTIES POSITION_INDEPENDENT_CODE ON)
   475  
   476  if (UNWIND_LIBRARY)
   477    target_link_libraries (glog PUBLIC ${UNWIND_LIBRARY})
   478  endif (UNWIND_LIBRARY)
   479  
   480  if (HAVE_DBGHELP)
   481     target_link_libraries (glog PUBLIC dbghelp)
   482  endif (HAVE_DBGHELP)
   483  
   484  if (HAVE_PTHREAD)
   485    target_link_libraries (glog PUBLIC ${CMAKE_THREAD_LIBS_INIT})
   486  endif (HAVE_PTHREAD)
   487  
   488  if (WIN32 AND HAVE_SNPRINTF)
   489    set_property (SOURCE src/windows/port.cc APPEND PROPERTY COMPILE_DEFINITIONS
   490      HAVE_SNPRINTF)
   491  endif (WIN32 AND HAVE_SNPRINTF)
   492  
   493  if (gflags_FOUND)
   494    target_link_libraries (glog PUBLIC gflags)
   495  
   496    if (NOT BUILD_SHARED_LIBS)
   497      # Don't use __declspec(dllexport|dllimport) if this is a static build
   498      targeT_compile_definitions (glog PUBLIC GFLAGS_DLL_DECLARE_FLAG= GFLAGS_DLL_DEFINE_FLAG=)
   499    endif (NOT BUILD_SHARED_LIBS)
   500  endif (gflags_FOUND)
   501  
   502  set_target_properties (glog PROPERTIES VERSION ${PROJECT_VERSION})
   503  set_target_properties (glog PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
   504  
   505  if (WIN32)
   506    target_compile_definitions (glog PUBLIC GLOG_NO_ABBREVIATED_SEVERITIES)
   507  endif (WIN32)
   508  
   509  set_target_properties (glog PROPERTIES PUBLIC_HEADER "${GLOG_PUBLIC_H}")
   510  
   511  set (_glog_CMake_BINDIR ${CMAKE_INSTALL_BINDIR})
   512  set (_glog_CMake_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
   513  set (_glog_CMake_LIBDIR ${CMAKE_INSTALL_LIBDIR})
   514  set (_glog_CMake_INSTALLDIR ${_glog_CMake_LIBDIR}/cmake/glog)
   515  
   516  target_include_directories (glog BEFORE PUBLIC
   517    "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
   518    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
   519    "$<INSTALL_INTERFACE:${_glog_CMake_INCLUDE_DIR}>"
   520    PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
   521    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
   522  
   523  if (WIN32)
   524    target_include_directories (glog PUBLIC
   525      "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/windows>"
   526      PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/windows)
   527  endif (WIN32)
   528  
   529  set_target_properties (glog PROPERTIES DEFINE_SYMBOL LIBGLOG_EXPORTS)
   530  
   531  if (NOT BUILD_SHARED_LIBS)
   532    target_compile_definitions (glog PUBLIC GOOGLE_GLOG_DLL_DECL=)
   533  else (NOT BUILD_SHARED_LIBS)
   534    target_compile_definitions (glog PRIVATE GOOGLE_GLOG_IS_A_DLL=1)
   535  
   536    if (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
   537      set (_EXPORT "__attribute__((visibility(\"default\")))")
   538      set (_IMPORT "")
   539    elseif (HAVE___DECLSPEC)
   540      set (_EXPORT "__declspec(dllexport)")
   541      set (_IMPORT "__declspec(dllimport)")
   542    endif (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
   543  
   544    target_compile_definitions (glog PRIVATE
   545      "GOOGLE_GLOG_DLL_DECL=${_EXPORT}")
   546    target_compile_definitions (glog INTERFACE
   547      "GOOGLE_GLOG_DLL_DECL=${_IMPORT}")
   548    target_compile_definitions (glog INTERFACE
   549      "GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=${_IMPORT}")
   550  endif (NOT BUILD_SHARED_LIBS)
   551  
   552  # Unit testing
   553  
   554  if (BUILD_TESTING)
   555    add_executable (logging_unittest
   556      src/logging_unittest.cc
   557    )
   558  
   559    target_link_libraries (logging_unittest PRIVATE glog)
   560  
   561    add_executable (stl_logging_unittest
   562      src/stl_logging_unittest.cc
   563    )
   564  
   565    target_link_libraries (stl_logging_unittest PRIVATE glog)
   566  
   567    if (HAVE_NO_DEPRECATED)
   568      set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS
   569        -Wno-deprecated)
   570    endif (HAVE_NO_DEPRECATED)
   571  
   572    if (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
   573      target_compile_definitions (stl_logging_unittest PRIVATE
   574        GLOG_STL_LOGGING_FOR_UNORDERED)
   575    endif (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
   576  
   577    if (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
   578      target_compile_definitions (stl_logging_unittest PRIVATE
   579        GLOG_STL_LOGGING_FOR_TR1_UNORDERED)
   580    endif (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
   581  
   582    if (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
   583      target_compile_definitions (stl_logging_unittest PRIVATE
   584        GLOG_STL_LOGGING_FOR_EXT_HASH)
   585    endif (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
   586  
   587    if (HAVE_EXT_SLIST)
   588      target_compile_definitions (stl_logging_unittest PRIVATE
   589        GLOG_STL_LOGGING_FOR_EXT_SLIST)
   590    endif (HAVE_EXT_SLIST)
   591  
   592    if (HAVE_SYMBOLIZE)
   593      add_executable (symbolize_unittest
   594        src/symbolize_unittest.cc
   595      )
   596  
   597      target_link_libraries (symbolize_unittest PRIVATE glog)
   598    endif (HAVE_SYMBOLIZE)
   599  
   600    add_executable (demangle_unittest
   601      src/demangle_unittest.cc
   602    )
   603  
   604    target_link_libraries (demangle_unittest PRIVATE glog)
   605  
   606    if (HAVE_STACKTRACE)
   607      add_executable (stacktrace_unittest
   608        src/stacktrace_unittest.cc
   609      )
   610  
   611      target_link_libraries (stacktrace_unittest PRIVATE glog)
   612    endif (HAVE_STACKTRACE)
   613  
   614    add_executable (utilities_unittest
   615      src/utilities_unittest.cc
   616    )
   617  
   618    target_link_libraries (utilities_unittest PRIVATE glog)
   619  
   620    if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
   621      add_executable (signalhandler_unittest
   622        src/signalhandler_unittest.cc
   623      )
   624  
   625      target_link_libraries (signalhandler_unittest PRIVATE glog)
   626    endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
   627  
   628    add_test (NAME demangle COMMAND demangle_unittest)
   629    add_test (NAME logging COMMAND logging_unittest)
   630  
   631    if (TARGET signalhandler_unittest)
   632      add_test (NAME signalhandler COMMAND signalhandler_unittest)
   633    endif (TARGET signalhandler_unittest)
   634  
   635    if (TARGET stacktrace_unittest)
   636      add_test (NAME stacktrace COMMAND stacktrace_unittest)
   637      set_tests_properties(stacktrace PROPERTIES TIMEOUT 30)
   638    endif (TARGET stacktrace_unittest)
   639  
   640    add_test (NAME stl_logging COMMAND stl_logging_unittest)
   641  
   642    if (TARGET symbolize_unittest)
   643      add_test (NAME symbolize COMMAND symbolize_unittest)
   644    endif (TARGET symbolize_unittest)
   645  endif (BUILD_TESTING)
   646  
   647  install (TARGETS glog
   648    EXPORT glog-targets
   649    RUNTIME DESTINATION ${_glog_CMake_BINDIR}
   650    PUBLIC_HEADER DESTINATION ${_glog_CMake_INCLUDE_DIR}/glog
   651    LIBRARY DESTINATION ${_glog_CMake_LIBDIR}
   652    ARCHIVE DESTINATION ${_glog_CMake_LIBDIR})
   653  
   654  set (glog_CMake_VERSION 3.0)
   655  
   656  if (gflags_FOUND)
   657    # Ensure clients locate only the package config and not third party find
   658    # modules having the same name. This avoid cmake_policy PUSH/POP errors.
   659    if (CMAKE_VERSION VERSION_LESS 3.9)
   660      set (gflags_DEPENDENCY "find_dependency (gflags ${gflags_VERSION})")
   661    else (CMAKE_VERSION VERSION_LESS 3.9)
   662      # Passing additional find_package arguments to find_dependency is possible
   663      # starting with CMake 3.9.
   664      set (glog_CMake_VERSION 3.9)
   665      set (gflags_DEPENDENCY "find_dependency (gflags ${gflags_VERSION} NO_MODULE)")
   666    endif (CMAKE_VERSION VERSION_LESS 3.9)
   667  endif (gflags_FOUND)
   668  
   669  configure_package_config_file (glog-config.cmake.in
   670    ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
   671    INSTALL_DESTINATION ${_glog_CMake_INSTALLDIR}
   672    NO_CHECK_REQUIRED_COMPONENTS_MACRO)
   673  
   674  write_basic_package_version_file (glog-config-version.cmake VERSION
   675    ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
   676  
   677  export (TARGETS glog NAMESPACE glog:: FILE glog-targets.cmake)
   678  export (PACKAGE glog)
   679  
   680  install (FILES
   681    ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
   682    ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
   683    DESTINATION ${_glog_CMake_INSTALLDIR})
   684  
   685  install (EXPORT glog-targets NAMESPACE glog:: DESTINATION
   686    ${_glog_CMake_INSTALLDIR})