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.
settings/CMakeLists.txt

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()