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