public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: media-sound/teamspeak-client/, media-sound/teamspeak-client/files/
Date: Tue, 30 Apr 2019 16:49:52 +0000 (UTC)	[thread overview]
Message-ID: <1556642975.378f1d8be411fc8f8a6dba202813c8f565a9dca0.mgorny@gentoo> (raw)

commit:     378f1d8be411fc8f8a6dba202813c8f565a9dca0
Author:     Denis Lisov <dennis.lissov <AT> gmail <DOT> com>
AuthorDate: Mon Apr  8 21:27:09 2019 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Apr 30 16:49:35 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=378f1d8b

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 <AT> gmail.com>
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 ...eak-client-3.2.3-qt-5.12-symbol-reexports.patch | 141 +++++++++++++++++++++
 .../teamspeak-client/files/ts3client-bin-r1        |  13 ++
 .../teamspeak-client-3.2.3-r2.ebuild               | 102 +++++++++++++++
 3 files changed, 256 insertions(+)

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 00000000000..ee5f78914d0
--- /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 00000000000..3edbc2e7907
--- /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 00000000000..17758f24d50
--- /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
+}


             reply	other threads:[~2019-04-30 16:49 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-30 16:49 Michał Górny [this message]
  -- strict thread matches above, loose matches on Subject: below --
2019-05-25 20:59 [gentoo-commits] repo/gentoo:master commit in: media-sound/teamspeak-client/, media-sound/teamspeak-client/files/ Andreas Sturmlechner
2019-06-25 20:12 Andreas Sturmlechner
2019-07-15  5:36 Andreas Sturmlechner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1556642975.378f1d8be411fc8f8a6dba202813c8f565a9dca0.mgorny@gentoo \
    --to=mgorny@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox