File Fix-build-with-exiv2-0.28.patch of Package calligra4

diff --git a/krita/plugins/formats/jpeg/kis_jpeg_converter.cc b/krita/plugins/formats/jpeg/kis_jpeg_converter.cc
--- a/krita/plugins/formats/jpeg/kis_jpeg_converter.cc
+++ b/krita/plugins/formats/jpeg/kis_jpeg_converter.cc
@@ -33,6 +33,10 @@ extern "C" {
 }
 
 #include <exiv2/jpgimage.hpp>
+#include <exiv2/version.hpp>
+#if EXIV2_TEST_VERSION(0,28,0)
+#include <exiv2/photoshop.hpp>
+#endif
 
 #include <QFile>
 #include <QBuffer>
@@ -374,7 +378,11 @@ KisImportExportErrorCode KisJPEGConverter::decode(QIODevice *io)
         uint32_t sizeHdr = 0;
         // Find actual Iptc data within the APP13 segment
         if (!Exiv2::Photoshop::locateIptcIrb((Exiv2::byte*)(marker->data + 14),
+#if EXIV2_TEST_VERSION(0,28,0)
+                                             marker->data_length - 14, &record, sizeHdr, sizeIptc)) {
+#else
                                              marker->data_length - 14, &record, &sizeHdr, &sizeIptc)) {
+#endif
             if (sizeIptc) {
                 // Decode the IPTC data
                 QByteArray byteArray((const char*)(record + sizeHdr), sizeIptc);
diff --git a/krita/ui/kisexiv2/kis_exiv2.h b/krita/ui/kisexiv2/kis_exiv2.h
--- a/krita/ui/kisexiv2/kis_exiv2.h
+++ b/krita/ui/kisexiv2/kis_exiv2.h
@@ -25,7 +25,11 @@ extern "C" {
 #include "kritaui_export.h"
 
 /// Convert an exiv value to a KisMetaData value
+#if EXIV2_TEST_VERSION(0,28,0)
+KisMetaData::Value exivValueToKMDValue(const Exiv2::Value::UniquePtr value, bool forceSeq, KisMetaData::Value::ValueType arrayType = KisMetaData::Value::UnorderedArray);
+#else
 KisMetaData::Value exivValueToKMDValue(const Exiv2::Value::AutoPtr value, bool forceSeq, KisMetaData::Value::ValueType arrayType = KisMetaData::Value::UnorderedArray);
+#endif
 
 /// Convert a KisMetaData to an Exiv value
 Exiv2::Value* kmdValueToExivValue(const KisMetaData::Value& value, Exiv2::TypeId type);
diff --git a/krita/ui/kisexiv2/kis_exif_io.cpp b/krita/ui/kisexiv2/kis_exif_io.cpp
--- a/krita/ui/kisexiv2/kis_exif_io.cpp
+++ b/krita/ui/kisexiv2/kis_exif_io.cpp
@@ -46,7 +46,11 @@ extern "C" {
 // ---- Exception convertion functions ---- //
 
 // convert ExifVersion and FlashpixVersion to a KisMetaData value
+#if EXIV2_TEST_VERSION(0,28,0)
+KisMetaData::Value exifVersionToKMDValue(const Exiv2::Value::UniquePtr value)
+#else
 KisMetaData::Value exifVersionToKMDValue(const Exiv2::Value::AutoPtr value)
+#endif
 {
     const Exiv2::DataValue* dvalue = dynamic_cast<const Exiv2::DataValue*>(&*value);
     if(dvalue)
@@ -71,7 +75,11 @@ Exiv2::Value* kmdValueToExifVersion(const KisMetaData::Value& value)
 }
 
 // Convert an exif array of integer string to a KisMetaData array of integer
+#if EXIV2_TEST_VERSION(0,28,0)
+KisMetaData::Value exifArrayToKMDIntOrderedArray(const Exiv2::Value::UniquePtr value)
+#else
 KisMetaData::Value exifArrayToKMDIntOrderedArray(const Exiv2::Value::AutoPtr value)
+#endif
 {
     QList<KisMetaData::Value> v;
     const Exiv2::DataValue* dvalue = dynamic_cast<const Exiv2::DataValue*>(&*value);
@@ -81,7 +94,11 @@ Exiv2::Value* kmdIntOrderedArrayToExifArray(const KisMetaData::Value& value)
     return new Exiv2::DataValue((const Exiv2::byte*)s.data(), s.size());
 }
 
+#if EXIV2_TEST_VERSION(0,28,0)
+QDateTime exivValueToDateTime(const Exiv2::Value::UniquePtr value)
+#else
 QDateTime exivValueToDateTime(const Exiv2::Value::AutoPtr value)
+#endif
 {
     return QDateTime::fromString(value->toString().c_str(), Qt::ISODate);
 }
@@ -138,7 +150,11 @@ Exiv2::ByteOrder invertByteOrder(Exiv2::ByteOrder order)
 }
 
 
+#if EXIV2_TEST_VERSION(0,28,0)
+KisMetaData::Value exifOECFToKMDOECFStructure(const Exiv2::Value::UniquePtr value, Exiv2::ByteOrder order)
+#else
 KisMetaData::Value exifOECFToKMDOECFStructure(const Exiv2::Value::AutoPtr value, Exiv2::ByteOrder order)
+#endif
 {
     QMap<QString, KisMetaData::Value> oecfStructure;
     const Exiv2::DataValue* dvalue = dynamic_cast<const Exiv2::DataValue*>(&*value);
@@ -146,19 +162,36 @@ KisMetaData::Value exifOECFToKMDOECFStructure(const Exiv2::Value::AutoPtr value,
     QByteArray array(dvalue->count(), 0);
     dvalue->copy((Exiv2::byte*)array.data());
+#if EXIV2_TEST_VERSION(0,28,0)
+    size_t columns = fixEndianess<QIntegerForSizeof<std::size_t>::Signed>((reinterpret_cast<QIntegerForSizeof<std::size_t>::Signed *>(array.data()))[0], order);
+    size_t rows = fixEndianess<QIntegerForSizeof<std::size_t>::Signed>((reinterpret_cast<QIntegerForSizeof<std::size_t>::Signed *>(array.data()))[1], order);
+#else
     int columns = fixEndianess<quint16>((reinterpret_cast<quint16*>(array.data()))[0], order);
     int rows = fixEndianess<quint16>((reinterpret_cast<quint16*>(array.data()))[1], order);
+#endif
 
     if ((columns * rows + 4) > dvalue->count()) { // Sometime byteOrder get messed up (especially if metadata got saved with kexiv2 library, or any library that doesn't save back with the same byte order as the camera)
         order = invertByteOrder(order);
+#if EXIV2_TEST_VERSION(0,28,0)
+        columns = fixEndianess<QIntegerForSizeof<std::size_t>::Signed>((reinterpret_cast<QIntegerForSizeof<std::size_t>::Signed *>(array.data()))[0], order);
+        rows = fixEndianess<QIntegerForSizeof<std::size_t>::Signed>((reinterpret_cast<QIntegerForSizeof<std::size_t>::Signed *>(array.data()))[1], order);
+#else
         columns = fixEndianess<quint16>((reinterpret_cast<quint16*>(array.data()))[0], order);
         rows = fixEndianess<quint16>((reinterpret_cast<quint16*>(array.data()))[1], order);
+#endif
         Q_ASSERT((columns * rows + 4) > dvalue->count());
     }
-    oecfStructure["Columns"] = KisMetaData::Value(columns);
-    oecfStructure["Rows"] = KisMetaData::Value(rows);
+    QVariant qcolumns, qrows;
+    qcolumns.setValue(columns);
+    qrows.setValue(rows);
+    oecfStructure["Columns"] = KisMetaData::Value(qcolumns);
+    oecfStructure["Rows"] = KisMetaData::Value(qrows);
     int index = 4;
     QList<KisMetaData::Value> names;
+#if EXIV2_TEST_VERSION(0,28,0)
+    for (size_t i = 0; i < columns; i++) {
+#else
     for (int i = 0; i < columns; i++) {
+#endif
         int lastIndex = array.indexOf((char)0, index);
         QString name = array.mid(index, lastIndex - index);
         if (index != lastIndex) {
@@ -172,8 +205,13 @@ KisMetaData::Value exifOECFToKMDOECFStructure(const Exiv2::Value::AutoPtr value,
     oecfStructure["Names"] = KisMetaData::Value(names, KisMetaData::Value::OrderedArray);
     QList<KisMetaData::Value> values;
     qint16* dataIt = reinterpret_cast<qint16*>(array.data() + index);
+#if EXIV2_TEST_VERSION(0,28,0)
+    for (size_t i = 0; i < columns; i++) {
+        for (size_t j = 0; j < rows; j++) {
+#else
     for (int i = 0; i < columns; i++) {
         for (int j = 0; j < rows; j++) {
+#endif
             values.append(KisMetaData::Value(KisMetaData::Rational(fixEndianess<qint32>(dataIt[0], order), fixEndianess<qint32>(dataIt[1], order))));
             dataIt += 8;
         }
@@ -221,7 +259,11 @@ Exiv2::Value *kmdOECFStructureToExifOECF(const KisMetaData::Value& value)
     return new Exiv2::DataValue((const Exiv2::byte*)array.data(), array.size());
 }
 
+#if EXIV2_TEST_VERSION(0,28,0)
+KisMetaData::Value deviceSettingDescriptionExifToKMD(const Exiv2::Value::UniquePtr value)
+#else
 KisMetaData::Value deviceSettingDescriptionExifToKMD(const Exiv2::Value::AutoPtr value)
+#endif
 {
     QMap<QString, KisMetaData::Value> deviceSettingStructure;
     QByteArray array;
@@ -275,15 +317,24 @@ Exiv2::Value *deviceSettingDescriptionKMDToExif(const KisMetaData::Value& value)
     return new Exiv2::DataValue((const Exiv2::byte*)array.data(), array.size());
 }
 
+#if EXIV2_TEST_VERSION(0,28,0)
+KisMetaData::Value cfaPatternExifToKMD(const Exiv2::Value::UniquePtr value, Exiv2::ByteOrder order)
+#else
 KisMetaData::Value cfaPatternExifToKMD(const Exiv2::Value::AutoPtr value, Exiv2::ByteOrder order)
+#endif
 {
     QMap<QString, KisMetaData::Value> cfaPatternStructure;
     const Exiv2::DataValue* dvalue = dynamic_cast<const Exiv2::DataValue*>(&*value);
     Q_ASSERT(dvalue);
     QByteArray array(dvalue->count(), 0);
     dvalue->copy((Exiv2::byte*)array.data());
+#if EXIV2_TEST_VERSION(0,28,0)
+    size_t columns = fixEndianess<QIntegerForSizeof<std::size_t>::Signed>((reinterpret_cast<QIntegerForSizeof<std::size_t>::Signed *>(array.data()))[0], order);
+    size_t rows = fixEndianess<QIntegerForSizeof<std::size_t>::Signed>((reinterpret_cast<QIntegerForSizeof<std::size_t>::Signed *>(array.data()))[1], order);
+#else
     int columns = fixEndianess<quint16>((reinterpret_cast<quint16*>(array.data()))[0], order);
     int rows = fixEndianess<quint16>((reinterpret_cast<quint16*>(array.data()))[1], order);
+#endif
     if ((columns * rows + 4) != dvalue->count()) { // Sometime byteOrder get messed up (especially if metadata got saved with kexiv2 library, or any library that doesn't save back with the same byte order as the camera)
         order = invertByteOrder(order);
         columns = fixEndianess<quint16>((reinterpret_cast<quint16*>(array.data()))[0], order);
@@ -290,8 +341,11 @@ KisMetaData::Value cfaPatternExifToKMD(const Exiv2::Value::AutoPtr value, Exiv2:
         rows = fixEndianess<quint16>((reinterpret_cast<quint16*>(array.data()))[1], order);
         Q_ASSERT((columns * rows + 4) == dvalue->count());
     }
-    cfaPatternStructure["Columns"] = KisMetaData::Value(columns);
-    cfaPatternStructure["Rows"] = KisMetaData::Value(rows);
+    QVariant qcolumns, qrows;
+    qcolumns.setValue(columns);
+    qrows.setValue(rows);
+    cfaPatternStructure["Columns"] = KisMetaData::Value(qcolumns);
+    cfaPatternStructure["Rows"] = KisMetaData::Value(qrows);
     QList<KisMetaData::Value> values;
     int index = 4;
     for (int i = 0; i < columns * rows; i++) {
@@ -324,9 +383,17 @@ Exiv2::Value *cfaPatternKMDToExif(const KisMetaData::Value& value)
 
 // Read and write Flash //
 
+#if EXIV2_TEST_VERSION(0,28,0)
+KisMetaData::Value flashExifToKMD(const Exiv2::Value::UniquePtr value)
+#else
 KisMetaData::Value flashExifToKMD(const Exiv2::Value::AutoPtr value)
+#endif
 {
+#if EXIV2_TEST_VERSION(0,28,0)
+    uint16_t v = value->toUint32();
+#else
     uint16_t v = value->toLong();
+#endif
     QMap<QString, KisMetaData::Value> flashStructure;
     bool fired = (v & 0x01);  // bit 1 is whether flash was fired or not
     flashStructure["Fired"] = QVariant(fired);
@@ -478,7 +545,11 @@ bool KisExifIO::saveTo(KisMetaData::Store* store, QIODevice* ioDevice, HeaderTyp
                     dbgFile << "No exif value was created for" << entry.qualifiedName() << " as" << exivKey;// << " of KMD value" << entry.value();
                 }
             }
+#if EXIV2_TEST_VERSION(0,28,0)
+        } catch (Exiv2::Error &e) {
+#else
         } catch (Exiv2::AnyError& e) {
+#endif
             dbgFile << "exiv error " << e.what();
         }
     }
diff --git a/krita/ui/kisexiv2/kis_exiv2.cpp b/krita/ui/kisexiv2/kis_exiv2.cpp
index 3ab34bb..b4912c7 100644
--- a/krita/ui/kisexiv2/kis_exiv2.cpp
+++ b/krita/ui/kisexiv2/kis_exiv2.cpp
@@ -30,7 +30,11 @@
 // ---- Generic convertion functions ---- //
 
 // Convert an exiv value to a KisMetaData value
+#if EXIV2_TEST_VERSION(0,28,0)
+KisMetaData::Value exivValueToKMDValue(const Exiv2::Value::UniquePtr value, bool forceSeq, KisMetaData::Value::ValueType arrayType)
+#else
 KisMetaData::Value exivValueToKMDValue(const Exiv2::Value::AutoPtr value, bool forceSeq, KisMetaData::Value::ValueType arrayType)
+#endif
 {
     switch (value->typeId()) {
     case Exiv2::signedByte:
@@ -51,11 +55,19 @@ exivValueToKMDValue(const Exiv2::Value::AutoPtr value,
     case Exiv2::signedShort:
     case Exiv2::signedLong: {
         if (value->count() == 1 && !forceSeq) {
-            return KisMetaData::Value((int)value->toLong());
+#if EXIV2_TEST_VERSION(0,28,0)
+            return {static_cast<int>(value->toUint32())};
+#else
+            return {static_cast<int>(value->toLong())};
+#endif
         } else {
             QList<KisMetaData::Value> array;
             for (int i = 0; i < value->count(); i++)
+#if EXIV2_TEST_VERSION(0,28,0)
+                array.push_back(KisMetaData::Value((int)value->toUint32(i)));
+#else
                 array.push_back(KisMetaData::Value((int)value->toLong(i)));
+#endif
             return KisMetaData::Value(array, arrayType);
         }
     }
diff --git a/krita/ui/kisexiv2/kis_iptc_io.cpp b/krita/ui/kisexiv2/kis_iptc_io.cpp
index 05f66ee..06f91ed 100644
--- a/krita/ui/kisexiv2/kis_iptc_io.cpp
+++ b/krita/ui/kisexiv2/kis_iptc_io.cpp
@@ -121,7 +121,11 @@ bool KisIptcIO::saveTo(KisMetaData::Store *store, QIODevice *ioDevice, HeaderTyp
                 if (v && v->typeId() != Exiv2::invalidTypeId) {
                     iptcData.add(iptcKey, v);
                 }
+#if EXIV2_TEST_VERSION(0,28,0)
+            } catch (Exiv2::Error& e) {
+#else
             } catch (Exiv2::AnyError& e) {
+#endif
                 dbgFile << "exiv error " << e.what();
             }
         }
@@ -139,7 +143,11 @@ bool KisIptcIO::saveTo(KisMetaData::Store *store, QIODevice *ioDevice, HeaderTyp
         header.append(photoshopBimId_);
         header.append(photoshopIptc_);
         header.append(QByteArray(2, 0));
+#if EXIV2_TEST_VERSION(0, 28, 0)
+        qint32 size = rawData.size();
+#else
         qint32 size = rawData.size_;
+#endif
         QByteArray sizeArray(4, 0);
         sizeArray[0] = (char)((size & 0xff000000) >> 24);
         sizeArray[1] = (char)((size & 0x00ff0000) >> 16);
@@ -149,7 +157,11 @@ bool KisIptcIO::saveTo(KisMetaData::Store *store, QIODevice *ioDevice, HeaderTyp
         ioDevice->write(header);
     }
 
+#if EXIV2_TEST_VERSION(0, 28, 0)
+    ioDevice->write((const char*) rawData.data(), rawData.size());
+#else
     ioDevice->write((const char*) rawData.pData_, rawData.size_);
+#endif
     ioDevice->close();
     return true;
 }
diff --git a/krita/ui/kisexiv2/kis_xmp_io.cpp b/krita/ui/kisexiv2/kis_xmp_io.cpp
index 14990de..afb6aa9 100644
--- a/krita/ui/kisexiv2/kis_xmp_io.cpp
+++ b/krita/ui/kisexiv2/kis_xmp_io.cpp
@@ -244,8 +244,11 @@ bool KisXMPIO::loadFrom(KisMetaData::Store* store, QIODevice* ioDevice) const
                     Q_ASSERT(schema);
                 }
             }
+#if EXIV2_TEST_VERSION(0,28,0)
+            const Exiv2::Value::UniquePtr value = it->getValue();
+#else
             const Exiv2::Value::AutoPtr value = it->getValue();
-
+#endif
             QString structName;
             int arrayIndex = -1;
             QString tagName;
openSUSE Build Service is sponsored by