Merge pull request #129 from sergiud/cmake-PIC
[platform/upstream/glog.git] / CMakeLists.txt
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 (google-glog)
12
13 enable_testing ()
14
15 set (GLOG_MAJOR_VERSION 0)
16 set (GLOG_MINOR_VERSION 3)
17 set (GLOG_PATCH_VERSION 4)
18
19 set (GLOG_VERSION
20   ${GLOG_MAJOR_VERSION}.${GLOG_MINOR_VERSION}.${GLOG_PATCH_VERSION})
21
22 set (CPACK_PACKAGE_NAME glog)
23 set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "")
24 set (CPACK_PACKAGE_VERSION_MAJOR ${GLOG_MAJOR_VERSION})
25 set (CPACK_PACKAGE_VERSION_MINOR ${GLOG_MINOR_VERSION})
26 set (CPACK_PACKAGE_VERSION_PATCH ${GLOG_PATCH_VERSION})
27 set (CPACK_PACKAGE_VERSION ${GLOG_VERSION})
28
29 option (WITH_GFLAGS "Use gflags" ON)
30 option (WITH_THREADS "Enable multithreading support" ON)
31
32 list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
33
34 include (CMakePackageConfigHelpers)
35 include (CPack)
36 include (CheckCSourceCompiles)
37 include (CheckCXXCompilerFlag)
38 include (CheckCXXSourceCompiles)
39 include (CheckFunctionExists)
40 include (CheckIncludeFile)
41 include (CheckIncludeFileCXX)
42 include (CheckLibraryExists)
43 include (CheckStructHasMember)
44 include (CheckSymbolExists)
45 include (CheckTypeSize)
46 include (DetermineGflagsNamespace)
47
48 set (CMAKE_THREAD_PREFER_PTHREAD 1)
49
50 if (WITH_GFLAGS)
51   find_package (gflags)
52
53   if (gflags_FOUND)
54     set (HAVE_LIB_GFLAGS 1)
55     determine_gflags_namespace (gflags_NAMESPACE)
56   endif (gflags_FOUND)
57 endif (WITH_GFLAGS)
58
59 if (WITH_THREADS)
60   find_package (Threads)
61 endif (WITH_THREADS)
62
63 check_include_file (dlfcn.h HAVE_DLFCN_H)
64 check_include_file (execinfo.h HAVE_EXECINFO_H)
65 check_include_file (glob.h HAVE_GLOB_H)
66 check_include_file (inttypes.h HAVE_INTTYPES_H)
67 check_include_file (libunwind.h HAVE_LIBUNWIND_H)
68 check_include_file (memory.h HAVE_MEMORY_H)
69 check_include_file (pwd.h HAVE_PWD_H)
70 check_include_file (stdint.h HAVE_STDINT_H)
71 check_include_file (stdlib.h HAVE_STDLIB_H)
72 check_include_file (string.h HAVE_STRING_H)
73 check_include_file (strings.h HAVE_STRINGS_H)
74 check_include_file (sys/stat.h HAVE_SYS_STAT_H)
75 check_include_file (sys/syscall.h HAVE_SYS_SYSCALL_H)
76 check_include_file (sys/time.h HAVE_SYS_TIME_H)
77 check_include_file (sys/types.h HAVE_SYS_TYPES_H)
78 check_include_file (sys/utsname.h HAVE_SYS_UTSNAME_H)
79 check_include_file (syscall.h HAVE_SYSCALL_H)
80 check_include_file (syslog.h HAVE_SYSLOG_H)
81 check_include_file (ucontext.h HAVE_UCONTEXT_H)
82 check_include_file (unistd.h HAVE_UNISTD_H)
83 check_include_file (unwind.h HAVE_UNWIND_H)
84
85 check_include_file_cxx ("ext/hash_map" HAVE_EXT_HASH_MAP)
86 check_include_file_cxx ("ext/hash_set" HAVE_EXT_HASH_SET)
87 check_include_file_cxx ("ext/slist" HAVE_EXT_SLIST)
88 check_include_file_cxx ("tr1/unordered_map" HAVE_TR1_UNORDERED_MAP)
89 check_include_file_cxx ("tr1/unordered_set" HAVE_TR1_UNORDERED_SET)
90 check_include_file_cxx ("unordered_map" HAVE_UNORDERED_MAP)
91 check_include_file_cxx ("unordered_set" HAVE_UNORDERED_SET)
92
93 check_type_size ("unsigned __int16" HAVE___UINT16)
94 check_type_size (u_int16_t HAVE_U_INT16_T)
95 check_type_size (uint16_t HAVE_UINT16_T)
96
97 check_function_exists (dladdr HAVE_DLADDR)
98 check_function_exists (fcntl HAVE_FCNTL)
99 check_function_exists (pread HAVE_PREAD)
100 check_function_exists (pwrite HAVE_PWRITE)
101 check_function_exists (sigaction HAVE_SIGACTION)
102 check_function_exists (sigaltstack HAVE_SIGALSTACK)
103
104 # NOTE gcc does not fail if you pass a non-existent -Wno-* option as an
105 # argument. However, it will happily fail if you pass the corresponding -W*
106 # option. So, we check whether options that disable warnings exist by testing
107 # the availability of the corresponding option that enables the warning. This
108 # eliminates the need to check for compiler for several (mainly Clang) options.
109
110 check_cxx_compiler_flag (-Wdeprecated HAVE_NO_DEPRECATED)
111 check_cxx_compiler_flag (-Wunnamed-type-template-args
112     HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS)
113
114 # NOTE: Cannot use check_function_exists here since >=vc-14.0 can define
115 # snprintf as an inline function
116 check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF)
117
118 check_library_exists (unwind get_static_proc_name "" HAVE_LIB_UNWIND)
119
120 find_library (UNWIND_LIBRARY NAMES unwind DOC "unwind library")
121 mark_as_advanced (UNWIND_LIBRARY)
122
123 check_c_source_compiles ("
124 #include <stdlib.h>
125 static void foo(void) __attribute__ ((unused));
126 int main(void) { return 0; }
127 " HAVE___ATTRIBUTE__)
128
129 check_c_source_compiles ("
130 #include <stdlib.h>
131 static void foo(void) __attribute__ ((visibility(\"default\")));
132 int main(void) { return 0; }
133 " HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
134
135 check_c_source_compiles ("
136 #include <stdlib.h>
137 static void foo(void) __attribute__ ((visibility(\"hidden\")));
138 int main(void) { return 0; }
139 " HAVE___ATTRIBUTE__VISIBILITY_HIDDEN)
140
141 check_c_source_compiles ("
142 int main(void) { if (__builtin_expect(0, 0)) return 1; return 0; }
143 " HAVE___BUILTIN_EXPECT)
144
145 check_c_source_compiles ("
146 int main(void)
147 {
148   int a; if (__sync_val_compare_and_swap(&a, 0, 1)) return 1; return 0;
149 }
150 " HAVE___SYNC_VAL_COMPARE_AND_SWAP)
151
152 check_c_source_compiles ("
153 #define _XOPEN_SOURCE 500
154 #include <pthread.h>
155 int main(void)
156 {
157   pthread_rwlock_t l;
158   pthread_rwlock_init(&l, NULL);
159   pthread_rwlock_rdlock(&l);
160   return 0;
161 }
162 " HAVE_RWLOCK)
163
164 check_c_source_compiles ("
165 __declspec(selectany) int a;
166 int main(void) { return 0; }
167 " HAVE___DECLSPEC)
168
169 check_cxx_source_compiles ("
170 #include <vector>
171 vector<int> t; int main() { }
172 " STL_NO_NAMESPACE)
173
174 check_cxx_source_compiles ("
175 #include <vector>
176 std::vector<int> t; int main() { }
177 " STL_STD_NAMESPACE)
178
179 check_cxx_source_compiles ("
180 #include <iostream>
181 std::ostream& operator<<(std::ostream&, struct s);
182 using ::operator<<;
183 int main() { }
184 " HAVE_USING_OPERATOR)
185
186 check_cxx_source_compiles ("
187 namespace Outer { namespace Inner { int i = 0; }}
188 using namespace Outer::Inner;;
189 int main() { return i; }
190 " HAVE_NAMESPACES)
191
192 set (_PC_FIELDS
193   "gregs[REG_PC]"
194   "gregs[REG_EIP]"
195   "gregs[REG_RIP]"
196   "sc_ip"
197   "uc_regs->gregs[PT_NIP]"
198   "gregs[R15]"
199   "arm_pc"
200   "mc_eip"
201   "mc_rip"
202   "__gregs[REG_EIP]"
203   "__gregs[REG_RIP]"
204   "ss.eip"
205   "__ss.__eip"
206   "ss.rip"
207   "__ss.__rip"
208   "ss.srr0"
209   "__ss.__srr0"
210 )
211
212 set (_PC_HEADERS ucontext.h signal.h)
213
214 if (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
215   foreach (_PC_FIELD ${_PC_FIELDS})
216     foreach (_PC_HEADER ${_PC_HEADERS})
217       set (_TMP
218       ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/uctfield.c)
219       file (WRITE ${_TMP} "
220 #define _GNU_SOURCE 1
221 #include <${_PC_HEADER}>
222 int main(void)
223 {
224   ucontext_t u;
225   return u.${_PC_FIELD} == 0;
226 }
227 ")
228       try_compile (HAVE_PC_FROM_UCONTEXT ${CMAKE_CURRENT_BINARY_DIR} ${_TMP}
229         COMPILE_DEFINITIONS _GNU_SOURCE=1)
230
231       if (HAVE_PC_FROM_UCONTEXT)
232         set (PC_FROM_UCONTEXT ${_PC_FIELD} CACHE)
233       endif (HAVE_PC_FROM_UCONTEXT)
234     endforeach (_PC_HEADER)
235   endforeach (_PC_FIELD)
236 endif  (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
237
238 if (STL_STD_NAMESPACE)
239   set (STL_NAMESPACE std)
240 else (STL_STD_NAMESPACE)
241   set (STL_NAMESPACE "")
242 endif (STL_STD_NAMESPACE)
243
244 set (GOOGLE_NAMESPACE google)
245 set (_START_GOOGLE_NAMESPACE_ "namespace ${GOOGLE_NAMESPACE} {")
246 set (_END_GOOGLE_NAMESPACE_ "}")
247
248 if (HAVE___UINT16)
249   set (ac_cv_have___uint16 1)
250 else (HAVE___UINT16)
251   set (ac_cv_have___uint16 0)
252 endif (HAVE___UINT16)
253
254 if (HAVE_INTTYPES_H)
255   set (ac_cv_have_inttypes_h 1)
256 else (HAVE_INTTYPES_H)
257   set (ac_cv_have_inttypes_h 0)
258 endif (HAVE_INTTYPES_H)
259
260 if (HAVE_LIB_GFLAGS)
261   set (ac_cv_have_libgflags 1)
262 else (HAVE_LIB_GFLAGS)
263   set (ac_cv_have_libgflags 0)
264 endif (HAVE_LIB_GFLAGS)
265
266 if (HAVE_STDINT_H)
267   set (ac_cv_have_stdint_h 1)
268 else (HAVE_STDINT_H)
269   set (ac_cv_have_stdint_h 0)
270 endif (HAVE_STDINT_H)
271
272 if (HAVE_SYS_TYPES_H)
273   set (ac_cv_have_systypes_h 1)
274 else (HAVE_SYS_TYPES_H)
275   set (ac_cv_have_systypes_h 0)
276 endif (HAVE_SYS_TYPES_H)
277
278 if (HAVE_U_INT16_T)
279   set (ac_cv_have_u_int16_t 1)
280 else (HAVE_U_INT16_T)
281   set (ac_cv_have_u_int16_t 0)
282 endif (HAVE_U_INT16_T)
283
284 if (HAVE_UINT16_T)
285   set (ac_cv_have_uint16_t 1)
286 else (HAVE_UINT16_T)
287   set (ac_cv_have_uint16_t 0)
288 endif (HAVE_UINT16_T)
289
290 if (HAVE_UNISTD_H)
291   set (ac_cv_have_unistd_h 1)
292 else (HAVE_UNISTD_H)
293   set (ac_cv_have_unistd_h 0)
294 endif (HAVE_UNISTD_H)
295
296 set (ac_google_namespace ${GOOGLE_NAMESPACE})
297 set (ac_google_end_namespace ${_END_GOOGLE_NAMESPACE_})
298 set (ac_google_start_namespace ${_START_GOOGLE_NAMESPACE_})
299
300 if (HAVE___ATTRIBUTE__)
301   set (ac_cv___attribute___noreturn "__attribute__((noreturn))")
302   set (ac_cv___attribute___noinline "__attribute__((noinline))")
303 elseif (HAVE___DECLSPEC)
304   set (ac_cv___attribute___noreturn "__declspec(noreturn)")
305   #set (ac_cv___attribute___noinline "__declspec(noinline)")
306 endif (HAVE___ATTRIBUTE__)
307
308 if (HAVE___BUILTIN_EXPECT)
309   set (ac_cv_have___builtin_expect 1)
310 else (HAVE___BUILTIN_EXPECT)
311   set (ac_cv_have___builtin_expect 0)
312 endif (HAVE___BUILTIN_EXPECT)
313
314 if (HAVE_USING_OPERATOR)
315   set (ac_cv_cxx_using_operator 1)
316 else (HAVE_USING_OPERATOR)
317   set (ac_cv_cxx_using_operator 0)
318 endif (HAVE_USING_OPERATOR)
319
320 set (SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
321
322 if (WITH_THREADS AND Threads_FOUND)
323   if (CMAKE_USE_PTHREADS_INIT)
324     set (HAVE_PTHREAD 1)
325   endif (CMAKE_USE_PTHREADS_INIT)
326 else (WITH_THREADS AND Threads_FOUND)
327   set (NO_THREADS 1)
328 endif (WITH_THREADS AND Threads_FOUND)
329
330 set (TEST_SRC_DIR \"${CMAKE_CURRENT_SOURCE_DIR}\")
331
332 configure_file (src/config.h.cmake.in config.h)
333 configure_file (src/glog/logging.h.in glog/logging.h @ONLY)
334 configure_file (src/glog/raw_logging.h.in glog/raw_logging.h @ONLY)
335 configure_file (src/glog/stl_logging.h.in glog/stl_logging.h @ONLY)
336 configure_file (src/glog/vlog_is_on.h.in glog/vlog_is_on.h @ONLY)
337
338 set (CMAKE_CXX_VISIBILITY_PRESET default)
339 set (CMAKE_VISIBILITY_INLINES_HIDDEN 1)
340
341 set (GLOG_PUBLIC_H
342   ${CMAKE_CURRENT_BINARY_DIR}/config.h
343   ${CMAKE_CURRENT_BINARY_DIR}/glog/logging.h
344   ${CMAKE_CURRENT_BINARY_DIR}/glog/raw_logging.h
345   ${CMAKE_CURRENT_BINARY_DIR}/glog/stl_logging.h
346   ${CMAKE_CURRENT_BINARY_DIR}/glog/vlog_is_on.h
347   src/glog/log_severity.h
348 )
349
350 set (GLOG_SRCS
351   ${GLOG_PUBLIC_H}
352   src/base/commandlineflags.h
353   src/base/googleinit.h
354   src/base/mutex.h
355   src/demangle.cc
356   src/demangle.h
357   src/logging.cc
358   src/raw_logging.cc
359   src/symbolize.cc
360   src/symbolize.h
361   src/utilities.cc
362   src/utilities.h
363   src/vlog_is_on.cc
364 )
365
366 if (HAVE_PTHREAD)
367   list (APPEND GLOG_SRCS src/signalhandler.cc)
368 endif (HAVE_PTHREAD)
369
370 if (WIN32)
371   list (APPEND GLOG_SRCS
372     src/windows/port.cc
373     src/windows/port.h
374   )
375 endif (WIN32)
376
377 add_compile_options ($<$<BOOL:${HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS}>:-Wno-unnamed-type-template-args>)
378
379 add_library (glog
380   ${GLOG_SRCS}
381 )
382
383 set_target_properties (glog PROPERTIES POSITION_INDEPENDENT_CODE ON)
384
385 if (UNWIND_LIBRARY)
386   target_link_libraries (glog PUBLIC ${UNWIND_LIBRARY})
387 endif (UNWIND_LIBRARY)
388
389 if (HAVE_PTHREAD)
390   target_link_libraries (glog PUBLIC ${CMAKE_THREAD_LIBS_INIT})
391 endif (HAVE_PTHREAD)
392
393 if (WIN32 AND HAVE_SNPRINTF)
394   set_property (SOURCE src/windows/port.cc APPEND PROPERTY COMPILE_DEFINITIONS
395     HAVE_SNPRINTF)
396 endif (WIN32 AND HAVE_SNPRINTF)
397
398 if (gflags_FOUND)
399   target_include_directories (glog PUBLIC ${gflags_INCLUDE_DIR})
400   target_link_libraries (glog PUBLIC ${gflags_LIBRARIES})
401
402   if (NOT BUILD_SHARED_LIBS)
403     # Don't use __declspec(dllexport|dllimport) if this is a static build
404     targeT_compile_definitions (glog PUBLIC GFLAGS_DLL_DECLARE_FLAG= GFLAGS_DLL_DEFINE_FLAG=)
405   endif (NOT BUILD_SHARED_LIBS)
406 endif (gflags_FOUND)
407
408 set_target_properties (glog PROPERTIES VERSION ${GLOG_MAJOR_VERSION})
409 set_target_properties (glog PROPERTIES SOVERSION ${GLOG_VERSION})
410
411 if (WIN32)
412   target_compile_definitions (glog PUBLIC GLOG_NO_ABBREVIATED_SEVERITIES)
413 endif (WIN32)
414
415 set_target_properties (glog PROPERTIES PUBLIC_HEADER "${GLOG_PUBLIC_H}")
416
417 target_include_directories (glog BEFORE PUBLIC
418   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
419   "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
420   "$<INSTALL_INTERFACE:include>"
421   PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
422   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
423
424 if (WIN32)
425   target_include_directories (glog PUBLIC
426     "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/windows>"
427     PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/windows)
428 endif (WIN32)
429
430 set_target_properties (glog PROPERTIES DEFINE_SYMBOL LIBGLOG_EXPORTS)
431
432 if (NOT BUILD_SHARED_LIBS)
433   target_compile_definitions (glog PUBLIC GOOGLE_GLOG_DLL_DECL=)
434 else (NOT BUILD_SHARED_LIBS)
435   target_compile_definitions (glog PRIVATE GOOGLE_GLOG_IS_A_DLL=1)
436
437   if (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
438     set (_EXPORT "__attribute__((visibility(\"default\")))")
439     set (_IMPORT "")
440   elseif (HAVE___DECLSPEC)
441     set (_EXPORT "__declspec(dllexport)")
442     set (_IMPORT "__declspec(dllimport)")
443   endif (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
444
445   target_compile_definitions (glog PRIVATE
446     "GOOGLE_GLOG_DLL_DECL=${_EXPORT}")
447   target_compile_definitions (glog INTERFACE
448     "GOOGLE_GLOG_DLL_DECL=${_IMPORT}")
449   target_compile_definitions (glog INTERFACE
450     "GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=${_IMPORT}")
451 endif (NOT BUILD_SHARED_LIBS)
452
453 if (HAVE_EXECINFO_H)
454   set (HAVE_STACKTRACE 1)
455 endif (HAVE_EXECINFO_H)
456
457 if (UNIX OR (APPLE AND HAVE_DLADDR))
458   set (HAVE_SYMBOLIZE 1)
459 endif (UNIX OR (APPLE AND HAVE_DLADDR))
460
461 # Unit testing
462
463 add_executable (logging_unittest
464   src/logging_unittest.cc
465 )
466
467 target_link_libraries (logging_unittest PRIVATE glog)
468
469 add_executable (stl_logging_unittest
470   src/stl_logging_unittest.cc
471 )
472
473 target_link_libraries (stl_logging_unittest PRIVATE glog)
474
475 if (HAVE_NO_DEPRECATED)
476   set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS
477     -Wno-deprecated)
478 endif (HAVE_NO_DEPRECATED)
479
480 if (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
481   target_compile_definitions (stl_logging_unittest PRIVATE
482     GLOG_STL_LOGGING_FOR_UNORDERED)
483 endif (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
484
485 if (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
486   target_compile_definitions (stl_logging_unittest PRIVATE
487     GLOG_STL_LOGGING_FOR_TR1_UNORDERED)
488 endif (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
489
490 if (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
491   target_compile_definitions (stl_logging_unittest PRIVATE
492     GLOG_STL_LOGGING_FOR_EXT_HASH)
493 endif (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
494
495 if (HAVE_EXT_SLIST)
496   target_compile_definitions (stl_logging_unittest PRIVATE
497     GLOG_STL_LOGGING_FOR_EXT_SLIST)
498 endif (HAVE_EXT_SLIST)
499
500 if (HAVE_SYMBOLIZE)
501   add_executable (symbolize_unittest
502     src/symbolize_unittest.cc
503   )
504
505   target_link_libraries (symbolize_unittest PRIVATE glog)
506 endif (HAVE_SYMBOLIZE)
507
508 add_executable (demangle_unittest
509   src/demangle_unittest.cc
510 )
511
512 target_link_libraries (demangle_unittest PRIVATE glog)
513
514 if (HAVE_STACKTRACE)
515   add_executable (stacktrace_unittest
516     src/stacktrace_unittest.cc
517   )
518
519   target_link_libraries (stacktrace_unittest PRIVATE glog)
520 endif (HAVE_STACKTRACE)
521
522 add_executable (utilities_unittest
523   src/utilities_unittest.cc
524 )
525
526 target_link_libraries (utilities_unittest PRIVATE glog)
527
528 if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
529   add_executable (signalhandler_unittest
530     src/signalhandler_unittest.cc
531   )
532
533   target_link_libraries (signalhandler_unittest PRIVATE glog)
534 endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
535
536 add_test (NAME demangle COMMAND demangle_unittest)
537 add_test (NAME logging COMMAND logging_unittest)
538
539 if (TARGET signalhandler_unittest)
540   add_test (NAME signalhandler COMMAND signalhandler_unittest)
541 endif (TARGET signalhandler_unittest)
542
543 if (TARGET stacktrace_unittest)
544   add_test (NAME stacktrace COMMAND stacktrace_unittest)
545 endif (TARGET stacktrace_unittest)
546
547 add_test (NAME stl_logging COMMAND stl_logging_unittest)
548
549 if (TARGET symbolize_unittest)
550   add_test (NAME symbolize COMMAND symbolize_unittest)
551 endif (TARGET symbolize_unittest)
552
553 install (TARGETS glog
554   EXPORT glog-targets
555   RUNTIME DESTINATION bin
556   PUBLIC_HEADER DESTINATION include/glog
557   LIBRARY DESTINATION lib
558   ARCHIVE DESTINATION lib)
559
560 if (gflags_FOUND)
561   set (gflags_DEPENDENCY "find_dependency (gflags ${gflags_VERSION})")
562 endif (gflags_FOUND)
563
564 configure_package_config_file (glog-config.cmake.in
565   ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
566   INSTALL_DESTINATION lib/cmake/glog
567   NO_CHECK_REQUIRED_COMPONENTS_MACRO)
568
569 write_basic_package_version_file (glog-config-version.cmake VERSION
570   ${GLOG_VERSION} COMPATIBILITY SameMajorVersion)
571
572 export (TARGETS glog NAMESPACE glog:: FILE glog-targets.cmake)
573 export (PACKAGE glog)
574
575 install (FILES
576   ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
577   ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
578   DESTINATION lib/cmake/glog)
579
580 install (EXPORT glog-targets NAMESPACE glog:: DESTINATION lib/cmake/glog)