-
Z authored3da62e73
Forked from
Z / proj223-deepin-startup-management-plugin
3 commits behind the upstream repository.
cmake_minimum_required(VERSION 3.13)
set(DVERSION "6.0.21" CACHE STRING "define project version")
set(BUILD_DOCS ON CACHE BOOL "Generate doxygen-based documentation")
set(PROJECT_NAME dde-control-center)
project(${PROJECT_NAME}
VERSION ${DVERSION}
DESCRIPTION "Deepin Control Center"
HOMEPAGE_URL "https://github.com/linuxdeepin/dde-control-center"
LANGUAGES CXX C
)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
option(ENABLE_ASAN "Enable asan" OFF)
# INFO:
# plugins can be disabled and their options
# plugin-authentication : DISABLE_AUTHENTICATION
# plugin-update : DISABLE_UPDATE
# plugin-keyboard: DISABLE_LANGUAGE to disable language panel
option(DISABLE_AUTHENTICATION "disable build authentication plugins" OFF)
option(DISABLE_UPDATE "disable build update plugins" OFF)
option(DISABLE_LANGUAGE "disable lanugage settings in control center" OFF)
# asan 自己有内存泄露,暂不使用
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(UNITTEST ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Werror=return-type -fno-omit-frame-pointer -Wextra")
if(ENABLE_ASAN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
add_definitions(-DUSE_ASAN)
endif()
else()
# generate qm
execute_process(COMMAND bash "misc/translate_generation.sh"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
# generate desktop translate
execute_process(COMMAND bash "misc/translate_ts2desktop.sh"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
endif()
set(BUILD_PLUDIN ON)
if (NOT BUILD_PLUDIN)
set(UNITTEST OFF)
endif()
# GNU 默认
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(UT_COMPILER -fprofile-arcs -ftest-coverage)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(UT_COMPILER -fprofile-instr-generate -ftest-coverage)
endif()
# 增加安全编译参数
ADD_DEFINITIONS(${SAFE_COMPILER})
# Install settings
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX /usr)
endif ()
include(GNUInstallDirs)
set(TRANSLATE_INSTALL_DIR "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/translations" CACHE STRING "Install dir for dde-control-center translate files")
add_definitions(-DTRANSLATE_READ_DIR="${CMAKE_INSTALL_PREFIX}/${TRANSLATE_INSTALL_DIR}")
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
set(MODULE_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/dde-control-center/modules" CACHE STRING "Install dir for dde-control-center modules")
set(MODULE_READ_DIR "${MODULE_INSTALL_DIR}" CACHE STRING "Dir to find dde-control-center modules")
add_definitions(-DDefaultModuleDirectory="${MODULE_READ_DIR}")
set(LOCALSTATE_READ_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}" CACHE STRING "Dir to find modifiable single-machine data")
add_definitions(-DVARDIRECTORY="${LOCALSTATE_READ_DIR}")
# Find the library
find_package(PkgConfig REQUIRED)
find_package(DtkCore REQUIRED)
find_package(DtkWidget REQUIRED)
find_package(Qt5 COMPONENTS Widgets Network DBus Concurrent Multimedia Svg Test REQUIRED)
find_package(DdeControlCenter REQUIRED)
# pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus)
if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "sw_64")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mieee")
endif()
# dconfig
# file(GLOB DCONFIG_FILES "misc/configs/*.json")
# dconfig_meta_files(APPID org.deepin.dde.control-center BASE misc/configs FILES ${DCONFIG_FILES})
include_directories(
include
)
set(Test_Libraries
-lpthread
-lgcov
-lgtest
Qt5::Test
)
#--------------------------interface--------------------------
set(Interface_Name dcc-interface)
file(GLOB_RECURSE Interface_SRCS
"include/interface/*.h"
"src/interface/*.cpp"
)
add_library(${Interface_Name} SHARED
${Interface_SRCS}
)
set(Interface_Includes
Qt5::Widgets
include/interface
)
set(Interface_Libraries
Qt5::Widgets
${DtkWidget_LIBRARIES}
)
target_include_directories(${Interface_Name} PUBLIC
${Interface_Includes}
)
target_link_libraries(${Interface_Name} PRIVATE
${Interface_Libraries}
)
set_target_properties(${Interface_Name} PROPERTIES
VERSION ${CMAKE_PROJECT_VERSION}
SOVERSION ${CMAKE_PROJECT_VERSION_MAJOR}
)
# so
# install(TARGETS ${Interface_Name} DESTINATION ${CMAKE_INSTALL_LIBDIR})
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
#--------------------------dccwidgets library----------------------------
set(Dcc_Widgets_Name dcc-widgets)
file(GLOB_RECURSE Dcc_Widgets_SRCS
"include/widgets/*.h"
"src/widgets/*.cpp"
)
add_library(${Dcc_Widgets_Name} SHARED
${Dcc_Widgets_SRCS}
)
set(Dcc_Widgets_Includes
${DtkWidget_INCLUDE_DIRS}
${Qt5Gui_PRIVATE_INCLUDE_DIRS}
include/widgets
)
set(Dcc_Widgets_Libraries
${DtkWidget_LIBRARIES}
Qt5::Widgets
Qt5::Svg
Qt5::DBus
${Interface_Name}
)
target_include_directories(${Dcc_Widgets_Name} PUBLIC
${Dcc_Widgets_Includes}
)
target_link_libraries(${Dcc_Widgets_Name} PRIVATE
${Dcc_Widgets_Libraries}
)
set_target_properties(${Dcc_Widgets_Name} PROPERTIES
VERSION ${CMAKE_PROJECT_VERSION}
SOVERSION ${CMAKE_PROJECT_VERSION_MAJOR}
)
# message(STATUS "dccwidgets success")
# so
# install(TARGETS ${Dcc_Widgets_Name} DESTINATION ${CMAKE_INSTALL_LIBDIR})
#------------------------dccwidgets library test--------------------------
if (UNITTEST)
set(UT_Dcc_Widgets_Name ut-dcc-widgets)
file(GLOB_RECURSE UT_Dcc_Widgets_SRCS
"tests/widgets/*.cpp"
)
add_executable(${UT_Dcc_Widgets_Name}
${Dcc_Widgets_SRCS}
${UT_Dcc_Widgets_SRCS}
)
# 用于测试覆盖率的编译条件
target_compile_options(${UT_Dcc_Widgets_Name} PRIVATE ${UT_COMPILER})
target_include_directories(${UT_Dcc_Widgets_Name} PUBLIC
${Dcc_Widgets_Includes}
)
target_link_libraries(${UT_Dcc_Widgets_Name} PRIVATE
${Dcc_Widgets_Libraries}
${Test_Libraries}
)
endif()
# message(STATUS "dccwidgets test success")
#--------------------------dde-control-center--------------------------
set(Control_Center_Name dde-control-center)
file(GLOB_RECURSE Control_Center_SRCS
"src/frame/*.h"
"src/frame/*.cpp"
)
list(REMOVE_ITEM Control_Center_SRCS "${CMAKE_SOURCE_DIR}/src/frame/main.cpp")
add_executable(${Control_Center_Name}
${Control_Center_SRCS}
src/frame/main.cpp
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
)
target_compile_definitions(${Control_Center_Name} PRIVATE CVERSION="${CVERSION}")
set(Control_Center_Includes
${DtkWidget_INCLUDE_DIRS}
Qt5::Widgets
Qt5::DBus
Qt5::Concurrent
)
set(Control_Center_Libraries
${Dcc_Widgets_Name}
${Interface_Name}
${DtkWidget_LIBRARIES}
Qt5::Widgets
Qt5::DBus
Qt5::Concurrent
)
target_include_directories(${Control_Center_Name} PUBLIC
${Control_Center_Includes}
)
target_link_libraries(${Control_Center_Name} PRIVATE
${Control_Center_Libraries}
)
# bin
# install(TARGETS ${Control_Center_Name} DESTINATION ${CMAKE_INSTALL_BINDIR})
# message(STATUS "dde-control-centre success")
#----------------------------install config------------------------------
# qm files
file(GLOB QM_FILES "translations/*.qm")
install(FILES ${QM_FILES} DESTINATION ${TRANSLATE_INSTALL_DIR})
#desktop
# install(FILES misc/dde-control-center.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
#service
# install(FILES misc/org.deepin.dde.ControlCenter1.service DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/dbus-1/services)
# dev files
file(GLOB HEADERS "include/*")
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/dde-control-center)
install(DIRECTORY ${HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR})
include(CMakePackageConfigHelpers)
configure_package_config_file(misc/DdeControlCenterConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/DdeControlCenterConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DdeControlCenter
PATH_VARS INCLUDE_INSTALL_DIR
INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/DdeControlCenterConfig.cmake
# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DdeControlCenter)
# message(STATUS "install config success")
#-------------------------ut-dcc-interface-------------------------
if (UNITTEST)
set(UT_Interface_Name ut-dcc-interface)
file(GLOB_RECURSE UT_Interface_SRCS
"tests/interface/*.cpp"
)
add_executable(${UT_Interface_Name}
${Interface_SRCS}
${UT_Interface_SRCS}
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
)
# 用于测试覆盖率的编译条件
target_compile_options(${UT_Interface_Name} PRIVATE ${UT_COMPILER})
target_include_directories(${UT_Interface_Name} PUBLIC
${Interface_Includes}
)
target_link_libraries(${UT_Interface_Name} PRIVATE
${Interface_Libraries}
${Test_Libraries}
)
endif()
#-------------------------ut-dcc-frame-------------------------
if (UNITTEST)
set(UT_Frame_Name ut-dcc-frame)
file(GLOB_RECURSE UT_Frame_SRCS
"tests/frame/*.cpp"
)
add_executable(${UT_Frame_Name}
${Control_Center_SRCS}
${UT_Frame_SRCS}
)
# 用于测试覆盖率的编译条件
target_compile_options(${UT_Frame_Name} PRIVATE ${UT_COMPILER})
target_include_directories(${UT_Frame_Name} PUBLIC
${Control_Center_Includes}
)
target_link_libraries(${UT_Frame_Name} PRIVATE
${Control_Center_Libraries}
${Test_Libraries}
)
endif()
#--------------------------plugin-test1--------------------------
if (UNITTEST)
set(Plugin_Test1_Name plugin-test1)
file(GLOB_RECURSE Plugin_Test1_SRCS
"tests/plugin-test1/*.h"
"tests/plugin-test1/*.cpp"
)
add_library(${Plugin_Test1_Name} MODULE
${Plugin_Test1_SRCS}
)
set(Plugin_Test1_Includes
Qt5::Widgets
Qt5::DBus
Dtk::Widget
)
set(Plugin_Test1_Libraries
${Interface_Name}
Qt5::Widgets
Qt5::DBus
Dtk::Widget
)
target_include_directories(${Plugin_Test1_Name} PUBLIC
${Plugin_Test1_Includes}
)
target_link_libraries(${Plugin_Test1_Name} PRIVATE
${Plugin_Test1_Libraries}
)
endif()
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
#--------------------------plugin-test2--------------------------
if (UNITTEST)
set(Plugin_Test2_Name plugin-test2)
file(GLOB_RECURSE Plugin_Test2_SRCS
"tests/plugin-test2/*.h"
"tests/plugin-test2/*.cpp"
)
add_library(${Plugin_Test2_Name} MODULE
${Plugin_Test2_SRCS}
)
set(Plugin_Test2_Includes
Qt5::Widgets
Qt5::DBus
)
set(Plugin_Test2_Libraries
${Interface_Name}
Qt5::Widgets
Qt5::DBus
)
target_include_directories(${Plugin_Test2_Name} PUBLIC
${Plugin_Test2_Includes}
)
target_link_libraries(${Plugin_Test2_Name} PRIVATE
${Plugin_Test2_Libraries}
)
endif()
#--------------------------dcc-selfstartup-plugin--------------------------
if (BUILD_PLUDIN)
set(SelfStartup_Name dcc-selfstartup-plugin)
file(GLOB_RECURSE SelfStartup_SRCS
"src/plugin-selfstartup/window/*.cpp"
"src/plugin-selfstartup/window/widgets/*.cpp"
"src/plugin-selfstartup/operation/*.cpp"
"src/plugin-selfstartup/operation/qrc/*.qrc"
)
add_library(${SelfStartup_Name} MODULE
${SelfStartup_SRCS}
)
set(SelfStartup_Includes
${DtkWidget_INCLUDE_DIRS}
Qt5::Widgets
Qt5::DBus
Qt5::Concurrent
src/plugin-selfstartup/window/widgets
src/plugin-selfstartup/operation
)
set(SelfStartup_Libraries
${Dcc_Widgets_Name}
${DtkWidget_LIBRARIES}
Qt5::Widgets
Qt5::DBus
Qt5::Concurrent
${Dcc_Widgets_Name}
)
target_include_directories(${SelfStartup_Name} PUBLIC
${SelfStartup_Includes}
)
target_link_libraries(${SelfStartup_Name} PRIVATE
${SelfStartup_Libraries}
)
install(TARGETS ${SelfStartup_Name} DESTINATION ${MODULE_INSTALL_DIR})
endif()
421422
message(STATUS "all success")