Skip to content

Commit

Permalink
media-gfx/exiv2: Add upstream cmake patches to fix visibility
Browse files Browse the repository at this point in the history
Prevent random segfaults in applications due to exiv2 leaking symbols.

Package-Manager: portage-2.2.24
  • Loading branch information
a17r authored and Michael Palimaka committed Jan 13, 2016
1 parent b6e8f7e commit 36045f8
Show file tree
Hide file tree
Showing 3 changed files with 244 additions and 0 deletions.
128 changes: 128 additions & 0 deletions media-gfx/exiv2/exiv2-0.25-r2.ebuild
Original file line number Diff line number Diff line change
@@ -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
}
19 changes: 19 additions & 0 deletions media-gfx/exiv2/files/exiv2-0.25-fvisibility-hidden.patch
Original file line number Diff line number Diff line change
@@ -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 )
97 changes: 97 additions & 0 deletions media-gfx/exiv2/files/exiv2-0.25-hide-symbols.patch
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 36045f8

Please sign in to comment.