cmake_minimum_required(VERSION 3.16) project(lumina) set(APP_NAME ${PROJECT_NAME}) include(FeatureSummary) set(QT_MIN_VERSION 6.6.0) set(KF_MIN_VERSION 6.0.0) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/qml) set(QML_IMPORT_PATH ${QT_QML_OUTPUT_DIRECTORY} CACHE PATH "Extra QML import paths to make Qt Creator happy") include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(ECMSetupVersion) include(ECMGenerateHeaders) include(ECMPoQmTools) kde_enable_exceptions() find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Core5Compat Quick Test Gui Qml QuickControls2 Widgets Sql QmlImportScanner WebEngineQuick) find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS Kirigami CoreAddons I18n) # find_package(KF6FileMetaData ${KF6_MIN_VERSION}) # set_package_properties(KF6FileMetaData PROPERTIES TYPE REQUIRED # URL "https://api.kde.org/frameworks/kfilemetadata/html/index.html") find_package(FFmpeg) set_package_properties(FFmpeg PROPERTIES TYPE REQUIRED) # find_package(Libmpv) # set_package_properties(Libmpv PROPERTIES TYPE REQUIRED) # find_package(MpvQt) # set_package_properties(MpvQt PROPERTIES TYPE REQUIRED # URL "https://invent.kde.org/libraries/mpvqt") find_package(YouTubeDl) set_package_properties(YouTubeDl PROPERTIES TYPE RUNTIME) find_package(Ytdlp) set_package_properties(Ytdlp PROPERTIES TYPE RUNTIME) # find_program(XDG-DESKTOP-MENU_EXECUTABLE xdg-desktop-menu) # execute_process(COMMAND ${XDG-DESKTOP-MENU_EXECUTABLE} install --novender librepresenter.desktop) get_target_property(QMAKE Qt::qmake IMPORTED_LOCATION) find_package(Corrosion QUIET) if(NOT Corrosion_FOUND) include(FetchContent) FetchContent_Declare( Corrosion GIT_REPOSITORY https://github.com/corrosion-rs/corrosion.git GIT_TAG v0.3.0 ) FetchContent_MakeAvailable(Corrosion) endif() add_subdirectory(src) set(CRATE liblumina) # Corrosion creates a CMake target with the same name as the crate. corrosion_import_crate(MANIFEST_PATH Cargo.toml CRATES ${CRATE}) # The Rust library's build script needs to be told where to output the # generated headers so CMake can find them. To do this, tell Corrosion # to set the CXXQT_EXPORT_DIR environment variable when calling `cargo build`. # Also, set the QMAKE environment variable to ensure the Rust library uses # the same installation of Qt as CMake. set(CXXQT_EXPORT_DIR "${CMAKE_CURRENT_BINARY_DIR}/cxxqt") corrosion_set_env_vars(${CRATE} "CXXQT_EXPORT_DIR=${CXXQT_EXPORT_DIR}" "QMAKE=${QMAKE}" ) add_library(${APP_NAME}_lib INTERFACE) # Include the headers generated by the Rust library's build script. Each # crate gets its own subdirectory under CXXQT_EXPORT_DIR. This allows you # to include headers generated by multiple crates without risk of one crate # overwriting another's files. target_include_directories(${APP_NAME}_lib INTERFACE "${CXXQT_EXPORT_DIR}/${CRATE}") # Link the Rust INTERFACE library target to Qt. Do this on the library target # rather than the main executable. This way, CMake targets besides the main # executable which link the Rust library, for example tests, will also link Qt. target_link_libraries(${APP_NAME}_lib INTERFACE "$" Qt6::Quick Qt6::Qml Qt6::Gui Qt6::QuickControls2 Qt6::Widgets Qt6::Sql Qt6::WebEngineQuick KF6::Kirigami KF6::I18n KF6::CoreAddons # KF6::FileMetaData # MpvQt::MpvQt # mpv ssl crypto ) # Link to the Rust library target_link_libraries(${APP_NAME} PRIVATE ${APP_NAME}_lib) # If we are using a statically linked Qt then we need to import any qml plugins qt_import_qml_plugins(${APP_NAME}) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)