# SPDX-FileCopyrightText: 2026 ahouts
# SPDX-License-Identifier: GPL-2.0-or-later
cmake_minimum_required(VERSION 3.29)
project(slugrewrite-plugin VERSION 1.0.0)
set(KF_MIN_VERSION "6.22.0")
set(QT_REQUIRED_VERSION "6.9.0")
find_package(ECM ${KF_MIN_VERSION} CONFIG REQUIRED)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(ECMQtDeclareLoggingCategory)
find_package(Qt6 ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS WebEngineWidgets Widgets)
find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS I18n ConfigWidgets CoreAddons)
find_package(KPim6WebEngineViewer CONFIG REQUIRED)
find_package(KPim6MessageViewer CONFIG REQUIRED)
find_package(KPim6PimCommon CONFIG REQUIRED)
find_package(Corrosion CONFIG REQUIRED)
# Rust crate
add_custom_target(
slugrewrite_rs
SOURCES
rs/slugrewrite/Cargo.toml
rs/slugrewrite/build.rs
rs/slugrewrite/src/lib.rs
rs/slugrewrite/src/slugrewrite.rs
)
corrosion_import_crate(MANIFEST_PATH ${CMAKE_CURRENT_SOURCE_DIR}/rs/slugrewrite/Cargo.toml)
# CXX bridge include path (version-dependent, same pattern as kdepim-addons adblock)
if(Corrosion_VERSION VERSION_LESS 0.6.0)
set(corrosion_build_dir "build")
else()
string(SHA1 cargo_path_hash ${CMAKE_CURRENT_SOURCE_DIR}/rs/slugrewrite/Cargo.toml)
string(SUBSTRING "${cargo_path_hash}" 0 5 cargo_path_hash)
set(corrosion_build_dir "slugrewrite_${cargo_path_hash}")
endif()
# Plugin target
kcoreaddons_add_plugin(webengineviewer_slugrewriteplugin
INSTALL_NAMESPACE pim6/webengineviewer/urlinterceptor
)
target_sources(
webengineviewer_slugrewriteplugin
PRIVATE
slugrewritepluginurlinterceptor.h
slugrewritepluginurlinterceptor.cpp
slugrewriteinterceptorinterface.h
slugrewriteinterceptorinterface.cpp
slugrewriteengine.h
slugrewriteengine.cpp
slugrewriteconfiguredialog.h
slugrewriteconfiguredialog.cpp
slugrewriteconfigurewidget.h
slugrewriteconfigurewidget.cpp
slugrewriteruledialog.h
slugrewriteruledialog.cpp
)
kconfig_add_kcfg_files(webengineviewer_slugrewriteplugin
settings/slugrewritesettings.kcfgc
)
ecm_qt_declare_logging_category(webengineviewer_slugrewriteplugin
HEADER slugrewriteinterceptor_debug.h
IDENTIFIER SLUGREWRITEINTERCEPTOR_LOG
CATEGORY_NAME org.kde.pim.slugrewriteinterceptor
DESCRIPTION "slugrewrite url interceptor plugin"
)
target_include_directories(
webengineviewer_slugrewriteplugin
PRIVATE
${CMAKE_BINARY_DIR}/cargo/${corrosion_build_dir}/${Rust_CARGO_TARGET}/cxxbridge/webengineviewer-slugrewrite/src/
)
target_link_libraries(
webengineviewer_slugrewriteplugin
KPim6::MessageViewer
KPim6::WebEngineViewer
KPim6::PimCommon
KF6::I18n
KF6::ConfigWidgets
KF6::CoreAddons
Qt::WebEngineWidgets
)
# Link Rust static lib (target name depends on Corrosion version)
if(Corrosion_VERSION VERSION_LESS 0.5.0)
target_link_libraries(webengineviewer_slugrewriteplugin webengineviewer-slugrewrite)
else()
target_link_libraries(webengineviewer_slugrewriteplugin webengineviewer_slugrewrite)
endif()