commit:     2bbfd797742c55c3b7ccb14dbc36ab931e9d5bfe
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 26 12:03:06 2018 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Fri Dec 28 17:47:35 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2bbfd797

media-gfx/krita: Fix build with >=exiv2-0.27

Package-Manager: Portage-2.3.52, Repoman-2.3.12
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 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(-)

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 00000000000..41b290852eb
--- /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 <[email protected]>
+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 <[email protected]>
+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, <[email protected]>
++# Copyright (c) 2010, Alexander Neundorf, <[email protected]>
++# Copyright (c) 2008, Gilles Caulier, <[email protected]>
++#
++#
++# 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<QString, KisMetaData::Value> 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 <metadata/kis_meta_data_value.h>
+-#include <exiv2/value.hpp>
++#include <exiv2/exiv2.hpp>
+ #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 <string>
+-#include <exiv2/xmp.hpp>
+ 
+ #include "kis_exiv2.h"
+ 
+@@ -277,9 +276,8 @@ bool KisXMPIO::loadFrom(KisMetaData::Store* store, 
QIODevice* ioDevice) const
+                 const Exiv2::XmpArrayValue* xav = dynamic_cast<const 
Exiv2::XmpArrayValue*>(value.get());
+                 Q_ASSERT(xav);
+                 QList<KisMetaData::Value> 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 9982412f267..efe9923bc33 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"
 

Reply via email to