commit:     36045f8ebb08d9578f62520bf6d37f26d39bad1d
Author:     Andreas Sturmlechner <andreas.sturmlechner <AT> gmail <DOT> com>
AuthorDate: Thu Dec 31 11:04:29 2015 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Wed Jan 13 14:46:30 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=36045f8e

media-gfx/exiv2: Add upstream cmake patches to fix visibility

Prevent random segfaults in applications due to exiv2 leaking symbols.

Package-Manager: portage-2.2.24

 media-gfx/exiv2/exiv2-0.25-r2.ebuild               | 128 +++++++++++++++++++++
 .../files/exiv2-0.25-fvisibility-hidden.patch      |  19 +++
 .../exiv2/files/exiv2-0.25-hide-symbols.patch      |  97 ++++++++++++++++
 3 files changed, 244 insertions(+)

diff --git a/media-gfx/exiv2/exiv2-0.25-r2.ebuild 
b/media-gfx/exiv2/exiv2-0.25-r2.ebuild
new file mode 100644
index 0000000..90f52ed
--- /dev/null
+++ b/media-gfx/exiv2/exiv2-0.25-r2.ebuild
@@ -0,0 +1,128 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+PYTHON_COMPAT=( python{2_7,3_3,3_4} )
+
+inherit eutils cmake-multilib python-any-r1
+
+DESCRIPTION="EXIF, IPTC and XMP metadata C++ library and command line utility"
+HOMEPAGE="http://www.exiv2.org/";
+SRC_URI="http://www.exiv2.org/${P}.tar.gz";
+
+LICENSE="GPL-2"
+SLOT="0/14"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc 
~x86 ~amd64-fbsd ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~x64-solaris 
~x86-solaris"
+IUSE_LINGUAS="bs de es fi fr gl ms pl pt ru sk sv ug uk vi"
+IUSE="doc examples nls png webready xmp $(printf 'linguas_%s ' 
${IUSE_LINGUAS})"
+
+RDEPEND="
+       >=virtual/libiconv-0-r1[${MULTILIB_USEDEP}]
+       nls? ( >=virtual/libintl-0-r1[${MULTILIB_USEDEP}] )
+       png? ( >=sys-libs/zlib-1.2.8-r1[${MULTILIB_USEDEP}] )
+       webready? (
+               net-libs/libssh[${MULTILIB_USEDEP}]
+               net-misc/curl[${MULTILIB_USEDEP}]
+       )
+       xmp? ( >=dev-libs/expat-2.1.0-r3[${MULTILIB_USEDEP}] )
+"
+
+DEPEND="${RDEPEND}
+       doc? (
+               app-doc/doxygen
+               dev-libs/libxslt
+               virtual/pkgconfig
+               media-gfx/graphviz
+               ${PYTHON_DEPS}
+       )
+       nls? ( sys-devel/gettext )
+"
+
+DOCS=( README doc/ChangeLog doc/cmd.txt )
+
+PATCHES=(
+       "${FILESDIR}/${PN}-0.25-fix-install-dirs.patch"
+       "${FILESDIR}/${PN}-0.25-fix-without-zlib.patch"
+       "${FILESDIR}/${PN}-0.25-hide-symbols.patch"
+       "${FILESDIR}/${PN}-0.25-fvisibility-hidden.patch"
+       # TODO: Take to upstream
+       "${FILESDIR}/${PN}-0.25-fix-docs.patch"
+       "${FILESDIR}/${PN}-0.25-tools-optional.patch"
+)
+
+pkg_setup() {
+       use doc && python-any-r1_pkg_setup
+}
+
+src_prepare() {
+       rm -r msvc* build || die "Failed to remove msvc dirs"
+
+       if [[ ${PV} != *9999 ]] ; then
+               if [[ -d po ]] ; then
+                       pushd po > /dev/null || die
+                       for lang in *.po; do
+                               if ! has ${lang%.po} ${LINGUAS} ; then
+                                       rm -rf ${lang} || die
+                               fi
+                       done
+                       popd > /dev/null || die
+               else
+                       die "Failed to prepare LINGUAS - po directory moved?"
+               fi
+       fi
+
+       # convert docs to UTF-8
+       local i
+       for i in doc/cmd.txt; do
+               einfo "Converting "${i}" to UTF-8"
+               iconv -f LATIN1 -t UTF-8 "${i}" > "${i}.tmp" || die
+               mv -f "${i}.tmp" "${i}" || die
+       done
+
+       if use doc; then
+               einfo "Updating doxygen config"
+               doxygen &>/dev/null -u config/Doxyfile || die
+       fi
+
+       cmake-utils_src_prepare
+}
+
+multilib_src_configure() {
+       local mycmakeargs=(
+               -DEXIV2_ENABLE_BUILD_PO=YES
+               -DEXIV2_ENABLE_BUILD_SAMPLES=NO
+               -DEXIV2_ENABLE_CURL=$(usex webready)
+               -DEXIV2_ENABLE_NLS=$(usex nls)
+               -DEXIV2_ENABLE_PNG=$(usex png)
+               -DEXIV2_ENABLE_SSH=$(usex webready)
+               -DEXIV2_ENABLE_WEBREADY=$(usex webready)
+               -DEXIV2_ENABLE_XMP=$(usex xmp)
+               -DEXIV2_ENABLE_LIBXMP=NO
+               $(multilib_is_native_abi || \
+                       echo -DEXIV2_ENABLE_TOOLS=NO)
+       )
+
+       cmake-utils_src_configure
+}
+
+multilib_src_compile() {
+       cmake-utils_src_compile
+
+       if multilib_is_native_abi; then
+               use doc && emake -j1 doc
+       fi
+}
+
+multilib_src_install_all() {
+       einstalldocs
+       prune_libtool_files --all
+
+       use xmp && dodoc doc/{COPYING-XMPSDK,README-XMP,cmdxmp.txt}
+       use doc && dodoc -r "${S}"/doc/html
+
+       if use examples; then
+               docinto examples
+               dodoc samples/*.cpp
+       fi
+}

diff --git a/media-gfx/exiv2/files/exiv2-0.25-fvisibility-hidden.patch 
b/media-gfx/exiv2/files/exiv2-0.25-fvisibility-hidden.patch
new file mode 100644
index 0000000..26c5c1d
--- /dev/null
+++ b/media-gfx/exiv2/files/exiv2-0.25-fvisibility-hidden.patch
@@ -0,0 +1,19 @@
+Index: CMakeLists.txt
+===================================================================
+--- a/xmpsdk/CMakeLists.txt    (revision 3974)
++++ b/xmpsdk/CMakeLists.txt    (revision 3975)
+@@ -20,6 +20,14 @@
+     ENDIF(NOT MSVC AND NOT CYGWIN AND NOT MSYS)
+ ENDFOREACH()
+ 
++if(NOT MSVC)
++  # 
http://stackoverflow.com/questions/10046114/in-cmake-how-can-i-test-if-the-compiler-is-clang
++  if ( NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "AppleClang")
++    # 1123 - hide xmpsdk symbols
++    add_definitions( -fvisibility=hidden -fvisibility-inlines-hidden )
++  endif()
++endif()
++
+ IF( EXIV2_ENABLE_XMP AND EXIV2_ENABLE_LIBXMP )
+     ADD_LIBRARY( xmp STATIC ${XMPSRC} )
+     GET_TARGET_PROPERTY( XMPLIB xmp LOCATION )

diff --git a/media-gfx/exiv2/files/exiv2-0.25-hide-symbols.patch 
b/media-gfx/exiv2/files/exiv2-0.25-hide-symbols.patch
new file mode 100644
index 0000000..7c8613d
--- /dev/null
+++ b/media-gfx/exiv2/files/exiv2-0.25-hide-symbols.patch
@@ -0,0 +1,97 @@
+Index: a/samples/CMakeLists.txt
+===================================================================
+--- a/samples/CMakeLists.txt   (revision 3972)
++++ b/samples/CMakeLists.txt   (revision 3973)
+@@ -52,7 +52,7 @@
+     STRING( REPLACE ".cpp" "" target ${entry})
+     ADD_EXECUTABLE( ${target} ${target}.cpp )
+     ADD_TEST( ${target}_test ${target} )
+-    TARGET_LINK_LIBRARIES( ${target} exiv2lib )
++    TARGET_LINK_LIBRARIES( ${target} PRIVATE exiv2lib ${EXPAT_LIBRARIES})
+     #INSTALL( TARGETS ${target} ${INSTALL_TARGET_STANDARD_ARGS} )
+ ENDFOREACH(entry ${SAMPLES})
+ 
+Index: a/src/CMakeLists.txt
+===================================================================
+--- a/src/CMakeLists.txt       (revision 3972)
++++ b/src/CMakeLists.txt       (revision 3973)
+@@ -240,20 +240,20 @@
+ 
+ if ( MSVC )
+     source_group("Header Files" FILES ${LIBEXIV2_HDR} )
+-    TARGET_LINK_LIBRARIES( exiv2lib ${EXPAT_LIBRARIES} )
++    TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${EXPAT_LIBRARIES} )
+     source_group("Header Files" FILES ${LIBCURL_HDR} )
+-    TARGET_LINK_LIBRARIES( exiv2lib ${CURL_LIBRARIES} )
++    TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${CURL_LIBRARIES} )
+     source_group("Header Files" FILES ${SSH_HDR} )
+-    TARGET_LINK_LIBRARIES( exiv2lib ${SSH_LIBRARIES} )
++    TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${SSH_LIBRARIES} )
+ else()
+     if ( NOT MINGW )
+-        TARGET_LINK_LIBRARIES( exiv2lib dl ${EXPAT_LIBRARIES} )
+-        TARGET_LINK_LIBRARIES( exiv2lib dl ${CURL_LIBRARIES} )
+-        TARGET_LINK_LIBRARIES( exiv2lib dl ${SSH_LIBRARIES} )
++        TARGET_LINK_LIBRARIES( exiv2lib PRIVATE dl ${EXPAT_LIBRARIES} )
++        TARGET_LINK_LIBRARIES( exiv2lib PRIVATE dl ${CURL_LIBRARIES} )
++        TARGET_LINK_LIBRARIES( exiv2lib PRIVATE dl ${SSH_LIBRARIES} )
+     else()
+-        TARGET_LINK_LIBRARIES( exiv2lib    ${EXPAT_LIBRARIES} )
+-        TARGET_LINK_LIBRARIES( exiv2lib    ${CURL_LIBRARIES} )
+-        TARGET_LINK_LIBRARIES( exiv2lib    ${SSH_LIBRARIES} )
++        TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${EXPAT_LIBRARIES} )
++        TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${CURL_LIBRARIES} )
++        TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${SSH_LIBRARIES} )
+     endif()
+ endif()
+ 
+@@ -262,33 +262,33 @@
+     if  ( MSVC )
+         LINK_DIRECTORIES(${LIBRARY_OUTPUT_PATH}/$(ConfigurationName))
+     endif(MSVC)
+-    TARGET_LINK_LIBRARIES( exiv2lib xmp )
++    TARGET_LINK_LIBRARIES( exiv2lib PRIVATE xmp )
+ ENDIF()
+ 
+ IF( EXIV2_ENABLE_PNG )
+     IF( ZLIB_FOUND )
+         IF( MSVC )
+             if ( EXIV2_ENABLE_SHARED )
+-                TARGET_LINK_LIBRARIES( exiv2lib optimized ${ZLIB_LIBRARIES} 
debug ${ZLIB_LIBRARIES}d )
++                TARGET_LINK_LIBRARIES( exiv2lib PRIVATE optimized 
${ZLIB_LIBRARIES}.lib debug ${ZLIB_LIBRARIES}d.lib )
+             else()
+-                TARGET_LINK_LIBRARIES( exiv2lib optimized zlibstatic.lib 
debug zlibstaticd.lib )
++                TARGET_LINK_LIBRARIES( exiv2lib PRIVATE optimized 
zlibstatic.lib debug zlibstaticd.lib )
+             endif()
+         ELSE()
+-            TARGET_LINK_LIBRARIES( exiv2lib ${ZLIB_LIBRARIES} )
++            TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${ZLIB_LIBRARIES} )
+         ENDIF()
+     ENDIF()
+ ENDIF()
+ 
+ IF( EXIV2_ENABLE_NLS )
+-    TARGET_LINK_LIBRARIES( exiv2lib ${LIBINTL_LIBRARIES} )
++    TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${LIBINTL_LIBRARIES} )
+ ENDIF( EXIV2_ENABLE_NLS )
+ 
+ IF( ICONV_FOUND )
+-    TARGET_LINK_LIBRARIES( exiv2lib ${ICONV_LIBRARIES} )
++    TARGET_LINK_LIBRARIES( exiv2lib PRIVATE ${ICONV_LIBRARIES} )
+ ENDIF( ICONV_FOUND )
+ 
+ IF (CYGWIN OR MINGW)
+-    TARGET_LINK_LIBRARIES( exiv2lib psapi )
++    TARGET_LINK_LIBRARIES( exiv2lib PRIVATE psapi )
+ ENDIF(CYGWIN OR MINGW)
+ 
+ 
+@@ -303,7 +303,7 @@
+ # 
******************************************************************************
+ # connection test application
+ ADD_EXECUTABLE( conntest ${CONNTEST} )
+-TARGET_LINK_LIBRARIES( conntest exiv2lib )
++TARGET_LINK_LIBRARIES( conntest PRIVATE exiv2lib ${CURL_LIBRARIES} 
${SSH_LIBRARIES})
+ 
+ # 
******************************************************************************
+ # exifprint application

Reply via email to