-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
-SET(CMAKE_SKIP_BUILD_RPATH true)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
PROJECT(capmgr)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fvisibility=hidden -g -Wall -fPIE")
## Linker flags
-SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie -ldl")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
-#INCLUDE_DIRECTORIES(include)
+SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
INCLUDE(FindPkgConfig)
+INCLUDE(ApplyPkgConfig)
-ADD_DEFINITIONS("-DPROJECT_TAG=\"CAPMGR\"")
-ADD_DEFINITIONS("-DSVR_DB_DIR=\"${SVR_DB_DIR}\"")
-ADD_DEFINITIONS("-DSVR_DB_PATH=\"${SVR_DB_PATH}\"")
-ADD_DEFINITIONS("-DPM_DB_PATH=\"${SVR_DB_DIR}/pdm.db\"")
-
-SET(CAPMGR "capmgr")
-#SET(SRCS src/main.cc)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src/utils SRC_UTILS)
-
-SET(SERVER_CHECK_MODULES dlog gio-2.0 glib-2.0 iotivity jsoncpp pkgmgr pkgmgr-info)
-
-PKG_CHECK_MODULES(DEPS REQUIRED ${SERVER_CHECK_MODULES})
+#INCLUDE_DIRECTORIES(include)
-FOREACH(FLAGS ${DEPS_CFLAGS})
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}")
-ENDFOREACH(FLAGS)
+ADD_DEFINITIONS("-DPROJECT_TAG=\"CAPMGR\"")
-ADD_EXECUTABLE(${CAPMGR} ${SRC} ${SRC_UTILS})
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
-TARGET_LINK_LIBRARIES(${CAPMGR} ${DEPS_LDFLAGS})
+# Find all needed packages once
+PKG_CHECK_MODULES(DLOG_DEPS REQUIRED dlog)
+PKG_CHECK_MODULES(GIO_DEPS REQUIRED gio-2.0)
+PKG_CHECK_MODULES(GLIB_DEPS REQUIRED glib-2.0)
+PKG_CHECK_MODULES(IOTIVITY_DEPS REQUIRED iotivity)
+PKG_CHECK_MODULES(JSONCPP_DEPS REQUIRED jsoncpp)
+PKG_CHECK_MODULES(PKGMGR_DEPS REQUIRED pkgmgr)
+PKG_CHECK_MODULES(PKGMGR_INFO_DEPS REQUIRED pkgmgr-info)
-INSTALL(TARGETS ${CAPMGR} DESTINATION bin)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/oic_svr_db_capmgr.dat DESTINATION ${SVR_DB_DIR})
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/org.tizen.capmgr.conf DESTINATION ${SYSCONF_INSTALL_DIR}/dbus-1/system.d/)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/capability-manager.service DESTINATION ${UNITDIR})
+
+ADD_SUBDIRECTORY(src)
--- /dev/null
+# Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+#
+# This function applies external (out of source tree) dependencies
+# to given target. Arguments are:
+# TARGET - valid cmake target
+# PRIVACY - dependency can be inherited by dependent targets or not:
+# PUBLIC - this should be used by default, cause compile/link flags passing
+# PRIVATE - do not passes any settings to dependent targets,
+# may be usefull for static libraries from the inside of the project
+# Argument ARGV2 and following are supposed to be names of checked pkg config
+# packages. This function will use variables created by check_pkg_modules().
+# - ${DEP_NAME}_LIBRARIES
+# - ${DEP_NAME}_INCLUDE_DIRS
+# - ${DEP_NAME}_CFLAGS
+#
+FUNCTION(APPLY_PKG_CONFIG TARGET PRIVACY)
+ MATH(EXPR DEST_INDEX "${ARGC}-1")
+ FOREACH(I RANGE 2 ${DEST_INDEX})
+ IF(NOT ${ARGV${I}}_FOUND)
+ MESSAGE(FATAL_ERROR "Not found dependency - ${ARGV${I}}_FOUND")
+ ENDIF(NOT ${ARGV${I}}_FOUND)
+ TARGET_LINK_LIBRARIES(${TARGET} ${PRIVACY} "${${ARGV${I}}_LIBRARIES}")
+ TARGET_INCLUDE_DIRECTORIES(${TARGET} ${PRIVACY} SYSTEM "${${ARGV${I}}_INCLUDE_DIRS}")
+ STRING(REPLACE ";" " " CFLAGS_STR "${${ARGV${I}}_CFLAGS}")
+ SET(CFLAGS_LIST ${CFLAGS_STR})
+ SEPARATE_ARGUMENTS(CFLAGS_LIST)
+ FOREACH(OPTION ${CFLAGS_LIST})
+ TARGET_COMPILE_OPTIONS(${TARGET} ${PRIVACY} ${OPTION})
+ ENDFOREACH(OPTION)
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES SKIP_BUILD_RPATH true)
+ ENDFOREACH(I RANGE 2 ${DEST_INDEX})
+ENDFUNCTION(APPLY_PKG_CONFIG TARGET PRIVACY)
--- /dev/null
+SET(CAPMGR "capmgr")
+
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SRCS)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/utils UTILS_SRCS)
+
+ADD_EXECUTABLE(${CAPMGR} ${SRCS} ${UTILS_SRCS})
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../)
+
+APPLY_PKG_CONFIG(${CAPMGR} PUBLIC
+ DLOG_DEPS
+ GIO_DEPS
+ GLIB_DEPS
+ IOTIVITY_DEPS
+ JSONCPP_DEPS
+ PKGMGR_DEPS
+ PKGMGR_INFO_DEPS
+)
+
+ADD_DEFINITIONS("-DSVR_DB_DIR=\"${SVR_DB_DIR}\"")
+ADD_DEFINITIONS("-DSVR_DB_PATH=\"${SVR_DB_PATH}\"")
+ADD_DEFINITIONS("-DPM_DB_PATH=\"${SVR_DB_DIR}/pdm.db\"")
+
+INSTALL(TARGETS ${CAPMGR} DESTINATION bin)