diff --git a/trunk/PKGBUILD b/trunk/PKGBUILD index 769aab3..7d486be 100644 --- a/trunk/PKGBUILD +++ b/trunk/PKGBUILD @@ -2,6 +2,7 @@ # Contributor: hexchain pkgname=telegram-desktop pkgver=4.5.3 +_qtver=6.4.2 pkgrel=1 pkgdesc='Official Telegram Desktop client' arch=('x86_64') @@ -15,15 +16,49 @@ makedepends=('cmake' 'git' 'ninja' 'python' 'range-v3' 'tl-expected' 'microsoft- 'extra-cmake-modules' 'wayland-protocols' 'plasma-wayland-protocols' 'libtg_owt') optdepends=('webkit2gtk: embedded browser features' 'xdg-desktop-portal: desktop integration') -source=("https://github.com/telegramdesktop/tdesktop/releases/download/v${pkgver}/tdesktop-${pkgver}-full.tar.gz") -sha512sums=('58a9c5d096e236090347388e1ed480527f841045a80771079dc0c3e35e12ce8ac11753987e87bb57870d9bd8488fc6a4734114648ecec7823d8544744b06c6b1') +_pkgfn=qtbase-everywhere-src-$_qtver +source=("https://github.com/telegramdesktop/tdesktop/releases/download/v${pkgver}/tdesktop-${pkgver}-full.tar.gz" + https://download.qt.io/official_releases/qt/${_qtver%.*}/$_qtver/submodules/$_pkgfn.tar.xz + qt6-base-cflags.patch + qt6-base-nostrip.patch + qt6-base-Revert-Do-not-use-client-side-data-pointers-in-qopen.patch) +sha512sums=('58a9c5d096e236090347388e1ed480527f841045a80771079dc0c3e35e12ce8ac11753987e87bb57870d9bd8488fc6a4734114648ecec7823d8544744b06c6b1' + 'b00cce7bfc29d3a34c9a2f08db147c4bfd962e178916d60033e1845b25eaeaa4fbd42f5c1d7e39453ddb412a4e91c22c8eae52745eda8a47e35a691054d5496e' + 'ce4c2b4aeb70073c1f68d68e9f03746bba5350e09605ca29f64b57c92d3ff9ab27279fe307307273cb4c23fd091bb9056d7b86eb02a802b695499d56b1f79cf0' + 'af061bb56d5079d11407e6eb352fa4af7fefa6aed7f8cc40b5b2d591ef7ff04e9da6c6d534ca1904355ea7552951a1610fdcefb04ef9d696cb2b23ad6a0606e8' + 'e91265b04a4724a636428963af29563b02285ed2a70abc23bdb34d54589c2f0688f39e27f16c82e97cb84dde543cd102614c3f200d587eeb686a85507833b149') prepare() { - cd tdesktop-$pkgver-full + cd $_pkgfn + patch -Np1 -i ../qt6-base-cflags.patch + patch -Np1 -i ../qt6-base-nostrip.patch + patch -Np1 -i ../qt6-base-Revert-Do-not-use-client-side-data-pointers-in-qopen.patch + cd ../tdesktop-$pkgver-full rm -rf Telegram/ThirdParty/libtgvoip/webrtc_dsp/absl } build() { + cmake -B build-qt6-base -S $_pkgfn -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DINSTALL_BINDIR=lib/qt6/bin \ + -DINSTALL_PUBLICBINDIR=usr/bin \ + -DINSTALL_LIBEXECDIR=lib/qt6 \ + -DINSTALL_DOCDIR=share/doc/qt6 \ + -DINSTALL_ARCHDATADIR=lib/qt6 \ + -DINSTALL_DATADIR=share/qt6 \ + -DINSTALL_INCLUDEDIR=include/qt6 \ + -DINSTALL_MKSPECSDIR=lib/qt6/mkspecs \ + -DINSTALL_EXAMPLESDIR=share/doc/qt6/examples \ + -DQT_FEATURE_journald=ON \ + -DQT_FEATURE_openssl_linked=ON \ + -DQT_FEATURE_system_sqlite=ON \ + -DQT_FEATURE_system_xcb_xinput=ON \ + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ + -DCMAKE_MESSAGE_LOG_LEVEL=STATUS \ + -DCMAKE_SKIP_RPATH=ON + cmake --build build-qt6-base --target OpenGL + cd tdesktop-$pkgver-full #Turns out we're allowed to use the official API key that telegram uses for their snap builds: @@ -35,7 +70,8 @@ build() { -DCMAKE_INSTALL_PREFIX="/usr" \ -DCMAKE_BUILD_TYPE=Release \ -DTDESKTOP_API_ID=611335 \ - -DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c + -DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c \ + -DCMAKE_INSTALL_RPATH="\$ORIGIN/../lib/$pkgname" ninja -C build } @@ -44,4 +80,5 @@ package() { DESTDIR="$pkgdir" ninja -C build install # They botched the release and put a lot of stuff here. rm -rf "$pkgdir/build" + install -D ../build-qt6-base/lib/libQt6OpenGL.so.$_qtver "$pkgdir/usr/lib/$pkgname/libQt6OpenGL.so.${_qtver%%.*}" } diff --git a/trunk/qt6-base-Revert-Do-not-use-client-side-data-pointers-in-qopen.patch b/trunk/qt6-base-Revert-Do-not-use-client-side-data-pointers-in-qopen.patch new file mode 100644 index 0000000..415db63 --- /dev/null +++ b/trunk/qt6-base-Revert-Do-not-use-client-side-data-pointers-in-qopen.patch @@ -0,0 +1,159 @@ +From 54c1178cdc048b540922e7ded9dd47a76640afc0 Mon Sep 17 00:00:00 2001 +From: Ilya Fedin +Date: Fri, 25 Nov 2022 11:48:09 +0400 +Subject: [PATCH] Revert "Do not use client-side data pointers in + qopenglpaintengine" + +This reverts commit e487b07e18f1cb7ff126744be57b2ae1b9839c6c. +--- + src/opengl/qopenglpaintengine.cpp | 47 ++++++++++++------------ + src/opengl/qopenglpaintengine_p.h | 59 ++++++++++++++++++++----------- + 2 files changed, 63 insertions(+), 43 deletions(-) + +diff --git a/src/opengl/qopenglpaintengine.cpp b/src/opengl/qopenglpaintengine.cpp +index 5d9bcf2a38..2556881e12 100644 +--- a/src/opengl/qopenglpaintengine.cpp ++++ b/src/opengl/qopenglpaintengine.cpp +@@ -726,11 +726,11 @@ void QOpenGL2PaintEngineExPrivate::resetGLState() + float color[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + funcs.glVertexAttrib4fv(3, color); + } +- if (vao.isCreated()) ++ if (vao.isCreated()) { + vao.release(); +- +- funcs.glBindBuffer(GL_ARRAY_BUFFER, 0); +- funcs.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); ++ funcs.glBindBuffer(GL_ARRAY_BUFFER, 0); ++ funcs.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); ++ } + } + + void QOpenGL2PaintEngineEx::endNativePainting() +@@ -2198,27 +2198,28 @@ bool QOpenGL2PaintEngineEx::begin(QPaintDevice *pdev) + bool created = d->vao.create(); + + // If we managed to create it then we have a profile that supports VAOs +- if (created) ++ if (created) { + d->vao.bind(); +- } + +- // Generate a new Vertex Buffer Object if we don't have one already +- if (!d->vertexBuffer.isCreated()) { +- d->vertexBuffer.create(); +- // Set its usage to StreamDraw, we will use this buffer only a few times before refilling it +- d->vertexBuffer.setUsagePattern(QOpenGLBuffer::StreamDraw); +- } +- if (!d->texCoordBuffer.isCreated()) { +- d->texCoordBuffer.create(); +- d->texCoordBuffer.setUsagePattern(QOpenGLBuffer::StreamDraw); +- } +- if (!d->opacityBuffer.isCreated()) { +- d->opacityBuffer.create(); +- d->opacityBuffer.setUsagePattern(QOpenGLBuffer::StreamDraw); +- } +- if (!d->indexBuffer.isCreated()) { +- d->indexBuffer.create(); +- d->indexBuffer.setUsagePattern(QOpenGLBuffer::StreamDraw); ++ // Generate a new Vertex Buffer Object if we don't have one already ++ if (!d->vertexBuffer.isCreated()) { ++ d->vertexBuffer.create(); ++ // Set its usage to StreamDraw, we will use this buffer only a few times before refilling it ++ d->vertexBuffer.setUsagePattern(QOpenGLBuffer::StreamDraw); ++ } ++ if (!d->texCoordBuffer.isCreated()) { ++ d->texCoordBuffer.create(); ++ d->texCoordBuffer.setUsagePattern(QOpenGLBuffer::StreamDraw); ++ } ++ if (!d->opacityBuffer.isCreated()) { ++ d->opacityBuffer.create(); ++ d->opacityBuffer.setUsagePattern(QOpenGLBuffer::StreamDraw); ++ } ++ if (!d->indexBuffer.isCreated()) { ++ d->indexBuffer.create(); ++ d->indexBuffer.setUsagePattern(QOpenGLBuffer::StreamDraw); ++ } ++ } + } + + for (int i = 0; i < QT_GL_VERTEX_ARRAY_TRACKED_COUNT; ++i) +diff --git a/src/opengl/qopenglpaintengine_p.h b/src/opengl/qopenglpaintengine_p.h +index 5d2bbbeb11..2548d9db94 100644 +--- a/src/opengl/qopenglpaintengine_p.h ++++ b/src/opengl/qopenglpaintengine_p.h +@@ -307,32 +307,51 @@ void QOpenGL2PaintEngineExPrivate::uploadData(unsigned int arrayIndex, const GLf + { + Q_ASSERT(arrayIndex < 3); + +- if (arrayIndex == QT_VERTEX_COORDS_ATTR) { +- vertexBuffer.bind(); +- vertexBuffer.allocate(data, count * sizeof(float)); +- } +- if (arrayIndex == QT_TEXTURE_COORDS_ATTR) { +- texCoordBuffer.bind(); +- texCoordBuffer.allocate(data, count * sizeof(float)); +- } +- if (arrayIndex == QT_OPACITY_ATTR) { +- opacityBuffer.bind(); +- opacityBuffer.allocate(data, count * sizeof(float)); +- +- funcs.glVertexAttribPointer(arrayIndex, 1, GL_FLOAT, GL_FALSE, 0, nullptr); ++ // If a vertex array object is created we have a profile that supports them ++ // and we will upload the data via a QOpenGLBuffer. Otherwise we will use ++ // the legacy way of uploading the data via glVertexAttribPointer. ++ if (vao.isCreated()) { ++ if (arrayIndex == QT_VERTEX_COORDS_ATTR) { ++ vertexBuffer.bind(); ++ vertexBuffer.allocate(data, count * sizeof(float)); ++ } ++ if (arrayIndex == QT_TEXTURE_COORDS_ATTR) { ++ texCoordBuffer.bind(); ++ texCoordBuffer.allocate(data, count * sizeof(float)); ++ } ++ if (arrayIndex == QT_OPACITY_ATTR) { ++ opacityBuffer.bind(); ++ opacityBuffer.allocate(data, count * sizeof(float)); ++ } ++ if (arrayIndex == QT_OPACITY_ATTR) ++ funcs.glVertexAttribPointer(arrayIndex, 1, GL_FLOAT, GL_FALSE, 0, nullptr); ++ else ++ funcs.glVertexAttribPointer(arrayIndex, 2, GL_FLOAT, GL_FALSE, 0, nullptr); + } else { +- funcs.glVertexAttribPointer(arrayIndex, 2, GL_FLOAT, GL_FALSE, 0, nullptr); ++ // If we already uploaded the data we don't have to do it again ++ if (data == vertexAttribPointers[arrayIndex]) ++ return; ++ ++ // Store the data in cache and upload it to the graphics card. ++ vertexAttribPointers[arrayIndex] = data; ++ if (arrayIndex == QT_OPACITY_ATTR) ++ funcs.glVertexAttribPointer(arrayIndex, 1, GL_FLOAT, GL_FALSE, 0, data); ++ else ++ funcs.glVertexAttribPointer(arrayIndex, 2, GL_FLOAT, GL_FALSE, 0, data); + } + } + + bool QOpenGL2PaintEngineExPrivate::uploadIndexData(const void *data, GLenum indexValueType, GLuint count) + { +- Q_ASSERT(indexValueType == GL_UNSIGNED_SHORT || indexValueType == GL_UNSIGNED_INT); +- indexBuffer.bind(); +- indexBuffer.allocate( +- data, +- count * (indexValueType == GL_UNSIGNED_SHORT ? sizeof(quint16) : sizeof(quint32))); +- return true; ++ // Follow the uploadData() logic: VBOs are used only when VAO support is available. ++ // Otherwise the legacy client-side pointer path is used. ++ if (vao.isCreated()) { ++ Q_ASSERT(indexValueType == GL_UNSIGNED_SHORT || indexValueType == GL_UNSIGNED_INT); ++ indexBuffer.bind(); ++ indexBuffer.allocate(data, count * (indexValueType == GL_UNSIGNED_SHORT ? sizeof(quint16) : sizeof(quint32))); ++ return true; ++ } ++ return false; + } + + QT_END_NAMESPACE +-- +2.38.1 + diff --git a/trunk/qt6-base-cflags.patch b/trunk/qt6-base-cflags.patch new file mode 100644 index 0000000..3325016 --- /dev/null +++ b/trunk/qt6-base-cflags.patch @@ -0,0 +1,46 @@ +diff --git a/mkspecs/common/g++-unix.conf b/mkspecs/common/g++-unix.conf +index a493cd5984..41342f5020 100644 +--- a/mkspecs/common/g++-unix.conf ++++ b/mkspecs/common/g++-unix.conf +@@ -10,5 +10,6 @@ + + include(g++-base.conf) + +-QMAKE_LFLAGS_RELEASE += -Wl,-O1 ++SYSTEM_LDFLAGS = $$(LDFLAGS) ++!isEmpty(SYSTEM_LDFLAGS) { eval(QMAKE_LFLAGS_RELEASE += $$(LDFLAGS)) } else { QMAKE_LFLAGS_RELEASE += -Wl,-O1 } + QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined +diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf +index 1f919d270a..7ef6046326 100644 +--- a/mkspecs/common/gcc-base.conf ++++ b/mkspecs/common/gcc-base.conf +@@ -40,9 +40,11 @@ QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os + QMAKE_CFLAGS_DEPS += -M + QMAKE_CFLAGS_WARN_ON += -Wall -Wextra + QMAKE_CFLAGS_WARN_OFF += -w +-QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE +-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g +-QMAKE_CFLAGS_DEBUG += -g ++SYSTEM_CFLAGS = $$(CFLAGS) ++SYSTEM_DEBUG_CFLAGS = $$(DEBUG_CFLAGS) ++!isEmpty(SYSTEM_CFLAGS) { eval(QMAKE_CFLAGS_RELEASE += $$(CFLAGS)) } else { QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE } ++!isEmpty(SYSTEM_CFLAGS) { eval(QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -g $$(CFLAGS)) } else { QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g } ++!isEmpty(SYSTEM_DEBUG_CFLAGS) { eval(QMAKE_CFLAGS_DEBUG += $$(DEBUG_CFLAGS)) } else { QMAKE_CFLAGS_DEBUG += -g } + QMAKE_CFLAGS_SHLIB += $$QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_APP += $$QMAKE_CFLAGS_PIC +@@ -59,9 +61,11 @@ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS + QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS + QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON + QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF +-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE +-QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO +-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG ++SYSTEM_CXXFLAGS = $$(CXXFLAGS) ++SYSTEM_DEBUG_CXXFLAGS = $$(DEBUG_CXXFLAGS) ++!isEmpty(SYSTEM_CXXFLAGS) { eval(QMAKE_CXXFLAGS_RELEASE += $$(CXXFLAGS)) } else { QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE } ++!isEmpty(SYSTEM_CXXFLAGS) { eval(QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -g $$(CXXFLAGS)) } else { QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g } ++!isEmpty(SYSTEM_DEBUG_CXXFLAGS) { eval(QMAKE_CXXFLAGS_DEBUG += $$(DEBUG_CXXFLAGS)) } else { QMAKE_CXXFLAGS_DEBUG += -g } + QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB + QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB + QMAKE_CXXFLAGS_APP += $$QMAKE_CFLAGS_APP diff --git a/trunk/qt6-base-nostrip.patch b/trunk/qt6-base-nostrip.patch new file mode 100644 index 0000000..17d24b4 --- /dev/null +++ b/trunk/qt6-base-nostrip.patch @@ -0,0 +1,13 @@ +diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf +index 99d77156fd..fc840fe9f6 100644 +--- a/mkspecs/common/gcc-base.conf ++++ b/mkspecs/common/gcc-base.conf +@@ -31,6 +31,8 @@ + # you can use the manual test in tests/manual/mkspecs. + # + ++CONFIG += nostrip ++ + QMAKE_CFLAGS_OPTIMIZE = -O2 + QMAKE_CFLAGS_OPTIMIZE_FULL = -O3 + QMAKE_CFLAGS_OPTIMIZE_DEBUG = -Og