Improved coverage report instructions.
[platform/core/security/vasum.git] / CMakeLists.txt
index bc1e262..0409167 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+#Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
 #
 #    Licensed under the Apache License, Version 2.0 (the "License");
 #    you may not use this file except in compliance with the License.
 #
 
 CMAKE_MINIMUM_REQUIRED (VERSION 2.6.2)
-PROJECT(security-containers)
+PROJECT(vasum)
+
+IF(NOT DEFINED VERSION)
+    SET(VERSION "0.1.1")
+ENDIF(NOT DEFINED VERSION)
 
 ## pkgconfig ###################################################################
 INCLUDE(FindPkgConfig)
 
+
 ## default CMAKE_INSTALL_* variables ###########################################
 INCLUDE(GNUInstallDirs)
 
-## File names ##################################################################
-SET(SERVER_CODENAME "${PROJECT_NAME}-server")
-SET(CLIENT_CODENAME "${PROJECT_NAME}-client")
-
-
-## Generate the pc file ########################################################
-CONFIGURE_FILE(security-containers.pc.in security-containers.pc @ONLY)
+## Color output if it's possible:
+IF (( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9))
+      OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ))
 
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always")
+ENDIF()
 
 ## Compiler flags, depending on the build type #################################
 IF(NOT CMAKE_BUILD_TYPE)
     SET(CMAKE_BUILD_TYPE "DEBUG")
 ENDIF(NOT CMAKE_BUILD_TYPE)
-MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
+
+## Print build information #####################################################
+MESSAGE(STATUS "-------------------------------------------------")
+MESSAGE(STATUS "Compiler:          " ${CMAKE_CXX_COMPILER_ID})
+MESSAGE(STATUS "Compiler version:  " ${CMAKE_CXX_COMPILER_VERSION})
+MESSAGE(STATUS "Build type:        " ${CMAKE_BUILD_TYPE})
+MESSAGE(STATUS "-------------------------------------------------")
+
+# special case for a GCC < 4.7, assume rest is fine
+IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
+    SET(CXX_11_STD "c++0x")
+else()
+    SET(CXX_11_STD "c++11")
+endif()
 
 SET(CMAKE_C_FLAGS_PROFILING    "-g -O0 -pg")
-SET(CMAKE_CXX_FLAGS_PROFILING  "-g -std=c++11 -O0 -pg")
+SET(CMAKE_CXX_FLAGS_PROFILING  "-g -std=${CXX_11_STD} -O0 -pg")
 SET(CMAKE_C_FLAGS_DEBUG        "-g -O0 -ggdb")
-SET(CMAKE_CXX_FLAGS_DEBUG      "-g -std=c++11 -O0 -ggdb")
+SET(CMAKE_CXX_FLAGS_DEBUG      "-g -std=${CXX_11_STD} -O0 -ggdb")
 SET(CMAKE_C_FLAGS_RELEASE      "-g -O2 -DNDEBUG")
-SET(CMAKE_CXX_FLAGS_RELEASE    "-g -std=c++11 -O2 -DNDEBUG")
-SET(CMAKE_C_FLAGS_CCOV         "-g -O2 --coverage")
-SET(CMAKE_CXX_FLAGS_CCOV       "-g -std=c++11 -O2 --coverage")
+SET(CMAKE_CXX_FLAGS_RELEASE    "-g -std=${CXX_11_STD} -O2 -DNDEBUG")
+SET(CMAKE_C_FLAGS_CCOV         "-g -O0 --coverage")
+SET(CMAKE_CXX_FLAGS_CCOV       "-g -std=${CXX_11_STD} -O0 --coverage")
+
+IF(DEFINED SANITIZE)
+    # Enable sanitize build.
+    # It works with clang and gcc>=4.8
+    # Possible arguments: address, thread and others (see doc.)
+    # Note on thread sanitizer bugs left in out code:
+    #  - we use non thread save boost test library
+    #  - there are some mysterious problems with glib
+    SET(SANITIZE_FLAGS "-fsanitize=${SANITIZE}")
+    MESSAGE(STATUS "Sanitize flags: ${SANITIZE_FLAGS}")
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS} -fPIE -fno-omit-frame-pointer")
+    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_FLAGS} -fPIE -fno-omit-frame-pointer")
+    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie ${SANITIZE_FLAGS}")
+ENDIF(DEFINED SANITIZE)
 
 ADD_DEFINITIONS("-fPIC")   # Position Independent Code
 ADD_DEFINITIONS("-Werror") # Make all warnings into errors
@@ -57,45 +87,125 @@ ADD_DEFINITIONS("-Wextra") # Generate even more extra warnings
 ADD_DEFINITIONS("-pedantic") # Be pedantic
 ADD_DEFINITIONS("-pedantic-errors") # Make pedantic warnings into errors
 ADD_DEFINITIONS(-DPROGRAM_VERSION="${VERSION}")
-
+ADD_DEFINITIONS(-DPROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}")
+ADD_DEFINITIONS(-DUSE_EXEC)
+ADD_DEFINITIONS(-D__STDC_LIMIT_MACROS)
+
+IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+    # Warn about documentation problems
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdocumentation")
+
+    IF(ALL_WARNINGS)
+        # turn on every -W flags except a few explicitly mentioned
+        ADD_DEFINITIONS("-Wno-error")
+        ADD_DEFINITIONS("-Weverything")
+        ADD_DEFINITIONS("-Wno-c++98-compat")
+        ADD_DEFINITIONS("-Wno-c++98-compat-pedantic")
+        ADD_DEFINITIONS("-Wno-padded")
+        ADD_DEFINITIONS("-Wno-global-constructors")
+        ADD_DEFINITIONS("-Wno-exit-time-destructors")
+        ADD_DEFINITIONS("-Wno-weak-vtables")
+    ENDIF(ALL_WARNINGS)
+ENDIF()
+
+IF(NOT DEFINED VASUM_USER)
+    SET(VASUM_USER "security-containers")
+ENDIF(NOT DEFINED VASUM_USER)
+IF(NOT DEFINED INPUT_EVENT_GROUP)
+    SET(INPUT_EVENT_GROUP "input")
+ENDIF(NOT DEFINED INPUT_EVENT_GROUP)
+IF(NOT DEFINED DISK_GROUP)
+    SET(DISK_GROUP "disk")
+ENDIF(NOT DEFINED DISK_GROUP)
+IF(NOT DEFINED TTY_GROUP)
+    SET(TTY_GROUP "tty")
+ENDIF(NOT DEFINED TTY_GROUP)
+
+ADD_DEFINITIONS(-DVASUM_USER="${VASUM_USER}")
+ADD_DEFINITIONS(-DINPUT_EVENT_GROUP="${INPUT_EVENT_GROUP}")
+ADD_DEFINITIONS(-DDISK_GROUP="${DISK_GROUP}")
+ADD_DEFINITIONS(-DTTY_GROUP="${TTY_GROUP}")
+IF(NOT WITHOUT_DBUS)
+    ADD_DEFINITIONS(-DDBUS_CONNECTION)
+ENDIF(NOT WITHOUT_DBUS)
+IF(NOT WITHOUT_SYSTEMD)
+    ADD_DEFINITIONS(-DHAVE_SYSTEMD)
+ENDIF(NOT WITHOUT_SYSTEMD)
+
+## Python packages directory ###################################################
+IF(NOT DEFINED PYTHON_SITELIB)
+    EXECUTE_PROCESS(COMMAND python -c
+    "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib())"
+    OUTPUT_VARIABLE PYTHON_SITELIB)
+ENDIF(NOT DEFINED PYTHON_SITELIB)
 
 ## Subdirectories ##############################################################
-SET(CLIENT_FOLDER ${PROJECT_SOURCE_DIR}/src/client)
-SET(SERVER_FOLDER ${PROJECT_SOURCE_DIR}/src/server)
+SET(COMMON_FOLDER ${PROJECT_SOURCE_DIR}/common)
+SET(LIBS_FOLDER ${PROJECT_SOURCE_DIR}/libs)
+SET(LOGGER_FOLDER ${PROJECT_SOURCE_DIR}/libs/logger)
+SET(DBUS_FOLDER ${PROJECT_SOURCE_DIR}/libs/dbus)
+SET(CONFIG_FOLDER ${PROJECT_SOURCE_DIR}/libs/config)
+SET(IPC_FOLDER ${PROJECT_SOURCE_DIR}/libs/ipc)
+SET(LXCPP_FOLDER ${PROJECT_SOURCE_DIR}/libs/lxcpp)
+SET(CLIENT_FOLDER ${PROJECT_SOURCE_DIR}/client)
+SET(SERVER_FOLDER ${PROJECT_SOURCE_DIR}/server)
+SET(ZONE_SUPPORT_FOLDER ${PROJECT_SOURCE_DIR}/zone-support)
+SET(ZONE_DAEMON_FOLDER ${PROJECT_SOURCE_DIR}/zone-daemon)
+SET(TESTS_FOLDER ${PROJECT_SOURCE_DIR}/tests)
+SET(CLI_FOLDER ${PROJECT_SOURCE_DIR}/cli)
+SET(WRAPPER_FOLDER ${PROJECT_SOURCE_DIR}/wrapper)
+
 
 IF(NOT DEFINED SYSCONF_INSTALL_DIR)
     SET(SYSCONF_INSTALL_DIR "/etc")
 ENDIF(NOT DEFINED SYSCONF_INSTALL_DIR)
 
 IF(NOT DEFINED LIB_INSTALL_DIR)
-    SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}")
+    SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
 ENDIF(NOT DEFINED LIB_INSTALL_DIR)
 
 IF(NOT DEFINED INCLUDE_INSTALL_DIR)
-    SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
+    SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
 ENDIF(NOT DEFINED INCLUDE_INSTALL_DIR)
 
 IF(NOT DEFINED SCRIPT_INSTALL_DIR)
-    SET(SCRIPT_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/sbin")
+    SET(SCRIPT_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SBINDIR}")
 ENDIF(NOT DEFINED SCRIPT_INSTALL_DIR)
 
-SET(SC_CONFIG_INSTALL_DIR ${SYSCONF_INSTALL_DIR}/security-containers)
-
-ADD_SUBDIRECTORY(src)
-
-
-## Installations ###############################################################
-INSTALL(FILES       ${CLIENT_FOLDER}/include/security-containers-client.h
-        DESTINATION ${INCLUDE_INSTALL_DIR}/security-containers)
-
-INSTALL(FILES       ${CMAKE_BINARY_DIR}/security-containers.pc
-        DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
-
-INSTALL(FILES       ${SERVER_FOLDER}/config/daemon.conf
-        DESTINATION ${SC_CONFIG_INSTALL_DIR})
-
-INSTALL(FILES       ${SERVER_FOLDER}/config/containers/xminimal.conf
-        DESTINATION ${SC_CONFIG_INSTALL_DIR}/containers)
-
-INSTALL(FILES       ${SERVER_FOLDER}/config/libvirt-config/xminimal.xml
-        DESTINATION ${SC_CONFIG_INSTALL_DIR}/libvirt-config)
+IF(NOT DEFINED SYSTEMD_UNIT_DIR)
+    SET(SYSTEMD_UNIT_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/system")
+ENDIF(NOT DEFINED SYSTEMD_UNIT_DIR)
+
+IF(NOT DEFINED DATA_DIR)
+    SET(DATA_DIR "${CMAKE_INSTALL_PREFIX}/share")
+ENDIF(NOT DEFINED DATA_DIR)
+
+IF(NOT DEFINED LIBEXEC_DIR)
+    SET(LIBEXEC_DIR "${CMAKE_INSTALL_PREFIX}/libexec")
+ENDIF(NOT DEFINED LIBEXEC_DIR)
+
+IF(NOT DEFINED RUN_DIR)
+    SET(RUN_DIR "/var/run")
+ENDIF(NOT DEFINED RUN_DIR)
+
+SET(VSM_CONFIG_INSTALL_DIR ${SYSCONF_INSTALL_DIR}/vasum)
+SET(VSM_SERVER_IPC_SOCKET_PATH ${RUN_DIR}/vasum.socket)
+SET(VSM_UNIT_TESTS_IPC_SOCKET_PATH ${RUN_DIR}/vasum-ipc-unit-tests.socket)
+
+ADD_SUBDIRECTORY(${COMMON_FOLDER})
+ADD_SUBDIRECTORY(${LOGGER_FOLDER})
+IF(NOT WITHOUT_DBUS)
+ADD_SUBDIRECTORY(${DBUS_FOLDER})
+ENDIF(NOT WITHOUT_DBUS)
+ADD_SUBDIRECTORY(${CONFIG_FOLDER})
+ADD_SUBDIRECTORY(${IPC_FOLDER})
+ADD_SUBDIRECTORY(${LXCPP_FOLDER})
+ADD_SUBDIRECTORY(${CLIENT_FOLDER})
+ADD_SUBDIRECTORY(${SERVER_FOLDER})
+IF(NOT WITHOUT_DBUS)
+ADD_SUBDIRECTORY(${ZONE_SUPPORT_FOLDER})
+ADD_SUBDIRECTORY(${ZONE_DAEMON_FOLDER})
+ENDIF(NOT WITHOUT_DBUS)
+ADD_SUBDIRECTORY(${TESTS_FOLDER})
+ADD_SUBDIRECTORY(${CLI_FOLDER})
+ADD_SUBDIRECTORY(${WRAPPER_FOLDER})