From f9f7f527fffdda9a7911edc9174732557a2f0a6b37c9c037e6f847e27461bae5 Mon Sep 17 00:00:00 2001 From: Matej Cepl Date: Fri, 4 Aug 2023 23:07:14 +0000 Subject: [PATCH 1/2] - WIP INCOMPLETE - Add exiv2_0-28-0.patch making the package compatible with the latest exiv2 0.28 (lp#2027823). OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-exiv2?expand=0&rev=19 --- exiv2_0-28-0.patch | 643 ++++++++++++++++++++++++++++++++++++++ py3exiv2-link-boost.patch | 12 +- python-exiv2.changes | 7 + python-exiv2.spec | 10 +- 4 files changed, 661 insertions(+), 11 deletions(-) create mode 100644 exiv2_0-28-0.patch diff --git a/exiv2_0-28-0.patch b/exiv2_0-28-0.patch new file mode 100644 index 0000000..db29cb9 --- /dev/null +++ b/exiv2_0-28-0.patch @@ -0,0 +1,643 @@ +--- + src/exiv2wrapper.cpp | 171 +++++++++++++++++++++++++-------------------------- + src/exiv2wrapper.hpp | 2 + 2 files changed, 86 insertions(+), 87 deletions(-) + +--- a/src/exiv2wrapper.cpp ++++ b/src/exiv2wrapper.cpp +@@ -51,7 +51,7 @@ using std::auto_ptr; + // Custom macros + #ifdef HAVE_EXIV2_ERROR_CODE + #define CHECK_METADATA_READ \ +- if (!_dataRead) throw Exiv2::Error(Exiv2::kerErrorMessage, "metadata not read"); ++ if (!_dataRead) throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, "metadata not read"); + #else + #define CHECK_METADATA_READ \ + if (!_dataRead) throw Exiv2::Error(METADATA_NOT_READ); +@@ -67,7 +67,7 @@ void Image::_instantiate_image() + // If an exception is thrown, it has to be done outside of the + // Py_{BEGIN,END}_ALLOW_THREADS block. + #ifdef HAVE_EXIV2_ERROR_CODE +- Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); ++ Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); + #else + Exiv2::Error error(0); + #endif +@@ -96,7 +96,7 @@ void Image::_instantiate_image() + // Re-acquire the GIL + Py_END_ALLOW_THREADS + +- if (error.code() == 0) ++ if (error.code() == Exiv2::ErrorCode::kerSuccess) + { + assert(_image.get() != 0); + _dataRead = false; +@@ -153,7 +153,7 @@ void Image::readMetadata() + // If an exception is thrown, it has to be done outside of the + // Py_{BEGIN,END}_ALLOW_THREADS block. + #ifdef HAVE_EXIV2_ERROR_CODE +- Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); ++ Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); + #else + Exiv2::Error error(0); + #endif +@@ -180,7 +180,7 @@ void Image::readMetadata() + // Re-acquire the GIL + Py_END_ALLOW_THREADS + +- if (error.code() != 0) ++ if (error.code() != Exiv2::ErrorCode::kerSuccess) + { + throw error; + } +@@ -193,7 +193,7 @@ void Image::writeMetadata() + // If an exception is thrown, it has to be done outside of the + // Py_{BEGIN,END}_ALLOW_THREADS block. + #ifdef HAVE_EXIV2_ERROR_CODE +- Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); ++ Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); + #else + Exiv2::Error error(0); + #endif +@@ -216,7 +216,7 @@ void Image::writeMetadata() + // Re-acquire the GIL + Py_END_ALLOW_THREADS + +- if (error.code() != 0) ++ if (error.code() != Exiv2::ErrorCode::kerSuccess) + { + throw error; + } +@@ -263,7 +263,7 @@ const ExifTag Image::getExifTag(std::str + if(_exifData->findKey(exifKey) == _exifData->end()) + #ifdef HAVE_EXIV2_ERROR_CODE + { +- throw Exiv2::Error(Exiv2::kerInvalidKey, key); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); + } + #else + { +@@ -283,7 +283,7 @@ void Image::deleteExifTag(std::string ke + if(datum == _exifData->end()) + #ifdef HAVE_EXIV2_ERROR_CODE + { +- throw Exiv2::Error(Exiv2::kerInvalidKey, key); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); + } + #else + { +@@ -321,7 +321,7 @@ const IptcTag Image::getIptcTag(std::str + if(_iptcData->findKey(iptcKey) == _iptcData->end()) + #ifdef HAVE_EXIV2_ERROR_CODE + { +- throw Exiv2::Error(Exiv2::kerInvalidKey, key); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); + } + #else + { +@@ -341,7 +341,7 @@ void Image::deleteIptcTag(std::string ke + if (dataIterator == _iptcData->end()) + #ifdef HAVE_EXIV2_ERROR_CODE + { +- throw Exiv2::Error(Exiv2::kerInvalidKey, key); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); + } + #else + { +@@ -385,7 +385,7 @@ const XmpTag Image::getXmpTag(std::strin + if(_xmpData->findKey(xmpKey) == _xmpData->end()) + #ifdef HAVE_EXIV2_ERROR_CODE + { +- throw Exiv2::Error(Exiv2::kerInvalidKey, key); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); + } + #else + { +@@ -409,7 +409,7 @@ void Image::deleteXmpTag(std::string key + else + #ifdef HAVE_EXIV2_ERROR_CODE + { +- throw Exiv2::Error(Exiv2::kerInvalidKey, key); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); + } + #else + { +@@ -461,7 +461,7 @@ void Image::copyMetadata(Image& other, b + { + #ifdef HAVE_EXIV2_ERROR_CODE + { +- throw Exiv2::Error(Exiv2::kerErrorMessage, "metadata not read"); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, "metadata not read"); + } + #else + { +@@ -570,7 +570,7 @@ boost::python::list Image::getExifThumbn + Exiv2::DataBuf buffer = _getExifThumbnail()->copy(); + // Copy the data buffer in a list. + boost::python::list data; +- for(unsigned int i = 0; i < buffer.size_; ++i) ++ for(unsigned int i = 0; i < buffer.size; ++i) + { + unsigned int datum = buffer.pData_[i]; + data.append(datum); +@@ -688,7 +688,7 @@ void ExifTag::setRawValue(const std::str + { + std::string message("Invalid value: "); + message += value; +- throw Exiv2::Error(Exiv2::kerInvalidDataset, message); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, message); + } + #else + { +@@ -708,7 +708,7 @@ void ExifTag::setParentImage(Image& imag + return; + } + _data = data; +- Exiv2::Value::AutoPtr value = _datum->getValue(); ++ Exiv2::Value::UniquePtr value = _datum->getValue(); + delete _datum; + _datum = &(*_data)[_key.key()]; + _datum->setValue(value.get()); +@@ -810,7 +810,7 @@ IptcTag::IptcTag(const std::string& key, + { + std::string mssg("Tag not repeatable: "); + mssg += key; +- throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); + } + #else + { +@@ -838,7 +838,7 @@ void IptcTag::setRawValues(const boost:: + // one value. + #ifdef HAVE_EXIV2_ERROR_CODE + { +- throw Exiv2::Error(Exiv2::kerInvalidDataset, "Tag not repeatable"); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, "Tag not repeatable"); + } + #else + { +@@ -864,7 +864,7 @@ void IptcTag::setRawValues(const boost:: + mssg += value; + // there's no invalid value error in libexiv2, so we use + // kerInvalidDataset wich raise a Python ValueError +- throw Exiv2::Error(Exiv2::kerInvalidDataset, mssg); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, mssg); + } + #else + { +@@ -888,7 +888,7 @@ void IptcTag::setRawValues(const boost:: + { + std::string mssg("Invalid value: "); + mssg += value; +- throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); + } + #else + { +@@ -901,7 +901,7 @@ void IptcTag::setRawValues(const boost:: + { + std::string mssg("Tag not repeatable: "); + mssg += _key.key(); +- throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); + } + #else + { +@@ -1089,7 +1089,7 @@ void XmpTag::setParentImage(Image& image + // anything (see https://bugs.launchpad.net/pyexiv2/+bug/622739). + return; + } +- Exiv2::Value::AutoPtr value = _datum->getValue(); ++ Exiv2::Value::UniquePtr value = _datum->getValue(); + delete _datum; + _from_datum = true; + _datum = &(*image.getXmpData())[_key.key()]; +@@ -1221,331 +1221,330 @@ void translateExiv2Error(Exiv2::Error co + // defined by Exiv2 (file 'src/error.cpp') are changed + switch (error.code()) + { +- case 1: ++ case Exiv2::ErrorCode::kerErrorMessage: + // kerErrorMessage Unidentified error + PyErr_SetString(PyExc_RuntimeError, message); + break; +- case 2: ++ case Exiv2::ErrorCode::kerCallFailed: + // kerCallFailed {path}: Call to `{function}' failed: {strerror} + // May be raised when reading a file + PyErr_SetString(PyExc_RuntimeError, message); + break; +- case 3: ++ case Exiv2::ErrorCode::kerNotAnImage: + // kerNotAnImage This does not look like a {image type} image + // May be raised by readMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 4: ++ case Exiv2::ErrorCode::kerInvalidDataset: + // kerInvalidDataset Invalid dataset name `{dataset name}' + PyErr_SetString(PyExc_ValueError, message); + break; +- case 5: ++ case Exiv2::ErrorCode::kerInvalidRecord: + // kerInvalidRecord Invalid record name `{record name}' + // May be raised when instantiating an IptcKey from a string + PyErr_SetString(PyExc_KeyError, message); + break; +- case 6: ++ case Exiv2::ErrorCode::kerInvalidKey: + // kerInvalidKey Invalid key `{key}' + // May be raised when instantiating an ExifKey, an IptcKey or an + // XmpKey from a string + PyErr_SetString(PyExc_KeyError, message); + break; +- case 7: ++ case Exiv2::ErrorCode::kerInvalidTag: + // kerInvalidTag + // Invalid tag name or ifdId `{tag name}', ifdId {ifdId} + // May be raised when instantiating an ExifKey from a string + PyErr_SetString(PyExc_KeyError, message); + break; +- case 8: ++ case Exiv2::ErrorCode::kerValueNotSet: + // kerValueNotSet Value not set + // May be raised when calling value() on a datum + PyErr_SetString(PyExc_ValueError, message); + break; +- case 9: ++ case Exiv2::ErrorCode::kerDataSourceOpenFailed: + // kerDataSourceOpenFailed + // {path}: Failed to open the data source: {strerror} + // May be raised by readMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 10: ++ case Exiv2::ErrorCode::kerFileOpenFailed: + // kerFileOpenFailed + // {path}: Failed to open file ({mode}): {strerror} + // May be raised by writeMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 11: ++ case Exiv2::ErrorCode::kerFileOpenFailed: + // kerFileOpenFailed + // {path}: The file contains data of an unknown image type + // May be raised when opening an image + PyErr_SetString(PyExc_TypeError, message); + break; +- case 12: ++ case Exiv2::ErrorCode::kerMemoryContainsUnknownImageType: + // kerMemoryContainsUnknownImageType + //The memory contains data of an unknown image type + // May be raised when instantiating an image from a data buffer + PyErr_SetString(PyExc_IOError, message); + break; +- case 13: ++ case Exiv2::ErrorCode::kerUnsupportedImageType: + // kerUnsupportedImageType Image type {image type} is not supported + // May be raised when creating a new image + PyErr_SetString(PyExc_IOError, message); + break; +- case 14: ++ case Exiv2::ErrorCode::kerFailedToReadImageData: + // kerFailedToReadImageData Failed to read image data + // May be raised by readMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 15: ++ case Exiv2::ErrorCode::kerNotAJpeg: + // kerNotAJpeg This does not look like a JPEG image + // May be raised by readMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 17: ++ case Exiv2::ErrorCode::kerFileRenameFailed: + // kerFileRenameFailed + // {old path}: Failed to rename file to {new path}: {strerror} + // May be raised by writeMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 18: ++ case Exiv2::ErrorCode::kerTransferFailed: + // kerTransferFailed {path}: Transfer failed: {strerror} + // May be raised by writeMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 19: ++ case Exiv2::ErrorCode::kerMemoryTransferFailed: + // kerMemoryTransferFailed Memory transfer failed: {strerror} + // May be raised by writeMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 20: ++ case Exiv2::ErrorCode::kerInputDataReadFailed: + // kerInputDataReadFailed Failed to read input data + // May be raised by writeMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 21: ++ case Exiv2::ErrorCode::kerImageWriteFailed: + // kerImageWriteFailed Failed to write image + // May be raised by writeMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 22: ++ case Exiv2::ErrorCode::kerNoImageInInputData: + // kerNoImageInInputData Input data does not contain a valid image + // May be raised by writeMetadata() + PyErr_SetString(PyExc_IOError, message); + break; +- case 23: ++ case Exiv2::ErrorCode::kerInvalidIfdId: + // kerInvalidIfdId Invalid ifdId {ifdId} + // May be raised when instantiating an ExifKey from a tag and + // IFD item string + PyErr_SetString(PyExc_KeyError, message); + break; +- case 24: ++ case Exiv2::ErrorCode::kerValueTooLarge: + // kerValueTooLarge + // Entry::setValue: Value too large {tag}, {size}, {requested} + PyErr_SetString(PyExc_ValueError, message); + break; +- case 25: ++ case Exiv2::ErrorCode::kerDataAreaValueTooLarge: + // kerDataAreaValueTooLarge + // Entry::setDataArea: Value too large {tag}, {size}, {requested} + PyErr_SetString(PyExc_ValueError, message); + break; +- case 26: ++ case Exiv2::ErrorCode::kerOffsetOutOfRange: + // kerOffsetOutOfRange Offset out of range + // May be raised by writeMetadata() (TIFF) + PyErr_SetString(PyExc_IOError, message); + break; +- case 27: ++ case Exiv2::ErrorCode::kerUnsupportedDataAreaOffsetType: + // kerUnsupportedDataAreaOffsetType + // Unsupported data area offset type + // May be raised by writeMetadata() (TIFF) + PyErr_SetString(PyExc_IOError, message); + break; +- case 28: ++ case Exiv2::ErrorCode::kerInvalidCharset: + // kerInvalidCharset Invalid charset: `{charset name}' + // May be raised when instantiating a CommentValue from a string + PyErr_SetString(PyExc_ValueError, message); + break; +- case 29: ++ case Exiv2::ErrorCode::kerUnsupportedDateFormat: + // kerUnsupportedDateFormat Unsupported date format + // May be raised when instantiating a DateValue from a string + PyErr_SetString(PyExc_ValueError, message); + break; +- case 30: ++ case Exiv2::ErrorCode::kerUnsupportedTimeFormat: + // kerUnsupportedTimeFormat Unsupported time format + // May be raised when instantiating a TimeValue from a string + PyErr_SetString(PyExc_ValueError, message); + break; +- case 31: ++ case Exiv2::ErrorCode::kerWritingImageFormatUnsupported: + // kerWritingImageFormatUnsupported + // Writing to {image format} images is not supported + // May be raised by writeMetadata() for certain image types + PyErr_SetString(PyExc_IOError, message); + break; +- case 32: ++ case Exiv2::ErrorCode::kerInvalidSettingForImage: + // kerInvalidSettingForImage + // Setting {metadata type} in {image format} images is not supported + // May be raised when setting certain types of metadata for certain + // image types that don't support them + PyErr_SetString(PyExc_ValueError, message); + break; +- case 33: ++ case Exiv2::ErrorCode::kerNotACrwImage: + // kerNotACrwImage This does not look like a CRW image + // May be raised by readMetadata() (CRW) + PyErr_SetString(PyExc_IOError, message); + break; +- case 34: ++ case Exiv2::ErrorCode::kerFunctionNotSupported: + // kerFunctionNotSupported {function}: Not supported + PyErr_SetString(PyExc_IOError, message); + break; +- case 35: ++ case Exiv2::ErrorCode::kerNoNamespaceInfoForXmpPrefix: + // kerNoNamespaceInfoForXmpPrefix + // No namespace info available for XMP prefix `{prefix}' + // May be raised when retrieving property info for an XmpKey + PyErr_SetString(PyExc_KeyError, message); + break; +- case 36: ++ case Exiv2::ErrorCode::kerNoPrefixForNamespace: + // kerNoPrefixForNamespace + // No prefix registered for namespace `{namespace}', needed for + // property path `{property path}' + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_KeyError, message); + break; +- case 37: ++ case Exiv2::ErrorCode::kerTooLargeJpegSegment: + // kerTooLargeJpegSegment + // Size of {type of metadata} JPEG segment is larger than + // 65535 bytes + // May be raised by writeMetadata() (JPEG) + PyErr_SetString(PyExc_ValueError, message); + break; +- case 38: ++ case Exiv2::ErrorCode::kerUnhandledXmpdatum: + // kerUnhandledXmpdatum + // Unhandled Xmpdatum {key} of type {value type} + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_TypeError, message); + break; +- case 39: ++ case Exiv2::ErrorCode::kerUnhandledXmpNode: + // kerUnhandledXmpNode + // Unhandled XMP node {key} with opt={XMP Toolkit option flags} + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_TypeError, message); + break; +- case 40: ++ case Exiv2::ErrorCode::kerXMPToolkitError: + // kerXMPToolkitError + // XMP Toolkit error {error id}: {error message} + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_RuntimeError, message); + break; +- case 41: ++ case Exiv2::ErrorCode::kerDecodeLangAltPropertyFailed: + // kerDecodeLangAltPropertyFailed + // Failed to decode Lang Alt property {property path} + // with opt={XMP Toolkit option flags} + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_ValueError, message); + break; +- case 42: ++ case Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed: + // kerDecodeLangAltQualifierFailed + // Failed to decode Lang Alt qualifier {qualifier path} + // with opt={XMP Toolkit option flags} + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_ValueError, message); + break; +- case 43: ++ case Exiv2::ErrorCode::kerEncodeLangAltPropertyFailed: + // kerEncodeLangAltPropertyFailed + // Failed to encode Lang Alt property {key} + // May be raised by writeMetadata() + PyErr_SetString(PyExc_ValueError, message); + break; +- case 44: ++ case Exiv2::ErrorCode::kerPropertyNameIdentificationFailed: + // kerPropertyNameIdentificationFailed + // Failed to determine property name from path {property path}, + // namespace {namespace} + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_KeyError, message); + break; +- case 45: ++ case Exiv2::ErrorCode::kerSchemaNamespaceNotRegistered: + // kerSchemaNamespaceNotRegistered + // Schema namespace {namespace} is not registered with + // the XMP Toolkit + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_ValueError, message); + break; +- case 46: ++ case Exiv2::ErrorCode::kerNoNamespaceForPrefix: + // kerNoNamespaceForPrefix + // No namespace registered for prefix `{prefix}' + // May be raised when instantiating an XmpKey from a string + PyErr_SetString(PyExc_KeyError, message); + break; +- case 47: ++ case Exiv2::ErrorCode::kerAliasesNotSupported: + // kerAliasesNotSupported + // Aliases are not supported. Please send this XMP packet + // to ahuggel@gmx.net `{namespace}', `{property path}', `{value}' + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_ValueError, message); + break; +- case 48: ++ case Exiv2::ErrorCode::kerInvalidXmpText: + // kerInvalidXmpText + // Invalid XmpText type `{type}' + // May be raised when instantiating an XmpTextValue from a string + PyErr_SetString(PyExc_TypeError, message); + break; +- case 49: ++ case Exiv2::ErrorCode::kerTooManyTiffDirectoryEntries: + // kerTooManyTiffDirectoryEntries + // TIFF directory {TIFF directory name} has too many entries + // May be raised by writeMetadata() (TIFF) + PyErr_SetString(PyExc_IOError, message); + break; + // Added in py3exiv2 +- case 50: ++ case Exiv2::ErrorCode::kerMultipleTiffArrayElementTagsInDirectory: + // kerMultipleTiffArrayElementTagsInDirectory + // Multiple TIFF array element tags {number} in one directory") + // May be raised by readMetadata() (TIFF) + PyErr_SetString(PyExc_IOError, message); + break; +- case 51: ++ case Exiv2::ErrorCode::kerWrongTiffArrayElementTagType: + // kerWrongTiffArrayElementTagType + // TIFF array element tag {number} has wrong type") }, // %1=tag number + // May be raised by readMetadata() (TIFF) + PyErr_SetString(PyExc_TypeError, message); + break; + // Added in libexiv2 0.27 +- case 52: ++ case Exiv2::ErrorCode::kerInvalidKeyXmpValue: + // kerInvalidKeyXmpValue {key} has invalid XMP value type {type} + // May be raised by readMetadata() when reading the XMP data + PyErr_SetString(PyExc_ValueError, message); + break; +- case 53: ++ case Exiv2::ErrorCode::kerInvalidIccProfile: + // kerInvalidIccProfile Not a valid ICC Profile + PyErr_SetString(PyExc_ValueError, message); + break; +- case 54: ++ case Exiv2::ErrorCode::kerInvalidXMP: + // kerInvalidXMP Not valid XMP + PyErr_SetString(PyExc_TypeError, message); + break; +- case 55: ++ case Exiv2::ErrorCode::kerTiffDirectoryTooLarge: + // kerTiffDirectoryTooLarge tiff directory length is too large + PyErr_SetString(PyExc_ValueError, message); + break; +- case 56: ++ case Exiv2::ErrorCode::kerInvalidTypeValue: + // kerInvalidTypeValue + // Invalid type value detected in Image::printIFDStructure + PyErr_SetString(PyExc_TypeError, message); + break; +- case 57: ++ case Exiv2::ErrorCode::kerInvalidMalloc: + // kerInvalidMalloc + // Invalid memory allocation request + PyErr_SetString(PyExc_MemoryError, message); + break; +- case 58: ++ case Exiv2::ErrorCode::kerCorruptedMetadata: + // kerCorruptedMetadata Corrupted image metadata + PyErr_SetString(PyExc_IOError, message); + break; +- case 59: ++ case Exiv2::ErrorCode::kerArithmeticOverflow: + // kerArithmeticOverflow Arithmetic operation overflow + PyErr_SetString(PyExc_OverflowError, message); + break; +- case 60: ++ case Exiv2::ErrorCode::kerMallocFailed: + // kerMallocFailed Memory allocation failed + PyErr_SetString(PyExc_MemoryError, message); + break; +- + // Default handler + default: + PyErr_SetString(PyExc_RuntimeError, message); +@@ -1896,7 +1895,7 @@ void registerXmpNs(const std::string& na + { + std::string mssg("Namespace already exists: "); + mssg += prefix; +- throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); + } + #else + { +@@ -1925,7 +1924,7 @@ void unregisterXmpNs(const std::string& + { + std::string mssg("Can't unregister builtin namespace: "); + mssg += name; +- throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); + } + #else + { +@@ -1938,7 +1937,7 @@ void unregisterXmpNs(const std::string& + { + std::string mssg("Namespace does not exists: "); + mssg += name; +- throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); ++ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); + } + #else + { +--- a/src/exiv2wrapper.hpp ++++ b/src/exiv2wrapper.hpp +@@ -271,7 +271,7 @@ private: + std::string _filename; + Exiv2::byte* _data; + long _size; +- Exiv2::Image::AutoPtr _image; ++ Exiv2::Image::UniquePtr _image; + Exiv2::ExifData* _exifData; + Exiv2::IptcData* _iptcData; + Exiv2::XmpData* _xmpData; diff --git a/py3exiv2-link-boost.patch b/py3exiv2-link-boost.patch index f7cdc84..be162a0 100644 --- a/py3exiv2-link-boost.patch +++ b/py3exiv2-link-boost.patch @@ -1,8 +1,10 @@ -Index: py3exiv2-0.8.0/setup.py -=================================================================== ---- py3exiv2-0.8.0.orig/setup.py 2020-09-29 18:30:38.000000000 +0200 -+++ py3exiv2-0.8.0/setup.py 2020-10-20 08:52:35.836907091 +0200 -@@ -37,7 +37,7 @@ if platform.system() == "Darwin": +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/setup.py ++++ b/setup.py +@@ -40,7 +40,7 @@ if platform.system() == "Darwin": boostlib = get_libboost_osx() else: diff --git a/python-exiv2.changes b/python-exiv2.changes index 6e6bebc..3a65e4c 100644 --- a/python-exiv2.changes +++ b/python-exiv2.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri Aug 4 23:06:13 UTC 2023 - Matej Cepl + +- WIP INCOMPLETE +- Add exiv2_0-28-0.patch making the package compatible with the + latest exiv2 0.28 (lp#2027823). + ------------------------------------------------------------------- Thu Oct 13 17:56:29 UTC 2022 - Axel Braun diff --git a/python-exiv2.spec b/python-exiv2.spec index e4d49a8..e4d6633 100644 --- a/python-exiv2.spec +++ b/python-exiv2.spec @@ -1,7 +1,7 @@ # # spec file for package python-exiv2 # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,10 +16,6 @@ # -%{?!python_module:%define python_module() python-%{**} python3-%{**}} -# This is a python3 only package -%define skip_python2 1 - Name: python-exiv2 Version: 0.11.0 Release: 0 @@ -31,7 +27,9 @@ URL: https://launchpad.net/py3exiv2 Source0: https://files.pythonhosted.org/packages/source/p/py3exiv2/py3exiv2-%{version}.tar.gz # Patch0: py3exiv2-link-boost.patch -# +# PATCH-FIX-UPSTREAM exiv2_0-28-0.patch lp#2027823 mcepl@suse.com +# Fix compilation errors with exiv2 0.28.0+ +Patch1: exiv2_0-28-0.patch BuildRequires: %{python_module devel} BuildRequires: %{python_module setuptools} BuildRequires: fdupes From f7b2c29b1813986b80bb321dabf4955a4c604c47a18e1af18afc1228597b2736 Mon Sep 17 00:00:00 2001 From: Matej Cepl Date: Thu, 10 Aug 2023 22:17:50 +0000 Subject: [PATCH 2/2] - Update to 0.12.3: - upstream doesn't release proper changelog - Remove the exiv2_0-28-0.patch patch again. OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-exiv2?expand=0&rev=20 --- exiv2_0-28-0.patch | 643 ----------------------------------------- py3exiv2-0.11.0.tar.gz | 3 - py3exiv2-0.12.3.tar.gz | 3 + python-exiv2.changes | 8 +- python-exiv2.spec | 11 +- 5 files changed, 15 insertions(+), 653 deletions(-) delete mode 100644 exiv2_0-28-0.patch delete mode 100644 py3exiv2-0.11.0.tar.gz create mode 100644 py3exiv2-0.12.3.tar.gz diff --git a/exiv2_0-28-0.patch b/exiv2_0-28-0.patch deleted file mode 100644 index db29cb9..0000000 --- a/exiv2_0-28-0.patch +++ /dev/null @@ -1,643 +0,0 @@ ---- - src/exiv2wrapper.cpp | 171 +++++++++++++++++++++++++-------------------------- - src/exiv2wrapper.hpp | 2 - 2 files changed, 86 insertions(+), 87 deletions(-) - ---- a/src/exiv2wrapper.cpp -+++ b/src/exiv2wrapper.cpp -@@ -51,7 +51,7 @@ using std::auto_ptr; - // Custom macros - #ifdef HAVE_EXIV2_ERROR_CODE - #define CHECK_METADATA_READ \ -- if (!_dataRead) throw Exiv2::Error(Exiv2::kerErrorMessage, "metadata not read"); -+ if (!_dataRead) throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, "metadata not read"); - #else - #define CHECK_METADATA_READ \ - if (!_dataRead) throw Exiv2::Error(METADATA_NOT_READ); -@@ -67,7 +67,7 @@ void Image::_instantiate_image() - // If an exception is thrown, it has to be done outside of the - // Py_{BEGIN,END}_ALLOW_THREADS block. - #ifdef HAVE_EXIV2_ERROR_CODE -- Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); -+ Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); - #else - Exiv2::Error error(0); - #endif -@@ -96,7 +96,7 @@ void Image::_instantiate_image() - // Re-acquire the GIL - Py_END_ALLOW_THREADS - -- if (error.code() == 0) -+ if (error.code() == Exiv2::ErrorCode::kerSuccess) - { - assert(_image.get() != 0); - _dataRead = false; -@@ -153,7 +153,7 @@ void Image::readMetadata() - // If an exception is thrown, it has to be done outside of the - // Py_{BEGIN,END}_ALLOW_THREADS block. - #ifdef HAVE_EXIV2_ERROR_CODE -- Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); -+ Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); - #else - Exiv2::Error error(0); - #endif -@@ -180,7 +180,7 @@ void Image::readMetadata() - // Re-acquire the GIL - Py_END_ALLOW_THREADS - -- if (error.code() != 0) -+ if (error.code() != Exiv2::ErrorCode::kerSuccess) - { - throw error; - } -@@ -193,7 +193,7 @@ void Image::writeMetadata() - // If an exception is thrown, it has to be done outside of the - // Py_{BEGIN,END}_ALLOW_THREADS block. - #ifdef HAVE_EXIV2_ERROR_CODE -- Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); -+ Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); - #else - Exiv2::Error error(0); - #endif -@@ -216,7 +216,7 @@ void Image::writeMetadata() - // Re-acquire the GIL - Py_END_ALLOW_THREADS - -- if (error.code() != 0) -+ if (error.code() != Exiv2::ErrorCode::kerSuccess) - { - throw error; - } -@@ -263,7 +263,7 @@ const ExifTag Image::getExifTag(std::str - if(_exifData->findKey(exifKey) == _exifData->end()) - #ifdef HAVE_EXIV2_ERROR_CODE - { -- throw Exiv2::Error(Exiv2::kerInvalidKey, key); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); - } - #else - { -@@ -283,7 +283,7 @@ void Image::deleteExifTag(std::string ke - if(datum == _exifData->end()) - #ifdef HAVE_EXIV2_ERROR_CODE - { -- throw Exiv2::Error(Exiv2::kerInvalidKey, key); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); - } - #else - { -@@ -321,7 +321,7 @@ const IptcTag Image::getIptcTag(std::str - if(_iptcData->findKey(iptcKey) == _iptcData->end()) - #ifdef HAVE_EXIV2_ERROR_CODE - { -- throw Exiv2::Error(Exiv2::kerInvalidKey, key); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); - } - #else - { -@@ -341,7 +341,7 @@ void Image::deleteIptcTag(std::string ke - if (dataIterator == _iptcData->end()) - #ifdef HAVE_EXIV2_ERROR_CODE - { -- throw Exiv2::Error(Exiv2::kerInvalidKey, key); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); - } - #else - { -@@ -385,7 +385,7 @@ const XmpTag Image::getXmpTag(std::strin - if(_xmpData->findKey(xmpKey) == _xmpData->end()) - #ifdef HAVE_EXIV2_ERROR_CODE - { -- throw Exiv2::Error(Exiv2::kerInvalidKey, key); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); - } - #else - { -@@ -409,7 +409,7 @@ void Image::deleteXmpTag(std::string key - else - #ifdef HAVE_EXIV2_ERROR_CODE - { -- throw Exiv2::Error(Exiv2::kerInvalidKey, key); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); - } - #else - { -@@ -461,7 +461,7 @@ void Image::copyMetadata(Image& other, b - { - #ifdef HAVE_EXIV2_ERROR_CODE - { -- throw Exiv2::Error(Exiv2::kerErrorMessage, "metadata not read"); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, "metadata not read"); - } - #else - { -@@ -570,7 +570,7 @@ boost::python::list Image::getExifThumbn - Exiv2::DataBuf buffer = _getExifThumbnail()->copy(); - // Copy the data buffer in a list. - boost::python::list data; -- for(unsigned int i = 0; i < buffer.size_; ++i) -+ for(unsigned int i = 0; i < buffer.size; ++i) - { - unsigned int datum = buffer.pData_[i]; - data.append(datum); -@@ -688,7 +688,7 @@ void ExifTag::setRawValue(const std::str - { - std::string message("Invalid value: "); - message += value; -- throw Exiv2::Error(Exiv2::kerInvalidDataset, message); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, message); - } - #else - { -@@ -708,7 +708,7 @@ void ExifTag::setParentImage(Image& imag - return; - } - _data = data; -- Exiv2::Value::AutoPtr value = _datum->getValue(); -+ Exiv2::Value::UniquePtr value = _datum->getValue(); - delete _datum; - _datum = &(*_data)[_key.key()]; - _datum->setValue(value.get()); -@@ -810,7 +810,7 @@ IptcTag::IptcTag(const std::string& key, - { - std::string mssg("Tag not repeatable: "); - mssg += key; -- throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); - } - #else - { -@@ -838,7 +838,7 @@ void IptcTag::setRawValues(const boost:: - // one value. - #ifdef HAVE_EXIV2_ERROR_CODE - { -- throw Exiv2::Error(Exiv2::kerInvalidDataset, "Tag not repeatable"); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, "Tag not repeatable"); - } - #else - { -@@ -864,7 +864,7 @@ void IptcTag::setRawValues(const boost:: - mssg += value; - // there's no invalid value error in libexiv2, so we use - // kerInvalidDataset wich raise a Python ValueError -- throw Exiv2::Error(Exiv2::kerInvalidDataset, mssg); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, mssg); - } - #else - { -@@ -888,7 +888,7 @@ void IptcTag::setRawValues(const boost:: - { - std::string mssg("Invalid value: "); - mssg += value; -- throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); - } - #else - { -@@ -901,7 +901,7 @@ void IptcTag::setRawValues(const boost:: - { - std::string mssg("Tag not repeatable: "); - mssg += _key.key(); -- throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); - } - #else - { -@@ -1089,7 +1089,7 @@ void XmpTag::setParentImage(Image& image - // anything (see https://bugs.launchpad.net/pyexiv2/+bug/622739). - return; - } -- Exiv2::Value::AutoPtr value = _datum->getValue(); -+ Exiv2::Value::UniquePtr value = _datum->getValue(); - delete _datum; - _from_datum = true; - _datum = &(*image.getXmpData())[_key.key()]; -@@ -1221,331 +1221,330 @@ void translateExiv2Error(Exiv2::Error co - // defined by Exiv2 (file 'src/error.cpp') are changed - switch (error.code()) - { -- case 1: -+ case Exiv2::ErrorCode::kerErrorMessage: - // kerErrorMessage Unidentified error - PyErr_SetString(PyExc_RuntimeError, message); - break; -- case 2: -+ case Exiv2::ErrorCode::kerCallFailed: - // kerCallFailed {path}: Call to `{function}' failed: {strerror} - // May be raised when reading a file - PyErr_SetString(PyExc_RuntimeError, message); - break; -- case 3: -+ case Exiv2::ErrorCode::kerNotAnImage: - // kerNotAnImage This does not look like a {image type} image - // May be raised by readMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 4: -+ case Exiv2::ErrorCode::kerInvalidDataset: - // kerInvalidDataset Invalid dataset name `{dataset name}' - PyErr_SetString(PyExc_ValueError, message); - break; -- case 5: -+ case Exiv2::ErrorCode::kerInvalidRecord: - // kerInvalidRecord Invalid record name `{record name}' - // May be raised when instantiating an IptcKey from a string - PyErr_SetString(PyExc_KeyError, message); - break; -- case 6: -+ case Exiv2::ErrorCode::kerInvalidKey: - // kerInvalidKey Invalid key `{key}' - // May be raised when instantiating an ExifKey, an IptcKey or an - // XmpKey from a string - PyErr_SetString(PyExc_KeyError, message); - break; -- case 7: -+ case Exiv2::ErrorCode::kerInvalidTag: - // kerInvalidTag - // Invalid tag name or ifdId `{tag name}', ifdId {ifdId} - // May be raised when instantiating an ExifKey from a string - PyErr_SetString(PyExc_KeyError, message); - break; -- case 8: -+ case Exiv2::ErrorCode::kerValueNotSet: - // kerValueNotSet Value not set - // May be raised when calling value() on a datum - PyErr_SetString(PyExc_ValueError, message); - break; -- case 9: -+ case Exiv2::ErrorCode::kerDataSourceOpenFailed: - // kerDataSourceOpenFailed - // {path}: Failed to open the data source: {strerror} - // May be raised by readMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 10: -+ case Exiv2::ErrorCode::kerFileOpenFailed: - // kerFileOpenFailed - // {path}: Failed to open file ({mode}): {strerror} - // May be raised by writeMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 11: -+ case Exiv2::ErrorCode::kerFileOpenFailed: - // kerFileOpenFailed - // {path}: The file contains data of an unknown image type - // May be raised when opening an image - PyErr_SetString(PyExc_TypeError, message); - break; -- case 12: -+ case Exiv2::ErrorCode::kerMemoryContainsUnknownImageType: - // kerMemoryContainsUnknownImageType - //The memory contains data of an unknown image type - // May be raised when instantiating an image from a data buffer - PyErr_SetString(PyExc_IOError, message); - break; -- case 13: -+ case Exiv2::ErrorCode::kerUnsupportedImageType: - // kerUnsupportedImageType Image type {image type} is not supported - // May be raised when creating a new image - PyErr_SetString(PyExc_IOError, message); - break; -- case 14: -+ case Exiv2::ErrorCode::kerFailedToReadImageData: - // kerFailedToReadImageData Failed to read image data - // May be raised by readMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 15: -+ case Exiv2::ErrorCode::kerNotAJpeg: - // kerNotAJpeg This does not look like a JPEG image - // May be raised by readMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 17: -+ case Exiv2::ErrorCode::kerFileRenameFailed: - // kerFileRenameFailed - // {old path}: Failed to rename file to {new path}: {strerror} - // May be raised by writeMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 18: -+ case Exiv2::ErrorCode::kerTransferFailed: - // kerTransferFailed {path}: Transfer failed: {strerror} - // May be raised by writeMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 19: -+ case Exiv2::ErrorCode::kerMemoryTransferFailed: - // kerMemoryTransferFailed Memory transfer failed: {strerror} - // May be raised by writeMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 20: -+ case Exiv2::ErrorCode::kerInputDataReadFailed: - // kerInputDataReadFailed Failed to read input data - // May be raised by writeMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 21: -+ case Exiv2::ErrorCode::kerImageWriteFailed: - // kerImageWriteFailed Failed to write image - // May be raised by writeMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 22: -+ case Exiv2::ErrorCode::kerNoImageInInputData: - // kerNoImageInInputData Input data does not contain a valid image - // May be raised by writeMetadata() - PyErr_SetString(PyExc_IOError, message); - break; -- case 23: -+ case Exiv2::ErrorCode::kerInvalidIfdId: - // kerInvalidIfdId Invalid ifdId {ifdId} - // May be raised when instantiating an ExifKey from a tag and - // IFD item string - PyErr_SetString(PyExc_KeyError, message); - break; -- case 24: -+ case Exiv2::ErrorCode::kerValueTooLarge: - // kerValueTooLarge - // Entry::setValue: Value too large {tag}, {size}, {requested} - PyErr_SetString(PyExc_ValueError, message); - break; -- case 25: -+ case Exiv2::ErrorCode::kerDataAreaValueTooLarge: - // kerDataAreaValueTooLarge - // Entry::setDataArea: Value too large {tag}, {size}, {requested} - PyErr_SetString(PyExc_ValueError, message); - break; -- case 26: -+ case Exiv2::ErrorCode::kerOffsetOutOfRange: - // kerOffsetOutOfRange Offset out of range - // May be raised by writeMetadata() (TIFF) - PyErr_SetString(PyExc_IOError, message); - break; -- case 27: -+ case Exiv2::ErrorCode::kerUnsupportedDataAreaOffsetType: - // kerUnsupportedDataAreaOffsetType - // Unsupported data area offset type - // May be raised by writeMetadata() (TIFF) - PyErr_SetString(PyExc_IOError, message); - break; -- case 28: -+ case Exiv2::ErrorCode::kerInvalidCharset: - // kerInvalidCharset Invalid charset: `{charset name}' - // May be raised when instantiating a CommentValue from a string - PyErr_SetString(PyExc_ValueError, message); - break; -- case 29: -+ case Exiv2::ErrorCode::kerUnsupportedDateFormat: - // kerUnsupportedDateFormat Unsupported date format - // May be raised when instantiating a DateValue from a string - PyErr_SetString(PyExc_ValueError, message); - break; -- case 30: -+ case Exiv2::ErrorCode::kerUnsupportedTimeFormat: - // kerUnsupportedTimeFormat Unsupported time format - // May be raised when instantiating a TimeValue from a string - PyErr_SetString(PyExc_ValueError, message); - break; -- case 31: -+ case Exiv2::ErrorCode::kerWritingImageFormatUnsupported: - // kerWritingImageFormatUnsupported - // Writing to {image format} images is not supported - // May be raised by writeMetadata() for certain image types - PyErr_SetString(PyExc_IOError, message); - break; -- case 32: -+ case Exiv2::ErrorCode::kerInvalidSettingForImage: - // kerInvalidSettingForImage - // Setting {metadata type} in {image format} images is not supported - // May be raised when setting certain types of metadata for certain - // image types that don't support them - PyErr_SetString(PyExc_ValueError, message); - break; -- case 33: -+ case Exiv2::ErrorCode::kerNotACrwImage: - // kerNotACrwImage This does not look like a CRW image - // May be raised by readMetadata() (CRW) - PyErr_SetString(PyExc_IOError, message); - break; -- case 34: -+ case Exiv2::ErrorCode::kerFunctionNotSupported: - // kerFunctionNotSupported {function}: Not supported - PyErr_SetString(PyExc_IOError, message); - break; -- case 35: -+ case Exiv2::ErrorCode::kerNoNamespaceInfoForXmpPrefix: - // kerNoNamespaceInfoForXmpPrefix - // No namespace info available for XMP prefix `{prefix}' - // May be raised when retrieving property info for an XmpKey - PyErr_SetString(PyExc_KeyError, message); - break; -- case 36: -+ case Exiv2::ErrorCode::kerNoPrefixForNamespace: - // kerNoPrefixForNamespace - // No prefix registered for namespace `{namespace}', needed for - // property path `{property path}' - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_KeyError, message); - break; -- case 37: -+ case Exiv2::ErrorCode::kerTooLargeJpegSegment: - // kerTooLargeJpegSegment - // Size of {type of metadata} JPEG segment is larger than - // 65535 bytes - // May be raised by writeMetadata() (JPEG) - PyErr_SetString(PyExc_ValueError, message); - break; -- case 38: -+ case Exiv2::ErrorCode::kerUnhandledXmpdatum: - // kerUnhandledXmpdatum - // Unhandled Xmpdatum {key} of type {value type} - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_TypeError, message); - break; -- case 39: -+ case Exiv2::ErrorCode::kerUnhandledXmpNode: - // kerUnhandledXmpNode - // Unhandled XMP node {key} with opt={XMP Toolkit option flags} - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_TypeError, message); - break; -- case 40: -+ case Exiv2::ErrorCode::kerXMPToolkitError: - // kerXMPToolkitError - // XMP Toolkit error {error id}: {error message} - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_RuntimeError, message); - break; -- case 41: -+ case Exiv2::ErrorCode::kerDecodeLangAltPropertyFailed: - // kerDecodeLangAltPropertyFailed - // Failed to decode Lang Alt property {property path} - // with opt={XMP Toolkit option flags} - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_ValueError, message); - break; -- case 42: -+ case Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed: - // kerDecodeLangAltQualifierFailed - // Failed to decode Lang Alt qualifier {qualifier path} - // with opt={XMP Toolkit option flags} - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_ValueError, message); - break; -- case 43: -+ case Exiv2::ErrorCode::kerEncodeLangAltPropertyFailed: - // kerEncodeLangAltPropertyFailed - // Failed to encode Lang Alt property {key} - // May be raised by writeMetadata() - PyErr_SetString(PyExc_ValueError, message); - break; -- case 44: -+ case Exiv2::ErrorCode::kerPropertyNameIdentificationFailed: - // kerPropertyNameIdentificationFailed - // Failed to determine property name from path {property path}, - // namespace {namespace} - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_KeyError, message); - break; -- case 45: -+ case Exiv2::ErrorCode::kerSchemaNamespaceNotRegistered: - // kerSchemaNamespaceNotRegistered - // Schema namespace {namespace} is not registered with - // the XMP Toolkit - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_ValueError, message); - break; -- case 46: -+ case Exiv2::ErrorCode::kerNoNamespaceForPrefix: - // kerNoNamespaceForPrefix - // No namespace registered for prefix `{prefix}' - // May be raised when instantiating an XmpKey from a string - PyErr_SetString(PyExc_KeyError, message); - break; -- case 47: -+ case Exiv2::ErrorCode::kerAliasesNotSupported: - // kerAliasesNotSupported - // Aliases are not supported. Please send this XMP packet - // to ahuggel@gmx.net `{namespace}', `{property path}', `{value}' - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_ValueError, message); - break; -- case 48: -+ case Exiv2::ErrorCode::kerInvalidXmpText: - // kerInvalidXmpText - // Invalid XmpText type `{type}' - // May be raised when instantiating an XmpTextValue from a string - PyErr_SetString(PyExc_TypeError, message); - break; -- case 49: -+ case Exiv2::ErrorCode::kerTooManyTiffDirectoryEntries: - // kerTooManyTiffDirectoryEntries - // TIFF directory {TIFF directory name} has too many entries - // May be raised by writeMetadata() (TIFF) - PyErr_SetString(PyExc_IOError, message); - break; - // Added in py3exiv2 -- case 50: -+ case Exiv2::ErrorCode::kerMultipleTiffArrayElementTagsInDirectory: - // kerMultipleTiffArrayElementTagsInDirectory - // Multiple TIFF array element tags {number} in one directory") - // May be raised by readMetadata() (TIFF) - PyErr_SetString(PyExc_IOError, message); - break; -- case 51: -+ case Exiv2::ErrorCode::kerWrongTiffArrayElementTagType: - // kerWrongTiffArrayElementTagType - // TIFF array element tag {number} has wrong type") }, // %1=tag number - // May be raised by readMetadata() (TIFF) - PyErr_SetString(PyExc_TypeError, message); - break; - // Added in libexiv2 0.27 -- case 52: -+ case Exiv2::ErrorCode::kerInvalidKeyXmpValue: - // kerInvalidKeyXmpValue {key} has invalid XMP value type {type} - // May be raised by readMetadata() when reading the XMP data - PyErr_SetString(PyExc_ValueError, message); - break; -- case 53: -+ case Exiv2::ErrorCode::kerInvalidIccProfile: - // kerInvalidIccProfile Not a valid ICC Profile - PyErr_SetString(PyExc_ValueError, message); - break; -- case 54: -+ case Exiv2::ErrorCode::kerInvalidXMP: - // kerInvalidXMP Not valid XMP - PyErr_SetString(PyExc_TypeError, message); - break; -- case 55: -+ case Exiv2::ErrorCode::kerTiffDirectoryTooLarge: - // kerTiffDirectoryTooLarge tiff directory length is too large - PyErr_SetString(PyExc_ValueError, message); - break; -- case 56: -+ case Exiv2::ErrorCode::kerInvalidTypeValue: - // kerInvalidTypeValue - // Invalid type value detected in Image::printIFDStructure - PyErr_SetString(PyExc_TypeError, message); - break; -- case 57: -+ case Exiv2::ErrorCode::kerInvalidMalloc: - // kerInvalidMalloc - // Invalid memory allocation request - PyErr_SetString(PyExc_MemoryError, message); - break; -- case 58: -+ case Exiv2::ErrorCode::kerCorruptedMetadata: - // kerCorruptedMetadata Corrupted image metadata - PyErr_SetString(PyExc_IOError, message); - break; -- case 59: -+ case Exiv2::ErrorCode::kerArithmeticOverflow: - // kerArithmeticOverflow Arithmetic operation overflow - PyErr_SetString(PyExc_OverflowError, message); - break; -- case 60: -+ case Exiv2::ErrorCode::kerMallocFailed: - // kerMallocFailed Memory allocation failed - PyErr_SetString(PyExc_MemoryError, message); - break; -- - // Default handler - default: - PyErr_SetString(PyExc_RuntimeError, message); -@@ -1896,7 +1895,7 @@ void registerXmpNs(const std::string& na - { - std::string mssg("Namespace already exists: "); - mssg += prefix; -- throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); - } - #else - { -@@ -1925,7 +1924,7 @@ void unregisterXmpNs(const std::string& - { - std::string mssg("Can't unregister builtin namespace: "); - mssg += name; -- throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); - } - #else - { -@@ -1938,7 +1937,7 @@ void unregisterXmpNs(const std::string& - { - std::string mssg("Namespace does not exists: "); - mssg += name; -- throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); -+ throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); - } - #else - { ---- a/src/exiv2wrapper.hpp -+++ b/src/exiv2wrapper.hpp -@@ -271,7 +271,7 @@ private: - std::string _filename; - Exiv2::byte* _data; - long _size; -- Exiv2::Image::AutoPtr _image; -+ Exiv2::Image::UniquePtr _image; - Exiv2::ExifData* _exifData; - Exiv2::IptcData* _iptcData; - Exiv2::XmpData* _xmpData; diff --git a/py3exiv2-0.11.0.tar.gz b/py3exiv2-0.11.0.tar.gz deleted file mode 100644 index ece12ed..0000000 --- a/py3exiv2-0.11.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6600da6b897199d4da66191b96045f3ccc5f57010da76b3ac5d292b83fcca844 -size 36255 diff --git a/py3exiv2-0.12.3.tar.gz b/py3exiv2-0.12.3.tar.gz new file mode 100644 index 0000000..fd785d3 --- /dev/null +++ b/py3exiv2-0.12.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c97d0cc8db8d579f8709876879faff9809c4000279d4cdd3d0fb2fa7cdcbf0b6 +size 47062 diff --git a/python-exiv2.changes b/python-exiv2.changes index 3a65e4c..8c5b0b2 100644 --- a/python-exiv2.changes +++ b/python-exiv2.changes @@ -1,7 +1,13 @@ +------------------------------------------------------------------- +Thu Aug 10 21:33:24 UTC 2023 - Matej Cepl + +- Update to 0.12.3: + - upstream doesn't release proper changelog +- Remove the exiv2_0-28-0.patch patch again. + ------------------------------------------------------------------- Fri Aug 4 23:06:13 UTC 2023 - Matej Cepl -- WIP INCOMPLETE - Add exiv2_0-28-0.patch making the package compatible with the latest exiv2 0.28 (lp#2027823). diff --git a/python-exiv2.spec b/python-exiv2.spec index e4d6633..ab0712d 100644 --- a/python-exiv2.spec +++ b/python-exiv2.spec @@ -17,7 +17,7 @@ Name: python-exiv2 -Version: 0.11.0 +Version: 0.12.3 Release: 0 Summary: Python3 bindings for the exiv2 library License: GPL-3.0-only @@ -27,9 +27,6 @@ URL: https://launchpad.net/py3exiv2 Source0: https://files.pythonhosted.org/packages/source/p/py3exiv2/py3exiv2-%{version}.tar.gz # Patch0: py3exiv2-link-boost.patch -# PATCH-FIX-UPSTREAM exiv2_0-28-0.patch lp#2027823 mcepl@suse.com -# Fix compilation errors with exiv2 0.28.0+ -Patch1: exiv2_0-28-0.patch BuildRequires: %{python_module devel} BuildRequires: %{python_module setuptools} BuildRequires: fdupes @@ -58,9 +55,11 @@ easy manipulation of image metadata. %install %python_install -%python_expand %fdupes %{buildroot}%{$python_sitelib} +%python_expand %fdupes %{buildroot}%{$python_sitearch} %files %{python_files} -%{python_sitearch}/* +%{python_sitearch}/libexiv2python.*.so +%{python_sitearch}/pyexiv2 +%{python_sitearch}/py3exiv2-%{version}*-info %changelog