Refine CMake scripts
authorSangyoon Jang <jeremy.jang@samsung.com>
Mon, 26 Mar 2018 10:33:07 +0000 (19:33 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Mon, 26 Mar 2018 10:51:57 +0000 (19:51 +0900)
- Remove unnecessary options
- Add custom pkgconfig module
- Split CMakeFiles.txt for extendability

Change-Id: I1fbd1b5b198ffb0f5fcf3031bac9d969a32cc6c9
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
CMakeLists.txt
cmake/Modules/ApplyPkgConfig.cmake [new file with mode: 0644]
src/CMakeLists.txt [new file with mode: 0644]

index 2cbeb4c4b81de2c78b474268a7d990709e868df7..298acaf89b83d289077219eca3d0d91105bd5f8b 100644 (file)
@@ -1,6 +1,4 @@
-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)
 
@@ -13,34 +11,27 @@ SET(INCLUDEDIR "\${prefix}/include")
 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)
diff --git a/cmake/Modules/ApplyPkgConfig.cmake b/cmake/Modules/ApplyPkgConfig.cmake
new file mode 100644 (file)
index 0000000..97679d7
--- /dev/null
@@ -0,0 +1,35 @@
+# 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)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8211555
--- /dev/null
@@ -0,0 +1,23 @@
+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)