From 2bbfd797742c55c3b7ccb14dbc36ab931e9d5bfe Mon Sep 17 00:00:00 2001 From: Andreas Sturmlechner Date: Wed, 26 Dec 2018 13:03:06 +0100 Subject: media-gfx/krita: Fix build with >=exiv2-0.27 Package-Manager: Portage-2.3.52, Repoman-2.3.12 Signed-off-by: Andreas Sturmlechner --- media-gfx/krita/files/krita-4.1.7-exiv2-0.27.patch | 354 +++++++++++++++++++++ media-gfx/krita/krita-4.1.7.ebuild | 5 +- 2 files changed, 358 insertions(+), 1 deletion(-) create mode 100644 media-gfx/krita/files/krita-4.1.7-exiv2-0.27.patch (limited to 'media-gfx') diff --git a/media-gfx/krita/files/krita-4.1.7-exiv2-0.27.patch b/media-gfx/krita/files/krita-4.1.7-exiv2-0.27.patch new file mode 100644 index 000000000000..41b290852eb5 --- /dev/null +++ b/media-gfx/krita/files/krita-4.1.7-exiv2-0.27.patch @@ -0,0 +1,354 @@ +From 6b6758bb37da4997be36a7e2a839b07278160559 Mon Sep 17 00:00:00 2001 +From: Andreas Sturmlechner +Date: Thu, 27 Dec 2018 22:40:44 +0100 +Subject: [PATCH] Fix building against exiv2-0.27 + +Summary: +Copied FindLibExiv2.cmake from ECM 5.53.0 until we raise min version. + +Thanks-to: Boudewijn Rempt +for final fix to kis_xmp_io.cpp. + +CCBUG: 402566 + +Test Plan: Built fine against exiv2-0.26 and exiv2-0.27. + +Reviewers: #krita, rempt + +Reviewed By: #krita, rempt + +Subscribers: pino + +Tags: #krita + +Differential Revision: https://phabricator.kde.org/D17810 +--- + CMakeLists.txt | 6 +- + cmake/modules/FindLibExiv2.cmake | 115 ++++++++++++++++++++++++++++++ + libs/ui/CMakeLists.txt | 3 +- + libs/ui/kisexiv2/kis_exif_io.cpp | 14 ++-- + libs/ui/kisexiv2/kis_exiv2.h | 2 +- + libs/ui/kisexiv2/kis_iptc_io.cpp | 4 +- + libs/ui/kisexiv2/kis_xmp_io.cpp | 6 +- + plugins/impex/jpeg/CMakeLists.txt | 5 +- + 8 files changed, 130 insertions(+), 25 deletions(-) + create mode 100644 cmake/modules/FindLibExiv2.cmake + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5558088200..b2d2cd497e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -607,11 +607,7 @@ set_package_properties(Eigen3 PROPERTIES + ## + ## Test for exiv2 + ## +-find_package(Exiv2 0.16 REQUIRED) +-set_package_properties(Exiv2 PROPERTIES +- DESCRIPTION "Image metadata library and tools" +- URL "http://www.exiv2.org" +- PURPOSE "Required by Krita") ++find_package(LibExiv2 0.16 REQUIRED) + + ## + ## Test for lcms +diff --git a/cmake/modules/FindLibExiv2.cmake b/cmake/modules/FindLibExiv2.cmake +new file mode 100644 +index 0000000000..935cee2c55 +--- /dev/null ++++ b/cmake/modules/FindLibExiv2.cmake +@@ -0,0 +1,115 @@ ++#.rst: ++# FindLibExiv2 ++# ------------ ++# ++# Try to find the Exiv2 library. ++# ++# This will define the following variables: ++# ++# ``LibExiv2_FOUND`` ++# System has LibExiv2. ++# ++# ``LibExiv2_VERSION`` ++# The version of LibExiv2. ++# ++# ``LibExiv2_INCLUDE_DIRS`` ++# This should be passed to target_include_directories() if ++# the target is not used for linking. ++# ++# ``LibExiv2_LIBRARIES`` ++# The LibExiv2 library. ++# This can be passed to target_link_libraries() instead of ++# the ``LibExiv2::LibExiv2`` target ++# ++# If ``LibExiv2_FOUND`` is TRUE, the following imported target ++# will be available: ++# ++# ``LibExiv2::LibExiv2`` ++# The Exiv2 library ++# ++# Since 5.53.0. ++# ++#============================================================================= ++# Copyright (c) 2018, Christophe Giboudeaux, ++# Copyright (c) 2010, Alexander Neundorf, ++# Copyright (c) 2008, Gilles Caulier, ++# ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# 1. Redistributions of source code must retain the copyright ++# notice, this list of conditions and the following disclaimer. ++# 2. Redistributions in binary form must reproduce the copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# 3. The name of the author may not be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++#============================================================================= ++ ++find_package(PkgConfig QUIET) ++pkg_check_modules(PC_EXIV2 QUIET exiv2) ++ ++find_path(LibExiv2_INCLUDE_DIRS NAMES exiv2/exif.hpp ++ HINTS ${PC_EXIV2_INCLUDEDIR} ++) ++ ++find_library(LibExiv2_LIBRARIES NAMES exiv2 libexiv2 ++ HINTS ${PC_EXIV2_LIBRARY_DIRS} ++) ++ ++set(LibExiv2_VERSION ${PC_EXIV2_VERSION}) ++ ++if(NOT LibExiv2_VERSION AND DEFINED LibExiv2_INCLUDE_DIRS) ++ # With exiv >= 0.27, the version #defines are in exv_conf.h instead of version.hpp ++ foreach(_exiv2_version_file "version.hpp" "exv_conf.h") ++ if(EXISTS "${LibExiv2_INCLUDE_DIRS}/exiv2/${_exiv2_version_file}") ++ file(READ "${LibExiv2_INCLUDE_DIRS}/exiv2/${_exiv2_version_file}" _exiv_version_file_content) ++ string(REGEX MATCH "#define EXIV2_MAJOR_VERSION[ ]+\\([0-9]+\\)" EXIV2_MAJOR_VERSION_MATCH ${_exiv_version_file_content}) ++ string(REGEX MATCH "#define EXIV2_MINOR_VERSION[ ]+\\([0-9]+\\)" EXIV2_MINOR_VERSION_MATCH ${_exiv_version_file_content}) ++ string(REGEX MATCH "#define EXIV2_PATCH_VERSION[ ]+\\([0-9]+\\)" EXIV2_PATCH_VERSION_MATCH ${_exiv_version_file_content}) ++ if(EXIV2_MAJOR_VERSION_MATCH) ++ string(REGEX REPLACE ".*_MAJOR_VERSION[ ]+\\((.*)\\)" "\\1" EXIV2_MAJOR_VERSION ${EXIV2_MAJOR_VERSION_MATCH}) ++ string(REGEX REPLACE ".*_MINOR_VERSION[ ]+\\((.*)\\)" "\\1" EXIV2_MINOR_VERSION ${EXIV2_MINOR_VERSION_MATCH}) ++ string(REGEX REPLACE ".*_PATCH_VERSION[ ]+\\((.*)\\)" "\\1" EXIV2_PATCH_VERSION ${EXIV2_PATCH_VERSION_MATCH}) ++ endif() ++ endif() ++ endforeach() ++ ++ set(LibExiv2_VERSION "${EXIV2_MAJOR_VERSION}.${EXIV2_MINOR_VERSION}.${EXIV2_PATCH_VERSION}") ++endif() ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(LibExiv2 ++ FOUND_VAR LibExiv2_FOUND ++ REQUIRED_VARS LibExiv2_LIBRARIES LibExiv2_INCLUDE_DIRS ++ VERSION_VAR LibExiv2_VERSION ++) ++ ++mark_as_advanced(LibExiv2_INCLUDE_DIRS LibExiv2_LIBRARIES) ++ ++if(LibExiv2_FOUND AND NOT TARGET LibExiv2::LibExiv2) ++ add_library(LibExiv2::LibExiv2 UNKNOWN IMPORTED) ++ set_target_properties(LibExiv2::LibExiv2 PROPERTIES ++ IMPORTED_LOCATION "${LibExiv2_LIBRARIES}" ++ INTERFACE_INCLUDE_DIRECTORIES "${LibExiv2_INCLUDE_DIRS}" ++ ) ++endif() ++ ++include(FeatureSummary) ++set_package_properties(LibExiv2 PROPERTIES ++ URL "http://www.exiv2.org" ++ DESCRIPTION "Image metadata support" ++) +diff --git a/libs/ui/CMakeLists.txt b/libs/ui/CMakeLists.txt +index f14d3591bc..ff57f53158 100644 +--- a/libs/ui/CMakeLists.txt ++++ b/libs/ui/CMakeLists.txt +@@ -1,6 +1,5 @@ + include_directories( + ${CMAKE_CURRENT_SOURCE_DIR}/qtlockedfile +- ${EXIV2_INCLUDE_DIR} + ) + + include_directories(SYSTEM +@@ -544,7 +543,7 @@ add_library(kritaui SHARED ${kritaui_HEADERS_MOC} ${kritaui_LIB_SRCS} ) + generate_export_header(kritaui BASE_NAME kritaui) + + target_link_libraries(kritaui KF5::CoreAddons KF5::Completion KF5::I18n KF5::ItemViews Qt5::Network +- kritaimpex kritacolor kritaimage kritalibbrush kritawidgets kritawidgetutils ${PNG_LIBRARIES} ${EXIV2_LIBRARIES} ++ kritaimpex kritacolor kritaimage kritalibbrush kritawidgets kritawidgetutils ${PNG_LIBRARIES} LibExiv2::LibExiv2 + ) + + if (HAVE_QT_MULTIMEDIA) +diff --git a/libs/ui/kisexiv2/kis_exif_io.cpp b/libs/ui/kisexiv2/kis_exif_io.cpp +index 1a01fedf33..4a7857aa9c 100644 +--- a/libs/ui/kisexiv2/kis_exif_io.cpp ++++ b/libs/ui/kisexiv2/kis_exif_io.cpp +@@ -438,11 +438,10 @@ bool KisExifIO::saveTo(KisMetaData::Store* store, QIODevice* ioDevice, HeaderTyp + if (entry.value().asArray().size() > 0) { + creator = entry.value().asArray()[0]; + } +-#if EXIV2_MAJOR_VERSION == 0 && EXIV2_MINOR_VERSION <= 20 ++#if !EXIV2_TEST_VERSION(0,21,0) + v = kmdValueToExivValue(creator, Exiv2::ExifTags::tagType(exifKey.tag(), exifKey.ifdId())); + #else + v = kmdValueToExivValue(creator, exifKey.defaultTypeId()); +- + #endif + } else if (exivKey == "Exif.Photo.OECF") { + v = kmdOECFStructureToExifOECF(entry.value()); +@@ -456,13 +455,13 @@ bool KisExifIO::saveTo(KisMetaData::Store* store, QIODevice* ioDevice, HeaderTyp + Q_ASSERT(entry.value().type() == KisMetaData::Value::LangArray); + QMap langArr = entry.value().asLangArray(); + if (langArr.contains("x-default")) { +-#if EXIV2_MAJOR_VERSION == 0 && EXIV2_MINOR_VERSION <= 20 ++#if !EXIV2_TEST_VERSION(0,21,0) + v = kmdValueToExivValue(langArr.value("x-default"), Exiv2::ExifTags::tagType(exifKey.tag(), exifKey.ifdId())); + #else + v = kmdValueToExivValue(langArr.value("x-default"), exifKey.defaultTypeId()); + #endif + } else if (langArr.size() > 0) { +-#if EXIV2_MAJOR_VERSION == 0 && EXIV2_MINOR_VERSION <= 20 ++#if !EXIV2_TEST_VERSION(0,21,0) + v = kmdValueToExivValue(langArr.begin().value(), Exiv2::ExifTags::tagType(exifKey.tag(), exifKey.ifdId())); + #else + v = kmdValueToExivValue(langArr.begin().value(), exifKey.defaultTypeId()); +@@ -470,7 +469,7 @@ bool KisExifIO::saveTo(KisMetaData::Store* store, QIODevice* ioDevice, HeaderTyp + } + } else { + dbgMetaData << exifKey.tag(); +-#if EXIV2_MAJOR_VERSION == 0 && EXIV2_MINOR_VERSION <= 20 ++#if !EXIV2_TEST_VERSION(0,21,0) + v = kmdValueToExivValue(entry.value(), Exiv2::ExifTags::tagType(exifKey.tag(), exifKey.ifdId())); + #else + v = kmdValueToExivValue(entry.value(), exifKey.defaultTypeId()); +@@ -487,7 +486,7 @@ bool KisExifIO::saveTo(KisMetaData::Store* store, QIODevice* ioDevice, HeaderTyp + dbgMetaData << "exiv error " << e.what(); + } + } +-#if EXIV2_MAJOR_VERSION == 0 && EXIV2_MINOR_VERSION <= 17 ++#if !EXIV2_TEST_VERSION(0,18,0) + Exiv2::DataBuf rawData = exifData.copy(); + ioDevice->write((const char*) rawData.pData_, rawData.size_); + #else +@@ -514,7 +513,7 @@ bool KisExifIO::loadFrom(KisMetaData::Store* store, QIODevice* ioDevice) const + QByteArray arr = ioDevice->readAll(); + Exiv2::ExifData exifData; + Exiv2::ByteOrder byteOrder; +-#if EXIV2_MAJOR_VERSION == 0 && EXIV2_MINOR_VERSION <= 17 ++#if !EXIV2_TEST_VERSION(0,18,0) + exifData.load((const Exiv2::byte*)arr.data(), arr.size()); + byteOrder = exifData.byteOrder(); + #else +@@ -529,7 +528,6 @@ bool KisExifIO::loadFrom(KisMetaData::Store* store, QIODevice* ioDevice) const + dbgKrita << "Received unknown exception trying to parse exiv data"; + return false; + } +- + #endif + dbgMetaData << "Byte order = " << byteOrder << ppVar(Exiv2::bigEndian) << ppVar(Exiv2::littleEndian); + dbgMetaData << "There are" << exifData.count() << " entries in the exif section"; +diff --git a/libs/ui/kisexiv2/kis_exiv2.h b/libs/ui/kisexiv2/kis_exiv2.h +index 9343265f1e..6b66aa7852 100644 +--- a/libs/ui/kisexiv2/kis_exiv2.h ++++ b/libs/ui/kisexiv2/kis_exiv2.h +@@ -21,7 +21,7 @@ + + + #include +-#include ++#include + #include "kritaui_export.h" + + /// Convert an exiv value to a KisMetaData value +diff --git a/libs/ui/kisexiv2/kis_iptc_io.cpp b/libs/ui/kisexiv2/kis_iptc_io.cpp +index d2eb7c9b2f..0ac881f61b 100644 +--- a/libs/ui/kisexiv2/kis_iptc_io.cpp ++++ b/libs/ui/kisexiv2/kis_iptc_io.cpp +@@ -126,7 +126,7 @@ bool KisIptcIO::saveTo(KisMetaData::Store* store, QIODevice* ioDevice, HeaderTyp + } + } + } +-#if EXIV2_MAJOR_VERSION == 0 && EXIV2_MINOR_VERSION <= 17 ++#if !EXIV2_TEST_VERSION(0,18,0) + Exiv2::DataBuf rawData = iptcData.copy(); + #else + Exiv2::DataBuf rawData = Exiv2::IptcParser::encode(iptcData); +@@ -167,7 +167,7 @@ bool KisIptcIO::loadFrom(KisMetaData::Store* store, QIODevice* ioDevice) const + ioDevice->open(QIODevice::ReadOnly); + QByteArray arr = ioDevice->readAll(); + Exiv2::IptcData iptcData; +-#if EXIV2_MAJOR_VERSION == 0 && EXIV2_MINOR_VERSION <= 17 ++#if !EXIV2_TEST_VERSION(0,18,0) + iptcData.load((const Exiv2::byte*)arr.data(), arr.size()); + #else + Exiv2::IptcParser::decode(iptcData, (const Exiv2::byte*)arr.data(), arr.size()); +diff --git a/libs/ui/kisexiv2/kis_xmp_io.cpp b/libs/ui/kisexiv2/kis_xmp_io.cpp +index c4663efe7d..72fa5c5d38 100644 +--- a/libs/ui/kisexiv2/kis_xmp_io.cpp ++++ b/libs/ui/kisexiv2/kis_xmp_io.cpp +@@ -17,7 +17,6 @@ + #include "kis_xmp_io.h" + + #include +-#include + + #include "kis_exiv2.h" + +@@ -277,9 +276,8 @@ bool KisXMPIO::loadFrom(KisMetaData::Store* store, QIODevice* ioDevice) const + const Exiv2::XmpArrayValue* xav = dynamic_cast(value.get()); + Q_ASSERT(xav); + QList array; +- for (std::vector< std::string >::const_iterator it = xav->value_.begin(); +- it != xav->value_.end(); ++it) { +- QString value = it->c_str(); ++ for (int i = 0; i < xav->size(); ++i) { ++ QString value = QString::fromStdString(xav->toString(i)); + if (parser) { + array.push_back(parser->parse(value)); + } else { +diff --git a/plugins/impex/jpeg/CMakeLists.txt b/plugins/impex/jpeg/CMakeLists.txt +index 347e46dbe3..50edb05c96 100644 +--- a/plugins/impex/jpeg/CMakeLists.txt ++++ b/plugins/impex/jpeg/CMakeLists.txt +@@ -4,7 +4,6 @@ set(ICCJPEG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/lcms") + + include_directories( + ${ICCJPEG_SOURCE_DIR} +- ${EXIV2_INCLUDE_DIR} + ) + + include_directories(SYSTEM +@@ -25,7 +24,7 @@ set(kritajpegimport_SOURCES + + add_library(kritajpegimport MODULE ${kritajpegimport_SOURCES}) + +-target_link_libraries(kritajpegimport kritaui ${JPEG_LIBRARIES} ${LCMS2_LIBRARIES} ${EXIV2_LIBRARIES} ) ++target_link_libraries(kritajpegimport kritaui ${JPEG_LIBRARIES} ${LCMS2_LIBRARIES} LibExiv2::LibExiv2 ) + + install(TARGETS kritajpegimport DESTINATION ${KRITA_PLUGIN_INSTALL_DIR}) + +@@ -38,7 +37,7 @@ ki18n_wrap_ui(kritajpegexport_SOURCES kis_wdg_options_jpeg.ui ) + + add_library(kritajpegexport MODULE ${kritajpegexport_SOURCES}) + +-target_link_libraries(kritajpegexport kritaui kritaimpex ${JPEG_LIBRARIES} ${LCMS2_LIBRARIES} ${EXIV2_LIBRARIES} ) ++target_link_libraries(kritajpegexport kritaui kritaimpex ${JPEG_LIBRARIES} ${LCMS2_LIBRARIES} LibExiv2::LibExiv2 ) + + install(TARGETS kritajpegexport DESTINATION ${KRITA_PLUGIN_INSTALL_DIR}) + install( PROGRAMS krita_jpeg.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) +-- +2.20.1 + diff --git a/media-gfx/krita/krita-4.1.7.ebuild b/media-gfx/krita/krita-4.1.7.ebuild index 9982412f267b..efe9923bc337 100644 --- a/media-gfx/krita/krita-4.1.7.ebuild +++ b/media-gfx/krita/krita-4.1.7.ebuild @@ -86,7 +86,10 @@ RDEPEND="${COMMON_DEPEND} # bug 630508 RESTRICT+=" test" -PATCHES=( "${FILESDIR}/${PN}-4.0.3-tests-optional.patch" ) +PATCHES=( + "${FILESDIR}/${PN}-4.0.3-tests-optional.patch" + "${FILESDIR}/${P}-exiv2-0.27.patch" +) S="${S}.101" -- cgit v1.2.3-18-g5258