SHA256
1
0
forked from pool/gwenview5

Accepting request 662082 from home:StefanBruens:branches:X11:common:Factory

- Fix build with Exiv2 0.27
  Add 0001-Compile-more-files-with-enabled-exceptions-required-.patch
  Add 0002-Use-forward-declaration-for-Exiv2-Image-port-to-std-.patch

OBS-URL: https://build.opensuse.org/request/show/662082
OBS-URL: https://build.opensuse.org/package/show/KDE:Applications/gwenview5?expand=0&rev=122
This commit is contained in:
Luca Beltrame 2019-01-03 20:15:42 +00:00 committed by Git OBS Bridge
parent 372a125c44
commit 1bf84ee124
4 changed files with 497 additions and 0 deletions

View File

@ -0,0 +1,29 @@
From 1910e0409fd0b73a931f45389865c1e0a55a49e5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
Date: Sat, 29 Dec 2018 23:39:30 +0100
Subject: [PATCH 1/2] Compile more files with enabled exceptions, required for
exiv2 0.27
---
lib/CMakeLists.txt | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index d60ae47f..229eac2a 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -224,6 +224,11 @@ kde_source_files_enable_exceptions(
exiv2imageloader.cpp
imagemetainfomodel.cpp
timeutils.cpp
+ cms/cmsprofile.cpp
+ document/abstractdocumentimpl.cpp
+ document/document.cpp
+ document/loadingdocumentimpl.cpp
+ jpegcontent.cpp
)
ki18n_wrap_ui(gwenviewlib_SRCS
--
2.20.1

View File

@ -0,0 +1,455 @@
From 248b358495a3e5488fed4443d0dc135fbf604302 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
Date: Sun, 30 Dec 2018 02:46:28 +0100
Subject: [PATCH 2/2] Use forward declaration for Exiv2::Image, port to
std::unique_ptr
Instead of the Exiv2::Image::AutoPtr typedef just use a forward declaration
for Exiv2::Image, and use std::unique_ptr instead of std::auto_ptr.
The forward declaration avoids pulling in Exiv2 declarations everywhere,
e.g. via document.h.
Although it would be possible to use std::auto_ptr, unique_ptr is
preferable for two reasons:
- ownership transfer is explicit (std::move, release()/reset())
- Exiv2 0.28 will use std::unique_ptr as well, i.e. the code is forward
compatible.
---
lib/cms/cmsprofile.cpp | 3 +++
lib/cms/cmsprofile.h | 8 +++++---
lib/document/abstractdocumentimpl.cpp | 5 +++--
lib/document/abstractdocumentimpl.h | 7 ++++++-
lib/document/document.cpp | 7 +++++--
lib/document/document.h | 11 ++++++++---
lib/document/document_p.h | 10 +++++++++-
lib/document/loadingdocumentimpl.cpp | 7 +++++--
lib/exiv2imageloader.cpp | 13 ++++++-------
lib/exiv2imageloader.h | 11 ++++++++---
lib/jpegcontent.cpp | 10 +++++-----
lib/timeutils.cpp | 8 +++++---
tests/auto/cmsprofiletest.cpp | 4 ++--
tests/auto/imagemetainfomodeltest.cpp | 5 ++++-
14 files changed, 74 insertions(+), 35 deletions(-)
diff --git a/lib/cms/cmsprofile.cpp b/lib/cms/cmsprofile.cpp
index 188b90a4..7d2b753e 100644
--- a/lib/cms/cmsprofile.cpp
+++ b/lib/cms/cmsprofile.cpp
@@ -42,6 +42,9 @@ extern "C" {
// lcms
#include <lcms2.h>
+// Exiv2
+#include <exiv2/exiv2.hpp>
+
// X11
#ifdef HAVE_X11
#include <X11/Xlib.h>
diff --git a/lib/cms/cmsprofile.h b/lib/cms/cmsprofile.h
index a2a38a87..41abe97c 100644
--- a/lib/cms/cmsprofile.h
+++ b/lib/cms/cmsprofile.h
@@ -29,12 +29,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA
#include <QExplicitlySharedDataPointer>
#include <QSharedData>
-// Exiv2
-#include <exiv2/image.hpp>
-
class QByteArray;
class QString;
+namespace Exiv2
+{
+class Image;
+}
+
typedef void* cmsHPROFILE;
namespace Gwenview
diff --git a/lib/document/abstractdocumentimpl.cpp b/lib/document/abstractdocumentimpl.cpp
index d841ae5f..d3d0002c 100644
--- a/lib/document/abstractdocumentimpl.cpp
+++ b/lib/document/abstractdocumentimpl.cpp
@@ -21,6 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
// Self
#include "abstractdocumentimpl.h"
+#include <exiv2/exiv2.hpp>
// Qt
// KDE
@@ -77,9 +78,9 @@ void AbstractDocumentImpl::setDocumentKind(MimeTypeUtils::Kind kind)
d->mDocument->setKind(kind);
}
-void AbstractDocumentImpl::setDocumentExiv2Image(Exiv2::Image::AutoPtr image)
+void AbstractDocumentImpl::setDocumentExiv2Image(std::unique_ptr<Exiv2::Image> image)
{
- d->mDocument->setExiv2Image(image);
+ d->mDocument->setExiv2Image(std::move(image));
}
void AbstractDocumentImpl::setDocumentDownSampledImage(const QImage& image, int invertedZoom)
diff --git a/lib/document/abstractdocumentimpl.h b/lib/document/abstractdocumentimpl.h
index 1f427e60..86e6bfd2 100644
--- a/lib/document/abstractdocumentimpl.h
+++ b/lib/document/abstractdocumentimpl.h
@@ -34,6 +34,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class QImage;
class QRect;
+namespace Exiv2
+{
+ class Image;
+}
+
namespace Gwenview
{
@@ -108,7 +113,7 @@ protected:
void setDocumentImageSize(const QSize& size);
void setDocumentKind(MimeTypeUtils::Kind);
void setDocumentFormat(const QByteArray& format);
- void setDocumentExiv2Image(Exiv2::Image::AutoPtr);
+ void setDocumentExiv2Image(std::unique_ptr<Exiv2::Image>);
void setDocumentDownSampledImage(const QImage&, int invertedZoom);
void setDocumentCmsProfile(Cms::Profile::Ptr profile);
void setDocumentErrorString(const QString&);
diff --git a/lib/document/document.cpp b/lib/document/document.cpp
index 18756700..afa9ed03 100644
--- a/lib/document/document.cpp
+++ b/lib/document/document.cpp
@@ -31,6 +31,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <KLocalizedString>
#include <KJobUiDelegate>
+// Exiv2
+#include <exiv2/exiv2.hpp>
+
// Local
#include "documentjob.h"
#include "emptydocumentimpl.h"
@@ -388,9 +391,9 @@ AbstractDocumentEditor* Document::editor()
return d->mImpl->editor();
}
-void Document::setExiv2Image(Exiv2::Image::AutoPtr image)
+void Document::setExiv2Image(std::unique_ptr<Exiv2::Image> image)
{
- d->mExiv2Image = image;
+ d->mExiv2Image = std::move(image);
d->mImageMetaInfoModel.setExiv2Image(d->mExiv2Image.get());
emit metaInfoUpdated();
}
diff --git a/lib/document/document.h b/lib/document/document.h
index c0bb454b..4b40a6e1 100644
--- a/lib/document/document.h
+++ b/lib/document/document.h
@@ -22,8 +22,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <lib/gwenviewlib_export.h>
-#include <string.h>
-#include <exiv2/image.hpp>
+// STL
+#include <memory>
// Qt
#include <QObject>
@@ -43,6 +43,11 @@ class QUndoStack;
class KJob;
class QUrl;
+namespace Exiv2
+{
+ class Image;
+}
+
namespace Gwenview
{
@@ -235,7 +240,7 @@ private:
void setKind(MimeTypeUtils::Kind);
void setFormat(const QByteArray&);
void setSize(const QSize&);
- void setExiv2Image(Exiv2::Image::AutoPtr);
+ void setExiv2Image(std::unique_ptr<Exiv2::Image>);
void setDownSampledImage(const QImage&, int invertedZoom);
void switchToImpl(AbstractDocumentImpl* impl);
void setErrorString(const QString&);
diff --git a/lib/document/document_p.h b/lib/document/document_p.h
index 78e0ac6e..4de25f15 100644
--- a/lib/document/document_p.h
+++ b/lib/document/document_p.h
@@ -21,6 +21,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA
#ifndef DOCUMENT_P_H
#define DOCUMENT_P_H
+// STL
+#include <memory>
+
// Local
#include <imagemetainfomodel.h>
#include <document/documentjob.h>
@@ -34,6 +37,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA
#include <QUndoStack>
#include <QPointer>
+namespace Exiv2
+{
+ class Image;
+}
+
namespace Gwenview
{
@@ -54,7 +62,7 @@ struct DocumentPrivate
QSize mSize;
QImage mImage;
QMap<int, QImage> mDownSampledImageMap;
- Exiv2::Image::AutoPtr mExiv2Image;
+ std::unique_ptr<Exiv2::Image> mExiv2Image;
MimeTypeUtils::Kind mKind;
QByteArray mFormat;
ImageMetaInfoModel mImageMetaInfoModel;
diff --git a/lib/document/loadingdocumentimpl.cpp b/lib/document/loadingdocumentimpl.cpp
index 07675783..766a1831 100644
--- a/lib/document/loadingdocumentimpl.cpp
+++ b/lib/document/loadingdocumentimpl.cpp
@@ -24,6 +24,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
// STL
#include <memory>
+// Exiv2
+#include <exiv2/exiv2.hpp>
+
// Qt
#include <QBuffer>
#include <QByteArray>
@@ -100,7 +103,7 @@ struct LoadingDocumentImplPrivate
QByteArray mData;
QByteArray mFormat;
QSize mImageSize;
- Exiv2::Image::AutoPtr mExiv2Image;
+ std::unique_ptr<Exiv2::Image> mExiv2Image;
std::unique_ptr<JpegContent> mJpegContent;
QImage mImage;
Cms::Profile::Ptr mCmsProfile;
@@ -486,7 +489,7 @@ void LoadingDocumentImpl::slotMetaInfoLoaded()
setDocumentFormat(d->mFormat);
setDocumentImageSize(d->mImageSize);
- setDocumentExiv2Image(d->mExiv2Image);
+ setDocumentExiv2Image(std::move(d->mExiv2Image));
setDocumentCmsProfile(d->mCmsProfile);
d->mMetaInfoLoaded = true;
diff --git a/lib/exiv2imageloader.cpp b/lib/exiv2imageloader.cpp
index f2830f81..f13dff7a 100644
--- a/lib/exiv2imageloader.cpp
+++ b/lib/exiv2imageloader.cpp
@@ -29,8 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
// KDE
// Exiv2
-#include <exiv2/error.hpp>
-#include <exiv2/types.hpp>
+#include <exiv2/exiv2.hpp>
// Local
@@ -39,7 +38,7 @@ namespace Gwenview
struct Exiv2ImageLoaderPrivate
{
- Exiv2::Image::AutoPtr mImage;
+ std::unique_ptr<Exiv2::Image> mImage;
QString mErrorMessage;
};
@@ -57,7 +56,7 @@ bool Exiv2ImageLoader::load(const QString& filePath)
{
QByteArray filePathByteArray = QFile::encodeName(filePath);
try {
- d->mImage = Exiv2::ImageFactory::open(filePathByteArray.constData());
+ d->mImage.reset(Exiv2::ImageFactory::open(filePathByteArray.constData()).release());
d->mImage->readMetadata();
} catch (const Exiv2::Error& error) {
d->mErrorMessage = QString::fromUtf8(error.what());
@@ -69,7 +68,7 @@ bool Exiv2ImageLoader::load(const QString& filePath)
bool Exiv2ImageLoader::load(const QByteArray& data)
{
try {
- d->mImage = Exiv2::ImageFactory::open((unsigned char*)data.constData(), data.size());
+ d->mImage.reset(Exiv2::ImageFactory::open((unsigned char*)data.constData(), data.size()).release());
d->mImage->readMetadata();
} catch (const Exiv2::Error& error) {
d->mErrorMessage = QString::fromUtf8(error.what());
@@ -83,9 +82,9 @@ QString Exiv2ImageLoader::errorMessage() const
return d->mErrorMessage;
}
-Exiv2::Image::AutoPtr Exiv2ImageLoader::popImage()
+std::unique_ptr<Exiv2::Image> Exiv2ImageLoader::popImage()
{
- return d->mImage;
+ return std::move(d->mImage);
}
} // namespace
diff --git a/lib/exiv2imageloader.h b/lib/exiv2imageloader.h
index 57ef24d2..12a45b68 100644
--- a/lib/exiv2imageloader.h
+++ b/lib/exiv2imageloader.h
@@ -23,13 +23,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <lib/gwenviewlib_export.h>
+// STL
+#include <memory>
+
// Qt
// KDE
// Exiv2
-#include <string.h>
-#include <exiv2/image.hpp>
+namespace Exiv2
+{
+ class Image;
+}
// Local
@@ -54,7 +59,7 @@ public:
bool load(const QString&);
bool load(const QByteArray&);
QString errorMessage() const;
- Exiv2::Image::AutoPtr popImage();
+ std::unique_ptr<Exiv2::Image> popImage();
private:
Exiv2ImageLoaderPrivate* const d;
diff --git a/lib/jpegcontent.cpp b/lib/jpegcontent.cpp
index bb810dd4..a8cf909f 100644
--- a/lib/jpegcontent.cpp
+++ b/lib/jpegcontent.cpp
@@ -42,8 +42,7 @@ extern "C" {
#include <KLocalizedString>
// Exiv2
-#include <exiv2/exif.hpp>
-#include <exiv2/image.hpp>
+#include <exiv2/exiv2.hpp>
// Local
#include "jpegerrormanager.h"
@@ -216,12 +215,12 @@ bool JpegContent::load(const QString& path)
bool JpegContent::loadFromData(const QByteArray& data)
{
- Exiv2::Image::AutoPtr image;
+ std::unique_ptr<Exiv2::Image> image;
Exiv2ImageLoader loader;
if (!loader.load(data)) {
qCritical() << "Could not load image with Exiv2, reported error:" << loader.errorMessage();
}
- image = loader.popImage();
+ image.reset(loader.popImage().release());
return loadFromData(data, image.get());
}
@@ -603,7 +602,8 @@ bool JpegContent::save(QIODevice* device)
d->mPendingTransformation = false;
}
- Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((unsigned char*)d->mRawData.data(), d->mRawData.size());
+ std::unique_ptr<Exiv2::Image> image;
+ image.reset(Exiv2::ImageFactory::open((unsigned char*)d->mRawData.data(), d->mRawData.size()).release());
// Store Exif info
image->setExifData(d->mExifData);
diff --git a/lib/timeutils.cpp b/lib/timeutils.cpp
index 9e8836a9..3c519098 100644
--- a/lib/timeutils.cpp
+++ b/lib/timeutils.cpp
@@ -21,6 +21,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA
// Self
#include "timeutils.h"
+// STL
+#include <memory>
+
// Qt
#include <QFile>
#include <QDateTime>
@@ -30,8 +33,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA
#include <KFileItem>
// Exiv2
-#include <exiv2/exif.hpp>
-#include <exiv2/image.hpp>
+#include <exiv2/exiv2.hpp>
// Local
#include <lib/exiv2imageloader.h>
@@ -92,7 +94,7 @@ struct CacheItem
if (!loader.load(path)) {
return false;
}
- Exiv2::Image::AutoPtr img = loader.popImage();
+ std::unique_ptr<Exiv2::Image> img(loader.popImage().release());
try {
Exiv2::ExifData exifData = img->exifData();
if (exifData.empty()) {
diff --git a/tests/auto/cmsprofiletest.cpp b/tests/auto/cmsprofiletest.cpp
index 4efc441b..f4c7f9e5 100644
--- a/tests/auto/cmsprofiletest.cpp
+++ b/tests/auto/cmsprofiletest.cpp
@@ -69,7 +69,7 @@ void CmsProfileTest::testLoadFromImageData_data()
void CmsProfileTest::testLoadFromExiv2Image()
{
QFETCH(QString, fileName);
- Exiv2::Image::AutoPtr image;
+ std::unique_ptr<Exiv2::Image> image;
{
QByteArray data;
QString path = pathForTestFile(fileName);
@@ -80,7 +80,7 @@ void CmsProfileTest::testLoadFromExiv2Image()
Exiv2ImageLoader loader;
QVERIFY(loader.load(data));
- image = loader.popImage();
+ image.reset(loader.popImage().release());
}
Cms::Profile::Ptr ptr = Cms::Profile::loadFromExiv2Image(image.get());
QVERIFY(!ptr.isNull());
diff --git a/tests/auto/imagemetainfomodeltest.cpp b/tests/auto/imagemetainfomodeltest.cpp
index e3ec8d30..2e569dba 100644
--- a/tests/auto/imagemetainfomodeltest.cpp
+++ b/tests/auto/imagemetainfomodeltest.cpp
@@ -17,6 +17,9 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+#include <memory>
+
// Qt
// KDE
@@ -46,7 +49,7 @@ void ImageMetaInfoModelTest::testCatchExiv2Errors()
data = file.readAll();
}
- Exiv2::Image::AutoPtr image;
+ std::unique_ptr<Exiv2::Image> image;
{
Exiv2ImageLoader loader;
QVERIFY(loader.load(data));
--
2.20.1

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Sat Dec 29 23:52:42 UTC 2018 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Fix build with Exiv2 0.27
Add 0001-Compile-more-files-with-enabled-exceptions-required-.patch
Add 0002-Use-forward-declaration-for-Exiv2-Image-port-to-std-.patch
-------------------------------------------------------------------
Fri Dec 14 06:08:55 UTC 2018 - lbeltrame@kde.org

View File

@ -28,6 +28,10 @@ License: GPL-2.0-or-later
Group: Productivity/Graphics/Viewers
URL: http://www.kde.org
Source: gwenview-%{version}.tar.xz
# PATCH-FIX-UPSTREAM - D17873
Patch0: 0001-Compile-more-files-with-enabled-exceptions-required-.patch
# PATCH-FIX-UPSTREAM - D17872
Patch1: 0002-Use-forward-declaration-for-Exiv2-Image-port-to-std-.patch
BuildRequires: baloo5-devel
BuildRequires: cfitsio-devel
BuildRequires: extra-cmake-modules >= %{kf5_version}
@ -77,6 +81,8 @@ hierarchies.
%prep
%setup -q -n gwenview-%{version}
%patch0 -p1
%patch1 -p1
%build
%if 0%{?suse_version} < 1330