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;