-# Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+# Copyright (c) 2014-2015 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.
#
# @file CMakeLists.txt
# @author Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
+# @author Radoslaw Bartosiak <r.bartosiak@samsung.com>
#
############################# Check minimum CMake version #####################
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3)
PROJECT("cynara")
+set(CYNARA_VERSION 0.8.0)
############################# cmake packages ##################################
INCLUDE(FindPkgConfig)
+INCLUDE(CheckCXXCompilerFlag)
+
+########################## search for packages ################################
+
+PKG_CHECK_MODULES(SYSTEMD_DEP
+ QUIET
+ libsystemd-daemon
+ libsystemd-journal
+ )
+
+IF (SYSTEMD_DEP_FOUND)
+ SET(BUILD_WITH_SYSTEMD ON)
+ENDIF (SYSTEMD_DEP_FOUND)
+
+######################## directory configuration ############################
+
+SET(LIB_DIR
+ "${CMAKE_INSTALL_PREFIX}/lib"
+ CACHE PATH
+ "Object code libraries directory")
+
+SET(BIN_DIR
+ "${CMAKE_INSTALL_PREFIX}/bin"
+ CACHE PATH
+ "User executables directory")
+
+SET(SBIN_DIR
+ "${CMAKE_INSTALL_PREFIX}/sbin"
+ CACHE PATH
+ "System admin executables directory")
+
+SET(SYS_CONFIG_DIR
+ "${CMAKE_INSTALL_PREFIX}/etc"
+ CACHE PATH
+ "Read-only single-machine data directory")
+
+SET(INCLUDE_DIR
+ "${CMAKE_INSTALL_PREFIX}/include"
+ CACHE PATH
+ "Header files directory")
+
+SET(LOCAL_STATE_DIR
+ "${CMAKE_INSTALL_PREFIX}/var"
+ CACHE PATH
+ "Modifiable single-machine data directory")
+
+SET(DATA_ROOT_DIR
+ "${CMAKE_INSTALL_PREFIX}/share"
+ CACHE PATH
+ "Read-only architecture-independent data root directory")
+
+SET(SYSTEMD_UNIT_DIR
+ "${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
+ CACHE PATH
+ "Systemd system unit file directory")
+
+SET(SOCKET_DIR
+ "${CMAKE_INSTALL_PREFIX}/tmp"
+ CACHE PATH
+ "Running system information directory")
+
+ADD_DEFINITIONS("-DLIB_DIR=\"${LIB_DIR}\"")
+ADD_DEFINITIONS("-DBIN_DIR=\"${BIN_DIR}\"")
+ADD_DEFINITIONS("-DSBIN_DIR=\"${SBIN_DIR}\"")
+ADD_DEFINITIONS("-DSYS_CONFIG_DIR=\"${SYS_CONFIG_DIR}\"")
+ADD_DEFINITIONS("-DINCLUDE_DIR=\"${INCLUDE_DIR}\"")
+ADD_DEFINITIONS("-DLOCAL_STATE_DIR=\"${LOCAL_STATE_DIR}\"")
+ADD_DEFINITIONS("-DDATA_ROOT_DIR=\"${DATA_ROOT_DIR}\"")
+ADD_DEFINITIONS("-DSYSTEMD_UNIT_DIR=\"${SYSTEMD_UNIT_DIR}\"")
+ADD_DEFINITIONS("-DSOCKET_DIR=\"${SOCKET_DIR}\"")
############################# compiler flags ##################################
-SET(CMAKE_C_FLAGS_PROFILING "-g -O0 -pg")
-SET(CMAKE_CXX_FLAGS_PROFILING "-g -std=c++0x -O0 -pg -Wp,-U_FORTIFY_SOURCE")
-SET(CMAKE_C_FLAGS_DEBUG "-g -O0 -ggdb")
-SET(CMAKE_CXX_FLAGS_DEBUG "-g -std=c++0x -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
-SET(CMAKE_C_FLAGS_RELEASE "-g -O2")
-SET(CMAKE_CXX_FLAGS_RELEASE "-g -std=c++0x -O2")
-SET(CMAKE_C_FLAGS_CCOV "-g -O2 --coverage")
-SET(CMAKE_CXX_FLAGS_CCOV "-g -std=c++0x -O2 --coverage")
+SET(CMAKE_CXX_FLAGS_PROFILING "-O0 -g -pg")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -ggdb")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -g")
+SET(CMAKE_CXX_FLAGS_CCOV "-O2 -g --coverage")
-# If supported for the target machine, emit position-independent code,suitable
-# for dynamic linking and avoiding any limit on the size of the global offset
-# table. This option makes a difference on the m68k, PowerPC and SPARC.
-ADD_DEFINITIONS("-fPIC")
+# Check for C++11 support and enable proper compilation flags
+CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
+IF(COMPILER_SUPPORTS_CXX11)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ELSE()
+ CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
+ IF(COMPILER_SUPPORTS_CXX0X)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
+ ELSE()
+ MESSAGE(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
+ ENDIF()
+ENDIF()
# Set compiler warning flags
ADD_DEFINITIONS("-Werror") # Make all warnings into errors.
ADD_DEFINITIONS("-Wall") # Generate all warnings
ADD_DEFINITIONS("-Wextra") # Generate even more extra warnings
-STRING(REGEX MATCH "([^.]*)" API_VERSION "${VERSION}")
-ADD_DEFINITIONS("-DAPI_VERSION=\"$(API_VERSION)\"")
+# Don't export symbols by default
+ADD_DEFINITIONS("-fvisibility=hidden")
+
+# Export version of cynara
+ADD_DEFINITIONS("-DCYNARA_VERSION=\"${CYNARA_VERSION}\"")
IF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
ADD_DEFINITIONS("-DBUILD_TYPE_DEBUG")
ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
+IF (BUILD_WITH_SYSTEMD)
+ ADD_DEFINITIONS("-DBUILD_WITH_SYSTEMD")
+ENDIF (BUILD_WITH_SYSTEMD)
+
SET(TARGET_CYNARA "cynara")
SET(TARGET_LIB_CYNARA "cynara-client")
+SET(TARGET_LIB_CYNARA_ASYNC "cynara-client-async")
+SET(TARGET_LIB_CYNARA_COMMON "cynara-client-commons")
SET(TARGET_LIB_CYNARA_ADMIN "cynara-admin")
+SET(TARGET_LIB_CYNARA_AGENT "cynara-agent")
SET(TARGET_CYNARA_COMMON "cynara-commons")
+SET(TARGET_CYNARA_TESTS "cynara-tests")
+SET(TARGET_LIB_CREDS_COMMONS "cynara-creds-commons")
+SET(TARGET_LIB_CREDS_DBUS "cynara-creds-dbus")
+SET(TARGET_LIB_CREDS_GDBUS "cynara-creds-gdbus")
+SET(TARGET_LIB_CREDS_SOCKET "cynara-creds-socket")
+SET(TARGET_LIB_SESSION "cynara-session")
+SET(TARGET_LIB_CYNARA_STORAGE "cynara-storage")
+SET(TARGET_CYAD "cyad")
+SET(TARGET_CHSGEN "cynara-db-chsgen")
ADD_SUBDIRECTORY(src)
-ADD_SUBDIRECTORY(build)
-ADD_SUBDIRECTORY(systemd)
+ADD_SUBDIRECTORY(pkgconfig)
+ADD_SUBDIRECTORY(conf)
+
+IF (BUILD_WITH_SYSTEMD)
+ ADD_SUBDIRECTORY(systemd)
+ENDIF (BUILD_WITH_SYSTEMD)
+
+ADD_SUBDIRECTORY(migration)
+
+IF (BUILD_TESTS)
+ ADD_SUBDIRECTORY(test)
+ENDIF (BUILD_TESTS)