1 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
3 # ----------------------------------------------------------------------------
5 set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
9 # ----------------------------------------------------------------------------
11 set (PROJECT_NAME "gflags")
12 set (PACKAGE_NAME "${PROJECT_NAME}")
13 set (PACKAGE_VERSION "2.1.0")
14 set (PACKAGE_STRING "${PROJECT_NAME} ${PACKAGE_VERSION}")
15 set (PACKAGE_TARNAME "${PROJECT_NAME}-${PACKAGE_VERSION}")
16 set (PACKAGE_BUGREPORT "https://code.google.com/p/gflags/issues/")
18 project (${PROJECT_NAME})
27 # ----------------------------------------------------------------------------
29 option (BUILD_SHARED_LIBS "Request build of shared libraries." OFF)
31 set (GFLAGS_NAMESPACE "gflags" CACHE STRING "C++ namespace identifier of gflags library.")
32 mark_as_advanced (GFLAGS_NAMESPACE)
34 if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS AND NOT CMAKE_C_FLAGS)
36 CMAKE_BUILD_TYPE "Release"
37 CACHE STRING "Choose the type of build, options are: None (CMAKE_C_FLAGS and CMAKE_CXX_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
42 # ----------------------------------------------------------------------------
44 include (CheckTypeSize)
45 foreach (type IN ITEMS uint16_t u_int16_t __int16)
46 CHECK_TYPE_SIZE (${type} SIZE)
54 include (CheckIncludeFileCXX)
55 foreach (fname IN ITEMS fnmatch inttypes unistd sys/stat)
56 string (TOUPPER "${fname}" FNAME)
57 string (REGEX REPLACE "/" "_" FNAME "${FNAME}")
58 CHECK_INCLUDE_FILE_CXX ("${fname}.h" HAVE_${FNAME}_H)
60 set (HAVE_${FNAME}_H 1)
62 set (HAVE_${FNAME}_H 0)
66 include (CheckSymbolExists)
67 foreach (fname IN ITEMS strtoll strtoq)
68 string (TOUPPER "${fname}" FNAME)
69 CHECK_SYMBOL_EXISTS ("${fname}" stdlib.h HAVE_${FNAME})
77 find_package (Threads)
79 if (CMAKE_USE_PTHREADS_INIT)
86 # ----------------------------------------------------------------------------
87 # source files - excluding root subdirectory and/or .in suffix
91 "gflags_completions.h"
100 "gflags_reporting.cc"
101 "gflags_completions.cc"
105 list (APPEND PRIVATE_HDRS "windows_port.h")
106 list (APPEND GFLAGS_SRCS "windows_port.cc")
109 # ----------------------------------------------------------------------------
110 # configure source files
111 if (CMAKE_COMPILER_IS_GNUCXX)
112 set (__ATTRIBUTE__UNUSED "__attribute((unused))")
114 set (__ATTRIBUTE__UNUSED)
117 function (configure_sources out)
119 foreach (src IN LISTS ARGN)
120 if (src MATCHES ".h$" AND EXISTS "${PROJECT_SOURCE_DIR}/src/${src}.in")
121 configure_file ("${PROJECT_SOURCE_DIR}/src/${src}.in" "${PROJECT_BINARY_DIR}/include/${GFLAGS_NAMESPACE}/${src}" @ONLY)
122 list (APPEND tmp "${PROJECT_BINARY_DIR}/include/${GFLAGS_NAMESPACE}/${src}")
124 list (APPEND tmp "${PROJECT_SOURCE_DIR}/src/${src}")
127 set (${out} "${tmp}" PARENT_SCOPE)
130 configure_sources (PUBLIC_HDRS ${PUBLIC_HDRS})
131 configure_sources (PRIVATE_HDRS ${PRIVATE_HDRS})
132 configure_sources (GFLAGS_SRCS ${GFLAGS_SRCS})
134 # ----------------------------------------------------------------------------
136 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin")
137 set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
138 set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "lib")
140 # ----------------------------------------------------------------------------
143 add_definitions (-DGFLAGS_DLL_EXPORT)
145 include_directories ("${PROJECT_SOURCE_DIR}/src")
146 include_directories ("${PROJECT_BINARY_DIR}/include")
147 include_directories ("${PROJECT_BINARY_DIR}/include/${GFLAGS_NAMESPACE}")
148 add_library (gflags ${GFLAGS_SRCS})
150 # ----------------------------------------------------------------------------
153 set (LIBRARY_INSTALL_DIR Lib)
154 set (INCLUDE_INSTALL_DIR Include)
155 set (CONFIG_INSTALL_DIR CMake)
157 set (LIBRARY_INSTALL_DIR lib)
158 set (INCLUDE_INSTALL_DIR include)
159 set (CONFIG_INSTALL_DIR lib/cmake/${PACKAGE_NAME})
162 install (TARGETS ${PACKAGE_NAME} DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib)
163 install (FILES ${PUBLIC_HDRS} DESTINATION ${INCLUDE_INSTALL_DIR}/${GFLAGS_NAMESPACE})
165 file (RELATIVE_PATH INSTALL_PREFIX_REL2CONFIG_DIR "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_PREFIX}/${CONFIG_INSTALL_DIR}")
166 configure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake" @ONLY)
167 configure_file (cmake/version.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake" @ONLY)
170 FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake"
171 RENAME ${PACKAGE_NAME}-config.cmake
172 DESTINATION ${CONFIG_INSTALL_DIR}
176 FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake"
177 DESTINATION ${CONFIG_INSTALL_DIR}
180 install (EXPORT gflags-lib DESTINATION ${CONFIG_INSTALL_DIR} FILE ${PACKAGE_NAME}-export.cmake)
182 # ----------------------------------------------------------------------------
183 # support direct use of build tree
184 set (INSTALL_PREFIX_REL2CONFIG_DIR .)
185 export (TARGETS gflags FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-export.cmake")
186 configure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake" @ONLY)