1 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
3 # ----------------------------------------------------------------------------
5 set (PROJECT_NAME "gflags")
6 set (PACKAGE_NAME "${PROJECT_NAME}")
7 set (PACKAGE_VERSION "2.1.0")
8 set (PACKAGE_STRING "${PROJECT_NAME} ${PACKAGE_VERSION}")
9 set (PACKAGE_TARNAME "${PROJECT_NAME}-${PACKAGE_VERSION}")
10 set (PACKAGE_BUGREPORT "https://code.google.com/p/gflags/issues/")
12 project (${PROJECT_NAME})
14 # ----------------------------------------------------------------------------
16 option (BUILD_SHARED_LIBS "Request build of shared libraries." OFF)
18 set (GFLAGS_NAMESPACE "gflags" CACHE STRING "C++ namespace identifier of gflags library.")
19 mark_as_advanced (GFLAGS_NAMESPACE)
21 if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS AND NOT CMAKE_C_FLAGS)
23 CMAKE_BUILD_TYPE "Release"
24 CACHE STRING "Choose the type of build, options are: None (CMAKE_C_FLAGS and CMAKE_CXX_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
29 # ----------------------------------------------------------------------------
31 include (CheckTypeSize)
32 foreach (type IN ITEMS uint16_t u_int16_t __int16)
33 CHECK_TYPE_SIZE (${type} SIZE)
41 include (CheckIncludeFileCXX)
42 foreach (fname IN ITEMS fnmatch inttypes unistd sys/stat)
43 string (TOUPPER "${fname}" FNAME)
44 string (REGEX REPLACE "/" "_" FNAME "${FNAME}")
45 CHECK_INCLUDE_FILE_CXX ("${fname}.h" HAVE_${FNAME}_H)
47 set (HAVE_${FNAME}_H 1)
49 set (HAVE_${FNAME}_H 0)
53 include (CheckSymbolExists)
54 foreach (fname IN ITEMS strtoll strtoq)
55 string (TOUPPER "${fname}" FNAME)
56 CHECK_SYMBOL_EXISTS ("${fname}" stdlib.h HAVE_${FNAME})
64 find_package (Threads)
66 if (CMAKE_USE_PTHREADS_INIT)
73 # ----------------------------------------------------------------------------
74 # source files - excluding root subdirectory and/or .in suffix
77 "gflags/gflags_declare.h"
78 "gflags/gflags_completions.h"
88 "gflags_completions.cc"
91 # ----------------------------------------------------------------------------
92 # configure source files
93 if (CMAKE_COMPILER_IS_GNUCXX)
94 set (__ATTRIBUTE__UNUSED "__attribute((unused))")
96 set (__ATTRIBUTE__UNUSED)
99 function (configure_sources out subdir)
101 foreach (src IN LISTS ARGN)
102 set (src "${subdir}/${src}")
103 if (EXISTS "${PROJECT_SOURCE_DIR}/${src}.in")
104 configure_file ("${PROJECT_SOURCE_DIR}/${src}.in" "${PROJECT_BINARY_DIR}/${src}" @ONLY)
105 list (APPEND tmp "${PROJECT_BINARY_DIR}/${src}")
107 list (APPEND tmp "${PROJECT_SOURCE_DIR}/${src}")
110 set (${out} "${tmp}" PARENT_SCOPE)
113 configure_sources (PUBLIC_HDRS include ${PUBLIC_HDRS})
114 configure_sources (PRIVATE_HDRS src ${PRIVATE_HDRS})
115 configure_sources (GFLAGS_SRCS src ${GFLAGS_SRCS})
117 # ----------------------------------------------------------------------------
119 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin")
120 set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
121 set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "lib")
123 # ----------------------------------------------------------------------------
125 include_directories (
126 "${PROJECT_BINARY_DIR}/include"
127 "${PROJECT_SOURCE_DIR}/include"
128 "${PROJECT_BINARY_DIR}/src"
129 "${PROJECT_SOURCE_DIR}/src"
133 add_definitions (-DGFLAGS_DLL_EXPORT)
136 add_library (gflags ${GFLAGS_SRCS})
138 # ----------------------------------------------------------------------------
140 install (TARGETS gflags DESTINATION lib)
141 install (FILES ${PUBLIC_HDRS} DESTINATION include/gflags)