determine gflags namespace automatically
[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
99 # NOTE: Cannot use check_function_exists here since >=vc-14.0 can define
100 # snprintf as an inline function
101 check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF)
102
103 check_library_exists (unwind get_static_proc_name "" HAVE_LIB_UNWIND)
104
105 check_c_source_compiles ("
106 #include <stdlib.h>
107 static void foo(void) __attribute__ ((unused));
108 int main(void) { return 0; }
109 " HAVE___ATTRIBUTE__)
110
111 check_c_source_compiles ("
112 #include <stdlib.h>
113 static void foo(void) __attribute__ ((visibility(\"default\")));
114 int main(void) { return 0; }
115 " HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
116
117 check_c_source_compiles ("
118 #include <stdlib.h>
119 static void foo(void) __attribute__ ((visibility(\"hidden\")));
120 int main(void) { return 0; }
121 " HAVE___ATTRIBUTE__VISIBILITY_HIDDEN)
122
123 check_c_source_compiles ("
124 int main(void) { if (__builtin_expect(0, 0)) return 1; return 0; }
125 " HAVE___BUILTIN_EXPECT)
126
127 check_c_source_compiles ("
128 int main(void)
129 {
130   int a; if (__sync_val_compare_and_swap(&a, 0, 1)) return 1; return 0;
131 }
132 " HAVE___SYNC_VAL_COMPARE_AND_SWAP)
133
134 check_c_source_compiles ("
135 #define _XOPEN_SOURCE 500
136 #include <pthread.h>
137 int main(void)
138 {
139   pthread_rwlock_t l;
140   pthread_rwlock_init(&l, NULL);
141   pthread_rwlock_rdlock(&l);
142   return 0;
143 }
144 " HAVE_RWLOCK)
145
146 check_c_source_compiles ("
147 __declspec(selectany) int a;
148 int main(void) { return 0; }
149 " HAVE___DECLSPEC)
150
151 check_cxx_source_compiles ("
152 #include <vector>
153 vector<int> t; int main() { }
154 " STL_NO_NAMESPACE)
155
156 check_cxx_source_compiles ("
157 #include <vector>
158 std::vector<int> t; int main() { }
159 " STL_STD_NAMESPACE)
160
161 check_cxx_source_compiles ("
162 #include <iostream>
163 std::ostream& operator<<(std::ostream&, struct s);
164 using ::operator<<;
165 int main() { }
166 " HAVE_USING_OPERATOR)
167
168 check_cxx_source_compiles ("
169 namespace Outer { namespace Inner { int i = 0; }}
170 using namespace Outer::Inner;;
171 int main() { return i; }
172 " HAVE_NAMESPACES)
173
174 set (_PC_FIELDS
175   "gregs[REG_PC]"
176   "gregs[REG_EIP]"
177   "gregs[REG_RIP]"
178   "sc_ip"
179   "uc_regs->gregs[PT_NIP]"
180   "gregs[R15]"
181   "arm_pc"
182   "mc_eip"
183   "mc_rip"
184   "__gregs[REG_EIP]"
185   "__gregs[REG_RIP]"
186   "ss.eip"
187   "__ss.__eip"
188   "ss.rip"
189   "__ss.__rip"
190   "ss.srr0"
191   "__ss.__srr0"
192 )
193
194 set (_PC_HEADERS ucontext.h signal.h)
195
196 if (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
197   foreach (_PC_FIELD ${_PC_FIELDS})
198     foreach (_PC_HEADER ${_PC_HEADERS})
199       set (_TMP
200       ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/uctfield.c)
201       file (WRITE ${_TMP} "
202 #define _GNU_SOURCE 1
203 #include <${_PC_HEADER}>
204 int main(void)
205 {
206   ucontext_t u;
207   return u.${_PC_FIELD} == 0;
208 }
209 ")
210       try_compile (HAVE_PC_FROM_UCONTEXT ${CMAKE_CURRENT_BINARY_DIR} ${_TMP}
211         COMPILE_DEFINITIONS _GNU_SOURCE=1)
212
213       if (HAVE_PC_FROM_UCONTEXT)
214         set (PC_FROM_UCONTEXT ${_PC_FIELD} CACHE)
215       endif (HAVE_PC_FROM_UCONTEXT)
216     endforeach (_PC_HEADER)
217   endforeach (_PC_FIELD)
218 endif  (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
219
220 if (STL_STD_NAMESPACE)
221   set (STL_NAMESPACE std)
222 else (STL_STD_NAMESPACE)
223   set (STL_NAMESPACE "")
224 endif (STL_STD_NAMESPACE)
225
226 set (GOOGLE_NAMESPACE google)
227 set (_START_GOOGLE_NAMESPACE_ "namespace ${GOOGLE_NAMESPACE} {")
228 set (_END_GOOGLE_NAMESPACE_ "}")
229
230 if (HAVE___UINT16)
231   set (ac_cv_have___uint16 1)
232 else (HAVE___UINT16)
233   set (ac_cv_have___uint16 0)
234 endif (HAVE___UINT16)
235
236 if (HAVE_INTTYPES_H)
237   set (ac_cv_have_inttypes_h 1)
238 else (HAVE_INTTYPES_H)
239   set (ac_cv_have_inttypes_h 0)
240 endif (HAVE_INTTYPES_H)
241
242 if (HAVE_LIB_GFLAGS)
243   set (ac_cv_have_libgflags 1)
244 else (HAVE_LIB_GFLAGS)
245   set (ac_cv_have_libgflags 0)
246 endif (HAVE_LIB_GFLAGS)
247
248 if (HAVE_STDINT_H)
249   set (ac_cv_have_stdint_h 1)
250 else (HAVE_STDINT_H)
251   set (ac_cv_have_stdint_h 0)
252 endif (HAVE_STDINT_H)
253
254 if (HAVE_SYS_TYPES_H)
255   set (ac_cv_have_systypes_h 1)
256 else (HAVE_SYS_TYPES_H)
257   set (ac_cv_have_systypes_h 0)
258 endif (HAVE_SYS_TYPES_H)
259
260 if (HAVE_U_INT16_T)
261   set (ac_cv_have_u_int16_t 1)
262 else (HAVE_U_INT16_T)
263   set (ac_cv_have_u_int16_t 0)
264 endif (HAVE_U_INT16_T)
265
266 if (HAVE_UINT16_T)
267   set (ac_cv_have_uint16_t 1)
268 else (HAVE_UINT16_T)
269   set (ac_cv_have_uint16_t 0)
270 endif (HAVE_UINT16_T)
271
272 if (HAVE_UNISTD_H)
273   set (ac_cv_have_unistd_h 1)
274 else (HAVE_UNISTD_H)
275   set (ac_cv_have_unistd_h 0)
276 endif (HAVE_UNISTD_H)
277
278 set (ac_google_namespace ${GOOGLE_NAMESPACE})
279 set (ac_google_end_namespace ${_END_GOOGLE_NAMESPACE_})
280 set (ac_google_start_namespace ${_START_GOOGLE_NAMESPACE_})
281
282 if (HAVE___ATTRIBUTE__)
283   set (ac_cv___attribute___noreturn "__attribute__((noreturn))")
284   set (ac_cv___attribute___noinline "__attribute__((noinline))")
285 elseif (HAVE___DECLSPEC)
286   set (ac_cv___attribute___noreturn "__declspec(noreturn)")
287   #set (ac_cv___attribute___noinline "__declspec(noinline)")
288 endif (HAVE___ATTRIBUTE__)
289
290 if (HAVE___BUILTIN_EXPECT)
291   set (ac_cv_have___builtin_expect 1)
292 else (HAVE___BUILTIN_EXPECT)
293   set (ac_cv_have___builtin_expect 0)
294 endif (HAVE___BUILTIN_EXPECT)
295
296 if (HAVE_USING_OPERATOR)
297   set (ac_cv_cxx_using_operator 1)
298 else (HAVE_USING_OPERATOR)
299   set (ac_cv_cxx_using_operator 0)
300 endif (HAVE_USING_OPERATOR)
301
302 set (SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
303
304 if (Threads_FOUND AND CMAKE_USE_PTHREADS_INIT)
305   set (HAVE_PTHREAD 1)
306 endif (Threads_FOUND AND CMAKE_USE_PTHREADS_INIT)
307
308 set (TEST_SRC_DIR \"${CMAKE_CURRENT_SOURCE_DIR}\")
309
310 configure_file (src/config.h.cmake.in config.h)
311 configure_file (src/glog/logging.h.in glog/logging.h @ONLY)
312 configure_file (src/glog/raw_logging.h.in glog/raw_logging.h @ONLY)
313 configure_file (src/glog/stl_logging.h.in glog/stl_logging.h @ONLY)
314 configure_file (src/glog/vlog_is_on.h.in glog/vlog_is_on.h @ONLY)
315
316 set (CMAKE_CXX_VISIBILITY_PRESET default)
317 set (CMAKE_VISIBILITY_INLINES_HIDDEN 1)
318
319 set (GLOG_PUBLIC_H
320   ${CMAKE_CURRENT_BINARY_DIR}/config.h
321   ${CMAKE_CURRENT_BINARY_DIR}/glog/logging.h
322   ${CMAKE_CURRENT_BINARY_DIR}/glog/raw_logging.h
323   ${CMAKE_CURRENT_BINARY_DIR}/glog/stl_logging.h
324   ${CMAKE_CURRENT_BINARY_DIR}/glog/vlog_is_on.h
325   src/glog/log_severity.h
326 )
327
328 set (GLOG_SRCS
329   ${GLOG_PUBLIC_H}
330   src/base/commandlineflags.h
331   src/base/googleinit.h
332   src/base/mutex.h
333   src/demangle.cc
334   src/demangle.h
335   src/logging.cc
336   src/raw_logging.cc
337   src/symbolize.cc
338   src/symbolize.h
339   src/utilities.cc
340   src/utilities.h
341   src/vlog_is_on.cc
342 )
343
344 if (HAVE_PTHREAD)
345   list (APPEND GLOG_SRCS src/signalhandler.cc)
346 endif (HAVE_PTHREAD)
347
348 if (WIN32)
349   list (APPEND GLOG_SRCS
350     src/windows/port.cc
351     src/windows/port.h
352   )
353 endif (WIN32)
354
355 add_library (glog
356   ${GLOG_SRCS}
357 )
358
359 if (WIN32 AND HAVE_SNPRINTF)
360   set_property (SOURCE src/windows/port.cc APPEND PROPERTY COMPILE_DEFINITIONS
361     HAVE_SNPRINTF)
362 endif (WIN32 AND HAVE_SNPRINTF)
363
364 if (gflags_FOUND)
365   target_include_directories (glog PUBLIC ${gflags_INCLUDE_DIR})
366   target_link_libraries (glog PUBLIC ${gflags_LIBRARIES})
367 endif (gflags_FOUND)
368
369 set_target_properties (glog PROPERTIES VERSION ${GLOG_MAJOR_VERSION})
370 set_target_properties (glog PROPERTIES SOVERSION ${GLOG_VERSION})
371
372 if (WIN32)
373   target_compile_definitions (glog PUBLIC GLOG_NO_ABBREVIATED_SEVERITIES)
374 endif (WIN32)
375
376 set_target_properties (glog PROPERTIES PUBLIC_HEADER "${GLOG_PUBLIC_H}")
377
378 target_include_directories (glog BEFORE PUBLIC
379   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
380   "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
381   PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
382   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
383
384 if (WIN32)
385   target_include_directories (glog PUBLIC
386     "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/windows>"
387     PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/windows)
388 endif (WIN32)
389
390 set_target_properties (glog PROPERTIES DEFINE_SYMBOL LIBGLOG_EXPORTS)
391
392 if (NOT BUILD_SHARED_LIBS)
393   target_compile_definitions (glog PUBLIC GOOGLE_GLOG_DLL_DECL=)
394 else (NOT BUILD_SHARED_LIBS)
395   target_compile_definitions (glog PRIVATE GOOGLE_GLOG_IS_A_DLL=1)
396
397   if (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
398     set (_EXPORT "__attribute__((visibility(\"default\")))")
399     set (_IMPORT "")
400   elseif (HAVE___DECLSPEC)
401     set (_EXPORT "__declspec(dllexport)")
402     set (_IMPORT "__declspec(dllimport)")
403   endif (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
404
405   target_compile_definitions (glog PRIVATE
406     "GOOGLE_GLOG_DLL_DECL=${_EXPORT}")
407   target_compile_definitions (glog INTERFACE
408     "GOOGLE_GLOG_DLL_DECL=${_IMPORT}")
409   target_compile_definitions (glog INTERFACE
410     "GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=${_IMPORT}")
411 endif (NOT BUILD_SHARED_LIBS)
412
413 if (HAVE_PTHREAD)
414   target_link_libraries (glog PUBLIC ${CMAKE_THREAD_LIBS_INIT})
415 else (HAVE_PTHREAD)
416   target_compile_definitions (glog PUBLIC NO_THREADS)
417 endif (HAVE_PTHREAD)
418
419 if (HAVE_EXECINFO_H)
420   set (HAVE_STACKTRACE 1)
421 endif (HAVE_EXECINFO_H)
422
423 if (UNIX OR (APPLE AND HAVE_DLADDR))
424   set (HAVE_SYMBOLIZE 1)
425 endif (UNIX OR (APPLE AND HAVE_DLADDR))
426
427 # Unit testing
428
429 add_executable (logging_unittest
430   src/logging_unittest.cc
431 )
432
433 target_link_libraries (logging_unittest PRIVATE glog)
434
435 add_executable (stl_logging_unittest
436   src/stl_logging_unittest.cc
437 )
438
439 target_link_libraries (stl_logging_unittest PRIVATE glog)
440
441 if (HAVE_NO_DEPRECATED)
442   set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS
443     -Wno-deprecated)
444 endif (HAVE_NO_DEPRECATED)
445
446 if (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
447   target_compile_definitions (stl_logging_unittest PRIVATE
448     GLOG_STL_LOGGING_FOR_UNORDERED)
449 endif (HAVE_UNORDERED_MAP AND HAVE_UNORDERED_SET)
450
451 if (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
452   target_compile_definitions (stl_logging_unittest PRIVATE
453     GLOG_STL_LOGGING_FOR_TR1_UNORDERED)
454 endif (HAVE_TR1_UNORDERED_MAP AND HAVE_TR1_UNORDERED_SET)
455
456 if (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
457   target_compile_definitions (stl_logging_unittest PRIVATE
458     GLOG_STL_LOGGING_FOR_EXT_HASH)
459 endif (HAVE_EXT_HASH_MAP AND HAVE_EXT_HASH_SET)
460
461 if (HAVE_EXT_SLIST)
462   target_compile_definitions (stl_logging_unittest PRIVATE
463     GLOG_STL_LOGGING_FOR_EXT_SLIST)
464 endif (HAVE_EXT_SLIST)
465
466 if (HAVE_SYMBOLIZE)
467   add_executable (symbolize_unittest
468     src/symbolize_unittest.cc
469   )
470
471   target_link_libraries (symbolize_unittest PRIVATE glog)
472 endif (HAVE_SYMBOLIZE)
473
474 add_executable (demangle_unittest
475   src/demangle_unittest.cc
476 )
477
478 target_link_libraries (demangle_unittest PRIVATE glog)
479
480 if (HAVE_STACKTRACE)
481   add_executable (stacktrace_unittest
482     src/stacktrace_unittest.cc
483   )
484
485   target_link_libraries (stacktrace_unittest PRIVATE glog)
486 endif (HAVE_STACKTRACE)
487
488 add_executable (utilities_unittest
489   src/utilities_unittest.cc
490 )
491
492 target_link_libraries (utilities_unittest PRIVATE glog)
493
494 if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
495   add_executable (signalhandler_unittest
496     src/signalhandler_unittest.cc
497   )
498
499   target_link_libraries (signalhandler_unittest PRIVATE glog)
500 endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
501
502 add_test (NAME demangle COMMAND demangle_unittest)
503 add_test (NAME logging COMMAND logging_unittest)
504
505 if (TARGET signalhandler_unittest)
506   add_test (NAME signalhandler COMMAND signalhandler_unittest)
507 endif (TARGET signalhandler_unittest)
508
509 if (TARGET stacktrace_unittest)
510   add_test (NAME stacktrace COMMAND stacktrace_unittest)
511 endif (TARGET stacktrace_unittest)
512
513 add_test (NAME stl_logging COMMAND stl_logging_unittest)
514
515 if (TARGET symbolize_unittest)
516   add_test (NAME symbolize COMMAND symbolize_unittest)
517 endif (TARGET symbolize_unittest)
518
519 install (TARGETS glog
520   EXPORT glog-targets
521   RUNTIME DESTINATION bin
522   PUBLIC_HEADER DESTINATION include/glog
523   LIBRARY DESTINATION lib
524   ARCHIVE DESTINATION lib)
525
526 # Build tree config
527
528 set (glog_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
529 set (glog_PACKAGE_DEPS)
530
531 if (gflags_FOUND)
532   set (glog_PACKAGE_DEPS
533 "
534 include (CMakeFindDependencyMacro)
535
536 find_dependency (gflags ${gflags_VERSION})
537 ")
538 endif (gflags_FOUND)
539
540 configure_package_config_file (glog-config.cmake.in
541   ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake INSTALL_DESTINATION
542   lib/cmake/glog PATH_VARS glog_INCLUDE_DIR
543   NO_CHECK_REQUIRED_COMPONENTS_MACRO)
544
545 # The version file is the same both for build tree and install mode config
546 write_basic_package_version_file (glog-config-version.cmake VERSION
547   ${GLOG_VERSION} COMPATIBILITY SameMajorVersion)
548
549 # Install config
550
551 set (glog_INCLUDE_DIR include)
552
553 configure_package_config_file (glog-config.cmake.in
554   ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/glog-config.cmake
555   INSTALL_DESTINATION lib/cmake/glog PATH_VARS glog_INCLUDE_DIR
556   NO_CHECK_REQUIRED_COMPONENTS_MACRO)
557
558 export (TARGETS glog FILE glog-targets.cmake)
559 export (PACKAGE glog)
560
561 install (FILES
562   ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/glog-config.cmake
563   ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
564   DESTINATION lib/cmake/glog)
565
566 install (EXPORT glog-targets DESTINATION lib/cmake/glog)