mirror of https://github.com/cutefishos/settings
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.1 KiB
CMake
92 lines
3.1 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
project(cutefish-settings
|
|
VERSION 1.0
|
|
LANGUAGES CXX
|
|
)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
include(GNUInstallDirs)
|
|
include(CTest)
|
|
|
|
find_package(CutefishToolkit REQUIRED)
|
|
|
|
# Where the pictures are looked up; a scratch build that is never installed
|
|
# can point it at src/ instead.
|
|
set(SETTINGS_DATA_DIR ${CMAKE_INSTALL_FULL_DATADIR}/cutefish-settings CACHE PATH "Settings' installed data")
|
|
|
|
# Each page lives in src/pages/<page>/ and registers itself, so pages are
|
|
# added without touching this file. A build may take some of them only.
|
|
set(SETTINGS_PAGES "all" CACHE STRING "The src/pages directories to build: all, or a list of their names")
|
|
file(GLOB page_directories LIST_DIRECTORIES true ${PROJECT_SOURCE_DIR}/src/pages/*)
|
|
set(SETTINGS_BUILT_PAGES)
|
|
set(SETTINGS_PAGE_SOURCES)
|
|
foreach(directory ${page_directories})
|
|
get_filename_component(page ${directory} NAME)
|
|
if(IS_DIRECTORY ${directory} AND (SETTINGS_PAGES STREQUAL "all" OR page IN_LIST SETTINGS_PAGES))
|
|
list(APPEND SETTINGS_BUILT_PAGES ${page})
|
|
file(GLOB_RECURSE sources CONFIGURE_DEPENDS ${directory}/*.cpp)
|
|
list(APPEND SETTINGS_PAGE_SOURCES ${sources})
|
|
endif()
|
|
endforeach()
|
|
|
|
# Objects rather than an archive: a page is only referenced by its static
|
|
# registration, which a linker would drop from an archive.
|
|
add_library(settings-ui OBJECT
|
|
src/widgets/card.cpp
|
|
src/widgets/colors.cpp
|
|
src/widgets/formdialog.cpp
|
|
src/widgets/iconbutton.cpp
|
|
src/widgets/imageselectionitem.cpp
|
|
src/widgets/listrow.cpp
|
|
src/widgets/metrics.cpp
|
|
src/widgets/picture.cpp
|
|
src/widgets/rowcombobox.cpp
|
|
src/widgets/rowicon.cpp
|
|
src/widgets/searchfield.cpp
|
|
src/widgets/sections.cpp
|
|
src/widgets/sliderrow.cpp
|
|
src/widgets/standardbutton.cpp
|
|
src/widgets/tilegrid.cpp
|
|
src/window/options.cpp
|
|
src/window/page.cpp
|
|
src/window/pagelist.cpp
|
|
src/window/settingswindow.cpp
|
|
src/window/sidebar.cpp
|
|
${SETTINGS_PAGE_SOURCES}
|
|
)
|
|
target_include_directories(settings-ui PUBLIC src)
|
|
target_compile_definitions(settings-ui PUBLIC SETTINGS_DATA_DIR="${SETTINGS_DATA_DIR}")
|
|
target_link_libraries(settings-ui PUBLIC Cutefish::Toolkit)
|
|
|
|
# A page's own dependencies: src/pages/<page>/page.cmake finds and links
|
|
# them to settings-ui.
|
|
foreach(page ${SETTINGS_BUILT_PAGES})
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/src/pages/${page}/page.cmake)
|
|
include(${PROJECT_SOURCE_DIR}/src/pages/${page}/page.cmake)
|
|
endif()
|
|
endforeach()
|
|
|
|
add_executable(${PROJECT_NAME} src/main.cpp)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE settings-ui)
|
|
|
|
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
install(DIRECTORY src/images/ DESTINATION ${SETTINGS_DATA_DIR}/images)
|
|
|
|
cutefish_add_translations(cutefish-settings SOURCES src DESKTOP_FILES cutefish-settings.desktop)
|
|
install(FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/cutefish-settings.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
|
|
)
|
|
|
|
install(FILES
|
|
src/datetime/60-cutefish-datetime.rules
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/polkit-1/rules.d
|
|
)
|
|
|
|
if(BUILD_TESTING)
|
|
add_subdirectory(tests/ui)
|
|
endif()
|