Received: from localhost (localhost [127.0.0.1]) by mail.netbsd.org (Postfix) with ESMTP id 9A88884E7B for ; Thu, 6 Jul 2023 23:20:22 +0000 (UTC) X-Virus-Scanned: amavisd-new at netbsd.org Received: from mail.netbsd.org ([IPv6:::1]) by localhost (mail.netbsd.org [IPv6:::1]) (amavisd-new, port 10025) with ESMTP id t1KfR45--kNi for ; Thu, 6 Jul 2023 23:20:20 +0000 (UTC) Received: from cvs.NetBSD.org (ivanova.netbsd.org [199.233.217.197]) by mail.netbsd.org (Postfix) with ESMTP id 9BA9384D35 for ; Thu, 6 Jul 2023 23:20:20 +0000 (UTC) Received: by cvs.NetBSD.org (Postfix, from userid 500) id 45E37FBDB; Thu, 6 Jul 2023 23:20:19 +0000 (UTC) Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_168868561989830" MIME-Version: 1.0 Date: Thu, 6 Jul 2023 23:20:19 +0000 From: "matthew green" Subject: CVS commit: pkgsrc/graphics/libkexiv2 To: pkgsrc-changes@NetBSD.org Approved: commit_and_comment Reply-To: mrg@netbsd.org X-Mailer: log_accum Message-Id: <20230706232019.45E37FBDB@cvs.NetBSD.org> This is a multi-part message in MIME format. --_----------=_168868561989830 Content-Disposition: inline Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" Module Name: pkgsrc Committed By: mrg Date: Thu Jul 6 23:20:19 UTC 2023 Modified Files: pkgsrc/graphics/libkexiv2: distinfo Added Files: pkgsrc/graphics/libkexiv2/patches: patch-exiv2-0.28-upstream.diff Log Message: include upstream build fix for exiv2 0.28 issues. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 pkgsrc/graphics/libkexiv2/distinfo cvs rdiff -u -r0 -r1.1 \ pkgsrc/graphics/libkexiv2/patches/patch-exiv2-0.28-upstream.diff Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. --_----------=_168868561989830 Content-Disposition: inline Content-Length: 28068 Content-Transfer-Encoding: binary Content-Type: text/x-diff; charset=us-ascii Modified files: Index: pkgsrc/graphics/libkexiv2/distinfo diff -u pkgsrc/graphics/libkexiv2/distinfo:1.27 pkgsrc/graphics/libkexiv2/distinfo:1.28 --- pkgsrc/graphics/libkexiv2/distinfo:1.27 Thu Sep 29 00:53:12 2022 +++ pkgsrc/graphics/libkexiv2/distinfo Thu Jul 6 23:20:18 2023 @@ -1,5 +1,6 @@ -$NetBSD: distinfo,v 1.27 2022/09/29 00:53:12 markd Exp $ +$NetBSD: distinfo,v 1.28 2023/07/06 23:20:18 mrg Exp $ BLAKE2s (libkexiv2-22.08.1.tar.xz) = f20c891463d8143b32d51ae72cbfe4be824044a4629232fa0a01359b2519a5b5 SHA512 (libkexiv2-22.08.1.tar.xz) = 97bb72f679b4153c742adfa520e200557a472f7df529e6f0a40f562ccf68ae48e163e3c790131a60960b7617b015b22381363c54a83f42503c1e38c5a1bd0248 Size (libkexiv2-22.08.1.tar.xz) = 59736 bytes +SHA1 (patch-exiv2-0.28-upstream.diff) = e67aab6c0556cc445d25a6628aa1b61441027a98 Added files: Index: pkgsrc/graphics/libkexiv2/patches/patch-exiv2-0.28-upstream.diff diff -u /dev/null pkgsrc/graphics/libkexiv2/patches/patch-exiv2-0.28-upstream.diff:1.1 --- /dev/null Thu Jul 6 23:20:19 2023 +++ pkgsrc/graphics/libkexiv2/patches/patch-exiv2-0.28-upstream.diff Thu Jul 6 23:20:19 2023 @@ -0,0 +1,704 @@ +$NetBSD: patch-exiv2-0.28-upstream.diff,v 1.1 2023/07/06 23:20:19 mrg Exp $ + +Upstream patch to fix exiv2 0.28 issues, commit 68c21bba5f73ea6abfdf031139ed085251ef660d. + +diff --git src/kexiv2.cpp b/src/kexiv2.cpp +index 29149b5..ebe2035 100644 +--- src/kexiv2.cpp ++++ src/kexiv2.cpp +@@ -207,7 +207,11 @@ bool KExiv2::loadFromData(const QByteArray& imgData) const + + try + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open((Exiv2::byte*)imgData.data(), imgData.size()); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((Exiv2::byte*)imgData.data(), imgData.size()); ++#endif + + d->filePath.clear(); + image->readMetadata(); +@@ -263,7 +267,11 @@ bool KExiv2::load(const QString& filePath) const + + try + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image; ++#else + Exiv2::Image::AutoPtr image; ++#endif + + image = Exiv2::ImageFactory::open((const char*)(QFile::encodeName(filePath)).constData()); + +@@ -312,7 +320,11 @@ bool KExiv2::load(const QString& filePath) const + QString xmpSidecarPath = sidecarFilePathForFile(filePath); + QFileInfo xmpSidecarFileInfo(xmpSidecarPath); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr xmpsidecar; ++#else + Exiv2::Image::AutoPtr xmpsidecar; ++#endif + + if (xmpSidecarFileInfo.exists() && xmpSidecarFileInfo.isReadable()) + { +@@ -321,7 +333,11 @@ bool KExiv2::load(const QString& filePath) const + xmpsidecar->readMetadata(); + + // Merge ++#if EXIV2_TEST_VERSION(0,28,0) ++ d->loadSidecarData(std::move(xmpsidecar)); ++#else + d->loadSidecarData(xmpsidecar); ++#endif + hasLoaded = true; + } + } +diff --git src/kexiv2_p.cpp b/src/kexiv2_p.cpp +index 039fb10..93c08a3 100644 +--- src/kexiv2_p.cpp ++++ src/kexiv2_p.cpp +@@ -76,9 +76,17 @@ bool KExiv2Private::saveToXMPSidecar(const QFileInfo& finfo) const + + try + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image; ++#else + Exiv2::Image::AutoPtr image; ++#endif + image = Exiv2::ImageFactory::create(Exiv2::ImageType::xmp, (const char*)(QFile::encodeName(filePath).constData())); ++#if EXIV2_TEST_VERSION(0,28,0) ++ return saveOperations(finfo, std::move(image)); ++#else + return saveOperations(finfo, image); ++#endif + } + catch( Exiv2::Error& e ) + { +@@ -155,9 +163,17 @@ bool KExiv2Private::saveToFile(const QFileInfo& finfo) const + + try + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image; ++#else + Exiv2::Image::AutoPtr image; ++#endif + image = Exiv2::ImageFactory::open((const char*)(QFile::encodeName(finfo.filePath()).constData())); ++#if EXIV2_TEST_VERSION(0,28,0) ++ return saveOperations(finfo, std::move(image)); ++#else + return saveOperations(finfo, image); ++#endif + } + catch( Exiv2::Error& e ) + { +@@ -171,7 +187,11 @@ bool KExiv2Private::saveToFile(const QFileInfo& finfo) const + } + } + ++#if EXIV2_TEST_VERSION(0,28,0) ++bool KExiv2Private::saveOperations(const QFileInfo& finfo, Exiv2::Image::UniquePtr image) const ++#else + bool KExiv2Private::saveOperations(const QFileInfo& finfo, Exiv2::Image::AutoPtr image) const ++#endif + { + try + { +@@ -345,7 +365,12 @@ void KExiv2Private::printExiv2ExceptionError(const QString& msg, Exiv2::Error& e + { + std::string s(e.what()); + qCCritical(LIBKEXIV2_LOG) << msg.toLatin1().constData() << " (Error #" +- << e.code() << ": " << s.c_str(); ++#if EXIV2_TEST_VERSION(0,28,0) ++ << Exiv2::Error(e.code()).what() ++#else ++ << e.code() << ": " << s.c_str() ++#endif ++ << ")"; + } + + void KExiv2Private::printExiv2MessageHandler(int lvl, const char* msg) +@@ -599,7 +624,11 @@ int KExiv2Private::getXMPTagsListFromPrefix(const QString& pf, KExiv2::TagsMap& + } + + #ifdef _XMP_SUPPORT_ ++#if EXIV2_TEST_VERSION(0,28,0) ++void KExiv2Private::loadSidecarData(Exiv2::Image::UniquePtr xmpsidecar) ++#else + void KExiv2Private::loadSidecarData(Exiv2::Image::AutoPtr xmpsidecar) ++#endif + { + // Having a sidecar is a special situation. + // The sidecar data often "dominates", see in particular bug 309058 for important aspects: +diff --git src/kexiv2_p.h b/src/kexiv2_p.h +index 7d6028d..4d110fc 100644 +--- src/kexiv2_p.h ++++ src/kexiv2_p.h +@@ -94,7 +94,11 @@ class KExiv2Private + + bool saveToXMPSidecar(const QFileInfo& finfo) const; + bool saveToFile(const QFileInfo& finfo) const; ++#if EXIV2_TEST_VERSION(0,28,0) ++ bool saveOperations(const QFileInfo& finfo, Exiv2::Image::UniquePtr image) const; ++#else + bool saveOperations(const QFileInfo& finfo, Exiv2::Image::AutoPtr image) const; ++#endif + + /** Wrapper method to convert a Comments content to a QString. + */ +@@ -125,8 +129,12 @@ class KExiv2Private + #ifdef _XMP_SUPPORT_ + Exiv2::XmpData& xmpMetadata() { return data.data()->xmpMetadata; } + ++#if EXIV2_TEST_VERSION(0,28,0) ++ void loadSidecarData(Exiv2::Image::UniquePtr xmpsidecar); ++#else + void loadSidecarData(Exiv2::Image::AutoPtr xmpsidecar); + #endif ++#endif + + public: + +diff --git src/kexiv2comments.cpp b/src/kexiv2comments.cpp +index 3f71981..d73e44a 100644 +--- src/kexiv2comments.cpp ++++ src/kexiv2comments.cpp +@@ -18,7 +18,12 @@ bool KExiv2::canWriteComment(const QString& filePath) + { + try + { +- Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((const char*) ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image ++#else ++ Exiv2::Image::AutoPtr image ++#endif ++ = Exiv2::ImageFactory::open((const char*) + (QFile::encodeName(filePath).constData())); + + Exiv2::AccessMode mode = image->checkMode(Exiv2::mdComment); +@@ -28,7 +33,12 @@ bool KExiv2::canWriteComment(const QString& filePath) + { + std::string s(e.what()); + qCCritical(LIBKEXIV2_LOG) << "Cannot check Comment access mode using Exiv2 (Error #" +- << e.code() << ": " << s.c_str() << ")"; ++#if EXIV2_TEST_VERSION(0,28,0) ++ << Exiv2::Error(e.code()).what() ++#else ++ << e.code() << ": " << s.c_str() ++#endif ++ << ")"; + } + catch(...) + { +diff --git src/kexiv2exif.cpp b/src/kexiv2exif.cpp +index 319d317..affca29 100644 +--- src/kexiv2exif.cpp ++++ src/kexiv2exif.cpp +@@ -28,7 +28,12 @@ bool KExiv2::canWriteExif(const QString& filePath) + { + try + { +- Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((const char*) ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = ++#else ++ Exiv2::Image::AutoPtr image = ++#endif ++ Exiv2::ImageFactory::open((const char*) + (QFile::encodeName(filePath).constData())); + + Exiv2::AccessMode mode = image->checkMode(Exiv2::mdExif); +@@ -39,7 +44,12 @@ bool KExiv2::canWriteExif(const QString& filePath) + { + std::string s(e.what()); + qCCritical(LIBKEXIV2_LOG) << "Cannot check Exif access mode using Exiv2 (Error #" +- << e.code() << ": " << s.c_str() << ")"; ++#if EXIV2_TEST_VERSION(0,28,0) ++ << Exiv2::Error(e.code()).what() ++#else ++ << e.code() << ": " << s.c_str() ++#endif ++ << ")"; + } + catch(...) + { +@@ -658,7 +668,11 @@ bool KExiv2::getExifTagLong(const char* exifTagName, long& val, int component) c + + if (it != exifData.end() && it->count() > 0) + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ val = it->toUint32(component); ++#else + val = it->toLong(component); ++#endif + return true; + } + } +@@ -722,7 +736,11 @@ QVariant KExiv2::getExifTagVariant(const char* exifTagName, bool rationalAsListO + case Exiv2::signedShort: + case Exiv2::signedLong: + if (it->count() > component) ++#if EXIV2_TEST_VERSION(0,28,0) ++ return QVariant((int)it->toUint32(component)); ++#else + return QVariant((int)it->toLong(component)); ++#endif + else + return QVariant(QVariant::Int); + case Exiv2::unsignedRational: +@@ -854,7 +872,11 @@ QImage KExiv2::getExifThumbnail(bool fixOrientation) const + { + Exiv2::ExifThumbC thumb(d->exifMetadata()); + Exiv2::DataBuf const c1 = thumb.copy(); ++#if EXIV2_TEST_VERSION(0,28,0) ++ thumbnail.loadFromData(c1.c_data(), c1.size()); ++#else + thumbnail.loadFromData(c1.pData_, c1.size_); ++#endif + + if (!thumbnail.isNull()) + { +@@ -870,7 +892,11 @@ QImage KExiv2::getExifThumbnail(bool fixOrientation) const + + if (it != exifData.end() && it->count()) + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ long orientation = it->toUint32(); ++#else + long orientation = it->toLong(); ++#endif + qCDebug(LIBKEXIV2_LOG) << "Exif Thumbnail Orientation: " << (int)orientation; + rotateExifQImage(thumbnail, (ImageOrientation)orientation); + } +@@ -948,9 +974,15 @@ bool KExiv2::setTiffThumbnail(const QImage& thumbImage, bool setProgramName) con + // Make sure IFD0 is explicitly marked as a main image + Exiv2::ExifData::const_iterator pos = d->exifMetadata().findKey(Exiv2::ExifKey("Exif.Image.NewSubfileType")); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ if (pos == d->exifMetadata().end() || pos->count() != 1 || pos->toUint32() != 0) ++#else + if (pos == d->exifMetadata().end() || pos->count() != 1 || pos->toLong() != 0) ++#endif + { +-#if EXIV2_TEST_VERSION(0,27,0) ++#if EXIV2_TEST_VERSION(0,28,0) ++ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, "Exif.Image.NewSubfileType missing or not set as main image"); ++#elif EXIV2_TEST_VERSION(0,27,0) + throw Exiv2::Error(Exiv2::kerErrorMessage, "Exif.Image.NewSubfileType missing or not set as main image"); + #else + throw Exiv2::Error(1, "Exif.Image.NewSubfileType missing or not set as main image"); +@@ -979,9 +1011,17 @@ bool KExiv2::setTiffThumbnail(const QImage& thumbImage, bool setProgramName) con + Exiv2::DataBuf buf((Exiv2::byte *)data.data(), data.size()); + Exiv2::ULongValue val; + val.read("0"); ++#if EXIV2_TEST_VERSION(0,28,0) ++ val.setDataArea(buf.c_data(), buf.size()); ++#else + val.setDataArea(buf.pData_, buf.size_); ++#endif + d->exifMetadata()["Exif.SubImage1.JPEGInterchangeFormat"] = val; ++#if EXIV2_TEST_VERSION(0,28,0) ++ d->exifMetadata()["Exif.SubImage1.JPEGInterchangeFormatLength"] = uint32_t(buf.size()); ++#else + d->exifMetadata()["Exif.SubImage1.JPEGInterchangeFormatLength"] = uint32_t(buf.size_); ++#endif + d->exifMetadata()["Exif.SubImage1.Compression"] = uint16_t(6); // JPEG (old-style) + d->exifMetadata()["Exif.SubImage1.NewSubfileType"] = uint32_t(1); // Thumbnail image + return true; +diff --git src/kexiv2gps.cpp b/src/kexiv2gps.cpp +index 857e6a2..3873fc1 100644 +--- src/kexiv2gps.cpp ++++ src/kexiv2gps.cpp +@@ -325,7 +325,11 @@ bool KExiv2::initializeGPSInfo(const bool setProgramName) + // Do all the easy constant ones first. + // GPSVersionID tag: standard says is should be four bytes: 02 00 00 00 + // (and, must be present). ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr value = Exiv2::Value::create(Exiv2::unsignedByte); ++#else + Exiv2::Value::AutoPtr value = Exiv2::Value::create(Exiv2::unsignedByte); ++#endif + value->read("2 0 0 0"); + d->exifMetadata().add(Exiv2::ExifKey("Exif.GPSInfo.GPSVersionID"), value.get()); + +@@ -380,7 +384,11 @@ bool KExiv2::setGPSInfo(const double* const altitude, const double latitude, con + if (altitude) + { + // Altitude reference: byte "00" meaning "above sea level", "01" mening "behing sea level". ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr value = Exiv2::Value::create(Exiv2::unsignedByte); ++#else + Exiv2::Value::AutoPtr value = Exiv2::Value::create(Exiv2::unsignedByte); ++#endif + + if ((*altitude) >= 0) value->read("0"); + else value->read("1"); +diff --git src/kexiv2image.cpp b/src/kexiv2image.cpp +index a15edef..a857671 100644 +--- src/kexiv2image.cpp ++++ src/kexiv2image.cpp +@@ -94,13 +94,21 @@ QSize KExiv2::getImageDimensions() const + Exiv2::ExifData::iterator it = exifData.findKey(key); + + if (it != exifData.end() && it->count()) ++#if EXIV2_TEST_VERSION(0,28,0) ++ width = it->toUint32(); ++#else + width = it->toLong(); ++#endif + + Exiv2::ExifKey key2("Exif.Photo.PixelYDimension"); + Exiv2::ExifData::iterator it2 = exifData.findKey(key2); + + if (it2 != exifData.end() && it2->count()) ++#if EXIV2_TEST_VERSION(0,28,0) ++ height = it2->toUint32(); ++#else + height = it2->toLong(); ++#endif + + if (width != -1 && height != -1) + return QSize(width, height); +@@ -114,13 +122,21 @@ QSize KExiv2::getImageDimensions() const + Exiv2::ExifData::iterator it3 = exifData.findKey(key3); + + if (it3 != exifData.end() && it3->count()) ++#if EXIV2_TEST_VERSION(0,28,0) ++ width = it3->toUint32(); ++#else + width = it3->toLong(); ++#endif + + Exiv2::ExifKey key4("Exif.Image.ImageLength"); + Exiv2::ExifData::iterator it4 = exifData.findKey(key4); + + if (it4 != exifData.end() && it4->count()) ++#if EXIV2_TEST_VERSION(0,28,0) ++ height = it4->toUint32(); ++#else + height = it4->toLong(); ++#endif + + if (width != -1 && height != -1) + return QSize(width, height); +@@ -261,7 +277,11 @@ KExiv2::ImageOrientation KExiv2::getImageOrientation() const + + if (it != exifData.end() && it->count()) + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ orientation = it->toUint32(); ++#else + orientation = it->toLong(); ++#endif + qCDebug(LIBKEXIV2_LOG) << "Orientation => Exif.MinoltaCs7D.Rotation => " << (int)orientation; + + switch(orientation) +@@ -282,7 +302,11 @@ KExiv2::ImageOrientation KExiv2::getImageOrientation() const + + if (it != exifData.end() && it->count()) + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ orientation = it->toUint32(); ++#else + orientation = it->toLong(); ++#endif + qCDebug(LIBKEXIV2_LOG) << "Orientation => Exif.MinoltaCs5D.Rotation => " << (int)orientation; + + switch(orientation) +@@ -305,7 +329,11 @@ KExiv2::ImageOrientation KExiv2::getImageOrientation() const + + if (it != exifData.end() && it->count()) + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ orientation = it->toUint32(); ++#else + orientation = it->toLong(); ++#endif + qCDebug(LIBKEXIV2_LOG) << "Orientation => Exif.Image.Orientation => " << (int)orientation; + return (ImageOrientation)orientation; + } +@@ -381,7 +409,11 @@ bool KExiv2::setImageOrientation(ImageOrientation orientation, bool setProgramNa + + if (it != d->exifMetadata().end() && it->count()) + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ RotationMatrix operation((KExiv2Iface::KExiv2::ImageOrientation)it->toUint32()); ++#else + RotationMatrix operation((KExiv2Iface::KExiv2::ImageOrientation)it->toLong()); ++#endif + operation *= orientation; + (*it) = static_cast(operation.exifOrientation()); + } +@@ -849,7 +881,11 @@ bool KExiv2::setImageDateTime(const QDateTime& dateTime, bool setDateTimeDigitiz + + const std::string &xmpdatetime(dateTime.toString(Qt::ISODate).toLatin1().constData()); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr xmpTxtVal = Exiv2::Value::create(Exiv2::xmpText); ++#else + Exiv2::Value::AutoPtr xmpTxtVal = Exiv2::Value::create(Exiv2::xmpText); ++#endif + xmpTxtVal->read(xmpdatetime); + d->xmpMetadata().add(Exiv2::XmpKey("Xmp.exif.DateTimeOriginal"), xmpTxtVal.get()); + d->xmpMetadata().add(Exiv2::XmpKey("Xmp.photoshop.DateCreated"), xmpTxtVal.get()); +diff --git src/kexiv2iptc.cpp b/src/kexiv2iptc.cpp +index cb8afa1..ee4d6db 100644 +--- src/kexiv2iptc.cpp ++++ src/kexiv2iptc.cpp +@@ -18,7 +18,12 @@ bool KExiv2::canWriteIptc(const QString& filePath) + { + try + { +- Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((const char*) ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = ++#else ++ Exiv2::Image::AutoPtr image = ++#endif ++ Exiv2::ImageFactory::open((const char*) + (QFile::encodeName(filePath).constData())); + + Exiv2::AccessMode mode = image->checkMode(Exiv2::mdIptc); +@@ -28,7 +33,12 @@ bool KExiv2::canWriteIptc(const QString& filePath) + { + std::string s(e.what()); + qCCritical(LIBKEXIV2_LOG) << "Cannot check Iptc access mode using Exiv2 (Error #" +- << e.code() << ": " << s.c_str() << ")"; ++#if EXIV2_TEST_VERSION(0,28,0) ++ << Exiv2::Error(e.code()).what() ++#else ++ << e.code() << ": " << s.c_str() ++#endif ++ << ")"; + } + catch(...) + { +@@ -80,7 +90,11 @@ QByteArray KExiv2::getIptc(bool addIrbHeader) const + c2 = Exiv2::IptcParser::encode(d->iptcMetadata()); + } + ++#if EXIV2_TEST_VERSION(0,28,0) ++ QByteArray data((const char*)c2.c_data(), c2.size()); ++#else + QByteArray data((const char*)c2.pData_, c2.size_); ++#endif + return data; + + } +@@ -510,7 +524,11 @@ bool KExiv2::setIptcTagsStringList(const char* iptcTagName, int maxSize, + QString key = *it; + key.truncate(maxSize); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr val = Exiv2::Value::create(Exiv2::string); ++#else + Exiv2::Value::AutoPtr val = Exiv2::Value::create(Exiv2::string); ++#endif + val->read(key.toUtf8().constData()); + iptcData.add(iptcTag, val.get()); + } +@@ -611,7 +629,11 @@ bool KExiv2::setIptcKeywords(const QStringList& oldKeywords, const QStringList& + QString key = *it; + key.truncate(64); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr val = Exiv2::Value::create(Exiv2::string); ++#else + Exiv2::Value::AutoPtr val = Exiv2::Value::create(Exiv2::string); ++#endif + val->read(key.toUtf8().constData()); + iptcData.add(iptcTag, val.get()); + } +@@ -705,7 +727,11 @@ bool KExiv2::setIptcSubjects(const QStringList& oldSubjects, const QStringList& + QString key = *it; + key.truncate(236); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr val = Exiv2::Value::create(Exiv2::string); ++#else + Exiv2::Value::AutoPtr val = Exiv2::Value::create(Exiv2::string); ++#endif + val->read(key.toUtf8().constData()); + iptcData.add(iptcTag, val.get()); + } +@@ -800,7 +826,11 @@ bool KExiv2::setIptcSubCategories(const QStringList& oldSubCategories, const QSt + QString key = *it; + key.truncate(32); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr val = Exiv2::Value::create(Exiv2::string); ++#else + Exiv2::Value::AutoPtr val = Exiv2::Value::create(Exiv2::string); ++#endif + val->read(key.toUtf8().constData()); + iptcData.add(iptcTag, val.get()); + } +diff --git src/kexiv2previews.cpp b/src/kexiv2previews.cpp +index 4313253..d7782eb 100644 +--- src/kexiv2previews.cpp ++++ src/kexiv2previews.cpp +@@ -29,9 +29,17 @@ class KExiv2PreviewsPrivate + delete manager; + } + ++#if EXIV2_TEST_VERSION(0,28,0) ++ void load(Exiv2::Image::UniquePtr image_) ++#else + void load(Exiv2::Image::AutoPtr image_) ++#endif + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ image = std::move(image_); ++#else + image = image_; ++#endif + + image->readMetadata(); + +@@ -49,7 +57,11 @@ class KExiv2PreviewsPrivate + + public: + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image; ++#else + Exiv2::Image::AutoPtr image; ++#endif + Exiv2::PreviewManager* manager; + QList properties; + }; +@@ -59,8 +71,13 @@ KExiv2Previews::KExiv2Previews(const QString& filePath) + { + try + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open((const char*)(QFile::encodeName(filePath).constData())); ++ d->load(std::move(image)); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((const char*)(QFile::encodeName(filePath).constData())); + d->load(image); ++#endif + } + catch( Exiv2::Error& e ) + { +@@ -77,8 +94,13 @@ KExiv2Previews::KExiv2Previews(const QByteArray& imgData) + { + try + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open((Exiv2::byte*)imgData.data(), imgData.size()); ++ d->load(std::move(image)); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((Exiv2::byte*)imgData.data(), imgData.size()); + d->load(image); ++#endif + } + catch( Exiv2::Error& e ) + { +diff --git src/kexiv2xmp.cpp b/src/kexiv2xmp.cpp +index 99b3003..6b83b51 100644 +--- src/kexiv2xmp.cpp ++++ src/kexiv2xmp.cpp +@@ -19,7 +19,12 @@ bool KExiv2::canWriteXmp(const QString& filePath) + #ifdef _XMP_SUPPORT_ + try + { +- Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((const char*) ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = ++#else ++ Exiv2::Image::AutoPtr image = ++#endif ++ Exiv2::ImageFactory::open((const char*) + (QFile::encodeName(filePath).constData())); + + Exiv2::AccessMode mode = image->checkMode(Exiv2::mdXmp); +@@ -29,7 +34,12 @@ bool KExiv2::canWriteXmp(const QString& filePath) + { + std::string s(e.what()); + qCCritical(LIBKEXIV2_LOG) << "Cannot check Xmp access mode using Exiv2 (Error #" +- << e.code() << ": " << s.c_str() << ")"; ++#if EXIV2_TEST_VERSION(0,28,0) ++ << Exiv2::Error(e.code()).what() ++#else ++ << e.code() << ": " << s.c_str() ++#endif ++ << ")"; + } + catch(...) + { +@@ -374,7 +384,11 @@ bool KExiv2::setXmpTagString(const char* xmpTagName, const QString& value, bool + try + { + const std::string &txt(value.toUtf8().constData()); ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr xmpTxtVal = Exiv2::Value::create(Exiv2::xmpText); ++#else + Exiv2::Value::AutoPtr xmpTxtVal = Exiv2::Value::create(Exiv2::xmpText); ++#endif + xmpTxtVal->read(txt); + d->xmpMetadata()[xmpTagName].setValue(xmpTxtVal.get()); + return true; +@@ -515,7 +529,11 @@ bool KExiv2::setXmpTagStringListLangAlt(const char* xmpTagName, const KExiv2::Al + + if (!values.isEmpty()) + { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr xmpTxtVal = Exiv2::Value::create(Exiv2::langAlt); ++#else + Exiv2::Value::AutoPtr xmpTxtVal = Exiv2::Value::create(Exiv2::langAlt); ++#endif + + for (AltLangMap::const_iterator it = values.constBegin(); it != values.constEnd(); ++it) + { +@@ -621,7 +639,11 @@ bool KExiv2::setXmpTagStringLangAlt(const char* xmpTagName, const QString& value + QString txtLangAlt = QString(QString::fromLatin1("lang=%1 %2")).arg(language).arg(value); + + const std::string &txt(txtLangAlt.toUtf8().constData()); ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr xmpTxtVal = Exiv2::Value::create(Exiv2::langAlt); ++#else + Exiv2::Value::AutoPtr xmpTxtVal = Exiv2::Value::create(Exiv2::langAlt); ++#endif + + // Search if an Xmp tag already exist. + +@@ -735,7 +757,11 @@ bool KExiv2::setXmpTagStringSeq(const char* xmpTagName, const QStringList& seq, + else + { + const QStringList list = seq; ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr xmpTxtSeq = Exiv2::Value::create(Exiv2::xmpSeq); ++#else + Exiv2::Value::AutoPtr xmpTxtSeq = Exiv2::Value::create(Exiv2::xmpSeq); ++#endif + + for (QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it ) + { +@@ -835,7 +861,11 @@ bool KExiv2::setXmpTagStringBag(const char* xmpTagName, const QStringList& bag, + else + { + QStringList list = bag; ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr xmpTxtBag = Exiv2::Value::create(Exiv2::xmpBag); ++#else + Exiv2::Value::AutoPtr xmpTxtBag = Exiv2::Value::create(Exiv2::xmpBag); ++#endif + + for (QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it ) + { +@@ -929,7 +959,11 @@ QVariant KExiv2::getXmpTagVariant(const char* xmpTagName, bool rationalAsListOfI + case Exiv2::unsignedLong: + case Exiv2::signedShort: + case Exiv2::signedLong: ++#if EXIV2_TEST_VERSION(0,28,0) ++ return QVariant((int)it->toUint32()); ++#else + return QVariant((int)it->toLong()); ++#endif + case Exiv2::unsignedRational: + case Exiv2::signedRational: + if (rationalAsListOfInts) --_----------=_168868561989830--