IPC unit tests and testing framework improvements
[platform/core/security/vasum.git] / CMakeLists.txt
1 #Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
2 #
3 #    Licensed under the Apache License, Version 2.0 (the "License");
4 #    you may not use this file except in compliance with the License.
5 #    You may obtain a copy of the License at
6 #
7 #        http://www.apache.org/licenses/LICENSE-2.0
8 #
9 #    Unless required by applicable law or agreed to in writing, software
10 #    distributed under the License is distributed on an "AS IS" BASIS,
11 #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 #    See the License for the specific language governing permissions and
13 #    limitations under the License.
14 #
15 #
16 # @file   CMakeLists.txt
17 # @author Jan Olszak (j.olszak@samsung.com)
18 #
19
20 CMAKE_MINIMUM_REQUIRED (VERSION 2.6.2)
21 PROJECT(vasum)
22
23 IF(NOT DEFINED VERSION)
24     SET(VERSION "0.1.1")
25 ENDIF(NOT DEFINED VERSION)
26
27 ## pkgconfig ###################################################################
28 INCLUDE(FindPkgConfig)
29
30
31 ## default CMAKE_INSTALL_* variables ###########################################
32 INCLUDE(GNUInstallDirs)
33
34 ## Color output if it's possible:
35 IF (( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9))
36       OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ))
37
38     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always")
39 ENDIF()
40
41 ## Compiler flags, depending on the build type #################################
42 IF(NOT CMAKE_BUILD_TYPE)
43     SET(CMAKE_BUILD_TYPE "DEBUG")
44 ENDIF(NOT CMAKE_BUILD_TYPE)
45
46 ## Print build information #####################################################
47 MESSAGE(STATUS "-------------------------------------------------")
48 MESSAGE(STATUS "Compiler:          " ${CMAKE_CXX_COMPILER_ID})
49 MESSAGE(STATUS "Compiler version:  " ${CMAKE_CXX_COMPILER_VERSION})
50 MESSAGE(STATUS "Build type:        " ${CMAKE_BUILD_TYPE})
51 MESSAGE(STATUS "-------------------------------------------------")
52
53 # special case for a GCC < 4.7, assume rest is fine
54 IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
55     SET(CXX_11_STD "c++0x")
56 else()
57     SET(CXX_11_STD "c++11")
58 endif()
59
60 SET(CMAKE_C_FLAGS_PROFILING    "-O0 -pg")
61 SET(CMAKE_CXX_FLAGS_PROFILING  "-std=${CXX_11_STD} -O0 -pg")
62 SET(CMAKE_C_FLAGS_DEBUG        "-O0 -ggdb")
63 SET(CMAKE_CXX_FLAGS_DEBUG      "-std=${CXX_11_STD} -O0 -ggdb")
64 SET(CMAKE_C_FLAGS_RELEASE      "-O2 -DNDEBUG")
65 SET(CMAKE_CXX_FLAGS_RELEASE    "-std=${CXX_11_STD} -O2 -DNDEBUG")
66 SET(CMAKE_C_FLAGS_CCOV         "-O0 --coverage")
67 SET(CMAKE_CXX_FLAGS_CCOV       "-std=${CXX_11_STD} -O0 --coverage")
68
69 IF(DEFINED SANITIZE)
70     # Enable sanitize build.
71     # It works with clang and gcc>=4.8
72     # Possible arguments: address, thread and others (see doc.)
73     # Note on thread sanitizer bugs left in out code:
74     #  - we use non thread save boost test library
75     #  - there are some mysterious problems with glib
76     SET(SANITIZE_FLAGS "-fsanitize=${SANITIZE}")
77     MESSAGE(STATUS "Sanitize flags: ${SANITIZE_FLAGS}")
78     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS} -fPIE -fno-omit-frame-pointer")
79     SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_FLAGS} -fPIE -fno-omit-frame-pointer")
80     SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie ${SANITIZE_FLAGS}")
81 ENDIF(DEFINED SANITIZE)
82
83 ADD_DEFINITIONS("-fPIC")   # Position Independent Code
84 ADD_DEFINITIONS("-Werror") # Make all warnings into errors
85 ADD_DEFINITIONS("-Wall")   # Generate all warnings
86 ADD_DEFINITIONS("-Wextra") # Generate even more extra warnings
87 ADD_DEFINITIONS("-pedantic") # Be pedantic
88 ADD_DEFINITIONS("-pedantic-errors") # Make pedantic warnings into errors
89 ADD_DEFINITIONS(-DPROGRAM_VERSION="${VERSION}")
90 ADD_DEFINITIONS(-DPROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}")
91 ADD_DEFINITIONS(-DUSE_EXEC)
92 ADD_DEFINITIONS(-D__STDC_LIMIT_MACROS)
93
94 IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
95     # Warn about documentation problems
96     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdocumentation")
97
98     IF(ALL_WARNINGS)
99         # turn on every -W flags except a few explicitly mentioned
100         ADD_DEFINITIONS("-Wno-error")
101         ADD_DEFINITIONS("-Weverything")
102         ADD_DEFINITIONS("-Wno-c++98-compat")
103         ADD_DEFINITIONS("-Wno-c++98-compat-pedantic")
104         ADD_DEFINITIONS("-Wno-padded")
105         ADD_DEFINITIONS("-Wno-global-constructors")
106         ADD_DEFINITIONS("-Wno-exit-time-destructors")
107         ADD_DEFINITIONS("-Wno-weak-vtables")
108     ENDIF(ALL_WARNINGS)
109 ENDIF()
110
111 IF(NOT DEFINED VASUM_USER)
112     SET(VASUM_USER "security-containers")
113 ENDIF(NOT DEFINED VASUM_USER)
114 IF(NOT DEFINED INPUT_EVENT_GROUP)
115     SET(INPUT_EVENT_GROUP "input")
116 ENDIF(NOT DEFINED INPUT_EVENT_GROUP)
117 IF(NOT DEFINED DISK_GROUP)
118     SET(DISK_GROUP "disk")
119 ENDIF(NOT DEFINED DISK_GROUP)
120 IF(NOT DEFINED TTY_GROUP)
121     SET(TTY_GROUP "tty")
122 ENDIF(NOT DEFINED TTY_GROUP)
123
124 ADD_DEFINITIONS(-DVASUM_USER="${VASUM_USER}")
125 ADD_DEFINITIONS(-DINPUT_EVENT_GROUP="${INPUT_EVENT_GROUP}")
126 ADD_DEFINITIONS(-DDISK_GROUP="${DISK_GROUP}")
127 ADD_DEFINITIONS(-DTTY_GROUP="${TTY_GROUP}")
128 IF(NOT WITHOUT_DBUS)
129     ADD_DEFINITIONS(-DDBUS_CONNECTION)
130 ENDIF(NOT WITHOUT_DBUS)
131 IF(NOT WITHOUT_SYSTEMD)
132     ADD_DEFINITIONS(-DHAVE_SYSTEMD)
133 ENDIF(NOT WITHOUT_SYSTEMD)
134
135 ## Python packages directory ###################################################
136 IF(NOT DEFINED PYTHON_SITELIB)
137     EXECUTE_PROCESS(COMMAND python -c
138     "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib())"
139     OUTPUT_VARIABLE PYTHON_SITELIB)
140 ENDIF(NOT DEFINED PYTHON_SITELIB)
141
142 ## Subdirectories ##############################################################
143 SET(COMMON_FOLDER ${PROJECT_SOURCE_DIR}/common)
144 SET(LIBS_FOLDER ${PROJECT_SOURCE_DIR}/libs)
145 SET(LOGGER_FOLDER ${PROJECT_SOURCE_DIR}/libs/logger)
146 SET(DBUS_FOLDER ${PROJECT_SOURCE_DIR}/libs/dbus)
147 SET(CONFIG_FOLDER ${PROJECT_SOURCE_DIR}/libs/config)
148 SET(IPC_FOLDER ${PROJECT_SOURCE_DIR}/libs/ipc)
149 SET(LXCPP_FOLDER ${PROJECT_SOURCE_DIR}/libs/lxcpp)
150 SET(CLIENT_FOLDER ${PROJECT_SOURCE_DIR}/client)
151 SET(SERVER_FOLDER ${PROJECT_SOURCE_DIR}/server)
152 SET(ZONE_SUPPORT_FOLDER ${PROJECT_SOURCE_DIR}/zone-support)
153 SET(ZONE_DAEMON_FOLDER ${PROJECT_SOURCE_DIR}/zone-daemon)
154 SET(TESTS_FOLDER ${PROJECT_SOURCE_DIR}/tests)
155 SET(CLI_FOLDER ${PROJECT_SOURCE_DIR}/cli)
156 SET(WRAPPER_FOLDER ${PROJECT_SOURCE_DIR}/wrapper)
157
158
159 IF(NOT DEFINED SYSCONF_INSTALL_DIR)
160     SET(SYSCONF_INSTALL_DIR "/etc")
161 ENDIF(NOT DEFINED SYSCONF_INSTALL_DIR)
162
163 IF(NOT DEFINED LIB_INSTALL_DIR)
164     SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
165 ENDIF(NOT DEFINED LIB_INSTALL_DIR)
166
167 IF(NOT DEFINED INCLUDE_INSTALL_DIR)
168     SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
169 ENDIF(NOT DEFINED INCLUDE_INSTALL_DIR)
170
171 IF(NOT DEFINED SCRIPT_INSTALL_DIR)
172     SET(SCRIPT_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SBINDIR}")
173 ENDIF(NOT DEFINED SCRIPT_INSTALL_DIR)
174
175 IF(NOT DEFINED SYSTEMD_UNIT_DIR)
176     SET(SYSTEMD_UNIT_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/system")
177 ENDIF(NOT DEFINED SYSTEMD_UNIT_DIR)
178
179 IF(NOT DEFINED DATA_DIR)
180     SET(DATA_DIR "${CMAKE_INSTALL_PREFIX}/share")
181 ENDIF(NOT DEFINED DATA_DIR)
182
183 IF(NOT DEFINED LIBEXEC_DIR)
184     SET(LIBEXEC_DIR "${CMAKE_INSTALL_PREFIX}/libexec")
185 ENDIF(NOT DEFINED LIBEXEC_DIR)
186
187 IF(NOT DEFINED RUN_DIR)
188     SET(RUN_DIR "/var/run")
189 ENDIF(NOT DEFINED RUN_DIR)
190
191 SET(VSM_CONFIG_INSTALL_DIR ${SYSCONF_INSTALL_DIR}/vasum)
192 SET(VSM_SERVER_IPC_SOCKET_PATH ${RUN_DIR}/vasum.socket)
193 SET(VSM_UNIT_TESTS_IPC_SOCKET_PATH ${RUN_DIR}/vasum-ipc-unit-tests.socket)
194
195 ADD_SUBDIRECTORY(${COMMON_FOLDER})
196 ADD_SUBDIRECTORY(${LOGGER_FOLDER})
197 IF(NOT WITHOUT_DBUS)
198 ADD_SUBDIRECTORY(${DBUS_FOLDER})
199 ENDIF(NOT WITHOUT_DBUS)
200 ADD_SUBDIRECTORY(${CONFIG_FOLDER})
201 ADD_SUBDIRECTORY(${IPC_FOLDER})
202 ADD_SUBDIRECTORY(${LXCPP_FOLDER})
203 ADD_SUBDIRECTORY(${CLIENT_FOLDER})
204 ADD_SUBDIRECTORY(${SERVER_FOLDER})
205 IF(NOT WITHOUT_DBUS)
206 ADD_SUBDIRECTORY(${ZONE_SUPPORT_FOLDER})
207 ADD_SUBDIRECTORY(${ZONE_DAEMON_FOLDER})
208 ENDIF(NOT WITHOUT_DBUS)
209 ADD_SUBDIRECTORY(${TESTS_FOLDER})
210 ADD_SUBDIRECTORY(${CLI_FOLDER})
211 ADD_SUBDIRECTORY(${WRAPPER_FOLDER})