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