diff --git a/srcpkgs/libextractor/patches/exiv2-0.28.patch b/srcpkgs/libextractor/patches/exiv2-0.28.patch new file mode 100644 index 00000000000..de1b3cee5de --- /dev/null +++ b/srcpkgs/libextractor/patches/exiv2-0.28.patch @@ -0,0 +1,303 @@ +Patch based on https://gitlab.archlinux.org/archlinux/packaging/packages/libextractor/-/blob/main/exiv2-0.28.patch, +with an additional minor change to fix build on 32-bit platforms. +--- a/src/plugins/exiv2_extractor.cc 2023-11-18 14:03:36.454439185 +0000 ++++ b/src/plugins/exiv2_extractor.cc 2023-11-18 14:03:40.462453936 +0000 +@@ -90,7 +90,11 @@ + * @param rcount number of bytes to read + * @return buffer with data read, empty buffer (!) on failure (!) + */ ++#if EXIV2_TEST_VERSION (0,28,0) ++virtual Exiv2::DataBuf read (size_t rcount); ++#else + virtual Exiv2::DataBuf read (long rcount); ++#endif + + /** + * Read up to 'rcount' bytes into 'buf'. +@@ -99,8 +103,17 @@ + * @param rcount size of 'buf' + * @return number of bytes read successfully, 0 on failure (!) + */ ++#if EXIV2_TEST_VERSION (0,28,0) ++virtual size_t read (Exiv2::byte *buf, ++ size_t rcount); ++#else + virtual long read (Exiv2::byte *buf, + long rcount); ++#endif ++ ++#if EXIV2_TEST_VERSION (0,28,0) ++virtual void populateFakeData(); ++#endif + + /** + * Read a single character. +@@ -117,8 +130,13 @@ + * @param wcount how many bytes to write + * @return -1 (always fails) + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++virtual size_t write (const Exiv2::byte *data, ++ size_t wcount); ++#else + virtual long write (const Exiv2::byte *data, + long wcount); ++#endif + + /** + * Write to stream. +@@ -126,7 +144,11 @@ + * @param src stream to copy + * @return -1 (always fails) + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++virtual size_t write (Exiv2::BasicIo &src); ++#else + virtual long write (Exiv2::BasicIo &src); ++#endif + + /** + * Write a single byte. +@@ -150,7 +172,7 @@ + * @parma pos offset is relative to where? + * @return -1 on failure, 0 on success + */ +-virtual int seek (long offset, ++virtual int seek (int64_t offset, + Exiv2::BasicIo::Position pos); + + /** +@@ -172,7 +194,11 @@ + * + * @return -1 on error + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++virtual size_t tell (void) const; ++#else + virtual long int tell (void) const; ++#endif + + /** + * Return overall size of the file. +@@ -213,7 +239,11 @@ + * + * @throws error + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++virtual const std::string& path () const noexcept; ++#else + virtual std::string path () const; ++#endif + + #ifdef EXV_UNICODE_PATH + /** +@@ -230,7 +260,11 @@ + * + * @throws error + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++virtual Exiv2::BasicIo::UniquePtr temporary () const; ++#else + virtual Exiv2::BasicIo::AutoPtr temporary () const; ++#endif + + }; + +@@ -266,7 +300,11 @@ + * @return buffer with data read, empty buffer (!) on failure (!) + */ + Exiv2::DataBuf ++#if EXIV2_TEST_VERSION (0,28,0) ++ExtractorIO::read (size_t rcount) ++#else + ExtractorIO::read (long rcount) ++#endif + { + void *data; + ssize_t ret; +@@ -284,9 +322,15 @@ + * @param rcount size of 'buf' + * @return number of bytes read successfully, 0 on failure (!) + */ ++#if EXIV2_TEST_VERSION (0,28,0) ++size_t ++ExtractorIO::read (Exiv2::byte *buf, ++ size_t rcount) ++#else + long + ExtractorIO::read (Exiv2::byte *buf, + long rcount) ++#endif + { + void *data; + ssize_t ret; +@@ -305,6 +349,12 @@ + return got; + } + ++#if EXIV2_TEST_VERSION (0,28,0) ++void ExtractorIO::populateFakeData() ++{ ++ return; ++} ++#endif + + /** + * Read a single character. +@@ -319,7 +369,9 @@ + const unsigned char *r; + + if (1 != ec->read (ec->cls, &data, 1)) +-#if EXIV2_TEST_VERSION (0,27,0) ++#if EXIV2_TEST_VERSION(0,28,0) ++ throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); ++#elif EXIV2_TEST_VERSION (0,27,0) + throw Exiv2::BasicError (Exiv2::kerDecodeLangAltQualifierFailed); + #else + throw Exiv2::BasicError (42 /* error code */); +@@ -336,9 +388,15 @@ + * @param wcount how many bytes to write + * @return -1 (always fails) + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++size_t ++ExtractorIO::write (const Exiv2::byte *data, ++ size_t wcount) ++#else + long + ExtractorIO::write (const Exiv2::byte *data, + long wcount) ++#endif + { + return -1; + } +@@ -350,7 +408,11 @@ + * @param src stream to copy + * @return -1 (always fails) + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++size_t ++#else + long ++#endif + ExtractorIO::write (Exiv2::BasicIo &src) + { + return -1; +@@ -378,7 +440,9 @@ + void + ExtractorIO::transfer (Exiv2::BasicIo& src) + { +-#if EXIV2_TEST_VERSION (0,27,0) ++#if EXIV2_TEST_VERSION(0,28,0) ++ throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); ++#elif EXIV2_TEST_VERSION (0,27,0) + throw Exiv2::BasicError (Exiv2::kerDecodeLangAltQualifierFailed); + #else + throw Exiv2::BasicError (42 /* error code */); +@@ -394,7 +458,7 @@ + * @return -1 on failure, 0 on success + */ + int +-ExtractorIO::seek (long offset, ++ExtractorIO::seek (int64_t offset, + Exiv2::BasicIo::Position pos) + { + int rel; +@@ -427,7 +491,9 @@ + Exiv2::byte * + ExtractorIO::mmap (bool isWritable) + { +-#if EXIV2_TEST_VERSION (0,27,0) ++#if EXIV2_TEST_VERSION (0,28,0) ++ throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); ++#elif EXIV2_TEST_VERSION (0,27,0) + throw Exiv2::BasicError (Exiv2::kerDecodeLangAltQualifierFailed); + #else + throw Exiv2::BasicError (42 /* error code */); +@@ -452,7 +518,11 @@ + * + * @return -1 on error + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++size_t ++#else + long int ++#endif + ExtractorIO::tell (void) const + { + return (long) ec->seek (ec->cls, 0, SEEK_CUR); +@@ -516,10 +586,17 @@ + * + * @throws error + */ ++#if EXIV2_TEST_VERSION (0,28,0) ++const std::string& ++ExtractorIO::path () const noexcept ++#else + std::string + ExtractorIO::path () const ++#endif + { +-#if EXIV2_TEST_VERSION (0,27,0) ++#if EXIV2_TEST_VERSION (0,28,0) ++ throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); ++#elif EXIV2_TEST_VERSION (0,27,0) + throw Exiv2::BasicError (Exiv2::kerDecodeLangAltQualifierFailed); + #else + throw Exiv2::BasicError (42 /* error code */); +@@ -536,7 +613,9 @@ + std::wstring + ExtractorIO::wpath () const + { +-#if EXIV2_TEST_VERSION (0,27,0) ++#if EXIV2_TEST_VERSION (0,28,0) ++ throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); ++#elif EXIV2_TEST_VERSION (0,27,0) + throw Exiv2::BasicError (Exiv2::kerDecodeLangAltQualifierFailed); + #else + throw Exiv2::BasicError (42 /* error code */); +@@ -552,11 +631,17 @@ + * + * @throws error + */ ++#if EXIV2_TEST_VERSION(0,28,0) ++Exiv2::BasicIo::UniquePtr ++#else + Exiv2::BasicIo::AutoPtr ++#endif + ExtractorIO::temporary () const + { + fprintf (stderr, "throwing temporary error\n"); +-#if EXIV2_TEST_VERSION (0,27,0) ++#if EXIV2_TEST_VERSION(0,28,0) ++ throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); ++#elif EXIV2_TEST_VERSION (0,27,0) + throw Exiv2::BasicError (Exiv2::kerDecodeLangAltQualifierFailed); + #else + throw Exiv2::BasicError (42 /* error code */); +@@ -737,8 +822,13 @@ + #if ! EXIV2_TEST_VERSION (0,24,0) + Exiv2::LogMsg::setLevel (Exiv2::LogMsg::mute); + #endif ++#if EXIV2_TEST_VERSION(0,28,0) ++ std::unique_ptr eio (new ExtractorIO (ec)); ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open (std::move(eio)); ++#else + std::auto_ptr eio (new ExtractorIO (ec)); + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open (eio); ++#endif + if (0 == image.get ()) + return; + image->readMetadata (); +@@ -822,7 +912,11 @@ + ADDXMP ("Xmp.lr.hierarchicalSubject", EXTRACTOR_METATYPE_SUBJECT); + } + } ++#if EXIV2_TEST_VERSION (0,28,0) ++ catch (const Exiv2::Error& e) ++#else + catch (const Exiv2::AnyError& e) ++#endif + { + #if DEBUG + std::cerr << "Caught Exiv2 exception '" << e << "'\n"; diff --git a/srcpkgs/libextractor/patches/fix-tests.diff b/srcpkgs/libextractor/patches/fix-tests.diff new file mode 100644 index 00000000000..3b4ee7cbeea --- /dev/null +++ b/srcpkgs/libextractor/patches/fix-tests.diff @@ -0,0 +1,24 @@ +--- a/src/plugins/test_exiv2.c 2021-01-30 13:20:23.000000000 +0000 ++++ b/src/plugins/test_exiv2.c 2023-11-03 19:39:43.115274492 +0000 +@@ -49,8 +49,8 @@ + EXTRACTOR_METATYPE_GPS_LATITUDE, + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", +- "28deg 8' (18|17.585)\" ?", +- strlen ("28deg 8' (18|17.585)\" ?") + 1, ++ "28 deg 8' (18|17.58)\" ?", ++ strlen ("28 deg 8' (18|17.58)\" ?") + 1, + 0, + .regex = 1 + }, +@@ -66,8 +66,8 @@ + EXTRACTOR_METATYPE_GPS_LONGITUDE, + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", +- "14deg 14' (22|21.713)\" ?", +- strlen ("14deg 14' (22|21.713)\" ?"), ++ "14 deg 14' (22|21.71)\" ?", ++ strlen ("14 deg 14' (22|21.71)\" ?"), + 0, + .regex = 1 + }, diff --git a/srcpkgs/libextractor/template b/srcpkgs/libextractor/template index bfcea979a30..044c663a3a0 100644 --- a/srcpkgs/libextractor/template +++ b/srcpkgs/libextractor/template @@ -1,7 +1,7 @@ # Template file for 'libextractor' pkgname=libextractor version=1.11 -revision=3 +revision=4 build_style=gnu-configure configure_args="--disable-static" hostmakedepends="pkg-config"