Move definition of configure_sources CMake function to utils module.
[platform/upstream/gflags.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
2
3 # ----------------------------------------------------------------------------
4 # includes
5 set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
6
7 include (utils)
8
9 # ----------------------------------------------------------------------------
10 # package information
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/")
17
18 project (${PROJECT_NAME})
19
20 version_numbers (
21   ${PACKAGE_VERSION}
22     PACKAGE_VERSION_MAJOR
23     PACKAGE_VERSION_MINOR
24     PACKAGE_VERSION_PATCH
25 )
26
27 # ----------------------------------------------------------------------------
28 # configure options
29 option (BUILD_SHARED_LIBS "Request build of shared libraries." OFF)
30
31 set (GFLAGS_NAMESPACE "gflags" CACHE STRING "C++ namespace identifier of gflags library.")
32 mark_as_advanced (GFLAGS_NAMESPACE)
33
34 if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS AND NOT CMAKE_C_FLAGS)
35   set (
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."
38     FORCE
39   )
40 endif ()
41
42 # ----------------------------------------------------------------------------
43 # system checks
44 include (CheckTypeSize)
45 foreach (type IN ITEMS uint16_t u_int16_t __int16)
46   CHECK_TYPE_SIZE (${type} SIZE)
47   if (SIZE)
48     set (HAVE_${type} 1)
49   else ()
50     set (HAVE_${type} 0)
51   endif ()
52 endforeach ()
53
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)
59   if (HAVE_${FNAME}_H)
60     set (HAVE_${FNAME}_H 1)
61   else ()
62     set (HAVE_${FNAME}_H 0)
63   endif ()
64 endforeach ()
65
66 include (CheckSymbolExists)
67 foreach (fname IN ITEMS strtoll strtoq)
68   string (TOUPPER "${fname}" FNAME)
69   CHECK_SYMBOL_EXISTS ("${fname}" stdlib.h HAVE_${FNAME})
70   if (HAVE_${FNAME})
71     set (HAVE_${FNAME} 1)
72   else ()
73     set (HAVE_${FNAME} 0)
74   endif ()
75 endforeach ()
76
77 find_package (Threads)
78 if (Threads_FOUND)
79   if (CMAKE_USE_PTHREADS_INIT)
80     set (HAVE_PTHREAD 1)
81   else  ()
82     set (HAVE_PTHREAD 0)
83   endif ()
84 endif ()
85
86 # ----------------------------------------------------------------------------
87 # source files - excluding root subdirectory and/or .in suffix
88 set (PUBLIC_HDRS
89   "gflags.h"
90   "gflags_declare.h"
91   "gflags_completions.h"
92 )
93
94 set (PRIVATE_HDRS
95   "config.h"
96 )
97
98 set (GFLAGS_SRCS
99   "gflags.cc"
100   "gflags_reporting.cc"
101   "gflags_completions.cc"
102 )
103
104 if (WIN32)
105   list (APPEND PRIVATE_HDRS "windows_port.h")
106   list (APPEND GFLAGS_SRCS  "windows_port.cc")
107 endif ()
108
109 # ----------------------------------------------------------------------------
110 # configure source files
111 if (CMAKE_COMPILER_IS_GNUCXX)
112   set (__ATTRIBUTE__UNUSED "__attribute((unused))")
113 else ()
114   set (__ATTRIBUTE__UNUSED)
115 endif ()
116
117 configure_sources (PUBLIC_HDRS  ${PUBLIC_HDRS})
118 configure_sources (PRIVATE_HDRS ${PRIVATE_HDRS})
119 configure_sources (GFLAGS_SRCS  ${GFLAGS_SRCS})
120
121 # ----------------------------------------------------------------------------
122 # output directories
123 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin")
124 set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
125 set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "lib")
126
127 # ----------------------------------------------------------------------------
128 # add library target
129 if (WIN32)
130   add_definitions (-DGFLAGS_DLL_EXPORT)
131 endif ()
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})
136
137 # ----------------------------------------------------------------------------
138 # installation
139 if (WIN32)
140   set (LIBRARY_INSTALL_DIR Lib)
141   set (INCLUDE_INSTALL_DIR Include)
142   set (CONFIG_INSTALL_DIR  CMake)
143 else ()
144   set (LIBRARY_INSTALL_DIR lib)
145   set (INCLUDE_INSTALL_DIR include)
146   set (CONFIG_INSTALL_DIR  lib/cmake/${PACKAGE_NAME})
147 endif ()
148
149 install (TARGETS gflags         DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib)
150 install (FILES   ${PUBLIC_HDRS} DESTINATION ${INCLUDE_INSTALL_DIR}/${GFLAGS_NAMESPACE})
151
152 file (RELATIVE_PATH INSTALL_PREFIX_REL2CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/${CONFIG_INSTALL_DIR}" "${CMAKE_INSTALL_PREFIX}")
153 configure_file (cmake/config.cmake.in  "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake" @ONLY)
154 configure_file (cmake/version.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake" @ONLY)
155
156 install (
157   FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake"
158   RENAME ${PACKAGE_NAME}-config.cmake
159   DESTINATION ${CONFIG_INSTALL_DIR}
160 )
161
162 install (
163   FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake"
164   DESTINATION ${CONFIG_INSTALL_DIR}
165 )
166
167 install (EXPORT gflags-lib DESTINATION ${CONFIG_INSTALL_DIR} FILE ${PACKAGE_NAME}-export.cmake)
168
169 # ----------------------------------------------------------------------------
170 # support direct use of build tree
171 set (INSTALL_PREFIX_REL2CONFIG_DIR .)
172 export (TARGETS gflags FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-export.cmake")
173 configure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake" @ONLY)