# ============================================================================= # Krita Git Master - Fedora Copr 版本 # 编译参数与 Arch PKGBUILD 完全一致 # ============================================================================= %global _pkgname krita # ----- bundled 库版本(与 Fedora 官方 spec 一致)----- %global zug_version 0.1.2 %global immer_version 0.9.1 %global lager_version 0.1.3 %global raqm_version 0.10.1 %global gmic_version 3.7.4.1 # ----- 动态版本号(PKGBUILD 风格)----- # 从 CMakeLists.txt 提取版本号,从 git 提取 commit 信息 %global krita_version_raw %(curl -sL https://invent.kde.org/graphics/krita/-/raw/master/CMakeLists.txt 2>/dev/null | grep KRITA_VERSION_STRING | tr ' "' '\n' | grep -E "^[0-9]+[.][0-9]+[.][0-9a-zA-Z._-]+$" | head -1 || echo 6.1.0) %global krita_version %(echo %{krita_version_raw} | sed 's/-/./g') # 由于 Copr 构建时无法直接执行 git 命令获取远程仓库信息, # 版本号格式简化为:VERSION.rYYYYMMDD.SHORTCOMMIT # 如需完整 rCOUNT 风格,建议在 %%prep 中动态计算并重新定义 %%version %global git_date %(date +%%Y%%m%%d) %global git_short %(curl -sL "https://invent.kde.org/api/v4/projects/graphics%2Fkrita/repository/commits?per_page=1" 2>/dev/null | grep -o '"short_id":"[^"]*"' | head -1 | cut -d'"' -f4 || echo unknown) # 默认启用 Python 插件支持 %bcond_without python Name: %{_pkgname}-git Version: 6.0git.r66651.%{git_short} Release: 1%{?dist} Summary: A full-featured free digital painting studio (Git master build) License: GPL-3.0-only URL: https://krita.org # 主源码:从 KDE GitLab 下载最新 master 快照 Source0: https://invent.kde.org/graphics/krita/-/archive/master/krita-master.tar.gz # bundled 库源码 Source1: https://v4.gh-proxy.org/https://github.com/arximboldi/zug/archive/v%{zug_version}/zug-%{zug_version}.tar.gz Source2: https://v4.gh-proxy.org/https://github.com/arximboldi/immer/archive/v%{immer_version}/immer-%{immer_version}.tar.gz Source3: https://v4.gh-proxy.org/https://github.com/arximboldi/lager/archive/v%{lager_version}/lager-%{lager_version}.tar.gz Source4: https://v4.gh-proxy.org/https://github.com/vanyossi/gmic/releases/download/v%{gmic_version}/gmic-%{gmic_version}.tar.gz ExcludeArch: %{ix86} BuildRequires: chrpath BuildRequires: gcc-c++ BuildRequires: extra-cmake-modules BuildRequires: kf6-rpm-macros BuildRequires: ninja-build BuildRequires: desktop-file-utils BuildRequires: libappstream-glib # KF6 BuildRequires: cmake(KF6Config) BuildRequires: cmake(KF6WidgetsAddons) BuildRequires: cmake(KF6Completion) BuildRequires: cmake(KF6CoreAddons) BuildRequires: cmake(KF6GuiAddons) BuildRequires: cmake(KF6I18n) BuildRequires: cmake(KF6ItemViews) BuildRequires: cmake(KF6ItemModels) BuildRequires: cmake(KF6ColorScheme) BuildRequires: cmake(KF6Crash) BuildRequires: cmake(KF6WindowSystem) BuildRequires: cmake(KF6DocTools) # Qt6 BuildRequires: cmake(Qt6Core) BuildRequires: cmake(Qt6Gui) BuildRequires: cmake(Qt6Widgets) BuildRequires: cmake(Qt6Xml) BuildRequires: cmake(Qt6Network) BuildRequires: cmake(Qt6PrintSupport) BuildRequires: cmake(Qt6Svg) BuildRequires: cmake(Qt6Test) BuildRequires: cmake(Qt6Concurrent) BuildRequires: cmake(Qt6Sql) BuildRequires: cmake(Qt6Core5Compat) BuildRequires: cmake(Qt6OpenGL) BuildRequires: cmake(Qt6OpenGLWidgets) BuildRequires: cmake(Qt6SvgWidgets) BuildRequires: cmake(Qt6WaylandClient) BuildRequires: cmake(Qt6CorePrivate) BuildRequires: cmake(Qt6GuiPrivate) BuildRequires: cmake(Qt6WaylandClientPrivate) BuildRequires: cmake(Qt6Quick) BuildRequires: cmake(Qt6QuickWidgets) BuildRequires: cmake(Qt6QuickControls2) BuildRequires: cmake(Qt6DBus) BuildRequires: cmake(Qt6LinguistTools) # X11 / Wayland BuildRequires: pkgconfig(xcb) BuildRequires: pkgconfig(xcb-util) BuildRequires: pkgconfig(xi) BuildRequires: pkgconfig(wayland-client) # Image formats BuildRequires: pkgconfig(libpng) BuildRequires: libtiff-devel BuildRequires: pkgconfig(libjpeg) BuildRequires: pkgconfig(libturbojpeg) BuildRequires: giflib-devel >= 5 BuildRequires: pkgconfig(libheif) BuildRequires: cmake(OpenJPEG) BuildRequires: pkgconfig(libjxl) BuildRequires: cmake(WebP) # Color / Math / Graphics BuildRequires: pkgconfig(gsl) BuildRequires: pkgconfig(fftw3) BuildRequires: cmake(OpenColorIO) BuildRequires: pkgconfig(lcms2) BuildRequires: cmake(Eigen3) BuildRequires: pkgconfig(xsimd) # Text / Font BuildRequires: pkgconfig(freetype2) BuildRequires: pkgconfig(harfbuzz) BuildRequires: pkgconfig(fontconfig) BuildRequires: pkgconfig(libunibreak) BuildRequires: pkgconfig(fribidi) >= 1.0.6 # Media / Metadata BuildRequires: cmake(Mlt7) BuildRequires: cmake(sdl2) BuildRequires: pkgconfig(exiv2) BuildRequires: pkgconfig(poppler-qt6) BuildRequires: cmake(QuaZip-Qt6) BuildRequires: cmake(KDcrawQt6) BuildRequires: pkgconfig(libmypaint) BuildRequires: cmake(kseexpr) # Misc BuildRequires: boost-devel BuildRequires: zlib-devel BuildRequires: pkgconfig(OpenEXR) BuildRequires: vulkan-headers # bundled 库构建依赖 BuildRequires: cmake(Catch2) BuildRequires: pkgconfig(libcurl) %if %{with python} BuildRequires: python3-devel BuildRequires: python3-pyqt6-devel BuildRequires: sip6 %endif Requires: hicolor-icon-theme Requires: ffmpeg %if %{with python} Requires: python3-pyqt6-base %endif Recommends: kf6-kimageformats Suggests: krita-plugin-gmic Provides: bundled(zug) = %{zug_version} Provides: bundled(immer) = %{immer_version} Provides: bundled(lager) = %{lager_version} Provides: bundled(CImg) = %{gmic_version} Provides: bundled(gmic) = %{gmic_version} Provides: %{_pkgname} = %{version}-%{release} Conflicts: %{_pkgname} %description Krita is a full-featured free digital painting studio. It is created for artists, illustrators, concept artists, and texture artists. This package is built from the latest Git master branch. %prep %setup -q -n krita-master -a 1 -a 2 -a 3 -a 4 # 修复 gmic 的 Qt5 引用 sed -i -e 's/lrelease-qt5/lrelease-qt6/g' \ %{_builddir}/krita-master/gmic-v%{gmic_version}/gmic-qt/translations/lrelease.sh # 动态计算完整版本号(替换 spec 头部预定义的简化版本) # 提取 CMakeLists.txt 中的版本 KRITA_VER=$(grep KRITA_VERSION_STRING CMakeLists.txt | tr ' "' '\n' | grep -E "^[0-9]+[.][0-9]+[.][0-9a-zA-Z._-]+$" | head -1 | sed 's/-/./g') # 提取 git commit 数量(近似值,从 master 分支估算) GIT_COUNT=$(git rev-list --count HEAD 2>/dev/null || echo 0) # 提取 short commit GIT_SHORT=$(git rev-parse --short=10 HEAD 2>/dev/null || echo unknown) # 重新定义版本(rpmbuild 不支持运行时修改 %%version,此处仅记录供参考) echo "Krita version: ${KRITA_VER}" echo "Git count: ${GIT_COUNT}" echo "Git short: ${GIT_SHORT}" %build # ----- 构建 zug ----- %cmake -Dzug_BUILD_EXAMPLES=FALSE \ -Dzug_BUILD_DOCS:BOOL=FALSE \ -B zug -S zug-%{zug_version}/ DESTDIR=$(pwd) cmake --install zug --prefix / # ----- 构建 immer ----- %cmake -Dimmer_BUILD_DOCS:BOOL=FALSE \ -Dimmer_BUILD_EXAMPLES:BOOL=FALSE \ -Dimmer_BUILD_EXTRAS:BOOL=FALSE \ -DDISABLE_WERROR:BOOL=TRUE \ -B immer -S immer-%{immer_version}/ DESTDIR=$(pwd) cmake --install immer --prefix / # ----- 构建 lager ----- %cmake -Dlager_BUILD_EXAMPLES:BOOL=FALSE \ -Dlager_BUILD_DEBUGGER_EXAMPLES:BOOL=FALSE \ -Dlager_BUILD_DOCS:BOOL=FALSE \ -DCMAKE_PREFIX_PATH=$(pwd) \ -B lager -S lager-%{lager_version}/ DESTDIR=$(pwd) cmake --install lager --prefix / # ----- 构建 Krita(参数与 PKGBUILD 完全一致)----- %cmake_kf6 -G Ninja \ -DCMAKE_PREFIX_PATH=$(pwd) \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=%{_lib} \ -DKRITA_DEVS=ON \ -DWITH_GIF=ON \ -DWITH_TIFF=ON \ -DWITH_OPENGL=ON \ -DBUILD_WITH_QT6=ON \ -DALLOW_UNSTABLE=QT6 \ -DBUILD_TESTING=OFF \ -DBUILD_KRITA_QT_DESIGNER_PLUGINS=ON %cmake_build # ----- 构建 gmic-qt 插件 ----- CXXFLAGS+=" -I$(pwd)/plugins/extensions/qmic" \ %cmake -DGMIC_QT_HOST=krita-plugin \ -DENABLE_SYSTEM_GMIC=FALSE \ -DKIS_IMAGE_INTERFACE_DIR="$(pwd)/%{__cmake_builddir}/plugins/extensions/qmic" \ -DKIS_IMAGE_INTERFACE_LIBRARY="$(pwd)/%{__cmake_builddir}/bin/libkritaqmicinterface.so" \ -B gmic-qt -S gmic-v%{gmic_version}/gmic-qt %__cmake --build gmic-qt %{_smp_mflags} --verbose %install %cmake_install # 安装 gmic-qt 插件 DESTDIR=%{buildroot} %__cmake --install gmic-qt # 清理 gmic 数据文件 rm -f %{buildroot}%{_datadir}/gmic/*.gmz # 移除 RPATH chrpath --delete %{buildroot}%{_libdir}/kritaplugins/krita_gmic_qt.so 2>/dev/null || : # 清理开发文件 %find_lang %{_pkgname} --all-name --with-html %check appstream-util validate-relax --nonet %{buildroot}%{_kf6_metainfodir}/org.kde.krita.appdata.xml || : desktop-file-validate %{buildroot}%{_kf6_datadir}/applications/org.kde.krita.desktop || : %files -f %{_pkgname}.lang %doc README.md %license COPYING* %{_kf6_bindir}/krita %{_kf6_bindir}/krita_version %{_kf6_libdir}/kritaplugins/ %{_kf6_libdir}/libkrita*.so.* %{_kf6_qmldir}/org/krita/ %{_kf6_metainfodir}/org.kde.krita.appdata.xml %{_kf6_datadir}/applications/org.kde.krita.desktop %{_kf6_datadir}/applications/krita*.desktop %{_kf6_datadir}/color-schemes/* %{_kf6_datadir}/color/icc/* %{_kf6_datadir}/icons/hicolor/*/*/* %{_kf6_datadir}/krita/ %{_kf6_datadir}/kritaplugins/ %if %{with python} %{_kf6_bindir}/kritarunner %{_kf6_libdir}/krita-python-libs/ %endif # 头文件(GMIC 插件接口) %{_includedir}/kis_qmic_interface.h %{_includedir}/kis_qmic_plugin_interface.h %{_includedir}/kritaqmicinterface_export.h # 库文件(开发符号链接和内部库) %{_libdir}/libkritabasicflakes.so %{_libdir}/libkritacolor.so %{_libdir}/libkritacommand.so %{_libdir}/libkritaexifcommon.so %{_libdir}/libkritaflake.so %{_libdir}/libkritaglobal.so %{_libdir}/libkritaimage.so %{_libdir}/libkritaimpex.so %{_libdir}/libkritalibbrush.so %{_libdir}/libkritalibkis.so %{_libdir}/libkritalibkra.so %{_libdir}/libkritalibpaintop.so %{_libdir}/libkritametadata.so %{_libdir}/libkritamultiarch.so %{_libdir}/libkritapigment.so %{_libdir}/libkritaplugin.so %{_libdir}/libkritapsd.so %{_libdir}/libkritapsdutils.so %{_libdir}/libkritaqmicinterface.so %{_libdir}/libkritaqmlwidgets.so %{_libdir}/libkritaresources.so %{_libdir}/libkritaresourcewidgets.so %{_libdir}/libkritastore.so %{_libdir}/libkritasurfacecolormanagementapi.so %{_libdir}/libkritatiffpsd.so %{_libdir}/libkritaui.so %{_libdir}/libkritaversion.so %{_libdir}/libkritawidgets.so %{_libdir}/libkritawidgetutils.so %changelog * Sat May 10 2026 Builder - %{version}-%{release} - Git master build for Fedora Copr - PKGBUILD-style compile flags - Bundled zug/immer/lager/gmic libraries