diff options
author | Denis Lisov <dennis.lissov@gmail.com> | 2019-04-09 00:27:09 +0300 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2019-04-30 18:49:35 +0200 |
commit | 378f1d8be411fc8f8a6dba202813c8f565a9dca0 (patch) | |
tree | f9b6c1c1874739a0f22cefe756ddccbbbe9acf87 /media-sound/teamspeak-client | |
parent | media-sound/umurmur: Fixed build with USE="libressl" (diff) | |
download | gentoo-378f1d8be411fc8f8a6dba202813c8f565a9dca0.tar.gz gentoo-378f1d8be411fc8f8a6dba202813c8f565a9dca0.tar.bz2 gentoo-378f1d8be411fc8f8a6dba202813c8f565a9dca0.zip |
media-sound/teamspeak-client: add workaround for Qt 5.12
QtWebEngine versions before 5.12 used to reexport a few symbols like
calloc with version Qt_5 that were exported by mistake once. These are
no longer exported in 5.12 (probably a Qt bug), and teamspeak-client
does not officially support it (only the bundled QtWebEngine 5.6.1 is
supported).
Add a `overrides.so` shared library that reexports them by taking this
code from Qt under (L)GPL and preload it using LD_PRELOAD to make the
symbols available.
Closes: https://bugs.gentoo.org/675874
Signed-off-by: Denis Lisov <dennis.lissov@gmail.com>
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'media-sound/teamspeak-client')
3 files changed, 256 insertions, 0 deletions
diff --git a/media-sound/teamspeak-client/files/teamspeak-client-3.2.3-qt-5.12-symbol-reexports.patch b/media-sound/teamspeak-client/files/teamspeak-client-3.2.3-qt-5.12-symbol-reexports.patch new file mode 100644 index 000000000000..ee5f78914d0b --- /dev/null +++ b/media-sound/teamspeak-client/files/teamspeak-client-3.2.3-qt-5.12-symbol-reexports.patch @@ -0,0 +1,141 @@ +diff --git a/Makefile b/Makefile +new file mode 100644 +index 0000000..c036d5f +--- /dev/null ++++ b/Makefile +@@ -0,0 +1,2 @@ ++overrides.so: qt-5.12-overrides.o override-version.map ++ $(CXX) $(LDFLAGS) -shared -o $@ -Wl,--version-script override-version.map qt-5.12-overrides.o +diff --git a/override-version.map b/override-version.map +new file mode 100644 +index 0000000..991d98e +--- /dev/null ++++ b/override-version.map +@@ -0,0 +1 @@ ++Qt_5 {}; +diff --git a/qt-5.12-overrides.cpp b/qt-5.12-overrides.cpp +new file mode 100644 +index 0000000..002a1af +--- /dev/null ++++ b/qt-5.12-overrides.cpp +@@ -0,0 +1,120 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2017 The Qt Company Ltd. ++** Contact: https://www.qt.io/licensing/ ++** ++** This file is part of the QtWebEngine module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see https://www.qt.io/terms-conditions. For further ++** information use the contact form at https://www.qt.io/contact-us. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 3 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL3 included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 3 requirements ++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 2.0 or (at your option) the GNU General ++** Public license version 3 or any later version approved by the KDE Free ++** Qt Foundation. The licenses are as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ++** included in the packaging of this file. Please review the following ++** information to ensure the GNU General Public License requirements will ++** be met: https://www.gnu.org/licenses/gpl-2.0.html and ++** https://www.gnu.org/licenses/gpl-3.0.html. ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#include <stdlib.h> ++#include <malloc.h> ++ ++#define SHIM_ALIAS_SYMBOL(fn) __attribute__((weak, alias(#fn))) ++#define SHIM_SYMBOL_VERSION(fn) __asm__(".symver __" #fn "," #fn "@Qt_5") ++#define SHIM_HIDDEN __attribute__ ((visibility ("hidden"))) ++ ++extern "C" { ++ ++SHIM_SYMBOL_VERSION(malloc); ++void* __malloc(size_t size) ++ SHIM_ALIAS_SYMBOL(ShimMalloc); ++ ++SHIM_SYMBOL_VERSION(free); ++void __free(void* ptr) ++ SHIM_ALIAS_SYMBOL(ShimFree); ++ ++SHIM_SYMBOL_VERSION(realloc); ++void* __realloc(void* ptr, size_t size) ++ SHIM_ALIAS_SYMBOL(ShimRealloc); ++ ++SHIM_SYMBOL_VERSION(calloc); ++void* __calloc(size_t n, size_t size) ++ SHIM_ALIAS_SYMBOL(ShimCalloc); ++ ++SHIM_SYMBOL_VERSION(cfree); ++void __cfree(void* ptr) ++ SHIM_ALIAS_SYMBOL(ShimCFree); ++ ++SHIM_SYMBOL_VERSION(memalign); ++void* __memalign(size_t align, size_t s) ++ SHIM_ALIAS_SYMBOL(ShimMemalign); ++ ++SHIM_SYMBOL_VERSION(valloc); ++void* __valloc(size_t size) ++ SHIM_ALIAS_SYMBOL(ShimValloc); ++ ++SHIM_SYMBOL_VERSION(pvalloc); ++void* __pvalloc(size_t size) ++ SHIM_ALIAS_SYMBOL(ShimPvalloc); ++ ++SHIM_SYMBOL_VERSION(posix_memalign); ++int __posix_memalign(void** r, size_t a, size_t s) ++ SHIM_ALIAS_SYMBOL(ShimPosixMemalign); ++ ++SHIM_HIDDEN void* ShimMalloc(size_t size) { ++ return malloc(size); ++} ++ ++SHIM_HIDDEN void ShimFree(void* ptr) { ++ free(ptr); ++} ++ ++SHIM_HIDDEN void* ShimRealloc(void* ptr, size_t size) { ++ return realloc(ptr,size); ++} ++ ++SHIM_HIDDEN void* ShimCalloc(size_t n, size_t size) { ++ return calloc(n,size); ++} ++ ++SHIM_HIDDEN void ShimCFree(void* ptr) { ++ free(ptr); ++} ++ ++SHIM_HIDDEN void* ShimMemalign(size_t align, size_t s) { ++ return memalign(align,s); ++} ++ ++SHIM_HIDDEN void* ShimValloc(size_t size) { ++ return valloc(size); ++} ++ ++SHIM_HIDDEN void* ShimPvalloc(size_t size) { ++ return pvalloc(size); ++} ++ ++SHIM_HIDDEN int ShimPosixMemalign(void** r, size_t a, size_t s) { ++ return posix_memalign(r,a,s); ++} ++} // extern "C" diff --git a/media-sound/teamspeak-client/files/ts3client-bin-r1 b/media-sound/teamspeak-client/files/ts3client-bin-r1 new file mode 100644 index 000000000000..3edbc2e7907a --- /dev/null +++ b/media-sound/teamspeak-client/files/ts3client-bin-r1 @@ -0,0 +1,13 @@ +#!/bin/bash + +# Sets BASEDIR for teamspeak3-client +BASEDIR="/opt/teamspeak3-client" + +# Work around DT_RPATH (.) security issue by chdir'ing into expected $LD_LIBRARY_PATH +export LD_LIBRARY_PATH="${BASEDIR}${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" + +# Preload the library that provides calloc@Qt_5 and such (gentoo bug 675874) +export LD_PRELOAD="${BASEDIR}/overrides.so${LD_PRELOAD:+:}${LD_PRELOAD}" + +# Launch teamspeak3-client +cd "${BASEDIR}" && exec "${BASEDIR}/ts3client" $* diff --git a/media-sound/teamspeak-client/teamspeak-client-3.2.3-r2.ebuild b/media-sound/teamspeak-client/teamspeak-client-3.2.3-r2.ebuild new file mode 100644 index 000000000000..17758f24d50c --- /dev/null +++ b/media-sound/teamspeak-client/teamspeak-client-3.2.3-r2.ebuild @@ -0,0 +1,102 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit desktop toolchain-funcs unpacker xdg-utils + +MY_PV="${PV/_/-}" + +DESCRIPTION="A client software for quality voice communication via the internet" +HOMEPAGE="https://www.teamspeak.com/" +SRC_URI="amd64? ( http://ftp.4players.de/pub/hosted/ts3/releases/${PV}/TeamSpeak3-Client-linux_amd64-${MY_PV}.run ) + x86? ( http://ftp.4players.de/pub/hosted/ts3/releases/${PV}/TeamSpeak3-Client-linux_x86-${MY_PV}.run )" + +KEYWORDS="-* ~amd64 ~x86" +LICENSE="teamspeak3 || ( GPL-2 GPL-3 LGPL-3 )" +SLOT="0" +IUSE="alsa pulseaudio" +REQUIRED_USE="|| ( alsa pulseaudio )" + +RDEPEND=" + app-arch/snappy:0/1 + =dev-libs/openssl-1.0*:* + dev-libs/quazip + dev-qt/qtcore:5 + dev-qt/qtgui:5[accessibility,dbus,xcb] + dev-qt/qtnetwork:5 + dev-qt/qtsql:5[sqlite] + dev-qt/qtsvg:5 + dev-qt/qtwebchannel:5 + dev-qt/qtwebengine:5[geolocation,widgets] + dev-qt/qtwidgets:5 + net-libs/libsrtp:0 + sys-libs/libcxx[libcxxabi] + sys-libs/zlib:0/1 + virtual/udev + alsa? ( media-libs/alsa-lib ) + pulseaudio? ( media-sound/pulseaudio ) +" + +RESTRICT="mirror" + +S="${WORKDIR}" + +QA_PREBUILT=" + opt/teamspeak3-client/error_report + opt/teamspeak3-client/package_inst + opt/teamspeak3-client/soundbackends/libalsa_linux_*.so + opt/teamspeak3-client/soundbackends/libpulseaudio_linux_*.so + opt/teamspeak3-client/ts3client + opt/teamspeak3-client/update +" + +PATCHES=( + "${FILESDIR}/${P}-qt-5.12-symbol-reexports.patch" +) + +src_prepare() { + default + + if ! use alsa; then + rm -f soundbackends/libalsa_linux_*.so || die + fi + if ! use pulseaudio ; then + rm -f soundbackends/libpulseaudio_linux_*.so || die + fi + + mv ts3client_linux_* ts3client || die + + tc-export CXX +} + +src_install() { + exeinto /opt/teamspeak3-client + doexe error_report package_inst ts3client update overrides.so + newexe "${FILESDIR}"/ts3client-bin-r1 ts3client-bin + + exeinto /opt/teamspeak3-client/soundbackends + doexe soundbackends/*.so + + insinto /opt/teamspeak3-client + doins -r gfx html resources sound styles translations + + dosym ../../usr/$(get_libdir)/qt5/libexec/QtWebEngineProcess /opt/teamspeak3-client/QtWebEngineProcess + + dodir /opt/bin + dosym ../teamspeak3-client/ts3client-bin /opt/bin/ts3client + + make_desktop_entry /opt/bin/ts3client "Teamspeak 3 Client" /opt/teamspeak3-client/styles/default/logo-128x128.png "Audio;AudioVideo;Network" + + einstalldocs +} + +pkg_postinst() { + xdg_desktop_database_update + xdg_mimeinfo_database_update +} + +pkg_postrm() { + xdg_desktop_database_update + xdg_mimeinfo_database_update +} |