Set CMAKE_BUILD_TYPE to Release by default. Require CMake >=2.8.
[platform/upstream/gflags.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
2
3 # ----------------------------------------------------------------------------
4 # package information
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/")
11
12 project (${PROJECT_NAME})
13
14 # ----------------------------------------------------------------------------
15 # configure options
16 option (BUILD_SHARED_LIBS "Request build of shared libraries." OFF)
17
18 set (GFLAGS_NAMESPACE "gflags" CACHE STRING "C++ namespace identifier of gflags library.")
19 mark_as_advanced (GFLAGS_NAMESPACE)
20
21 if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS AND NOT CMAKE_C_FLAGS)
22   set (
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."
25     FORCE
26   )
27 endif ()
28
29 # ----------------------------------------------------------------------------
30 # system checks
31 include (CheckTypeSize)
32 foreach (type IN ITEMS uint16_t u_int16_t __int16)
33   CHECK_TYPE_SIZE (${type} SIZE)
34   if (SIZE)
35     set (HAVE_${type} 1)
36   else ()
37     set (HAVE_${type} 0)
38   endif ()
39 endforeach ()
40
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)
46   if (HAVE_${FNAME}_H)
47     set (HAVE_${FNAME}_H 1)
48   else ()
49     set (HAVE_${FNAME}_H 0)
50   endif ()
51 endforeach ()
52
53 include (CheckSymbolExists)
54 foreach (fname IN ITEMS strtoll strtoq)
55   string (TOUPPER "${fname}" FNAME)
56   CHECK_SYMBOL_EXISTS ("${fname}" stdlib.h HAVE_${FNAME})
57   if (HAVE_${FNAME})
58     set (HAVE_${FNAME} 1)
59   else ()
60     set (HAVE_${FNAME} 0)
61   endif ()
62 endforeach ()
63
64 find_package (Threads)
65 if (Threads_FOUND)
66   if (CMAKE_USE_PTHREADS_INIT)
67     set (HAVE_PTHREAD 1)
68   else  ()
69     set (HAVE_PTHREAD 0)
70   endif ()
71 endif ()
72
73 # ----------------------------------------------------------------------------
74 # source files - excluding root subdirectory and/or .in suffix
75 set (PUBLIC_HDRS
76   "gflags/gflags.h"
77   "gflags/gflags_declare.h"
78   "gflags/gflags_completions.h"
79 )
80
81 set (PRIVATE_HDRS
82   "config.h"
83 )
84
85 set (GFLAGS_SRCS
86   "gflags.cc"
87   "gflags_reporting.cc"
88   "gflags_completions.cc"
89 )
90
91 # ----------------------------------------------------------------------------
92 # configure source files
93 if (CMAKE_COMPILER_IS_GNUCXX)
94   set (__ATTRIBUTE__UNUSED "__attribute((unused))")
95 else ()
96   set (__ATTRIBUTE__UNUSED)
97 endif ()
98
99 function (configure_sources out subdir)
100   set (tmp)
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}")
106     else ()
107       list (APPEND tmp "${PROJECT_SOURCE_DIR}/${src}")
108     endif ()
109   endforeach ()
110   set (${out} "${tmp}" PARENT_SCOPE)
111 endfunction ()
112
113 configure_sources (PUBLIC_HDRS  include ${PUBLIC_HDRS})
114 configure_sources (PRIVATE_HDRS src     ${PRIVATE_HDRS})
115 configure_sources (GFLAGS_SRCS  src     ${GFLAGS_SRCS})
116
117 # ----------------------------------------------------------------------------
118 # output directories
119 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin")
120 set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
121 set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "lib")
122
123 # ----------------------------------------------------------------------------
124 # add library target
125 include_directories (
126   "${PROJECT_BINARY_DIR}/include"
127   "${PROJECT_SOURCE_DIR}/include"
128   "${PROJECT_BINARY_DIR}/src"
129   "${PROJECT_SOURCE_DIR}/src"
130 )
131
132 if (WIN32)
133   add_definitions (-DGFLAGS_DLL_EXPORT)
134 endif ()
135
136 add_library (gflags ${GFLAGS_SRCS})
137
138 # ----------------------------------------------------------------------------
139 # installation
140 install (TARGETS gflags DESTINATION lib)
141 install (FILES ${PUBLIC_HDRS} DESTINATION include/gflags)