Christophe Giboudeaux 2022-05-01 12:28:09 +00:00 committed by Git OBS Bridge
parent 87afbe55a2
commit b54f244e90
8 changed files with 172 additions and 140 deletions

View File

@ -0,0 +1,39 @@
From 66475044c5ebed112d75cb51af925f9643b20d18 Mon Sep 17 00:00:00 2001
From: Christophe Giboudeaux <christophe@krop.fr>
Date: Sat, 30 Apr 2022 09:23:31 +0200
Subject: [PATCH] Find the local gmic library
GMic's working build system was replaced by a Makefile for unknown reasons
(the gmic author doesn't add messages to his commits).
To keep using CMake in gmic-qt, we need to teach it where the libgmic library is located.
---
gmic-qt/CMakeLists.txt | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/gmic-qt/CMakeLists.txt b/gmic-qt/CMakeLists.txt
index 3d4b109..fd360ba 100644
--- a/gmic-qt/CMakeLists.txt
+++ b/gmic-qt/CMakeLists.txt
@@ -119,6 +119,9 @@ if (NOT ENABLE_SYSTEM_GMIC)
if (NOT(${GMIC_VERSION} EQUAL ${CIMG_VERSION}))
message(FATAL_ERROR "\nVersion numbers of files 'gmic.h' (" ${GMIC_VERSION} ") and 'CImg.h' (" ${CIMG_VERSION} ") mismatch")
endif()
+
+ # find the 'gmic' library built using 'make lib' in the top folder
+ find_library(gmic NAMES gmic PATHS "${CMAKE_CURRENT_SOURCE_DIR}/../src")
endif()
@@ -567,7 +570,7 @@ if(ENABLE_DYNAMIC_LINKING)
set(CMAKE_SKIP_RPATH TRUE)
set(gmic_qt_LIBRARIES
${gmic_qt_LIBRARIES}
- "gmic"
+ ${gmic}
)
if (NOT ENABLE_SYSTEM_GMIC)
link_directories(${GMIC_LIB_PATH})
--
2.36.0

View File

@ -1,38 +0,0 @@
From de25bc1fab42ce294fbc0aa94f0cd0621491bf2e Mon Sep 17 00:00:00 2001
From: Christophe Giboudeaux <christophe@krop.fr>
Date: Mon, 7 Feb 2022 22:12:15 +0100
Subject: [PATCH] Remove unneeded CImg include
Build fails if CImg.h is included before gmic.h
---
src/gmic_cli.cpp | 1 -
src/gmic_libc.cpp | 1 -
2 files changed, 2 deletions(-)
diff --git a/src/gmic_cli.cpp b/src/gmic_cli.cpp
index b9ffa22..6d21160 100644
--- a/src/gmic_cli.cpp
+++ b/src/gmic_cli.cpp
@@ -49,7 +49,6 @@
*/
#include <signal.h>
-#include "CImg.h"
#include "gmic.h"
using namespace cimg_library;
diff --git a/src/gmic_libc.cpp b/src/gmic_libc.cpp
index 0736126..9aef11a 100644
--- a/src/gmic_libc.cpp
+++ b/src/gmic_libc.cpp
@@ -41,7 +41,6 @@
*/
#include <string>
-#include "CImg.h"
#include "gmic.h"
#include "gmic_libc.h"
--
2.35.1

View File

@ -1,3 +1,14 @@
-------------------------------------------------------------------
Fri Apr 29 06:37:52 UTC 2022 - Christophe Giboudeaux <christophe@krop.fr>
- Update to 3.1.0. No changelog.
- Rebase patches:
* krita5.patch
- Add patch to keep using CMake when building gmic-qt:
* 0001-Find-the-local-gmic-library.patch
- Drop patch, no longer needed:
* 0001-Remove-unneeded-CImg-include.patch
-------------------------------------------------------------------
Mon Feb 7 10:11:38 UTC 2022 - Christophe Giboudeaux <christophe@krop.fr>

View File

@ -35,12 +35,12 @@
%define hostapps gimp%{?gimp_suffix} krita
%endif
%define gmic_qt_options -DENABLE_SYSTEM_GMIC=OFF -DENABLE_DYNAMIC_LINKING=ON -DGMIC_PATH=%{_builddir}/%{name}-%{version}/src -DGMIC_LIB_PATH=%{_builddir}/%{name}-%{version}/build
%define gmic_qt_options -DENABLE_SYSTEM_GMIC=OFF -DENABLE_DYNAMIC_LINKING=ON
%define gmic_datadir %{_datadir}/gmic
Name: gmic
Version: 3.0.2
Version: 3.1.0
Release: 0
Summary: GREYC's Magick for Image Computing (denoise and others)
# gmic-qt is GPL-3.0-or-later, zart is CECILL-2.0, libgmic and cli program are
@ -50,25 +50,26 @@ Group: Productivity/Graphics/Bitmap Editors
URL: https://gmic.eu
# Git URL: https://github.com/dtschump/gmic
Source0: https://gmic.eu/files/source/gmic_%{version}.tar.gz
Source1: gmic_qt.png
# PATCH-FIX-UPSTREAM gmic-qt-make-it-work-without-gmic-cpp.patch - https://github.com/c-koi/gmic-qt/pull/134
Patch0: gmic-qt-make-it-work-without-gmic-cpp.patch
# PATCH-FIX-UPSTREAM krita.patch - Will be sent upstream soon. For now https://github.com/darix/gmic-qt/tree/krita5
Patch1: krita5.patch
# PATCH-FIX-UPSTREAM
Patch2: 0001-Remove-unneeded-CImg-include.patch
BuildRequires: cmake >= 3.14.0
BuildRequires: fftw3-threads-devel
# PATCH-FEATURE-OPENSUSE
Patch2: 0001-Find-the-local-gmic-library.patch
#
# BR for pkg_vcmp
# SECTION pkg_vcmp
#
# Those 2 are used for the pkg_vcmp conditionals above and also the rich expressions in the BuildRequires below
#
BuildRequires: gimp
BuildRequires: krita
#
#/BR for pkg_vcmp
# /SECTION
#
BuildRequires: cmake >= 3.14.0
BuildRequires: dos2unix
BuildRequires: fftw3-threads-devel
BuildRequires: hicolor-icon-theme
BuildRequires: pkgconfig
BuildRequires: update-desktop-files
BuildRequires: xorg-x11-devel
@ -86,8 +87,10 @@ BuildRequires: pkgconfig(GraphicsMagick++)
BuildRequires: pkgconfig(OpenEXR)
BuildRequires: pkgconfig(fftw3)
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(libheif)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(xcb-shm)
BuildRequires: pkgconfig(libtiff-4)
BuildRequires: pkgconfig(zlib)
# gmic first looks for opencv 4 and falls back to opencv 3 if not found.
@ -111,7 +114,7 @@ several different user interfaces to convert/manipulate/filter/visualize
generic image datasets, from 1d scalar signals to 3d+t sequences of
multi-spectral volumetric images.
%package -n libgmic1
%package -n libgmic3
Summary: Shared library that belongs to gmic
License: CECILL-2.1
Group: Productivity/Graphics/Bitmap Editors
@ -120,9 +123,9 @@ Group: Productivity/Graphics/Bitmap Editors
Summary: Header and library from gmic for use in other C++ projects
License: CECILL-2.1
Group: Development/Libraries/C and C++
Requires: libgmic1 = %{version}
Requires: libgmic3 = %{version}
%description -n libgmic1
%description -n libgmic3
Shared library allows you to use gmic functionality from other
programs.
@ -175,18 +178,25 @@ BuildArch: noarch
This package contains shared data files for the various gmic frontends.
%prep
%autosetup -p1
%setup -q
dos2unix src/{gmic_libc.*,use_libcgmic.c}
%autopatch -p1
%build
# Build gmic
%cmake \
-DENABLE_DYNAMIC_LINKING=ON \
-DBUILD_LIB_STATIC=OFF \
-DENABLE_OPENCV:BOOL=ON \
-DENABLE_XSHM:BOOL=ON
%cmake_build
# Starting with gmic 3.1.0, the gmic dev replaced their CMake build system with a non-configurable Makefile...
sed -i 's#LIB = lib#LIB = %{_lib}#' src/Makefile
cd ..
# Breaks compilation for a couple archs
sed -i 's#-mtune=generic##' src/Makefile
# Broken rpath
sed -i 's# -Wl,-rpath,.##' src/Makefile
# The file is moved post-install in a directory not owned by gimp
sed -i 's#/usr/lib/gimp/2.0/plug-ins#%{gmic_datadir}#' src/gmic_stdlib.gmic
EXTRA_CFLAGS='%{optflags}' NOSTRIP=1 make lib cli_shared
# Build gmic{_gimp|_krita}_qt
pushd gmic-qt
@ -213,7 +223,16 @@ cd ..
popd
%install
%cmake_install
DESTDIR=%{buildroot} make install
# As planned, only providing a Makefile partially works...
install -m 0644 src/CImg.h %{buildroot}%{_includedir}
# Install icons
for size in 16 32 48 64; do
install -Dm 0644 gmic-qt/icons/application/${size}-gmic_qt.png %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/gmic_qt.png
done
install -Dm 0644 gmic-qt/icons/application/gmic_qt.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/gmic_qt.svg
%if %{with krita5}
DESTDIR=%{buildroot} cmake --install gmic-qt/plugin-build
@ -222,19 +241,23 @@ DESTDIR=%{buildroot} cmake --install gmic-qt/plugin-build
install -m 0755 gmic-qt/build/gmic_krita_qt %{buildroot}%{_bindir}/gmic_krita_qt
%endif
install -D -m 0644 %{SOURCE1} %{buildroot}%{_datadir}/pixmaps/gmic_qt.png
%suse_update_desktop_file -c gmic_qt "G'Mic Qt" "G'MIC Qt GUI" "gmic_qt %%F" gmic_qt "Qt;Graphics;Photography;"
# Already installed in the hicolor namespace
rm %{buildroot}%{_datadir}/pixmaps/gmic_qt.png
# Film color lookup tables
install -d -m 0755 \
%{buildroot}%{_gimpplugindir} \
%{buildroot}%{gmic_datadir}/
# Move gmic plugins out of the gimp plugin dir
for file in gmic_cluts.gmz gmic_denoise_cnn.gmz ; do
install -m 0644 resources/${file} %{buildroot}%{gmic_datadir}/${file}
mv %{buildroot}%{_libdir}/gimp/2.0/plug-ins/${file} %{buildroot}%{gmic_datadir}/
done
# This manpage isn't translated
rm %{buildroot}%{_mandir}/fr/man1/gmic.1*
# qt_gmic
pushd gmic-qt
install -m 0755 build/gmic_qt %{buildroot}%{_bindir}/gmic_qt
@ -243,43 +266,40 @@ install -m 0755 build/gmic_qt %{buildroot}%{_bindir}/gmic_qt
install -m 0755 build/gmic_gimp_qt %{buildroot}%{_gimpplugindir}/gmic_gimp_qt
popd
%post -n libgmic1 -p /sbin/ldconfig
%postun -n libgmic1 -p /sbin/ldconfig
%post -n libgmic3 -p /sbin/ldconfig
%postun -n libgmic3 -p /sbin/ldconfig
%files
%license COPYING
%doc README gmic-qt/README.md
%{_bindir}/gmic
%{_bindir}/gmic_qt
%{_mandir}/man1/gmic.1%{?ext_man}
%{_datadir}/applications/gmic_qt.desktop
%{_datadir}/pixmaps/gmic_qt.png
%{_datadir}/icons/hicolor/*/apps/gmic_qt.png
%{_datadir}/icons/hicolor/scalable/apps/gmic_qt.svg
%files data
%license COPYING
%{gmic_datadir}/
%files -n gimp-plugin-gmic
%license COPYING
%{_gimpplugindir}/
%files -n krita-plugin-gmic
%license COPYING
%if %{with krita5}
%{_kf5_libdir}/kritaplugins/krita_gmic_qt.so
%else
%{_bindir}/gmic_krita_qt
%endif
%files -n libgmic1
%files -n libgmic3
%license COPYING
%{_libdir}/libgmic.so.*
%files -n libgmic-devel
%{_includedir}/CImg.h
%{_includedir}/gmic.h
%{_includedir}/gmic_libc.h
%{_libdir}/libgmic.so
%{_libdir}/cmake/gmic/
%files bash-completion
%dir %{_datadir}/bash-completion/completions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:68acec32c45d56fb0b0408acec4f63166171816d70722d63106787f1e7d17030
size 10458732

3
gmic_3.1.0.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f0d5ae484d43e385b028557b20242ceaf277ef76fab441c5a019f6c2aa3c30cf
size 10512767

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6c890c192d4419fce911df5fc04c0811fb79db7ed394023d3c1e65a0833e9539
size 249753

View File

@ -1,13 +1,13 @@
diff --git a/gmic-qt/CMakeLists.txt b/gmic-qt/CMakeLists.txt
index 8bba11e..6137f59 100644
index 61d2b9c..3d4b109 100644
--- a/gmic-qt/CMakeLists.txt
+++ b/gmic-qt/CMakeLists.txt
@@ -22,7 +22,7 @@ endif()
message("Build type is " ${CMAKE_BUILD_TYPE})
-set (GMIC_QT_HOST "gimp" CACHE STRING "Define for which host qmic-qt will be built: gimp, gimp3 (experimental), krita, none, paintdotnet or 8bf.")
+set (GMIC_QT_HOST "gimp" CACHE STRING "Define for which host qmic-qt will be built: gimp, gimp3 (experimental), krita, krita-plugin, none, paintdotnet or 8bf.")
-set (GMIC_QT_HOST "gimp" CACHE STRING "Define for which host gmic-qt will be built: gimp, gimp3 (experimental), krita, none, paintdotnet or 8bf.")
+set (GMIC_QT_HOST "gimp" CACHE STRING "Define for which host gmic-qt will be built: gimp, gimp3 (experimental), krita, krita-plugin, none, paintdotnet or 8bf.")
if (${GMIC_QT_HOST} STREQUAL "none")
message("Building standalone version.")
else()
@ -292,10 +292,10 @@ index 0a32a65..b12058d 100644
_grid->addWidget(_slider, row, 1, 1, 1);
_grid->addWidget(_spinBox, row, 2, 1, 1);
diff --git a/gmic-qt/src/FilterParameters/NoteParameter.cpp b/gmic-qt/src/FilterParameters/NoteParameter.cpp
index 34d3424..bd1df33 100644
index 3b71c19..24e7b58 100644
--- a/gmic-qt/src/FilterParameters/NoteParameter.cpp
+++ b/gmic-qt/src/FilterParameters/NoteParameter.cpp
@@ -87,14 +87,14 @@ bool NoteParameter::initFromText(const QString & filterName, const char * text,
@@ -87,14 +87,14 @@ bool NoteParameter::initFromText(const QString & /* filterName */, const char *
_text = list[1].trimmed(); // Notes are never translated
_text.remove(QRegExp("^\"")).remove(QRegExp("\"$")).replace(QString("\\\""), "\"");
_text.replace(QString("\\n"), "<br/>");
@ -313,7 +313,7 @@ index 34d3424..bd1df33 100644
_text.replace(QRegExp("foreground\\s*=\\s*\""), QString("style=\"color:"));
_text = HtmlTranslator::fromUtf8Escapes(_text);
diff --git a/gmic-qt/src/FilterParameters/SeparatorParameter.cpp b/gmic-qt/src/FilterParameters/SeparatorParameter.cpp
index 40347f7..941b280 100644
index 0bacffb..623b5d9 100644
--- a/gmic-qt/src/FilterParameters/SeparatorParameter.cpp
+++ b/gmic-qt/src/FilterParameters/SeparatorParameter.cpp
@@ -58,9 +58,11 @@ bool SeparatorParameter::addTo(QWidget * widget, int row)
@ -329,7 +329,7 @@ index 40347f7..941b280 100644
return true;
}
diff --git a/gmic-qt/src/FilterSelector/FiltersPresenter.cpp b/gmic-qt/src/FilterSelector/FiltersPresenter.cpp
index e39270f..18e722e 100644
index 5406eb1..2481bc2 100644
--- a/gmic-qt/src/FilterSelector/FiltersPresenter.cpp
+++ b/gmic-qt/src/FilterSelector/FiltersPresenter.cpp
@@ -416,7 +416,7 @@ void FiltersPresenter::expandFaveFolder()
@ -996,7 +996,7 @@ index e18f31f..8c6f8f2 100644
}
}
diff --git a/gmic-qt/src/MainWindow.cpp b/gmic-qt/src/MainWindow.cpp
index 33db6e4..9311901 100644
index d89aa7e..56b4bec 100644
--- a/gmic-qt/src/MainWindow.cpp
+++ b/gmic-qt/src/MainWindow.cpp
@@ -184,8 +184,12 @@ MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent), ui(new Ui::MainW
@ -1037,7 +1037,7 @@ index 33db6e4..9311901 100644
}
_filtersPresenter->toggleSelectionMode(withVisibility);
@@ -477,7 +483,7 @@ void MainWindow::onStartupFiltersUpdateFinished(int status)
@@ -478,7 +484,7 @@ void MainWindow::onStartupFiltersUpdateFinished(int status)
} else if (status == (int)Updater::UpdateStatus::NotNecessary) {
}
@ -1046,7 +1046,7 @@ index 33db6e4..9311901 100644
_gtkFavesShouldBeImported = false;
} else {
_gtkFavesShouldBeImported = askUserForGTKFavesImport();
@@ -494,7 +500,7 @@ void MainWindow::onStartupFiltersUpdateFinished(int status)
@@ -495,7 +501,7 @@ void MainWindow::onStartupFiltersUpdateFinished(int status)
}
// Retrieve and select previously selected filter
@ -1055,7 +1055,7 @@ index 33db6e4..9311901 100644
if (_newSession || !_lastExecutionOK) {
hash.clear();
}
@@ -559,7 +565,9 @@ void MainWindow::onEscapeKeyPressed()
@@ -560,7 +566,9 @@ void MainWindow::onEscapeKeyPressed()
} else {
_processor.cancel();
ui->previewWidget->displayOriginalImage();
@ -1065,7 +1065,7 @@ index 33db6e4..9311901 100644
}
}
}
@@ -671,7 +679,9 @@ void MainWindow::onPreviewUpdateRequested(bool synchronous)
@@ -672,7 +680,9 @@ void MainWindow::onPreviewUpdateRequested(bool synchronous)
ui->previewWidget->displayOriginalImage();
return;
}
@ -1075,7 +1075,7 @@ index 33db6e4..9311901 100644
const FiltersPresenter::Filter currentFilter = _filtersPresenter->currentFilter();
GmicProcessor::FilterContext context;
@@ -733,7 +743,9 @@ void MainWindow::onPreviewImageAvailable()
@@ -736,7 +746,9 @@ void MainWindow::onPreviewImageAvailable()
}
ui->previewWidget->setPreviewImage(_processor.previewImage());
ui->previewWidget->enableRightClick();
@ -1085,7 +1085,7 @@ index 33db6e4..9311901 100644
if (_pendingActionAfterCurrentProcessing == ProcessingAction::Close) {
close();
}
@@ -743,7 +755,9 @@ void MainWindow::onPreviewError(const QString & message)
@@ -746,7 +758,9 @@ void MainWindow::onPreviewError(const QString & message)
{
ui->previewWidget->setPreviewErrorMessage(message);
ui->previewWidget->enableRightClick();
@ -1095,7 +1095,7 @@ index 33db6e4..9311901 100644
if (_pendingActionAfterCurrentProcessing == ProcessingAction::Close) {
close();
}
@@ -969,7 +983,7 @@ void MainWindow::saveCurrentParameters()
@@ -973,7 +987,7 @@ void MainWindow::saveCurrentParameters()
void MainWindow::saveSettings()
{
@ -1104,7 +1104,7 @@ index 33db6e4..9311901 100644
_filtersPresenter->saveSettings(settings);
@@ -1010,7 +1024,7 @@ void MainWindow::saveSettings()
@@ -1014,7 +1028,7 @@ void MainWindow::saveSettings()
void MainWindow::loadSettings()
{
@ -1113,7 +1113,7 @@ index 33db6e4..9311901 100644
_filtersPresenter->loadSettings(settings);
_lastExecutionOK = settings.value("LastExecution/ExitedNormally", true).toBool();
@@ -1026,9 +1040,11 @@ void MainWindow::loadSettings()
@@ -1030,9 +1044,11 @@ void MainWindow::loadSettings()
if (settings.value("Config/PreviewPosition", "Left").toString() == "Left") {
setPreviewPosition(PreviewPosition::Left);
}
@ -1125,7 +1125,7 @@ index 33db6e4..9311901 100644
if (!DialogSettings::logosAreVisible()) {
ui->logosLabel->hide();
}
@@ -1068,7 +1084,7 @@ void MainWindow::loadSettings()
@@ -1072,7 +1088,7 @@ void MainWindow::loadSettings()
ui->splitter->setSizes(sizes);
}
@ -1134,7 +1134,7 @@ index 33db6e4..9311901 100644
}
void MainWindow::setPreviewPosition(MainWindow::PreviewPosition position)
@@ -1130,7 +1146,7 @@ void MainWindow::setPreviewPosition(MainWindow::PreviewPosition position)
@@ -1134,7 +1150,7 @@ void MainWindow::setPreviewPosition(MainWindow::PreviewPosition position)
void MainWindow::adjustVerticalSplitter()
{
QList<int> sizes;
@ -1143,7 +1143,7 @@ index 33db6e4..9311901 100644
sizes.push_back(settings.value(QString("Config/ParamsVerticalSplitterSizeTop"), -1).toInt());
sizes.push_back(settings.value(QString("Config/ParamsVerticalSplitterSizeBottom"), -1).toInt());
const int splitterHeight = ui->verticalSplitter->height();
@@ -1251,12 +1267,16 @@ void MainWindow::showEvent(QShowEvent * event)
@@ -1255,12 +1271,16 @@ void MainWindow::showEvent(QShowEvent * event)
Updater::setOutputMessageMode(DialogSettings::outputMessageMode());
int ageLimit;
{
@ -1162,7 +1162,7 @@ index 33db6e4..9311901 100644
}
void MainWindow::resizeEvent(QResizeEvent * e)
@@ -1273,17 +1293,19 @@ bool MainWindow::askUserForGTKFavesImport()
@@ -1277,17 +1297,19 @@ bool MainWindow::askUserForGTKFavesImport()
QMessageBox::Yes | QMessageBox::No, this);
messageBox.setDefaultButton(QMessageBox::Yes);
QCheckBox * cb = new QCheckBox(tr("Don't ask again"));
@ -1303,3 +1303,6 @@ index 8345152..17d8bb8 100644
<property name="title">
<string>Theme</string>
</property>
--
2.36.0