Modify cmake configuration 44/297944/1
authorHwankyu Jhun <h.jhun@samsung.com>
Tue, 29 Aug 2023 04:43:38 +0000 (13:43 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 29 Aug 2023 04:43:38 +0000 (13:43 +0900)
- Use ApplyPkgConfig

Change-Id: I87e15ebf888473912ece91ba1cf692eed5a86852
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
CMakeLists.txt
cmake/Modules/ApplyPkgConfig.cmake [new file with mode: 0644]
src/CMakeLists.txt [new file with mode: 0644]
tool/CMakeLists.txt

index 968364d..d458fb4 100644 (file)
@@ -1,44 +1,58 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-
-PROJECT(capi-appfw-app-manager C)
-AUX_SOURCE_DIRECTORY(src SOURCES)
-
-INCLUDE(FindPkgConfig)
-pkg_check_modules(PKGS REQUIRED
-       capi-base-common
-       dlog
-       vconf
-       aul
-       pkgmgr
-       pkgmgr-info
-       glib-2.0
-       cynara-client)
-FOREACH(FLAGS ${PKGS_CFLAGS})
-       SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}")
-ENDFOREACH(FLAGS)
-
-SET(INC_DIR include)
-INCLUDE_DIRECTORIES(${INC_DIR})
-
-ADD_LIBRARY(${PROJECT_NAME} SHARED ${SOURCES})
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS})
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Werror -fvisibility=hidden -Wno-error=deprecated-declarations")
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+
+PROJECT(capi-appfw-app-manager)
+
+SET(CMAKE_INSTALL_PREFIX /usr)
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(PC_PREFIX ${PREFIX})
+SET(PC_NAME "capi-appfw-app-manager")
+SET(PC_REQUIRED "capi-base-common")
+SET(PC_LDFLAGS "-lcapi-appfw-app-manager")
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-zdefs")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=deprecated-declarations")
 SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
 
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${FULLVER})
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${MAJORVER})
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_C_FLAGS} -fPIC")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
 
-SET(PC_PREFIX ${CMAKE_INSTALL_PREFIX})
-CONFIGURE_FILE(capi-appfw-app-manager.pc.in ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc @ONLY)
+SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
+  "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
 
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR})
+SET(TARGET_APP_MANAGER "capi-appfw-app-manager")
+SET(TARGET_APPMGR_TOOL "appmgr_tool")
 
-INSTALL(DIRECTORY ${INC_DIR}/ DESTINATION include/appfw
-       FILES_MATCHING
-       PATTERN "${INC_DIR}/*.h")
+ENABLE_TESTING()
+SET(TARGET_APP_MANAGER_UNITTESTS "app-manager_unittests")
+ADD_TEST(NAME ${TARGET_APP_MANAGER_UNITTESTS}
+  COMMAND ${TARGET_APP_MANAGER_UNITTESTS}
+  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/app-manager_unittests)
 
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
+INCLUDE(FindPkgConfig)
+INCLUDE(ApplyPkgConfig)
+
+PKG_CHECK_MODULES(AUL_DEPS REQUIRED aul)
+PKG_CHECK_MODULES(CAPI_BASE_COMMON_DEPS REQUIRED capi-base-common)
+PKG_CHECK_MODULES(CYNARA_CLIENT_DEPS REQUIRED cynara-client)
+PKG_CHECK_MODULES(DLOG_DEPS REQUIRED dlog)
+PKG_CHECK_MODULES(GLIB_DEPS REQUIRED glib-2.0)
+PKG_CHECK_MODULES(PKGMGR_DEPS REQUIRED pkgmgr)
+PKG_CHECK_MODULES(PKGMGR_INFO_DEPS REQUIRED pkgmgr-info)
+PKG_CHECK_MODULES(VCONF_DEPS REQUIRED vconf)
+
+CONFIGURE_FILE(${TARGET_APP_MANAGER}.pc.in
+       ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_APP_MANAGER}.pc @ONLY)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_APP_MANAGER}.pc
+       DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
+
+INSTALL(DIRECTORY include/ DESTINATION include/appfw
+       FILES_MATCHING
+       PATTERN "include/*.h")
 
+ADD_SUBDIRECTORY(src)
 ADD_SUBDIRECTORY(tool)
diff --git a/cmake/Modules/ApplyPkgConfig.cmake b/cmake/Modules/ApplyPkgConfig.cmake
new file mode 100644 (file)
index 0000000..9b84be3
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright (c) 2020 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..418cf17
--- /dev/null
@@ -0,0 +1,24 @@
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} APP_MANAGER_SRCS)
+
+ADD_LIBRARY(${TARGET_APP_MANAGER} SHARED ${APP_MANAGER_SRCS})
+
+SET_TARGET_PROPERTIES(${TARGET_APP_MANAGER} PROPERTIES SOVERSION ${MAJORVER})
+SET_TARGET_PROPERTIES(${TARGET_APP_MANAGER} PROPERTIES VERSION ${FULLVER})
+
+TARGET_INCLUDE_DIRECTORIES(${TARGET_APP_MANAGER} PUBLIC
+  ${CMAKE_CURRENT_SOURCE_DIR}
+  ${CMAKE_CURRENT_SOURCE_DIR}/../
+  ${CMAKE_CURRENT_SOURCE_DIR}/../include/)
+
+APPLY_PKG_CONFIG(${TARGET_APP_MANAGER} PUBLIC
+  AUL_DEPS
+  CAPI_BASE_COMMON_DEPS
+  CYNARA_CLIENT_DEPS
+  DLOG_DEPS
+  GLIB_DEPS
+  PKGMGR_DEPS
+  PKGMGR_INFO_DEPS
+  VCONF_DEPS
+)
+
+INSTALL(TARGETS ${TARGET_APP_MANAGER} DESTINATION ${LIB_INSTALL_DIR})
index 660775b..db3fc9d 100644 (file)
@@ -1,21 +1,19 @@
-# Test executables
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} APPMGR_TOOL_SRCS)
 
-#Verbose
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+ADD_EXECUTABLE(${TARGET_APPMGR_TOOL} ${APPMGR_TOOL_SRCS})
 
-INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs_test REQUIRED glib-2.0)
-FOREACH(flag ${pkgs_test_CFLAGS})
-       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
-ENDFOREACH(flag)
-
-SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wl,-zdefs" )
-SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden")
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIE")
-SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
-SET(CMAKE_C_FLAGS_RELEASE "-O2")
 
-ADD_EXECUTABLE(appmgr_tool main.c)
-TARGET_LINK_LIBRARIES(appmgr_tool capi-appfw-app-manager ${pkgs_test_LDFLAGS} "-pie")
-INSTALL(TARGETS appmgr_tool DESTINATION bin)
+TARGET_INCLUDE_DIRECTORIES(${TARGET_APPMGR_TOOL} PUBLIC
+       ${CMAKE_CURRENT_SOURCE_DIR}
+       ${CMAKE_CURRENT_SOURCE_DIR}/../
+       ${CMAKE_CURRENT_SOURCE_DIR}/../include/)
+
+APPLY_PKG_CONFIG(${TARGET_APPMGR_TOOL} PUBLIC
+       GLIB_DEPS
+)
+
+TARGET_LINK_LIBRARIES(${TARGET_APPMGR_TOOL} PRIVATE
+       ${TARGET_APP_MANAGER} "-pie")
 
+INSTALL(TARGETS ${TARGET_APPMGR_TOOL} DESTINATION bin)