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 configure_sources (PUBLIC_HDRS ${PUBLIC_HDRS})
118 configure_sources (PRIVATE_HDRS ${PRIVATE_HDRS})
119 configure_sources (GFLAGS_SRCS ${GFLAGS_SRCS})
121 # ----------------------------------------------------------------------------
123 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin")
124 set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
125 set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "lib")
127 # ----------------------------------------------------------------------------
130 add_definitions (-DGFLAGS_DLL_EXPORT)
132 include_directories ("${PROJECT_SOURCE_DIR}/src")
133 include_directories ("${PROJECT_BINARY_DIR}/include")
134 include_directories ("${PROJECT_BINARY_DIR}/include/${GFLAGS_NAMESPACE}")
135 add_library (gflags ${GFLAGS_SRCS})
137 # ----------------------------------------------------------------------------
140 # TODO(andreas) Replace Bash scripts such that tests can be run on Windows (e.g., Python).
141 # The gflags_unittest.sh script should best be replaced by multiple
142 # add_test commands in the test/CMakeLists.txt file.
147 add_subdirectory (test)
151 # ----------------------------------------------------------------------------
154 set (RUNTIME_INSTALL_DIR Bin)
155 set (LIBRARY_INSTALL_DIR Lib)
156 set (INCLUDE_INSTALL_DIR Include)
157 set (CONFIG_INSTALL_DIR CMake)
159 set (RUNTIME_INSTALL_DIR bin)
160 set (LIBRARY_INSTALL_DIR lib)
161 set (INCLUDE_INSTALL_DIR include)
162 set (CONFIG_INSTALL_DIR lib/cmake/${PACKAGE_NAME})
165 install (TARGETS gflags DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib)
166 install (FILES ${PUBLIC_HDRS} DESTINATION ${INCLUDE_INSTALL_DIR}/${GFLAGS_NAMESPACE})
168 file (RELATIVE_PATH INSTALL_PREFIX_REL2CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/${CONFIG_INSTALL_DIR}" "${CMAKE_INSTALL_PREFIX}")
169 configure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake" @ONLY)
170 configure_file (cmake/version.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake" @ONLY)
173 FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake"
174 RENAME ${PACKAGE_NAME}-config.cmake
175 DESTINATION ${CONFIG_INSTALL_DIR}
179 FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake"
180 DESTINATION ${CONFIG_INSTALL_DIR}
183 install (EXPORT gflags-lib DESTINATION ${CONFIG_INSTALL_DIR} FILE ${PACKAGE_NAME}-export.cmake)
186 install (PROGRAMS src/gflags_completions.sh DESTINATION ${RUNTIME_INSTALL_DIR})
189 # ----------------------------------------------------------------------------
190 # support direct use of build tree
191 set (INSTALL_PREFIX_REL2CONFIG_DIR .)
192 export (TARGETS gflags FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-export.cmake")
193 configure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake" @ONLY)