summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore9
-rw-r--r--Telegram/Patches/qtbase_5_6_2.diff37
-rw-r--r--snap/plugins/x-autotools-subsource.py66
-rw-r--r--snap/plugins/x-gyp-cmake.py100
-rw-r--r--snap/plugins/x-patched-python.py65
-rw-r--r--snap/plugins/x-qtbuilder.py204
-rwxr-xr-xsnap/scripts/telegram-launch24
-rw-r--r--snap/snapcraft.yaml415
8 files changed, 920 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 63873b949b..0cc39366d3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,6 +50,15 @@ ipch/
project.xcworkspace
xcuserdata
+parts
+prime
+stage
+*.snap
+.snapcraft
+/snap/gui/*.png
+/snap/gui/*.desktop
+/snap/plugins/__pycache__
+
/Telegram/*.user.*
*.pro.user
/Linux/
diff --git a/Telegram/Patches/qtbase_5_6_2.diff b/Telegram/Patches/qtbase_5_6_2.diff
index ac7c7c3e2c..e6906ff1a3 100644
--- a/Telegram/Patches/qtbase_5_6_2.diff
+++ b/Telegram/Patches/qtbase_5_6_2.diff
@@ -252,6 +252,43 @@ index 41834b21ae..8cdf4ab145 100644
if (value == WSAEADDRNOTAVAIL) {
setError(QAbstractSocket::NetworkError, AddressNotAvailableErrorString);
socketState = QAbstractSocket::UnconnectedState;
+diff --git a/src/platformsupport/dbustray/qdbustrayicon.cpp b/src/platformsupport/dbustray/qdbustrayicon.cpp
+index 4d6e707..9bdb0be 100644
+--- a/src/platformsupport/dbustray/qdbustrayicon.cpp
++++ b/src/platformsupport/dbustray/qdbustrayicon.cpp
+@@ -58,9 +58,18 @@ QT_BEGIN_NAMESPACE
+
+ Q_LOGGING_CATEGORY(qLcTray, "qt.qpa.tray")
+
++static QString cachePath()
++{
++ QString xdgCache = QString::fromUtf8(getenv("XDG_CACHE_HOME"));
++ if (xdgCache.isEmpty()) {
++ xdgCache = QDir::cleanPath(QDir::homePath() + QStringLiteral("/.cache"));
++ }
++ return xdgCache;
++}
++
+ static const QString KDEItemFormat = QStringLiteral("org.kde.StatusNotifierItem-%1-%2");
+ static const QString KDEWatcherService = QStringLiteral("org.kde.StatusNotifierWatcher");
+-static const QString TempFileTemplate = QDir::tempPath() + QStringLiteral("/qt-trayicon-XXXXXX.png");
++static const QString TempFileTemplate = cachePath() + QStringLiteral("/qt-trayicon-XXXXXX.png");
+ static const QString XdgNotificationService = QStringLiteral("org.freedesktop.Notifications");
+ static const QString XdgNotificationPath = QStringLiteral("/org/freedesktop/Notifications");
+ static const QString DefaultAction = QStringLiteral("default");
+@@ -151,6 +160,12 @@ QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)
+ uint pid = session.interface()->servicePid(KDEWatcherService).value();
+ QString processName = QLockFilePrivate::processNameByPid(pid);
+ necessary = processName.endsWith(QStringLiteral("indicator-application-service"));
++ if (!necessary) {
++ QString xdgDesktop = QString::fromUtf8(getenv("XDG_CURRENT_DESKTOP"));
++ QStringList desktops = xdgDesktop.toLower().split(QLatin1Char(':'));
++ necessary = desktops.contains(QStringLiteral("unity")) ||
++ desktops.contains(QStringLiteral("ubuntu"));
++ }
+ necessity_checked = true;
+ }
+ if (!necessary)
diff --git a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
index 728b166b71..1dc64593e1 100644
--- a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
diff --git a/snap/plugins/x-autotools-subsource.py b/snap/plugins/x-autotools-subsource.py
new file mode 100644
index 0000000000..330ea0b1b2
--- /dev/null
+++ b/snap/plugins/x-autotools-subsource.py
@@ -0,0 +1,66 @@
+# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
+#
+# Author: Marco Trevisan <marco@ubuntu.com>
+# Copyright (C) 2017-2018 Canonical Ltd
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import snapcraft
+
+from snapcraft.internal import sources
+from snapcraft.plugins import autotools
+
+class Dict2Object(object):
+ def __init__(self, d):
+ for k, v in d.items():
+ setattr(self, k.replace('-', '_'), v)
+
+
+class AutotoolsSubsourcePlugin(autotools.AutotoolsPlugin):
+
+ @classmethod
+ def schema(cls):
+ schema = super().schema()
+
+ schema['properties']['sub-sources'] = {
+ 'type': 'array',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'object',
+ 'additionalProperties': True,
+ },
+ 'default': [],
+ }
+
+ return schema
+
+ @classmethod
+ def get_pull_properties(cls):
+ return [
+ 'sub-sources',
+ ]
+
+ def pull(self):
+ super().pull()
+
+ for src in self.options.sub_sources:
+ [name] = src.keys()
+ [values] = src.values()
+
+ if 'source' in values:
+ dest = values['dest'] if 'dest' in values else ''
+ sources.get(os.path.join(self.sourcedir, dest),
+ os.path.join(self.build_basedir, dest),
+ Dict2Object(values))
diff --git a/snap/plugins/x-gyp-cmake.py b/snap/plugins/x-gyp-cmake.py
new file mode 100644
index 0000000000..94a5ba1a89
--- /dev/null
+++ b/snap/plugins/x-gyp-cmake.py
@@ -0,0 +1,100 @@
+# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
+#
+# Author: Marco Trevisan <marco@ubuntu.com>
+# Copyright (C) 2017-2018 Canonical Ltd
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import snapcraft
+
+from snapcraft.plugins import cmake
+
+
+class GypCMakePlugin(cmake.CMakePlugin):
+ """A basic plugin for snapcraft that generates CMake files from gyp"""
+
+ @classmethod
+ def schema(cls):
+ schema = super().schema()
+
+ schema['properties']['gyp-file'] = {
+ 'type': 'string'
+ }
+
+ schema['properties']['build-type'] = {
+ 'type': 'string',
+ 'default': 'Release',
+ 'enum': ['Debug', 'Release'],
+ }
+
+ schema['properties']['environment'] = {
+ 'type': 'array',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'object',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'string',
+ },
+ },
+ 'default': [],
+ }
+
+ schema['required'].append('gyp-file')
+
+ schema['build-properties'].extend([
+ 'build-type',
+ 'gyp-file',
+ ])
+
+ return schema
+
+ def __init__(self, name, options, project):
+ super().__init__(name, options, project)
+ self.build_packages.extend([
+ 'binutils',
+ 'python',
+ ])
+ self.builddir = os.path.join(
+ self.build_basedir, 'out', self.options.build_type)
+
+ def build(self):
+ env = self._build_environment()
+ gyp_path = os.path.join(self.sourcedir, os.path.dirname(self.options.gyp_file))
+
+ for environ in self.options.environment:
+ [env_name] = list(environ)
+ env[env_name] = str(environ[env_name])
+
+ if not os.path.exists(os.path.join(self.builddir, 'CMakeLists.txt')):
+ gyp_command = ['gyp'] + self.options.configflags + ['--format=cmake']
+ gyp_command.append('--generator-output={}'.format(self.build_basedir))
+ gyp_command.append(os.path.basename(self.options.gyp_file))
+ self.run(gyp_command, cwd=gyp_path)
+
+ if not os.path.exists(os.path.join(self.builddir, 'Makefile')):
+ self.run(['cmake', '.'], env=env)
+
+ self.make(env=env)
+
+ if self.options.artifacts and self.options.build_type == 'Release':
+ for artifact in self.options.artifacts:
+ dest = os.path.join(self.installdir, artifact)
+ if os.path.isfile(dest):
+ mime_type = self.run_output(
+ 'file --mime-type -b {}'.format(dest).split())
+ if 'application/x-executable' in mime_type:
+ self.run(['strip', dest])
diff --git a/snap/plugins/x-patched-python.py b/snap/plugins/x-patched-python.py
new file mode 100644
index 0000000000..0444ac6676
--- /dev/null
+++ b/snap/plugins/x-patched-python.py
@@ -0,0 +1,65 @@
+# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
+#
+# Author: Marco Trevisan <marco@ubuntu.com>
+# Copyright (C) 2017-2018 Canonical Ltd
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import snapcraft
+import requests
+
+from snapcraft.plugins import python
+
+class PatchedPythonPlugin(python.PythonPlugin):
+
+ @classmethod
+ def schema(cls):
+ schema = super().schema()
+
+ schema['properties']['patches'] = {
+ 'type': 'array',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'string',
+ },
+ 'default': [],
+ }
+
+ schema['pull-properties'].extend([
+ 'patches',
+ ])
+
+ return schema
+
+ def pull(self):
+ super().pull()
+
+ for patch in self.options.patches:
+ patch_name = os.path.basename(patch)
+ patch_stamp = os.path.join(
+ self.sourcedir, '.snapcraft-patched-{}'.format(patch_name))
+
+ if not os.path.exists(patch_stamp):
+ if os.path.exists(patch):
+ patch_file = os.path.join(os.getcwd(), patch)
+ else:
+ patch_file = os.path.join(
+ self.sourcedir, 'snapcraft-patch-{}'.format(patch_name))
+ with open(patch_file, 'wb') as file:
+ file.write(requests.get(patch).content)
+
+ patch_cmd = 'git apply -v3 {}'.format(patch_file).split()
+ self.run(patch_cmd, cwd=self.sourcedir)
+ open(patch_stamp, 'a').close()
diff --git a/snap/plugins/x-qtbuilder.py b/snap/plugins/x-qtbuilder.py
new file mode 100644
index 0000000000..860cd448a4
--- /dev/null
+++ b/snap/plugins/x-qtbuilder.py
@@ -0,0 +1,204 @@
+# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
+#
+# Author: Marco Trevisan <marco@ubuntu.com>
+# Copyright (C) 2017-2018 Canonical Ltd
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import shutil
+import snapcraft
+
+from snapcraft.plugins import make
+
+class QtBuilderPlugin(make.MakePlugin):
+
+ @classmethod
+ def schema(cls):
+ schema = super().schema()
+
+ schema['properties']['configflags'] = {
+ 'type': 'array',
+ 'minitems': 1,
+ 'uniqueItems': False,
+ 'items': {
+ 'type': 'string',
+ },
+ 'default': [],
+ }
+
+ schema['properties']['qt-source-git'] = {
+ 'type': 'string'
+ }
+
+ schema['properties']['qt-source-depth'] = {
+ 'type': 'integer',
+ 'default': 1
+ }
+
+ schema['properties']['qt-version'] = {
+ 'type': 'string'
+ }
+
+ schema['properties']['qt-patches-base-url'] = {
+ 'type': 'string'
+ }
+
+ schema['properties']['qt-patches-path'] = {
+ 'type': 'string'
+ }
+
+ schema['properties']['qt-submodules'] = {
+ 'type': 'array',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'string',
+ },
+ 'default': [],
+ }
+
+ schema['properties']['qt-extra-plugins'] = {
+ 'type': 'array',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'object',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'string',
+ },
+ },
+ 'default': [],
+ }
+
+ schema['properties']['environment'] = {
+ 'type': 'array',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'object',
+ 'minitems': 0,
+ 'uniqueItems': True,
+ 'items': {
+ 'type': 'string',
+ },
+ },
+ 'default': [],
+ }
+
+ schema['required'].append('qt-source-git')
+
+ schema['build-properties'].append('configflags')
+
+ return schema
+
+ @classmethod
+ def get_pull_properties(cls):
+ return [
+ 'qt-version',
+ 'qt-patches-base-url',
+ 'qt-patches-path',
+ 'qt-submodules',
+ 'qt-extra-plugins',
+ ]
+
+ def __init__(self, name, options, project):
+ super().__init__(name, options, project)
+ self.build_packages.extend(['g++', 'patch', 'perl', 'wget'])
+ self.options.source_depth = self.options.qt_source_depth
+
+ if self.options.qt_version:
+ if self.options.qt_version[0] == 'v':
+ self.options.source_branch = self.options.qt_version
+ self.options.qt_version = self.options.qt_version[1:]
+ else:
+ self.options.source_branch = '.'.join(
+ self.options.qt_version.split('.')[:-1])
+
+
+ def pull(self):
+ if not os.path.exists(os.path.join(self.sourcedir, '.git')) or \
+ not os.path.exists(os.path.join(self.sourcedir, 'init-repository')):
+ shutil.rmtree(self.sourcedir, ignore_errors=True)
+ command = 'git clone {} {}'.format(
+ self.options.qt_source_git, self.sourcedir).split()
+ if self.options.source_branch:
+ command.extend(['--branch', str(self.options.source_branch)])
+ if self.options.source_depth:
+ command.extend(['--depth', str(self.options.source_depth)])
+
+ self.run(command)
+
+ command = 'perl init-repository --branch -f'.split()
+ if len(self.options.qt_submodules):
+ command.extend('--module-subset={}'.format(
+ ','.join(self.options.qt_submodules)).split())
+ self.run(command, cwd=self.sourcedir)
+
+ if self.options.qt_version:
+ self.run("git submodule foreach git checkout v{}".format(
+ self.options.qt_version).split(), self.sourcedir)
+
+ patch_file_template = '${{name}}{}.diff'.format(
+ '_' + self.options.qt_version.replace('.', '_') \
+ if self.options.qt_version else '')
+
+ if self.options.qt_patches_base_url:
+ patch_uri_template = '{}/{}'.format(
+ self.options.qt_patches_base_url, patch_file_template)
+
+ patch_cmd = 'git submodule foreach -q'.split() + \
+ ['[ -e {touch_file} ] || ' \
+ 'wget -q -O - {patch_uri_template} | patch -p1 && ' \
+ 'touch {touch_file}'.format(
+ patch_uri_template=patch_uri_template,
+ touch_file='.snapcraft-qt-patched')]
+
+ self.run(patch_cmd, cwd=self.sourcedir)
+
+ if self.options.qt_patches_path:
+ patch_path_template = os.path.join(
+ os.getcwd(), self.options.qt_patches_path, patch_file_template)
+
+ patch_cmd = 'git submodule foreach -q'.split() + \
+ ['[ -e {patch} ] && git apply -v3 {patch} || true'.format(
+ patch=patch_path_template)]
+
+ self.run(patch_cmd, cwd=self.sourcedir)
+
+ for extra_plugin in self.options.qt_extra_plugins:
+ [framework] = list(extra_plugin)
+
+ final_path = os.path.join(self.sourcedir, 'qtbase', 'src',
+ 'plugins', framework)
+
+ for repo in extra_plugin[framework]:
+ repo_path = os.path.basename(repo)
+ if repo_path.endswith('.git'):
+ repo_path = repo_path[:-4]
+
+ if not os.path.exists(os.path.join(final_path, repo_path)):
+ command = 'git clone {}'.format(repo).split()
+ self.run(command, cwd=final_path)
+
+ def build(self):
+ env = {}
+
+ for environ in self.options.environment:
+ [env_name] = list(environ)
+ env[env_name] = str(environ[env_name])
+
+ self.run(['./configure'] + self.options.configflags, env=env)
+ super().build()
diff --git a/snap/scripts/telegram-launch b/snap/scripts/telegram-launch
new file mode 100755
index 0000000000..8fe62b1fe2
--- /dev/null
+++ b/snap/scripts/telegram-launch
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+default_downloaddir="$SNAP_USER_DATA/Telegram Desktop"
+
+if [ -d "$default_downloaddir" ] && [ ! -L "$default_downloaddir" ]; then
+ dest_downloaddir="$SNAP_USER_COMMON/$(basename "$default_downloaddir")"
+ if [ -d "$dest_downloaddir" ]; then
+ mv -v "$default_downloaddir/*" "$dest_downloaddir/"
+ rmdir "$default_downloaddir"
+ else
+ mv -v "$default_downloaddir" "$SNAP_USER_COMMON"
+ fi
+ ln -sv "$dest_downloaddir" "$default_downloaddir"
+fi
+
+default_im_module="xim"
+
+if [ -n "$TELEGRAM_QT_IM_MODULE" ]; then
+ export QT_IM_MODULE="$TELEGRAM_QT_IM_MODULE"
+elif [ -z "$QT_IM_MODULE" ] || [ "$QT_IM_MODULE" == "ibus" ]; then
+ export QT_IM_MODULE="$default_im_module"
+fi
+
+exec desktop-launch Telegram $*
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
new file mode 100644
index 0000000000..a651f70563
--- /dev/null
+++ b/snap/snapcraft.yaml
@@ -0,0 +1,415 @@
+name: telegram-desktop
+version: git
+adopt-info: telegram
+description: |
+ Telegram is a popular messaging protocol with encryption and security as
+ its key focus.
+
+ Fast and secure desktop app, perfectly synced with your mobile phone.
+
+grade: stable
+confinement: strict
+
+version-script: |
+ set -x
+ version_file=Telegram/build/version
+ version=$(sed -n "s/AppVersionStr[ ]\+\(.*\)\+/\1/p" $version_file)
+ alpha=$(sed -n "s/AlphaChannel[ ]\+\(.*\)\+/\1/p" $version_file)
+ beta=$(sed -n "s/BetaVersion[ ]\+\(.*\)\+/\1/p" $version_file)
+
+ if [ "$alpha" != "0" ]; then
+ version="$version-alpha"
+ elif [ "$beta" != "0" ]; then
+ version="$version-beta"
+ fi
+
+ version="${version}$(git describe --tags | sed 's,^v[^-]\+,,')"
+
+ echo $version
+
+apps:
+ telegram-desktop:
+ command: telegram-launch
+ common-id: org.telegram.desktop
+ environment:
+ DISABLE_WAYLAND: 1
+ WAYLAND_DISPLAY: no-display
+ QTCOMPOSE: $SNAP/usr/share/X11/locale
+ HOME: "$SNAP_USER_COMMON"
+ plugs:
+ - desktop
+ - desktop-legacy
+ - gsettings
+ - home
+ - network
+ - network-bind
+ - network-manager
+ - pulseaudio
+ - removable-media
+ - unity7
+
+parts:
+ telegram:
+ plugin: gyp-cmake
+ source: .
+ source-type: git
+ parse-info: [lib/xdg/telegramdesktop.appdata.xml]
+ build-packages:
+ - libappindicator-dev
+ - libappindicator3-dev
+ - libexif-dev
+ - libicu-dev
+ - liblzma-dev
+ - libssl-dev
+ - libunity-dev
+ - zlib1g-dev
+ gyp-file: Telegram/gyp/Telegram.gyp
+ build-type: 'Release'
+ artifacts: ['Telegram']
+ environment:
+ - CC: gcc-7
+ - CXX: g++-7
+ organize:
+ Telegram: bin/Telegram
+ configflags:
+ - -Dlinux_path_breakpad=$SNAPCRAFT_STAGE
+ - -Dlinux_path_range=$SNAPCRAFT_STAGE/range-v3
+ - -Dlinux_path_ffmpeg=$SNAPCRAFT_STAGE
+ - -Dlinux_path_libexif_lib=$SNAPCRAFT_STAGE
+ - -Dlinux_path_openal=$SNAPCRAFT_STAGE
+ - -Dlinux_path_opus_include=$SNAPCRAFT_STAGE/include/opus
+ - -Dlinux_path_qt=$SNAPCRAFT_STAGE
+ - -Dlinux_path_va=$SNAPCRAFT_STAGE
+ - -Dlinux_path_vdpau=$SNAPCRAFT_STAGE
+ - -Dlinux_path_xkbcommon=$SNAPCRAFT_STAGE
+ - -Dlinux_lib_ssl=-lssl
+ - -Dlinux_lib_crypto=-lcrypto
+ - -Dlinux_lib_icu=-licuuc -licutu -licui18n
+ - -Dbuild_defines=TDESKTOP_DISABLE_AUTOUPDATE,
+ TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME,
+ TDESKTOP_DISABLE_DESKTOP_FILE_GENERATION
+ - --depth=.
+ override-build: |
+ set -xe
+ snapcraftctl build
+ snap_gui=$SNAPCRAFT_STAGE/../snap/gui
+ mkdir -vp $snap_gui
+ cp -v lib/xdg/telegramdesktop.desktop $snap_gui
+ cp -v Telegram/Resources/art/icon512@2x.png $snap_gui/icon.png
+ sed -i "s|^Icon=.*|Icon=\${SNAP}/meta/gui/icon.png|g" $snap_gui/telegramdesktop.desktop
+ echo "Keywords=tg;chat;im;messaging;messenger;" >> $snap_gui/telegramdesktop.desktop
+ after:
+ - breakpad
+ - ffmpeg
+ - gyp
+ - libva
+ - openal
+ - qt
+ - range-v3
+ - gcc7
+
+ telegram-launcher:
+ plugin: dump
+ source: snap/scripts
+ organize:
+ telegram-launch: bin/telegram-launch
+
+ desktop-integration:
+ plugin: nil
+ stage-packages:
+ - libappindicator3-1
+ - libnotify4
+ - libpulse0
+ - libunity9
+ after: [desktop-gtk3]
+ stage: [-./usr/share/fonts/**]
+
+ desktop-gtk3:
+ stage: [-./usr/share/fonts/**]
+ override-build: |
+ set -xe
+ snapcraftctl build
+ export XDG_DATA_DIRS=$SNAPCRAFT_PART_INSTALL/usr/share
+ update-mime-database $SNAPCRAFT_PART_INSTALL/usr/share/mime
+
+ for dir in $SNAPCRAFT_PART_INSTALL/usr/share/icons/*/; do
+ if [ -f $dir/index.theme ]; then
+ gtk-update-icon-cache-3.0 -q $dir
+ fi
+ done
+
+ libva:
+ source: https://github.com/01org/libva.git
+ source-depth: 1
+ plugin: autotools
+ build-packages:
+ - libdrm-dev
+ - libegl1-mesa-dev
+ - libgl1-mesa-dev
+ - libx11-dev
+ - libxext-dev
+ - libxfixes-dev
+ configflags:
+ - --enable-static
+ prime: [-./*]
+
+ libvdpau:
+ source: git://anongit.freedesktop.org/vdpau/libvdpau
+ source-depth: 1
+ plugin: autotools
+ build-packages:
+ - libx11-dev
+ - x11proto-dri2-dev
+ - libxext-dev
+ configflags:
+ - --enable-static
+ prime: [-./*]
+
+ opus:
+ source: https://github.com/xiph/opus.git
+ source-depth: 1
+ source-branch: v1.2.1
+ plugin: autotools
+ prime: [-./*]
+
+ ffmpeg:
+ source: https://github.com/FFmpeg/FFmpeg.git
+ source-depth: 1
+ source-branch: release/3.4
+ plugin: autotools
+ build-packages:
+ - libass-dev
+ - libfreetype6-dev
+ - libgpac-dev
+ - liblzma-dev
+ - libsdl1.2-dev
+ - libtheora-dev
+ - libtool
+ - libvorbis-dev
+ - libxcb1-dev
+ - libxcb-shm0-dev
+ - libxcb-xfixes0-dev
+ - pkg-config
+ - texi2html
+ - yasm
+ - zlib1g-dev
+ configflags:
+ - --prefix=/
+ - --disable-debug
+ - --disable-programs
+ - --disable-doc
+ - --disable-everything
+ - --enable-gpl
+ - --enable-version3
+ - --enable-libopus
+ - --enable-decoder=aac
+ - --enable-decoder=aac_latm
+ - --enable-decoder=aasc
+ - --enable-decoder=flac
+ - --enable-decoder=gif
+ - --enable-decoder=h264
+ - --enable-decoder=h264_vdpau
+ - --enable-decoder=mp1
+ - --enable-decoder=mp1float
+ - --enable-decoder=mp2
+ - --enable-decoder=mp2float
+ - --enable-decoder=mp3
+ - --enable-decoder=mp3adu
+ - --enable-decoder=mp3adufloat
+ - --enable-decoder=mp3float
+ - --enable-decoder=mp3on4
+ - --enable-decoder=mp3on4float
+ - --enable-decoder=mpeg4
+ - --enable-decoder=mpeg4_vdpau
+ - --enable-decoder=msmpeg4v2
+ - --enable-decoder=msmpeg4v3
+ - --enable-decoder=opus
+ - --enable-decoder=vorbis
+ - --enable-decoder=wavpack
+ - --enable-decoder=wmalossless
+ - --enable-decoder=wmapro
+ - --enable-decoder=wmav1
+ - --enable-decoder=wmav2
+ - --enable-decoder=wmavoice
+ - --enable-encoder=libopus
+ - --enable-hwaccel=h264_vaapi
+ - --enable-hwaccel=h264_vdpau
+ - --enable-hwaccel=mpeg4_vaapi
+ - --enable-hwaccel=mpeg4_vdpau
+ - --enable-parser=aac
+ - --enable-parser=aac_latm
+ - --enable-parser=flac
+ - --enable-parser=h264
+ - --enable-parser=mpeg4video
+ - --enable-parser=mpegaudio
+ - --enable-parser=opus
+ - --enable-parser=vorbis
+ - --enable-demuxer=aac
+ - --enable-demuxer=flac
+ - --enable-demuxer=gif
+ - --enable-demuxer=h264
+ - --enable-demuxer=mov
+ - --enable-demuxer=mp3
+ - --enable-demuxer=ogg
+ - --enable-demuxer=wav
+ - --enable-muxer=ogg
+ - --enable-muxer=opus
+ after:
+ - libva
+ - libvdpau
+ - opus
+ prime: [-./*]
+
+ openal:
+ source: https://github.com/kcat/openal-soft.git
+ source-depth: 1
+ source-branch: v1.18
+ plugin: cmake
+ build-packages:
+ - oss4-dev
+ - portaudio19-dev
+ configflags:
+ - -DCMAKE_BUILD_TYPE=Release
+ - -DALSOFT_EXAMPLES=OFF
+ - -DALSOFT_TESTS=OFF
+ - -DALSOFT_UTILS=OFF
+ - -DLIBTYPE=STATIC
+ after:
+ - ffmpeg
+ prime: [-./*]
+
+ libxkbcommon:
+ source: https://github.com/xkbcommon/libxkbcommon.git
+ source-depth: 1
+ plugin: autotools
+ build-packages:
+ - xutils-dev
+ - bison
+ - python-xcbgen
+ configflags:
+ - --disable-x11
+ prime: [-./*]
+
+ qt:
+ plugin: qtbuilder
+ qt-version: 5.6.2
+ qt-source-git: https://code.qt.io/qt/qt5.git
+ qt-submodules: ['qtbase', 'qtimageformats']
+ qt-patches-path: Telegram/Patches
+ qt-extra-plugins:
+ - platforminputcontexts:
+ - https://github.com/telegramdesktop/fcitx.git
+ - https://github.com/telegramdesktop/hime.git
+ environment:
+ - CC: gcc-7
+ - CXX: g++-7
+ - QMAKE_CC: gcc-7
+ - QMAKE_CXX: g++-7
+ build-packages:
+ - libasound2-dev
+ - libdbusmenu-glib-dev
+ - libffi-dev
+ - liblzma-dev
+ - libpulse-dev
+ - libssl-dev
+ - libx11-xcb-dev
+ - libxcb-icccm4-dev
+ - libxcb-image0-dev
+ - libxcb-keysyms1-dev
+ - libxcb-randr0-dev
+ - libxcb-render-util0-dev
+ - libxcb-sync-dev
+ - libxcb-util0-dev
+ - libxcb-xfixes0-dev
+ - libxcb1-dev
+ - libxrender-dev
+ configflags:
+ - -prefix
+ - $SNAPCRAFT_STAGE
+ - -release
+ - -force-debug-info
+ - -opensource
+ - -confirm-license
+ - -qt-zlib
+ - -qt-libpng
+ - -qt-libjpeg
+ - -qt-freetype
+ - -qt-harfbuzz
+ - -qt-pcre
+ - -qt-xcb
+ - -qt-xkbcommon-x11
+ - -no-gstreamer
+ - -no-gtkstyle
+ - -no-mirclient
+ - -no-opengl
+ - -static
+ - -dbus-runtime
+ - -openssl-linked
+ - -nomake
+ - examples
+ - -nomake
+ - tests
+ after:
+ - libxkbcommon
+ - gcc7
+ prime: [-./*]
+
+ breakpad:
+ plugin: autotools-subsource
+ source: https://chromium.googlesource.com/breakpad/breakpad
+ source-type: git
+ source-commit: bc8fb886
+ sub-sources:
+ - linux-syscall-support:
+ dest: src/third_party/lss
+ source: https://chromium.googlesource.com/linux-syscall-support
+ source-type: git
+ source-commit: a91633d1
+ prime: [-./*]
+
+ range-v3:
+ source: https://github.com/ericniebler/range-v3.git
+ source-depth: 1
+ plugin: nil
+ override-build: |
+ set -x
+ snapcraftctl build
+ mkdir $SNAPCRAFT_PART_INSTALL/range-v3
+ cp -rv * $SNAPCRAFT_PART_INSTALL/range-v3
+ prime: [-./*]
+
+ gyp:
+ plugin: patched-python
+ source: https://chromium.googlesource.com/external/gyp
+ source-type: git
+ source-commit: 702ac58e47
+ python-version: python2
+ patches:
+ - Telegram/Patches/gyp.diff
+ prime: [-./*]
+
+ # Since this is supposed to be built against ubuntu 16.04, we need to manually
+ # install gcc7, and this is a workaround to achieve this.
+ # This part can be safely removed when build.snapcraft.io will allow
+ # to build against 18.04.
+ gcc7:
+ plugin: nil
+ build-packages:
+ - libmpc-dev
+ - libcloog-ppl-dev
+ override-pull: |
+ set -x
+ echo "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu xenial main" | \
+ sudo tee /etc/apt/sources.list.d/ubuntu-toolchain-r.list
+ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 60C317803A41BA51845E371A1E9377A2BA9EF27F
+ sudo apt-get update \
+ -o Dir::Etc::sourcelist="sources.list.d/ubuntu-toolchain-r.list" \
+ -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
+ snapcraftctl pull
+ override-build: |
+ set -x
+ snapcraftctl build
+ sudo apt install gcc-7 g++-7 -o Debug::pkgProblemResolver=yes --no-install-recommends -y
+ sudo apt-mark auto gcc-7 g++-7
+ sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r.list
+ prime: [-./*]