376 lines
9.4 KiB
Bash
376 lines
9.4 KiB
Bash
# Copyright 2020-2022 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
EAPI=8
|
|
|
|
PYTHON_COMPAT=( python3_{9..11} )
|
|
|
|
inherit xdg cmake python-any-r1 optfeature flag-o-matic toolchain-funcs
|
|
|
|
DESCRIPTION="Official desktop client for Telegram"
|
|
HOMEPAGE="https://desktop.telegram.org"
|
|
|
|
if [[ ${PV} == 9999 ]]
|
|
then
|
|
inherit git-r3
|
|
|
|
EGIT_BRANCH="dev"
|
|
EGIT_REPO_URI="https://github.com/telegramdesktop/tdesktop.git"
|
|
EGIT_SUBMODULES=(
|
|
'*'
|
|
'-Telegram/ThirdParty/hunspell'
|
|
'-Telegram/ThirdParty/jemalloc'
|
|
'-Telegram/ThirdParty/libdbusmenu-qt'
|
|
'-Telegram/ThirdParty/lz4'
|
|
)
|
|
|
|
KEYWORDS=""
|
|
else
|
|
MY_PN="tdesktop"
|
|
MY_P="${MY_PN}-${PV}-full"
|
|
|
|
ABSEIL_VER="20220623.1"
|
|
CRC32C_VER="1.1.2"
|
|
QTBASE_VER="5.15.2"
|
|
|
|
LIBYUV_COMMIT="00950840d1c9bcbb3eb6ebc5aac5793e71166c8b"
|
|
TG_OWT_COMMIT="5098730b9eb6173f0b52068fe2555b7c1015123a"
|
|
|
|
SRC_URI="
|
|
https://github.com/telegramdesktop/${MY_PN}/releases/download/v${PV}/${MY_P}.tar.gz
|
|
|
|
https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSEIL_VER}.tar.gz -> abseil-cpp-${ABSEIL_VER}.tar.gz
|
|
https://github.com/google/crc32c/archive/refs/tags/${CRC32C_VER}.tar.gz -> crc32c-${CRC32C_VER}.tar.gz
|
|
https://download.qt.io/official_releases/qt/${QTBASE_VER%.*}/${QTBASE_VER}/submodules/qtbase-everywhere-src-${QTBASE_VER}.tar.xz
|
|
|
|
https://gitlab.com/chromiumsrc/libyuv/-/archive/${LIBYUV_COMMIT}/libyuv-${LIBYUV_COMMIT}.tar.gz -> libyuv-${LIBYUV_COMMIT::7}.tar.gz
|
|
https://github.com/desktop-app/tg_owt/archive/${TG_OWT_COMMIT}.tar.gz -> tg_owt-${TG_OWT_COMMIT::7}.tar.gz
|
|
"
|
|
|
|
KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv"
|
|
S="${WORKDIR}/${MY_P}"
|
|
fi
|
|
|
|
LICENSE="BSD GPL-3-with-openssl-exception LGPL-2+"
|
|
SLOT="0"
|
|
IUSE="+dbus enchant +fonts +hunspell +lto wayland +X"
|
|
# alsa crashreporter custom-api-id
|
|
REQUIRED_USE="
|
|
enchant? ( !hunspell )
|
|
"
|
|
|
|
RDEPEND="
|
|
!net-im/telegram-desktop-bin
|
|
app-arch/lz4:=
|
|
dbus? ( dev-cpp/glibmm:2.68 )
|
|
>=dev-cpp/abseil-cpp-20220623.1:=
|
|
dev-libs/crc32c
|
|
dev-libs/glib:2
|
|
dev-libs/jemalloc:=[-lazy-lock]
|
|
dev-libs/libevent:=
|
|
dev-libs/openssl:=
|
|
dev-libs/protobuf:=
|
|
>=dev-qt/qtcore-5.15:5
|
|
>=dev-qt/qtgui-5.15:5[dbus?,jpeg,png,wayland?,X?]
|
|
>=dev-qt/qtimageformats-5.15:5
|
|
>=dev-qt/qtnetwork-5.15:5[ssl]
|
|
>=dev-qt/qtsvg-5.15:5
|
|
>=dev-qt/qtwidgets-5.15:5[png,X?]
|
|
enchant? ( app-text/enchant:= )
|
|
hunspell? ( >=app-text/hunspell-1.7:= )
|
|
kde-frameworks/kcoreaddons:=
|
|
media-fonts/open-sans
|
|
media-libs/fontconfig:=
|
|
media-libs/libjpeg-turbo:=
|
|
>=media-libs/libvpx-1.10.0:=
|
|
media-libs/openal
|
|
media-libs/openh264:=
|
|
media-libs/opus:=
|
|
media-libs/rnnoise
|
|
media-sound/pulseaudio
|
|
media-video/ffmpeg:=[opus]
|
|
media-video/pipewire:=
|
|
net-libs/usrsctp
|
|
sys-libs/zlib:=[minizip]
|
|
X? (
|
|
x11-libs/libX11
|
|
x11-libs/libXcomposite
|
|
x11-libs/libXdamage
|
|
x11-libs/libXext
|
|
x11-libs/libXfixes
|
|
x11-libs/libXrender
|
|
x11-libs/libXrandr
|
|
x11-libs/libXtst
|
|
x11-libs/libxcb:=
|
|
)
|
|
"
|
|
# alsa? ( media-libs/alsa-lib )
|
|
# crashreporter? ( dev-util/google-breakpad )
|
|
DEPEND="${RDEPEND}"
|
|
BDEPEND="
|
|
${PYTHON_DEPS}
|
|
>=dev-util/cmake-3.16
|
|
virtual/pkgconfig
|
|
"
|
|
|
|
PATCHES=(
|
|
"${FILESDIR}/tdesktop-4.3.4-qt5-incompatibility-2.patch"
|
|
"${FILESDIR}/tdesktop-4.4.1-fix-dupe-main-decl.patch"
|
|
)
|
|
|
|
TG_OWT_PATCHES=(
|
|
"${FILESDIR}/tg_owt-0_pre20220209-gcc-12-cstddef.patch"
|
|
"${FILESDIR}/tg_owt-0_pre20220209-gcc-12-cstdint.patch"
|
|
)
|
|
|
|
# Current desktop-file-utils-0.26 does not understand Version=1.5
|
|
QA_DESKTOP_FILE="usr/share/applications/${PN}.desktop"
|
|
|
|
QTBASE_DIR="${WORKDIR}"/Libraries/qtbase
|
|
TG_OWT_DIR="${WORKDIR}"/Libraries/tg_owt
|
|
|
|
pkg_pretend() {
|
|
# if use custom-api-id
|
|
# then
|
|
# [[ -n "${TDESKTOP_API_ID}" ]] && \
|
|
# [[ -n "${TDESKTOP_API_HASH}" ]] && (
|
|
# einfo "Will be used custom 'api_id' and 'api_hash':"
|
|
# einfo "TDESKTOP_API_ID=${TDESKTOP_API_ID}"
|
|
# einfo "TDESKTOP_API_HASH=${TDESKTOP_API_HASH//[!\*]/*}"
|
|
# ) || (
|
|
# eerror "It seems you did not set one or both of"
|
|
# eerror "TDESKTOP_API_ID and TDESKTOP_API_HASH variables,"
|
|
# eerror "which are required for custom-api-id USE-flag."
|
|
# eerror "You can set them either in your env or bashrc."
|
|
# die
|
|
# )
|
|
#
|
|
# echo ${TDESKTOP_API_ID} | grep -q "^[0-9]\+$" || (
|
|
# eerror "Please check your TDESKTOP_API_ID variable"
|
|
# eerror "It should consist of decimal numbers only"
|
|
# die
|
|
# )
|
|
#
|
|
# echo ${TDESKTOP_API_HASH} | grep -q "^[0-9A-Fa-f]\{32\}$" || (
|
|
# eerror "Please check your TDESKTOP_API_HASH variable"
|
|
# eerror "It should consist of 32 hex numbers only"
|
|
# die
|
|
# )
|
|
# fi
|
|
|
|
if tc-is-gcc && [[ $(gcc-major-version) -lt 7 ]]
|
|
then
|
|
die "At least gcc 7.0 is required"
|
|
fi
|
|
}
|
|
|
|
git_unpack() {
|
|
git-r3_src_unpack
|
|
|
|
unset EGIT_BRANCH
|
|
unset EGIT_SUBMODULES
|
|
|
|
EGIT_COMMIT_DATE=$(GIT_DIR="${S}/.git" git show -s --format=%ct || die)
|
|
|
|
EGIT_REPO_URI="https://code.qt.io/qt/qtbase.git"
|
|
EGIT_CHECKOUT_DIR="${QTBASE_DIR}"
|
|
|
|
git-r3_src_unpack
|
|
|
|
EGIT_REPO_URI="https://github.com/desktop-app/tg_owt.git"
|
|
EGIT_CHECKOUT_DIR="${TG_OWT_DIR}"
|
|
|
|
git-r3_src_unpack
|
|
}
|
|
|
|
src_unpack() {
|
|
if [[ ${PV} == 9999 ]]
|
|
then
|
|
git_unpack
|
|
return
|
|
fi
|
|
|
|
unpack "${MY_P}.tar.gz"
|
|
|
|
local commit=$(
|
|
cat "${MY_P}"/Telegram/build/docker/centos_env/Dockerfile \
|
|
| sed '/^RUN.*git.*init.*tg_owt/,/git.*fetch/!d' \
|
|
| tail -n1 | sed 's/.*\([0-9a-zA-Z]\{40\}\).*/\1/'
|
|
)
|
|
|
|
if [[ "${commit}" != "${TG_OWT_COMMIT}" ]]
|
|
then
|
|
die "You should update \${TG_OWT_COMMIT} to ${commit}"
|
|
fi
|
|
|
|
mkdir Libraries || die
|
|
cd Libraries || die
|
|
|
|
unpack "qtbase-everywhere-src-${QTBASE_VER}.tar.xz"
|
|
mv "qtbase-everywhere-src-${QTBASE_VER}" "qtbase" || die
|
|
|
|
unpack "tg_owt-${TG_OWT_COMMIT::7}.tar.gz"
|
|
mv "tg_owt-${TG_OWT_COMMIT}" "tg_owt" || die
|
|
|
|
cd "tg_owt/src/third_party" || die
|
|
|
|
unpack "abseil-cpp-${ABSEIL_VER}.tar.gz"
|
|
rmdir "abseil-cpp" || die
|
|
mv "abseil-cpp-${ABSEIL_VER}" "abseil-cpp" || die
|
|
|
|
unpack "crc32c-${CRC32C_VER}.tar.gz"
|
|
rmdir "crc32c/src" || die
|
|
mv "crc32c-${CRC32C_VER}" "crc32c/src" || die
|
|
|
|
unpack "libyuv-${LIBYUV_COMMIT::7}.tar.gz"
|
|
rmdir "libyuv" || die
|
|
mv "libyuv-${LIBYUV_COMMIT}" "libyuv" || die
|
|
}
|
|
|
|
qt_prepare() {
|
|
local qt_src="${QTBASE_DIR}"/src
|
|
local qt_fun="${S}"/Telegram/lib_ui/ui/text/qtextitemint.cpp
|
|
|
|
echo "#include <QtGui/private/qtextengine_p.h>" > "${qt_fun}"
|
|
|
|
sed '/^QTextItemInt::QTextItemInt.*QGlyphLayout/,/^\}/!d' \
|
|
"${qt_src}"/gui/text/qtextengine.cpp >> "${qt_fun}"
|
|
|
|
sed '/^void.*QTextItemInt::initWithScriptItem.*QScriptItem/,/^\}/!d' \
|
|
"${qt_src}"/gui/text/qtextengine.cpp >> "${qt_fun}"
|
|
|
|
}
|
|
|
|
tg_owt_prepare() {
|
|
local PATCHES=( "${TG_OWT_PATCHES[@]}" )
|
|
|
|
pushd "${TG_OWT_DIR}" >/dev/null || die
|
|
|
|
sed -i -e '/include.*libopenh264/d' \
|
|
CMakeLists.txt || die
|
|
|
|
BUILD_DIR="${TG_OWT_DIR}/out" CMAKE_USE_DIR="${TG_OWT_DIR}" \
|
|
cmake_src_prepare
|
|
|
|
popd >/dev/null || die
|
|
}
|
|
|
|
src_prepare() {
|
|
qt_prepare
|
|
tg_owt_prepare
|
|
|
|
cp "${FILESDIR}"/breakpad.cmake \
|
|
cmake/external/crash_reports/breakpad/CMakeLists.txt || die
|
|
|
|
sed -i -e 's:DESKTOP_APP_USE_PACKAGED:False:' \
|
|
cmake/external/{expected,gsl,ranges,variant,xxhash}/CMakeLists.txt \
|
|
Telegram/cmake/lib_tgvoip.cmake || die
|
|
|
|
sed -i -e 's:find_package.*tg_owt:\0 PATHS ${libs_loc}/tg_owt/out:' \
|
|
cmake/external/webrtc/CMakeLists.txt || die
|
|
|
|
sed -i -e '/find_package/ s:Qt6::' \
|
|
cmake/external/qt/package.cmake || die
|
|
|
|
# TDESKTOP_API_{ID,HASH} related:
|
|
|
|
sed -i -e 's:if.*TDESKTOP_API_[A-Z]*.*:if(False):' \
|
|
Telegram/cmake/telegram_options.cmake || die
|
|
|
|
sed -i -e '/TDESKTOP_API_[A-Z]*/d' \
|
|
Telegram/CMakeLists.txt || die
|
|
|
|
# if use custom-api-id
|
|
# then
|
|
# local -A api_defs=(
|
|
# [ID]="#define TDESKTOP_API_ID ${TDESKTOP_API_ID}"
|
|
# [HASH]="#define TDESKTOP_API_HASH ${TDESKTOP_API_HASH}"
|
|
# )
|
|
# else
|
|
if true
|
|
then
|
|
local -A api_defs=(
|
|
[ID]=$(
|
|
cat snap/snapcraft.yaml \
|
|
| ( grep TDESKTOP_API_ID || die ) \
|
|
| sed 's:.*=\(.*\):#define TDESKTOP_API_ID \1:'
|
|
)
|
|
|
|
[HASH]=$(
|
|
cat snap/snapcraft.yaml \
|
|
| ( grep TDESKTOP_API_HASH || die ) \
|
|
| sed 's:.*=\(.*\):#define TDESKTOP_API_HASH \1:'
|
|
)
|
|
)
|
|
fi
|
|
|
|
sed -i \
|
|
-e "/#if.*defined.*TDESKTOP_API_ID/i ${api_defs[ID]}" \
|
|
-e "/#if.*defined.*TDESKTOP_API_HASH/i ${api_defs[HASH]}" \
|
|
Telegram/SourceFiles/config.h || die
|
|
|
|
cmake_src_prepare
|
|
}
|
|
|
|
tg_owt_configure() {
|
|
local mycmakeargs=(
|
|
-DBUILD_SHARED_LIBS=OFF
|
|
-DTG_OWT_BUILD_AUDIO_BACKENDS=OFF
|
|
-DTG_OWT_USE_PROTOBUF=ON
|
|
)
|
|
|
|
BUILD_DIR="${TG_OWT_DIR}/out" CMAKE_USE_DIR="${TG_OWT_DIR}" \
|
|
cmake_src_configure
|
|
}
|
|
|
|
src_configure() {
|
|
local mycxxflags=(
|
|
-Wno-array-bounds
|
|
-Wno-free-nonheap-object
|
|
-Wno-uninitialized
|
|
)
|
|
|
|
append-cxxflags ${mycxxflags[@]}
|
|
|
|
tg_owt_configure
|
|
|
|
local mycmakeargs=(
|
|
-DDESKTOP_APP_USE_PACKAGED=ON
|
|
-DDESKTOP_APP_USE_PACKAGED_RLOTTIE=OFF
|
|
-DLIBTGVOIP_DISABLE_PULSEAUDIO=OFF
|
|
|
|
# -DDESKTOP_APP_DISABLE_CRASH_REPORTS=$(usex !crashreporter)
|
|
-DDESKTOP_APP_DISABLE_DBUS_INTEGRATION=$(usex !dbus)
|
|
-DDESKTOP_APP_DISABLE_SPELLCHECK=$(usex !enchant $(usex !hunspell))
|
|
-DDESKTOP_APP_DISABLE_WAYLAND_INTEGRATION=$(usex !wayland)
|
|
-DDESKTOP_APP_DISABLE_X11_INTEGRATION=$(usex !X)
|
|
-DDESKTOP_APP_USE_ENCHANT=$(usex enchant)
|
|
-DDESKTOP_APP_USE_PACKAGED_FONTS=$(usex !fonts)
|
|
# -DLIBTGVOIP_DISABLE_ALSA=$(usex !alsa)
|
|
)
|
|
|
|
if use lto; then
|
|
mycmakeargs+=(
|
|
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
|
|
)
|
|
fi
|
|
|
|
cmake_src_configure
|
|
}
|
|
|
|
src_compile() {
|
|
BUILD_DIR="${TG_OWT_DIR}/out" CMAKE_USE_DIR="${TG_OWT_DIR}" \
|
|
cmake_src_compile
|
|
|
|
cmake_src_compile
|
|
}
|
|
|
|
pkg_postinst() {
|
|
xdg_pkg_postinst
|
|
if has_version '<dev-qt/qtcore-5.15.2-r10'; then
|
|
ewarn "Versions of dev-qt/qtcore lower than 5.15.2-r10 might cause telegram"
|
|
ewarn "to crash when pasting big images from the clipboard."
|
|
fi
|
|
optfeature_header
|
|
optfeature "shop payment support (requires USE=dbus enabled)" net-libs/webkit-gtk
|
|
}
|