cmake: support gflags in static builds
[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
374   if (NOT BUILD_SHARED_LIBS)
375     # Don't use __declspec(dllexport|dllimport) if this is a static build
376     targeT_compile_definitions (glog PUBLIC GFLAGS_DLL_DECLARE_FLAG= GFLAGS_DLL_DEFINE_FLAG=)
377   endif (NOT BUILD_SHARED_LIBS)
378 endif (gflags_FOUND)
379
380 set_target_properties (glog PROPERTIES VERSION ${GLOG_MAJOR_VERSION})
381 set_target_properties (glog PROPERTIES SOVERSION ${GLOG_VERSION})
382
383 if (WIN32)
384   target_compile_definitions (glog PUBLIC GLOG_NO_ABBREVIATED_SEVERITIES)
385 endif (WIN32)
386
387 set_target_properties (glog PROPERTIES PUBLIC_HEADER "${GLOG_PUBLIC_H}")
388
389 target_include_directories (glog BEFORE PUBLIC
390   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
391   "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
392   PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
393   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
394
395 if (WIN32)
396   target_include_directories (glog PUBLIC
397     "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/windows>"
398     PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/windows)
399 endif (WIN32)
400
401 set_target_properties (glog PROPERTIES DEFINE_SYMBOL LIBGLOG_EXPORTS)
402
403 if (NOT BUILD_SHARED_LIBS)
404   target_compile_definitions (glog PUBLIC GOOGLE_GLOG_DLL_DECL=)
405 else (NOT BUILD_SHARED_LIBS)
406   target_compile_definitions (glog PRIVATE GOOGLE_GLOG_IS_A_DLL=1)
407
408   if (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
409     set (_EXPORT "__attribute__((visibility(\"default\")))")
410     set (_IMPORT "")
411   elseif (HAVE___DECLSPEC)
412     set (_EXPORT "__declspec(dllexport)")
413     set (_IMPORT "__declspec(dllimport)")
414   endif (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
415
416   target_compile_definitions (glog PRIVATE
417     "GOOGLE_GLOG_DLL_DECL=${_EXPORT}")
418   target_compile_definitions (glog INTERFACE
419     "GOOGLE_GLOG_DLL_DECL=${_IMPORT}")
420   target_compile_definitions (glog INTERFACE
421     "GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=${_IMPORT}")
422 endif (NOT BUILD_SHARED_LIBS)
423
424 if (HAVE_PTHREAD)
425   target_link_libraries (glog PUBLIC ${CMAKE_THREAD_LIBS_INIT})
426 else (HAVE_PTHREAD)
427   target_compile_definitions (glog PUBLIC NO_THREADS)
428 endif (HAVE_PTHREAD)
429
430 if (HAVE_EXECINFO_H)
431   set (HAVE_STACKTRACE 1)
432 endif (HAVE_EXECINFO_H)
433
434 if (UNIX OR (APPLE AND HAVE_DLADDR))
435   set (HAVE_SYMBOLIZE 1)
436 endif (UNIX OR (APPLE AND HAVE_DLADDR))
437
438 # Unit testing
439
440 add_executable (logging_unittest
441   src/logging_unittest.cc
442 )
443
444 target_link_libraries (logging_unittest PRIVATE glog)
445
446 add_executable (stl_logging_unittest
447   src/stl_logging_unittest.cc
448 )
449
450 target_link_libraries (stl_logging_unittest PRIVATE glog)
451
452 if (HAVE_NO_DEPRECATED)
453   set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS
454     -Wno-deprecated)
455 endif (HAVE_NO_DEPRECATED)
456
457 if (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
458   target_compile_definitions (stl_logging_unittest PRIVATE
459     GLOG_STL_LOGGING_FOR_UNORDERED)
460 endif (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
461
462 if (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
463   target_compile_definitions (stl_logging_unittest PRIVATE
464     GLOG_STL_LOGGING_FOR_TR1_UNORDERED)
465 endif (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
466
467 if (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
468   target_compile_definitions (stl_logging_unittest PRIVATE
469     GLOG_STL_LOGGING_FOR_EXT_HASH)
470 endif (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
471
472 if (HAVE_EXT_SLIST)
473   target_compile_definitions (stl_logging_unittest PRIVATE
474     GLOG_STL_LOGGING_FOR_EXT_SLIST)
475 endif (HAVE_EXT_SLIST)
476
477 if (HAVE_SYMBOLIZE)
478   add_executable (symbolize_unittest
479     src/symbolize_unittest.cc
480   )
481
482   target_link_libraries (symbolize_unittest PRIVATE glog)
483 endif (HAVE_SYMBOLIZE)
484
485 add_executable (demangle_unittest
486   src/demangle_unittest.cc
487 )
488
489 target_link_libraries (demangle_unittest PRIVATE glog)
490
491 if (HAVE_STACKTRACE)
492   add_executable (stacktrace_unittest
493     src/stacktrace_unittest.cc
494   )
495
496   target_link_libraries (stacktrace_unittest PRIVATE glog)
497 endif (HAVE_STACKTRACE)
498
499 add_executable (utilities_unittest
500   src/utilities_unittest.cc
501 )
502
503 target_link_libraries (utilities_unittest PRIVATE glog)
504
505 if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
506   add_executable (signalhandler_unittest
507     src/signalhandler_unittest.cc
508   )
509
510   target_link_libraries (signalhandler_unittest PRIVATE glog)
511 endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
512
513 add_test (NAME demangle COMMAND demangle_unittest)
514 add_test (NAME logging COMMAND logging_unittest)
515
516 if (TARGET signalhandler_unittest)
517   add_test (NAME signalhandler COMMAND signalhandler_unittest)
518 endif (TARGET signalhandler_unittest)
519
520 if (TARGET stacktrace_unittest)
521   add_test (NAME stacktrace COMMAND stacktrace_unittest)
522 endif (TARGET stacktrace_unittest)
523
524 add_test (NAME stl_logging COMMAND stl_logging_unittest)
525
526 if (TARGET symbolize_unittest)
527   add_test (NAME symbolize COMMAND symbolize_unittest)
528 endif (TARGET symbolize_unittest)
529
530 install (TARGETS glog
531   EXPORT glog-targets
532   RUNTIME DESTINATION bin
533   PUBLIC_HEADER DESTINATION include/glog
534   LIBRARY DESTINATION lib
535   ARCHIVE DESTINATION lib)
536
537 # Build tree config
538
539 set (glog_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
540 set (glog_PACKAGE_DEPS)
541
542 if (gflags_FOUND)
543   set (glog_PACKAGE_DEPS
544 "
545 include (CMakeFindDependencyMacro)
546
547 find_dependency (gflags ${gflags_VERSION})
548 ")
549 endif (gflags_FOUND)
550
551 configure_package_config_file (glog-config.cmake.in
552   ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake INSTALL_DESTINATION
553   lib/cmake/glog PATH_VARS glog_INCLUDE_DIR
554   NO_CHECK_REQUIRED_COMPONENTS_MACRO)
555
556 # The version file is the same both for build tree and install mode config
557 write_basic_package_version_file (glog-config-version.cmake VERSION
558   ${GLOG_VERSION} COMPATIBILITY SameMajorVersion)
559
560 # Install config
561
562 set (glog_INCLUDE_DIR include)
563
564 configure_package_config_file (glog-config.cmake.in
565   ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/glog-config.cmake
566   INSTALL_DESTINATION lib/cmake/glog PATH_VARS glog_INCLUDE_DIR
567   NO_CHECK_REQUIRED_COMPONENTS_MACRO)
568
569 export (TARGETS glog FILE glog-targets.cmake)
570 export (PACKAGE glog)
571
572 install (FILES
573   ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/glog-config.cmake
574   ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
575   DESTINATION lib/cmake/glog)
576
577 install (EXPORT glog-targets DESTINATION lib/cmake/glog)