diff --git a/Makefile.packaging b/Makefile.packaging index f6f5a607497d81a7a104da6c38ffe4a2a1306348..5544c57620a790f77f2c20189134549194b083b0 100644 --- a/Makefile.packaging +++ b/Makefile.packaging @@ -46,6 +46,7 @@ DEBIAN_OCI_PKG_DIR:="packaging/rules/debian-one-click-install" ##################### TMPDIR := $(shell mktemp -d) CURRENT_UID:=$(shell id -u) +CURRENT_GID:=$(shell id -g) ############################# ## Release tarball targets ## @@ -118,13 +119,25 @@ package-all: package-debian_9 \ package-opensuse-leap_15.1 \ package-opensuse-leap_15.2 \ package-opensuse-tumbleweed \ - package-gentoo + package-gentoo \ + package-snap + # Append the output of make-packaging-target to this Makefile # see Makefile.packaging.distro_targets $(shell scripts/make-packaging-target.py --generate-all > Makefile.packaging.distro_targets) include Makefile.packaging.distro_targets +docker/Dockerfile_snap: patches/docker-snap-build-scripts.patch + if patch -p1 -fR --dry-run < $< >/dev/null 2>&1; then \ + echo "Patching $@... skipped (already patched)"; \ + else \ + echo "Patching $@..."; \ + patch -p1 -Ns < $< || { echo "Patching $@... failed" >&2 && exit 1; }; \ + echo "Patching $@... done"; \ + fi +.PHONY: docker/Dockerfile_snap + ################### ## Other targets ## ################### diff --git a/client-gnome b/client-gnome index 9bada8a43cf9fec860da2b2b2d2fc8d242220e33..6b2855169a16078fb7062ab5d6bf2305f42cac33 160000 --- a/client-gnome +++ b/client-gnome @@ -1 +1 @@ -Subproject commit 9bada8a43cf9fec860da2b2b2d2fc8d242220e33 +Subproject commit 6b2855169a16078fb7062ab5d6bf2305f42cac33 diff --git a/daemon b/daemon index d265e691dbd5250731451402ec42c1193a2b2c70..324d49ce4d04b3067e6f0d2382c4e6dfd385f56b 160000 --- a/daemon +++ b/daemon @@ -1 +1 @@ -Subproject commit d265e691dbd5250731451402ec42c1193a2b2c70 +Subproject commit 324d49ce4d04b3067e6f0d2382c4e6dfd385f56b diff --git a/docker/Dockerfile_snap b/docker/Dockerfile_snap new file mode 100644 index 0000000000000000000000000000000000000000..28371943e1131a43ef873304475778abe89e4b8d --- /dev/null +++ b/docker/Dockerfile_snap @@ -0,0 +1,55 @@ +FROM ubuntu:xenial as builder + +# Grab dependencies +RUN apt-get update +RUN apt-get dist-upgrade --yes +RUN apt-get install --yes \ + curl \ + jq \ + squashfs-tools + +# Grab the core snap (for backwards compatibility) from the stable channel and +# unpack it in the proper place. +RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core' | jq '.download_url' -r) --output core.snap +RUN mkdir -p /snap/core +RUN unsquashfs -d /snap/core/current core.snap + +# Grab the core18 snap (which snapcraft uses as a base) from the stable channel +# and unpack it in the proper place. +RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core18' | jq '.download_url' -r) --output core18.snap +RUN mkdir -p /snap/core18 +RUN unsquashfs -d /snap/core18/current core18.snap + +# Grab the snapcraft snap from the stable channel and unpack it in the proper +# place. +RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/snapcraft?channel=stable' | jq '.download_url' -r) --output snapcraft.snap +RUN mkdir -p /snap/snapcraft +RUN unsquashfs -d /snap/snapcraft/current snapcraft.snap + +# Create a snapcraft runner (TODO: move version detection to the core of +# snapcraft). +RUN mkdir -p /snap/bin +RUN echo "#!/bin/sh" > /snap/bin/snapcraft +RUN snap_version="$(awk '/^version:/{print $2}' /snap/snapcraft/current/meta/snap.yaml)" && echo "export SNAP_VERSION=\"$snap_version\"" >> /snap/bin/snapcraft +RUN echo 'exec "$SNAP/usr/bin/python3" "$SNAP/bin/snapcraft" "$@"' >> /snap/bin/snapcraft +RUN chmod +x /snap/bin/snapcraft + +# Multi-stage build, only need the snaps from the builder. Copy them one at a +# time so they can be cached. +FROM ubuntu:xenial +COPY --from=builder /snap/core /snap/core +COPY --from=builder /snap/core18 /snap/core18 +COPY --from=builder /snap/snapcraft /snap/snapcraft +COPY --from=builder /snap/bin/snapcraft /snap/bin/snapcraft + +# Generate locale and install dependencies. +RUN apt-get update && apt-get dist-upgrade --yes && apt-get install --yes snapd sudo locales && locale-gen en_US.UTF-8 + +# Set the proper environment. +ENV LANG="en_US.UTF-8" +ENV LANGUAGE="en_US:en" +ENV LC_ALL="en_US.UTF-8" +ENV PATH="/snap/bin:$PATH" +ENV SNAP="/snap/snapcraft/current" +ENV SNAP_NAME="snapcraft" +ENV SNAP_ARCH="amd64" diff --git a/docker/README.md b/docker/README.md index b63826fcfe05e42de93c8c4bfb4e723c29248cc0..7618fe4e18e5d521ff2ebaa459ae2f7d555af9af 100644 --- a/docker/README.md +++ b/docker/README.md @@ -25,3 +25,12 @@ hub organization. These images are generated with the following method: ### Fedora TODO + +### Snap + +`Dockerfile_snap` is from [stable.Dockerfile](stable.Dockerfile) +upstream, under GPLv3-only, and is not considered part of the project. +It is patched with `../patches/docker-snap-build-scripts.patch` to +add and invoke our build script. + +[stable.Dockerfile]: https://raw.githubusercontent.com/snapcore/snapcraft/master/docker/stable.Dockerfile diff --git a/lrc b/lrc index efad3d4ef8870c1b14b3d90d35e195ba65078f14..4381acbf375488f0619056607e90d5ad34655071 160000 --- a/lrc +++ b/lrc @@ -1 +1 @@ -Subproject commit efad3d4ef8870c1b14b3d90d35e195ba65078f14 +Subproject commit 4381acbf375488f0619056607e90d5ad34655071 diff --git a/make-ring.py b/make-ring.py index 1ed9fd76ad3ab79bed62ded205f6da68964f1e58..932ed7eb4b56d5173b7988e3b0ef66894f311fde 100755 --- a/make-ring.py +++ b/make-ring.py @@ -22,9 +22,7 @@ OSX_DISTRIBUTION_NAME = "osx" ANDROID_DISTRIBUTION_NAME = "android" WIN32_DISTRIBUTION_NAME = "win32" -# Qt 5.15 is currently only available using the maintenance tool. QT5_VERSION = "5.15.0" -DEFAULT_QT_PATH = "~/Qt/{0}/gcc_64".format(QT5_VERSION) # vs vars win_sdk_default = '10.0.16299.0' @@ -46,7 +44,7 @@ PACMAN_BASED_DISTROS = [ ] ZYPPER_BASED_DISTROS = [ - 'opensuse-leap', + 'opensuse-leap', 'opensuse-tumbleweed', ] FLATPAK_BASED_RUNTIMES = [ @@ -91,16 +89,24 @@ ZYPPER_DEPENDENCIES = [ 'curl', 'gzip', 'bzip2', # daemon 'speexdsp-devel', 'speex-devel', 'libdbus-c++-devel', 'jsoncpp-devel', 'yaml-cpp-devel', - 'yasm', 'libuuid-devel', 'libnettle-devel', 'libopus-devel', + 'yasm', 'libuuid-devel', 'libnettle-devel', 'libopus-devel', 'libexpat-devel', 'libgnutls-devel', 'msgpack-devel', 'libavcodec-devel', 'libavdevice-devel', 'pcre-devel', 'alsa-devel', 'libpulse-devel', 'libudev-devel', 'libva-devel', 'libvdpau-devel', - 'libopenssl-devel', + 'libopenssl-devel', 'libavutil-devel', # lrc 'libQt5Core-devel', 'libQt5DBus-devel', 'libqt5-linguist-devel', - # gnome client - 'gtk3-devel', 'clutter-gtk-devel', 'qrencode-devel', - 'gettext-tools', 'libnotify-devel', 'libappindicator3-devel', 'webkit2gtk3-devel', - 'NetworkManager-devel', 'libcanberra-gtk3-devel' + # client gnome / qt + 'qrencode-devel', 'NetworkManager-devel' +] + +ZYPPER_CLIENT_GNOME_DEPENDENCIES = [ + 'gtk3-devel', 'clutter-gtk-devel', 'gettext-tools', 'libnotify-devel', 'libappindicator3-devel', + 'webkit2gtk3-devel', 'libcanberra-gtk3-devel' +] + +ZYPPER_CLIENT_QT_DEPENDENCIES = [ + 'libqt5-qtsvg-devel', 'libqt5-qtwebengine-devel', 'libqt5-qtmultimedia-devel', + 'libqt5-qtdeclarative-devel', 'libQt5QuickControls2-devel', 'libqt5-qtquickcontrols' ] DNF_DEPENDENCIES = [ @@ -111,11 +117,20 @@ DNF_DEPENDENCIES = [ 'speex-devel', 'chrpath', 'check', 'astyle', 'uuid-c++-devel', 'gettext-devel', 'gcc-c++', 'which', 'alsa-lib-devel', 'systemd-devel', 'libuuid-devel', 'uuid-devel', 'gnutls-devel', 'nettle-devel', 'opus-devel', 'speexdsp-devel', - 'yaml-cpp-devel', 'qt5-qtbase-devel', 'swig', 'qrencode-devel', 'jsoncpp-devel', - 'gtk3-devel', 'clutter-devel', 'clutter-gtk-devel', - 'libnotify-devel', 'libappindicator-gtk3-devel', 'patch', 'libva-devel', 'openssl-devel', - 'webkitgtk4-devel', 'NetworkManager-libnm-devel', 'libvdpau-devel', 'msgpack-devel', 'libcanberra-devel', - 'sqlite-devel', 'openssl-static', 'pandoc', 'nasm' + 'yaml-cpp-devel', 'qt5-qtbase-devel', 'swig', 'jsoncpp-devel', + 'patch', 'libva-devel', 'openssl-devel', 'libvdpau-devel', 'msgpack-devel', + 'sqlite-devel', 'openssl-static', 'pandoc', 'nasm', 'qrencode-devel', 'NetworkManager-libnm-devel', + 'bzip2' +] + +DNF_CLIENT_GNOME_DEPENDENCIES = [ + 'gtk3-devel', 'clutter-devel', 'clutter-gtk-devel', 'libnotify-devel','libappindicator-gtk3-devel', + 'webkitgtk4-devel', 'libcanberra-devel' +] + +DNF_CLIENT_QT_DEPENDENCIES = [ + 'qt5-qtsvg-devel', 'qt5-qtwebengine-devel', 'qt5-qtmultimedia-devel', 'qt5-qtdeclarative-devel', + 'qt5-qtquickcontrols2-devel', 'qt5-qtquickcontrols' ] APT_DEPENDENCIES = [ @@ -128,9 +143,22 @@ APT_DEPENDENCIES = [ 'libopus-dev', 'libpcre3-dev', 'libpulse-dev', 'libssl-dev', 'libspeex-dev', 'libspeexdsp-dev', 'libswscale-dev', 'libtool', 'libudev-dev', 'libyaml-cpp-dev', 'qtbase5-dev', 'libqt5sql5-sqlite', 'sip-tester', 'swig', - 'uuid-dev', 'yasm', 'libqrencode-dev', 'libjsoncpp-dev', 'libappindicator3-dev', - 'libva-dev', 'libwebkit2gtk-4.0-dev', 'libnm-dev', 'libvdpau-dev', 'libmsgpack-dev', 'libcanberra-gtk3-dev', - 'pandoc', 'nasm' + 'uuid-dev', 'yasm', 'libjsoncpp-dev', 'libva-dev', 'libvdpau-dev', 'libmsgpack-dev', + 'pandoc', 'nasm', 'libqrencode-dev', 'libnm-dev', 'dpkg-dev' +] + +APT_CLIENT_GNOME_DEPENDENCIES = [ + 'libwebkit2gtk-4.0-dev', 'libappindicator3-dev', 'libcanberra-gtk3-dev' +] + +APT_CLIENT_QT_DEPENDENCIES = [ + 'qtmultimedia5-dev', 'libqt5svg5-dev', 'qtwebengine5-dev', 'qtdeclarative5-dev', + 'qtquickcontrols2-5-dev', 'qml-module-qtquick2', 'qml-module-qtquick-controls', + 'qml-module-qtquick-controls2', 'qml-module-qtquick-dialogs', + 'qml-module-qtquick-layouts', 'qml-module-qtquick-privatewidgets', + 'qml-module-qtquick-shapes', 'qml-module-qtquick-window2', + 'qml-module-qtquick-templates2', 'qml-module-qt-labs-platform', + 'qml-module-qtwebengine', 'qml-module-qtwebchannel' ] PACMAN_DEPENDENCIES = [ @@ -190,12 +218,12 @@ def run_powersell_cmd(cmd): return -def write_qt_conf(path): +def write_qt_conf(path, qt5version=QT5_VERSION): # Add a configuration that can be supplied to qmake # e.g. `qmake -qt=5.15 [mode] [options] [files]` if path == '': return - with open('/usr/share/qtchooser/' + QT5_VERSION + '.conf', 'w+') as fd: + with open('/usr/share/qtchooser/' + qt5version + '.conf', 'w+') as fd: fd.write(path.rstrip('/') + '/bin\n') fd.write(path.rstrip('/') + '/lib\n') return @@ -203,19 +231,27 @@ def write_qt_conf(path): def run_dependencies(args): if args.qt is not None: - write_qt_conf(args.qt) + write_qt_conf(args.qt, args.qtver) if args.distribution == WIN32_DISTRIBUTION_NAME: run_powersell_cmd( 'Set-ExecutionPolicy Unrestricted; .\\scripts\\install-deps-windows.ps1') elif args.distribution in APT_BASED_DISTROS: + if args.qt is None: + APT_DEPENDENCIES.extend(APT_CLIENT_GNOME_DEPENDENCIES) + else: + APT_DEPENDENCIES.extend(APT_CLIENT_QT_DEPENDENCIES) execute_script( APT_INSTALL_SCRIPT, {"packages": ' '.join(map(shlex.quote, APT_DEPENDENCIES))} ) elif args.distribution in DNF_BASED_DISTROS: + if args.qt is None: + DNF_DEPENDENCIES.extend(DNF_CLIENT_GNOME_DEPENDENCIES) + else: + DNF_DEPENDENCIES.extend(DNF_CLIENT_QT_DEPENDENCIES) execute_script( RPM_INSTALL_SCRIPT, {"packages": ' '.join(map(shlex.quote, DNF_DEPENDENCIES))} @@ -228,6 +264,10 @@ def run_dependencies(args): ) elif args.distribution in ZYPPER_BASED_DISTROS: + if args.qt is None: + ZYPPER_DEPENDENCIES.extend(ZYPPER_CLIENT_GNOME_DEPENDENCIES) + else: + ZYPPER_DEPENDENCIES.extend(ZYPPER_CLIENT_QT_DEPENDENCIES) execute_script( ZYPPER_INSTALL_SCRIPT, {"packages": ' '.join(map(shlex.quote, ZYPPER_DEPENDENCIES))} @@ -352,11 +392,8 @@ def run_install(args): install_args += ("-c", "client-gnome") else: install_args += ("-c", "client-qt") - install_args += ("-q", QT5_VERSION) - if args.qt == '': - install_args += ("-Q", DEFAULT_QT_PATH) - else: - install_args += ("-Q", args.qt) + install_args += ("-q", args.qtver) + install_args += ("-Q", args.qt) return subprocess.run(["./scripts/install.sh"] + install_args, env=environ, check=True) @@ -525,7 +562,9 @@ def parse_args(): ap.add_argument('--no-priv-install', dest='priv_install', default=True, action='store_false') ap.add_argument('--qt', nargs='?', const='', type=str, - help='Build the Qt client with the Qt 5.15 path supplied') + help='Build the Qt client with the Qt path supplied') + ap.add_argument('--qtver', default=QT5_VERSION, + help='Sets the Qt version to build with') dist = choose_distribution() if dist == WIN32_DISTRIBUTION_NAME: @@ -533,8 +572,6 @@ def parse_args(): help='Windows use only, specify Visual Studio toolset version') ap.add_argument('--sdk', default=win_sdk_default, type=str, help='Windows use only, specify Windows SDK version') - ap.add_argument('--qtver', default=QT5_VERSION, - help='Sets the Qt version to build with') parsed_args = ap.parse_args() diff --git a/packaging/rules/snap/icons/jami.svg b/packaging/rules/snap/icons/jami.svg new file mode 100644 index 0000000000000000000000000000000000000000..808f1327f1d9841c3587bf54b4a2ec147870c9ff --- /dev/null +++ b/packaging/rules/snap/icons/jami.svg @@ -0,0 +1,340 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 116.3 116.3" style="enable-background:new 0 0 116.3 116.3;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:url(#SVGID_1_);} + .st1{fill:url(#SVGID_2_);} + .st2{fill:url(#SVGID_3_);} + .st3{fill:url(#SVGID_4_);} + .st4{fill:url(#SVGID_5_);} + .st5{fill:url(#SVGID_6_);} + .st6{opacity:0.4;fill:url(#SVGID_7_);enable-background:new ;} + .st7{fill:url(#SVGID_8_);} + .st8{fill:url(#SVGID_9_);} + .st9{fill:url(#SVGID_10_);} + .st10{fill:url(#SVGID_11_);} + .st11{fill:url(#SVGID_12_);} + .st12{fill:url(#SVGID_13_);} + .st13{fill:url(#SVGID_14_);} + .st14{fill:url(#SVGID_15_);} + .st15{fill:url(#SVGID_16_);} + .st16{opacity:0.2;fill:url(#SVGID_17_);enable-background:new ;} + .st17{fill:url(#SVGID_18_);} + .st18{fill:url(#SVGID_19_);} + .st19{opacity:0.25;fill:url(#SVGID_20_);enable-background:new ;} + .st20{fill:url(#SVGID_21_);} + .st21{fill:url(#SVGID_22_);} + .st22{opacity:0.2;fill:url(#SVGID_23_);enable-background:new ;} + .st23{fill:url(#SVGID_24_);} +</style> +<g> + <g> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="69.0328" y1="454.9245" x2="64.4435" y2="449.5703" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2B3B6A"/> + <stop offset="1" style="stop-color:#2B3B6A"/> + </linearGradient> + <polygon class="st0" points="54.9,55.8 62,55.6 58.4,62.2 "/> + + <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="108.534" y1="457.2333" x2="108.534" y2="494.0327" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2B3B6A"/> + <stop offset="7.040000e-02" style="stop-color:#2D4576"/> + <stop offset="0.2165" style="stop-color:#2E5589"/> + <stop offset="0.3608" style="stop-color:#2B5E97"/> + <stop offset="0.5" style="stop-color:#29629C"/> + <stop offset="0.6392" style="stop-color:#2B5E97"/> + <stop offset="0.7835" style="stop-color:#2E5589"/> + <stop offset="0.9296" style="stop-color:#2D4576"/> + <stop offset="1" style="stop-color:#2B3B6A"/> + </linearGradient> + <path class="st1" d="M85.5,57.5c26.1,4.2,29.8,10.7,29.8,10.7c0,0.4,0,0.8,0,1.2c0,0.2-0.1,0.4-0.2,0.7c-0.1,0.3-2.7,5.7-19.6,9.3 L85.5,57.5z"/> + + <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="26.7686" y1="496.8278" x2="38.7091" y2="475.5678" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#252B59"/> + <stop offset="8.590000e-02" style="stop-color:#2B3A69"/> + <stop offset="0.2267" style="stop-color:#2E4A7C"/> + <stop offset="0.3658" style="stop-color:#2E5487"/> + <stop offset="0.5" style="stop-color:#2D578C"/> + <stop offset="0.6342" style="stop-color:#2E5487"/> + <stop offset="0.7733" style="stop-color:#2E4A7C"/> + <stop offset="0.9141" style="stop-color:#2B3A69"/> + <stop offset="1" style="stop-color:#252B59"/> + </linearGradient> + <path class="st2" d="M19.8,78.5c-5.9,15.7-2.9,20.6-2.7,21c0.1,0.2,0.2,0.4,0.4,0.5c0.4,0,0.8-0.1,1.2-0.2c0,0,10.7-0.5,23.2-18.3 L19.8,78.5z"/> + + <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="60.8512" y1="424.6486" x2="41.0872" y2="401.5905" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#181844"/> + <stop offset="2.840000e-02" style="stop-color:#1E1E4C"/> + <stop offset="0.1353" style="stop-color:#283261"/> + <stop offset="0.2468" style="stop-color:#2D4172"/> + <stop offset="0.3647" style="stop-color:#2E4A7C"/> + <stop offset="0.5" style="stop-color:#2E4D7F"/> + <stop offset="0.6177" style="stop-color:#2D4576"/> + <stop offset="0.8125" style="stop-color:#273160"/> + <stop offset="1" style="stop-color:#181844"/> + </linearGradient> + <path class="st3" d="M58.8,18.6C44.5,2.9,37.5,3.8,37.1,3.9c-0.2,0-0.5,0.1-0.7,0.2c-0.5,0.2-1,1.8-1,1.8s-3,8.7,9.1,31.9 L58.8,18.6z"/> + + <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="99.9721" y1="499.3526" x2="84.7036" y2="450.1664" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#181844"/> + <stop offset="2.840000e-02" style="stop-color:#1E1E4C"/> + <stop offset="0.1353" style="stop-color:#283261"/> + <stop offset="0.2468" style="stop-color:#2D4172"/> + <stop offset="0.3647" style="stop-color:#2E4A7C"/> + <stop offset="0.5" style="stop-color:#2E4D7F"/> + <stop offset="0.6177" style="stop-color:#2D4576"/> + <stop offset="0.8125" style="stop-color:#273160"/> + <stop offset="1" style="stop-color:#181844"/> + </linearGradient> + <path class="st4" d="M71.2,78.8C90.6,101,97.4,99.8,97.4,99.8c0.4,0.1,0.9,0.2,1.3,0.2c0.2-0.1,0.3-0.3,0.4-0.5 c0.3-0.4,5.8-9.4-12.8-41.8L71.2,78.8z"/> + + <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="31.6447" y1="457.2331" x2="31.6447" y2="494.0317" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2B3B6A"/> + <stop offset="7.040000e-02" style="stop-color:#2D4576"/> + <stop offset="0.2165" style="stop-color:#2E5589"/> + <stop offset="0.3608" style="stop-color:#2B5E97"/> + <stop offset="0.5" style="stop-color:#29629C"/> + <stop offset="0.6392" style="stop-color:#2B5E97"/> + <stop offset="0.7835" style="stop-color:#2E5589"/> + <stop offset="0.9296" style="stop-color:#2D4576"/> + <stop offset="1" style="stop-color:#2B3B6A"/> + </linearGradient> + <path class="st5" d="M46.1,82.2c-40-1.7-44.8-11.6-45-12.1C1.1,69.9,1,69.7,1,69.5c0.1-0.7,1.5-2,1.5-2s10.6-6.5,28.3-10 L46.1,82.2z"/> + + <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="51.8906" y1="421.1236" x2="66.337" y2="421.1236" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2B3B6A"/> + <stop offset="1" style="stop-color:#2B3B6A"/> + </linearGradient> + <path class="st6" d="M57.6,17.4c-5,5.4-9.6,11.2-13.8,17.2h1c3.1-3.9,10.8-13.7,13.4-16.5L57.6,17.4z"/> + + <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="70.9709" y1="436.4003" x2="70.9709" y2="401.6908" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#252B59"/> + <stop offset="0.5" style="stop-color:#2D578C"/> + <stop offset="0.6934" style="stop-color:#2D5588"/> + <stop offset="0.8038" style="stop-color:#2E4F80"/> + <stop offset="0.8932" style="stop-color:#2D4474"/> + <stop offset="0.971" style="stop-color:#283463"/> + <stop offset="1" style="stop-color:#252B59"/> + </linearGradient> + <path class="st7" d="M73.8,35.4C84.2,10.7,80.2,5,80.2,5c-0.1-0.3-0.2-0.7-0.3-1c-0.2-0.1-0.4-0.1-0.7-0.2 c-0.5-0.1-11.4-1.5-34.4,30.7L73.8,35.4z"/> + + <linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="39.2669" y1="503.7654" x2="102.6764" y2="407.9172" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2867A2"/> + <stop offset="8.239999e-02" style="stop-color:#177EBC"/> + <stop offset="0.1675" style="stop-color:#0E91D1"/> + <stop offset="0.2527" style="stop-color:#10A2E1"/> + <stop offset="0.337" style="stop-color:#18ACEA"/> + <stop offset="0.42" style="stop-color:#24B1ED"/> + <stop offset="0.5" style="stop-color:#28B1ED"/> + <stop offset="0.58" style="stop-color:#24B1ED"/> + <stop offset="0.663" style="stop-color:#18ACEA"/> + <stop offset="0.7473" style="stop-color:#10A2E1"/> + <stop offset="0.8325" style="stop-color:#0E91D1"/> + <stop offset="0.9176" style="stop-color:#177EBC"/> + <stop offset="1" style="stop-color:#2867A2"/> + </linearGradient> + <path class="st8" d="M58,97.4c-14.2,15.4-21,14.5-21.4,14.5c-0.6-0.2-1.2-0.5-1.7-0.8l-17.3-11c7.3-1.6,16.3-10.2,25.7-21.3 L58,97.4z"/> + + <linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="33.568" y1="505.6873" x2="58.683" y2="483.2007" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2C5D95"/> + <stop offset="8.220001e-02" style="stop-color:#246EAB"/> + <stop offset="0.1808" style="stop-color:#1B79B9"/> + <stop offset="0.3007" style="stop-color:#1080C2"/> + <stop offset="0.5" style="stop-color:#0E81C5"/> + <stop offset="0.6993" style="stop-color:#1080C2"/> + <stop offset="0.8192" style="stop-color:#1B79B9"/> + <stop offset="0.9178" style="stop-color:#246EAB"/> + <stop offset="1" style="stop-color:#2C5D95"/> + </linearGradient> + <path class="st9" d="M58.6,98c-14.2,15.4-21,14.5-21.4,14.5c-0.6-0.2-1.2-0.5-1.7-0.8L17.6,100c7.3-1.6,16.9-9.6,26.3-20.7 L58.6,98z"/> + + <linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="31.3212" y1="407.2591" x2="89.6399" y2="504.4568" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2C5D95"/> + <stop offset="1.760000e-02" style="stop-color:#2A6199"/> + <stop offset="0.1407" style="stop-color:#1C79B7"/> + <stop offset="0.2631" style="stop-color:#0A8CCA"/> + <stop offset="0.3837" style="stop-color:#0B97D4"/> + <stop offset="0.5" style="stop-color:#0E9AD8"/> + <stop offset="0.6163" style="stop-color:#0B97D4"/> + <stop offset="0.7369" style="stop-color:#0A8CCA"/> + <stop offset="0.8593" style="stop-color:#1C79B7"/> + <stop offset="0.9824" style="stop-color:#2A6199"/> + <stop offset="1" style="stop-color:#2C5D95"/> + </linearGradient> + <path class="st10" d="M20.7,38c-6.3-16.2-3.2-21.3-3-21.6c0.4-0.5,0.9-0.9,1.4-1.2l17.3-11c-1.5,7.1,2.3,18,8.2,30.7L20.7,38z"/> + + <linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="94.4028" y1="503.8655" x2="56.9038" y2="456.6339" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2C5D95"/> + <stop offset="2.570000e-02" style="stop-color:#2A6199"/> + <stop offset="0.2053" style="stop-color:#1C79B7"/> + <stop offset="0.384" style="stop-color:#0A8CCA"/> + <stop offset="0.5599" style="stop-color:#0B97D4"/> + <stop offset="0.7296" style="stop-color:#0E9AD8"/> + <stop offset="0.7925" style="stop-color:#0B97D4"/> + <stop offset="0.8577" style="stop-color:#0A8CCA"/> + <stop offset="0.9239" style="stop-color:#1C79B7"/> + <stop offset="0.9905" style="stop-color:#2A6199"/> + <stop offset="1" style="stop-color:#2C5D95"/> + </linearGradient> + <path class="st11" d="M57.2,57.2c-8.7,0-17.4,0.7-26,1.9c0.3,0.5,4.3,7.2,7.2,11.7c27.8,42.8,40.8,41.1,41.4,41 c0.6-0.2,1.2-0.5,1.7-0.8l17.3-11C87,97.5,70.6,78.2,57.2,57.2z"/> + + <linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="40.2175" y1="431.0724" x2="32.9164" y2="404.7886" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2C5D95"/> + <stop offset="8.220001e-02" style="stop-color:#246EAB"/> + <stop offset="0.1808" style="stop-color:#1B79B9"/> + <stop offset="0.3007" style="stop-color:#1080C2"/> + <stop offset="0.5" style="stop-color:#0E81C5"/> + <stop offset="0.6993" style="stop-color:#1080C2"/> + <stop offset="0.8192" style="stop-color:#1B79B9"/> + <stop offset="0.9178" style="stop-color:#246EAB"/> + <stop offset="1" style="stop-color:#2C5D95"/> + </linearGradient> + <path class="st12" d="M20.1,38.5c-6.3-16.2-3.2-21.3-3-21.6c0.4-0.5,0.9-0.9,1.4-1.2L36.5,4.1c-1.5,7.1,1.7,18.6,7.6,31.2 L20.1,38.5z"/> + + <linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="122.9025" y1="448.7971" x2="9.1479" y2="448.7971" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2867A2"/> + <stop offset="1.280000e-02" style="stop-color:#256BA7"/> + <stop offset="0.1121" style="stop-color:#0B83C3"/> + <stop offset="0.2115" style="stop-color:#1797D8"/> + <stop offset="0.3099" style="stop-color:#25A3E2"/> + <stop offset="0.4066" style="stop-color:#27ABE7"/> + <stop offset="0.5" style="stop-color:#2AAEEA"/> + <stop offset="0.5934" style="stop-color:#27ABE7"/> + <stop offset="0.6901" style="stop-color:#25A3E2"/> + <stop offset="0.7885" style="stop-color:#1797D8"/> + <stop offset="0.8879" style="stop-color:#0B83C3"/> + <stop offset="0.9872" style="stop-color:#256BA7"/> + <stop offset="1" style="stop-color:#2867A2"/> + </linearGradient> + <path class="st13" d="M85.5,59.6c13.5,1.9,24.7,4.7,29.8,9.8V48.9c0-0.6-0.1-1.3-0.2-1.9c-0.1-0.3-2.7-5.6-19-9.1L85.5,59.6z"/> + + <linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="90.2941" y1="447.1362" x2="122.8074" y2="448.8884" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2E5284"/> + <stop offset="6.100000e-03" style="stop-color:#2E5486"/> + <stop offset="9.120000e-02" style="stop-color:#29649D"/> + <stop offset="0.1876" style="stop-color:#236FAD"/> + <stop offset="0.3049" style="stop-color:#1D77B6"/> + <stop offset="0.5" style="stop-color:#1C78B9"/> + <stop offset="0.6951" style="stop-color:#1D77B6"/> + <stop offset="0.8124" style="stop-color:#236FAD"/> + <stop offset="0.9088" style="stop-color:#29649D"/> + <stop offset="0.9939" style="stop-color:#2E5486"/> + <stop offset="1" style="stop-color:#2E5284"/> + </linearGradient> + <path class="st14" d="M85.5,58.8c13.5,1.9,24.7,5.5,29.8,10.6V48.1c0-0.6-0.1-1.3-0.2-1.9c-0.1-0.3-2.7-5.6-19-9.1L85.5,58.8z"/> + + <linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="9.0577" y1="447.1912" x2="67.7186" y2="447.1912" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2867A2"/> + <stop offset="2.250000e-02" style="stop-color:#256BA7"/> + <stop offset="0.1971" style="stop-color:#0B83C3"/> + <stop offset="0.3718" style="stop-color:#1797D8"/> + <stop offset="0.5447" style="stop-color:#25A3E2"/> + <stop offset="0.7147" style="stop-color:#27ABE7"/> + <stop offset="0.8788" style="stop-color:#2AAEEA"/> + <stop offset="0.9015" style="stop-color:#27ABE7"/> + <stop offset="0.9249" style="stop-color:#25A3E2"/> + <stop offset="0.9487" style="stop-color:#1797D8"/> + <stop offset="0.9728" style="stop-color:#0B83C3"/> + <stop offset="0.9969" style="stop-color:#256BA7"/> + <stop offset="1" style="stop-color:#2867A2"/> + </linearGradient> + <path class="st15" d="M73.2,35.1c-3-0.1-9.5-0.4-15.1-0.4C7.1,34.7,1.4,46.5,1.2,47C1,47.6,1,48.3,1,48.9v20.6 c5-5,15.9-7.7,29.2-9.7c8.6-1.2,17.2-1.9,25.9-2c1.6,0,3.2,0,4.8,0C60.8,57.8,76.3,35.2,73.2,35.1z"/> + + <linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="50.3126" y1="432.0108" x2="28.2664" y2="428.9106" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2B3B6A"/> + <stop offset="1" style="stop-color:#2B3B6A"/> + </linearGradient> + <path class="st16" d="M44.1,33.5c-10.7,0.5-18.4,1.3-24.8,3.1l0.3,0.8c0.6-0.1,1.3-0.3,1.9-0.4c7.7-1.2,15.4-2,23.1-2.3L44.1,33.5 z"/> + + <linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="72.7451" y1="450.8669" x2="10.4435" y2="442.1056" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2867A2"/> + <stop offset="3.820000e-02" style="stop-color:#2174B1"/> + <stop offset="0.1177" style="stop-color:#0B86C4"/> + <stop offset="0.2081" style="stop-color:#0A94D2"/> + <stop offset="0.3177" style="stop-color:#0C9BDB"/> + <stop offset="0.5" style="stop-color:#109EDE"/> + <stop offset="0.6823" style="stop-color:#0C9BDB"/> + <stop offset="0.7919" style="stop-color:#0A94D2"/> + <stop offset="0.8823" style="stop-color:#0B86C4"/> + <stop offset="0.9618" style="stop-color:#2174B1"/> + <stop offset="1" style="stop-color:#2867A2"/> + </linearGradient> + <path class="st17" d="M73.2,34.3c-3-0.1-9.5-0.4-15.1-0.4c-51.1,0-56.7,11.8-57,12.4C1,46.8,1,47.5,1,48.1v21.4 c5-5,15.9-8.5,29.2-10.5c8.6-1.2,17.2-1.9,25.9-2c1.6,0,3.2,0,4.8,0C63.2,57.1,76.3,34.4,73.2,34.3z"/> + + <linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="101.6202" y1="407.733" x2="71.9933" y2="458.7571" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2867A2"/> + <stop offset="0.1238" style="stop-color:#177EBC"/> + <stop offset="0.2516" style="stop-color:#0E91D1"/> + <stop offset="0.3797" style="stop-color:#10A2E1"/> + <stop offset="0.5064" style="stop-color:#18ACEA"/> + <stop offset="0.631" style="stop-color:#24B1ED"/> + <stop offset="0.7513" style="stop-color:#28B1ED"/> + <stop offset="0.7911" style="stop-color:#24B1ED"/> + <stop offset="0.8324" style="stop-color:#18ACEA"/> + <stop offset="0.8743" style="stop-color:#10A2E1"/> + <stop offset="0.9167" style="stop-color:#0E91D1"/> + <stop offset="0.959" style="stop-color:#177EBC"/> + <stop offset="1" style="stop-color:#2867A2"/> + </linearGradient> + <path class="st18" d="M58.2,58.8C72.1,37.9,82.4,16,79.8,4.1l17.3,11c0.5,0.3,1,0.7,1.4,1.2c0.3,0.5,7.1,11.7-20.7,54.5 c-2,3.2-3.9,6.9-4.6,7.2c-4.1-4-12.6-15.6-14.7-18.5C58.3,59.1,58.2,58.8,58.2,58.8z"/> + + <linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="105.3445" y1="433.3988" x2="94.5575" y2="453.6416" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2B3B6A"/> + <stop offset="1" style="stop-color:#2B3B6A"/> + </linearGradient> + <path class="st19" d="M96.6,37.2c-3.1,7.8-6.8,15.3-11.1,22.4l1.3,0.2c5.5-9.5,8.7-16.5,10.9-22.4L96.6,37.2z"/> + + <linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="100.6479" y1="408.8533" x2="70.927" y2="464.6275" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2867A2"/> + <stop offset="3.820000e-02" style="stop-color:#2174B1"/> + <stop offset="0.1177" style="stop-color:#0B86C4"/> + <stop offset="0.2081" style="stop-color:#0A94D2"/> + <stop offset="0.3177" style="stop-color:#0C9BDB"/> + <stop offset="0.5" style="stop-color:#109EDE"/> + <stop offset="0.6823" style="stop-color:#0C9BDB"/> + <stop offset="0.7919" style="stop-color:#0A94D2"/> + <stop offset="0.8823" style="stop-color:#0B86C4"/> + <stop offset="0.9618" style="stop-color:#2174B1"/> + <stop offset="1" style="stop-color:#2867A2"/> + </linearGradient> + <path class="st20" d="M78.5,71.4c27.8-42.8,21-54,20.7-54.5c-0.4-0.5-0.9-0.9-1.4-1.2L79.8,4.1c2.5,11.8-7.4,34.6-21.2,55.5 c4.6,7.1,9.4,14,14.5,19.9C74.1,78.3,76.7,74.3,78.5,71.4z"/> + + <linearGradient id="SVGID_22_" gradientUnits="userSpaceOnUse" x1="102.9539" y1="410.1097" x2="72.9714" y2="466.375" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2867A2"/> + <stop offset="3.820000e-02" style="stop-color:#2174B1"/> + <stop offset="0.1177" style="stop-color:#0B86C4"/> + <stop offset="0.2081" style="stop-color:#0A94D2"/> + <stop offset="0.3177" style="stop-color:#0C9BDB"/> + <stop offset="0.5" style="stop-color:#109EDE"/> + <stop offset="0.6823" style="stop-color:#0C9BDB"/> + <stop offset="0.7919" style="stop-color:#0A94D2"/> + <stop offset="0.8823" style="stop-color:#0B86C4"/> + <stop offset="0.9618" style="stop-color:#2174B1"/> + <stop offset="1" style="stop-color:#2867A2"/> + </linearGradient> + <path class="st21" d="M72.6,80.2c0.1-0.1,0.2-0.1,0.2-0.2c-5.3-6.2-10.2-12.8-14.7-19.7c-0.1,0.1-0.2,0.2-0.2,0.4 C57.9,60.6,67.6,75.9,72.6,80.2z"/> + + <linearGradient id="SVGID_23_" gradientUnits="userSpaceOnUse" x1="54.5637" y1="474.0854" x2="62.254" y2="494.9197" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2B3B6A"/> + <stop offset="1" style="stop-color:#2B3B6A"/> + </linearGradient> + <path class="st22" d="M58.2,98.4C57.9,98.1,47.7,86.1,43.1,79l-0.8,0.9C46.9,86.6,52,93,57.6,99L58.2,98.4z"/> + + <linearGradient id="SVGID_24_" gradientUnits="userSpaceOnUse" x1="69.1674" y1="452.6575" x2="78.2209" y2="509.0225" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)"> + <stop offset="0" style="stop-color:#2E5284"/> + <stop offset="2.440000e-02" style="stop-color:#2C5C92"/> + <stop offset="8.880000e-02" style="stop-color:#2075B1"/> + <stop offset="0.1599" style="stop-color:#0B86C4"/> + <stop offset="0.2403" style="stop-color:#0A94D2"/> + <stop offset="0.3378" style="stop-color:#0E9CDA"/> + <stop offset="0.5" style="stop-color:#109EDE"/> + <stop offset="0.6718" style="stop-color:#0C9BDB"/> + <stop offset="0.7751" style="stop-color:#0A94D2"/> + <stop offset="0.8603" style="stop-color:#0B86C4"/> + <stop offset="0.9351" style="stop-color:#2174B1"/> + <stop offset="1" style="stop-color:#2C5D95"/> + </linearGradient> + <path class="st23" d="M72.9,79.9c-5.3-6.2-10.2-12.8-14.7-19.7c-0.5-0.8-1.1-1.6-1.6-2.4c-8.7,0-17.4,0.7-26,1.9 c0.3,0.5,4.3,7.2,7.2,11.7c27.8,42.8,40.8,41.1,41.4,41c0.6-0.2,1.2-0.5,1.7-0.8L98.8,100C91.4,98.4,82.1,90.6,72.9,79.9z"/> + </g> +</g> +</svg> \ No newline at end of file diff --git a/packaging/rules/snap/scripts/jami-gnome-wrapper b/packaging/rules/snap/scripts/jami-gnome-wrapper new file mode 100755 index 0000000000000000000000000000000000000000..bb1dd0432a3943fef7bd9bd108fac55616a77e3d --- /dev/null +++ b/packaging/rules/snap/scripts/jami-gnome-wrapper @@ -0,0 +1,4 @@ +#!/bin/sh + +$SNAP/usr/lib/ring/dring -cd & +exec "$@" diff --git a/packaging/rules/snap/snapcraft.yaml b/packaging/rules/snap/snapcraft.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8b68fd85172b0ce29f2a002b47bc940298660d4e --- /dev/null +++ b/packaging/rules/snap/snapcraft.yaml @@ -0,0 +1,339 @@ +# Copyright (C) 2019-2020 Savoir-faire Linux Inc. +# +# Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com> +# Author: Amin Bandali <amin.bandali@savoirfairelinux.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# 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/>. + + +# This file is based on earlier work by Daniel Llewellyn, under the +# Expat License (also referred to as "the MIT License"), per the +# following notice: + +# Copyright (C) 2017-2020 Daniel Llewellyn <daniel@bowlhat.net> +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + +name: jami +version: "RELEASE_VERSION" +adopt-info: jami +icon: icons/jami.svg +summary: 'Jami: secure, distributed communication software & SIP client' +description: > + Jami is free software which allows its users to communicate in multiple ways. + + * A telephone: a simple tool to connect, communicate and share. + * A teleconferencing tool: easily join calls to create conferences with multiple participants. + * A media sharing tool: Jami supports a variety of video input options, including mutliple cameras and image and video files, and the selection of audio inputs and outputs; all this is supported by multiple high quality audio and video codecs. + * A messenger: send text messeges during calls or out of calls (as long as your peer is connected). + * A building block for your IoT project: re-use the universal communications technology of Jami with its portable library on your system of choice. + +confinement: strict +grade: stable +base: core18 + +plugs: + gnome-3-28-1804: + interface: content + target: $SNAP/gnome-platform + default-provider: gnome-3-28-1804:gnome-3-28-1804 + gtk-3-themes: + interface: content + target: $SNAP/data-dir/themes + default-provider: gtk-common-themes:gtk-3-themes + icon-themes: + interface: content + target: $SNAP/data-dir/icons + default-provider: gtk-common-themes:icon-themes + sound-themes: + interface: content + target: $SNAP/data-dir/sounds + default-provider: gtk-common-themes:sounds-themes + +slots: + dbus-jami: + interface: dbus + bus: session + name: net.jami.Jami + dbus-ring: + interface: dbus + bus: session + name: cx.ring.Ring + dbus-jamignome: + interface: dbus + bus: session + name: cx.ring.RingGnome + +layout: + /usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0: + bind: $SNAP/gnome-platform/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0 + /usr/lib/$SNAPCRAFT_ARCH_TRIPLET/alsa-lib: + bind: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/alsa-lib + /usr/local/share/jami-gnome: + bind: $SNAP/usr/share/jami-gnome + +environment: + DISABLE_WAYLAND: 'true' + XDG_CURRENT_DESKTOP: Unity + +apps: + jami: + command: usr/bin/jami-gnome + command-chain: + - bin/desktop-launch + - snap/command-chain/alsa-launch + - bin/jami-gnome-wrapper + common-id: net.jami.Jami + desktop: usr/share/applications/jami-gnome.desktop + slots: + - dbus-jami + - dbus-ring + - dbus-jamignome + plugs: + - audio-playback + - audio-record + - browser-support + - camera + - desktop + - desktop-legacy + - gsettings + - hardware-observe + - home + - network + - network-bind + - opengl + - removable-media + - unity7 + - wayland + - x11 + +parts: + desktop-launch: + source: https://github.com/ubuntu/snapcraft-desktop-helpers.git + plugin: nil + build-packages: + - gcc-8 + - qtbase5-dev + - dpkg-dev + stage-packages: + - libqt5gui5 + - libqt5svg5 # for loading icon themes which are svg + - try: [appmenu-qt5] # not available on core18 + override-pull: | + snapcraftctl pull + sed -i -E 's|\. \$SNAP/flavor-select|USE_gtk3=true|' gtk/launcher-specific + sed -i -E 's|\. \$SNAP/flavor-select|USE_qt5=true|' qt/launcher-specific + sed -i -E 's|(append_dir GTK_PATH \$RUNTIME/usr/lib/\$ARCH/gtk-2.0)|#\1|' qt/launcher-specific + sed -i -E 's|\$RUNTIME|$SNAP|g' qt/launcher-specific + sed -i -E 's|\$WITH_RUNTIME|no|g' qt/launcher-specific + override-build: | + snapcraftctl build + gcc -Wall -O2 -o bindtextdomain.so -fPIC -shared src/bindtextdomain.c -ldl + + echo "#!/bin/bash" > desktop-launch + cat common/init >> desktop-launch + + cat qt/runtime-exports >> desktop-launch + cat gtk/runtime-exports >> desktop-launch + + cat common/desktop-exports >> desktop-launch + + cat qt/launcher-specific >> desktop-launch + cat gtk/launcher-specific >> desktop-launch + + cat common/mark-and-exec >> desktop-launch + + install -D -m755 desktop-launch $SNAPCRAFT_PART_INSTALL/bin/desktop-launch + install -D -m644 bindtextdomain.so $SNAPCRAFT_PART_INSTALL/lib/bindtextdomain.so + + mkdir -pv $SNAPCRAFT_PART_INSTALL/gnome-platform + + scripts: + plugin: dump + source: scripts + organize: + jami-gnome-wrapper: bin/jami-gnome-wrapper + + alsa-mixin: + plugin: dump + source: https://github.com/diddlesnaps/snapcraft-alsa.git + source-subdir: snapcraft-assets + build-packages: + - libasound2-dev + stage-packages: + - libasound2 + - libasound2-plugins + + jami: + after: [alsa-mixin] + source: ../../.. + source-type: local + plugin: nil + parse-info: [usr/share/metainfo/jami-gnome.appdata.xml] + override-pull: | + snapcraftctl pull + sed -i -E 's|(tmpName) << (PACKAGE_NAME << "_shm_")|\1 << "snap.jami." << \2|' daemon/src/media/video/sinkclient.cpp + for file in jami-gnome.desktop jami-gnome.desktop.autostart; do + sed -i -E 's|^Icon=.*|Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/jami.svg|' client-gnome/$file + done + override-build: | + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 10 + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 20 + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 10 + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 20 + + cd $SNAPCRAFT_PART_BUILD/daemon/contrib + mkdir -p native + cd native + ../bootstrap + make .ffmpeg + make + + cd $SNAPCRAFT_PART_BUILD/daemon + ./autogen.sh + ./configure --prefix=/usr --disable-shared + make -j$SNAPCRAFT_PARALLEL_BUILD_COUNT + DESTDIR=$SNAPCRAFT_PART_INSTALL make install + + cd $SNAPCRAFT_PART_BUILD/lrc + mkdir build + cd build + cmake .. -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_PREFIX_PATH=$SNAPCRAFT_PART_INSTALL/usr \ + -DRING_BUILD_DIR=$SNAPCRAFT_PART_BUILD/daemon/src + make -j$SNAPCRAFT_PARALLEL_BUILD_COUNT + DESTDIR=$SNAPCRAFT_PART_INSTALL make install + + sed -i "s|/usr|$SNAPCRAFT_PART_INSTALL/usr|g" $SNAPCRAFT_PART_INSTALL/usr/lib/cmake/LibRingClient/LibRingClientConfig.cmake + + cd $SNAPCRAFT_PART_BUILD/client-gnome + mkdir build + cd build + cmake .. -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_PREFIX_PATH=$SNAPCRAFT_PART_INSTALL/usr \ + -DLibRingClient_DIR=$SNAPCRAFT_PART_INSTALL/usr/lib/cmake/LibRingClient + make -j$SNAPCRAFT_PARALLEL_BUILD_COUNT + DESTDIR=$SNAPCRAFT_PART_INSTALL make install + build-packages: + - autoconf + - autoconf-archive + - automake + - autopoint + - bzip2 + - cmake + - curl + - g++-8 + - gettext + - gnome-icon-theme-symbolic + - gzip + - libappindicator3-dev + - libayatana-appindicator3-dev + - libasound2-dev + - libavcodec-dev + - libavdevice-dev + - libavformat-dev + - libboost-dev + - libcanberra-gtk3-dev + - libclutter-gtk-1.0-dev + - libdbus-1-dev + - libdbus-c++-dev + - libexpat1-dev + - libgnutls28-dev + - libgsm1-dev + - libgtk-3-dev + - libjack-jackd2-dev + - libjsoncpp-dev + - libnotify-dev + - libopus-dev + - libpcre3-dev + - libpulse-dev + - libqrencode-dev + - libsamplerate0-dev + - libsndfile1-dev + - libspeex-dev + - libspeexdsp-dev + - libsrtp0-dev + - libswscale-dev + - libtool + - libudev-dev + - libupnp-dev + - libva-dev + - libvdpau-dev + - libwebkit2gtk-4.0-dev + - libyaml-cpp-dev + - nasm # seems to be needed for building libvpx on an 18.04 base + - qtbase5-dev + - qttools5-dev + - uuid-dev + - yasm + stage-packages: + - freeglut3 + - libappindicator3-1 + - libayatana-appindicator3-1 + - libavcodec-extra + - libavcodec57 + - libavdevice57 + - libavformat57 + - libdbus-1-3 + - libdbus-c++-1-0v5 + - libebook-1.2-19 + - libexpat1 + - libglu1-mesa + - libgnutls30 + - libgsm1 + - libjack-jackd2-0 + - libjsoncpp1 + - libopus0 + - libpcre3 + - libqrencode3 + - libqt5core5a + - libqt5dbus5 + - libqt5gui5 + - libqt5sql5 + - libqt5sql5-sqlite + - libsamplerate0 + - libslang2 + - libsndfile1 + - libspeex1 + - libspeexdsp1 + - libswscale4 + - libudev1 + - libupnp6 + - libuuid1 + - libva-drm2 + - libva-glx2 + - libva-wayland2 + - libva2 + - libvdpau-va-gl1 + - libvdpau1 + - va-driver-all diff --git a/patches/docker-snap-build-scripts.patch b/patches/docker-snap-build-scripts.patch new file mode 100644 index 0000000000000000000000000000000000000000..4dcc0f93e1497bedd8f693b9612c9364e2587cc9 --- /dev/null +++ b/patches/docker-snap-build-scripts.patch @@ -0,0 +1,30 @@ +Description: add and run our build script + Also, use bionic (18.04) as the base image, since xenial lacks + libayatana-appindicator3-dev. +Author: Amin Bandali <amin.bandali@savoirfairelinux.com> + +--- ../docker/Dockerfile_snap.original 2020-11-23 15:51:17.211591055 -0500 ++++ ../docker/Dockerfile_snap 2020-11-23 15:52:29.247759416 -0500 +@@ -1,4 +1,4 @@ +-FROM ubuntu:xenial as builder ++FROM ubuntu:bionic as builder + + # Grab dependencies + RUN apt-get update +@@ -36,7 +36,7 @@ + + # Multi-stage build, only need the snaps from the builder. Copy them one at a + # time so they can be cached. +-FROM ubuntu:xenial ++FROM ubuntu:bionic + COPY --from=builder /snap/core /snap/core + COPY --from=builder /snap/core18 /snap/core18 + COPY --from=builder /snap/snapcraft /snap/snapcraft +@@ -53,3 +53,7 @@ + ENV SNAP="/snap/snapcraft/current" + ENV SNAP_NAME="snapcraft" + ENV SNAP_ARCH="amd64" ++ ++ADD scripts/build-package-snap.sh /opt/build-package-snap.sh ++ ++CMD /opt/build-package-snap.sh diff --git a/scripts/build-package-snap.sh b/scripts/build-package-snap.sh new file mode 100755 index 0000000000000000000000000000000000000000..e637595deccb56da56a8eb40c1669b53ed222163 --- /dev/null +++ b/scripts/build-package-snap.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2020 Savoir-faire Linux Inc. +# +# Author: Amin Bandali <amin.bandali@savoirfairelinux.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# 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/>. +# +# This script is used in the packaging containers to build a snap +# package on an ubuntu base distro. + + +set -e + +cp -rp /opt/ring-project-ro /opt/ring-project +cd /opt/ring-project/packaging/rules/snap/ + +# set the version and tarball filename +sed -i "s/RELEASE_VERSION/${RELEASE_VERSION}/g" snapcraft.yaml + +snapcraft + +# move the built snap to output +mv *.snap /opt/output/ +chown ${CURRENT_UID}:${CURRENT_GID} /opt/output/*.snap diff --git a/scripts/deploy-packages.sh b/scripts/deploy-packages.sh index 893d4f3183e66bb073f5d1955824fe35e579e1f6..676747e304965cd294f7acbf9779b5864a4f07a7 100755 --- a/scripts/deploy-packages.sh +++ b/scripts/deploy-packages.sh @@ -182,6 +182,33 @@ EOF } +#################### +## Snap packaging ## +#################### + +function package_snap() +{ + echo "####################" + echo "## deploying snap ##" + echo "####################" + + if [[ "${CHANNEL:0:19}" == "internal_experiment" ]]; + then + DISTRIBUTION_REPOSITOIRY_FOLDER=$(realpath repositories)/${DISTRIBUTION} + mkdir -p ${DISTRIBUTION_REPOSITOIRY_FOLDER} + cp packages/${DISTRIBUTION}*/*.snap ${DISTRIBUTION_REPOSITOIRY_FOLDER}/ + elif [[ "${CHANNEL:0:7}" == "nightly" ]]; + then + snapcraft login --with ${SNAPCRAFT_LOGIN} + snapcraft push packages/${DISTRIBUTION}*/*.snap --release edge + elif [[ "${CHANNEL:0:6}" == "stable" ]]; + then + snapcraft login --with ${SNAPCRAFT_LOGIN} + snapcraft push packages/${DISTRIBUTION}*/*.snap --release stable + fi +} + + ################################################ ## Deploy packages on given remote repository ## ################################################ @@ -221,6 +248,9 @@ function package() elif [[ "${DISTRIBUTION:0:6}" == "fedora" || "${DISTRIBUTION:0:4}" == "rhel" || "${DISTRIBUTION:0:13}" == "opensuse-leap" || "${DISTRIBUTION:0:19}" == "opensuse-tumbleweed" ]]; then package_rpm + elif [[ "${DISTRIBUTION:0:4}" == "snap" ]]; + then + package_snap else echo "ERROR: Distribution '${DISTRIBUTION}' is unsupported" fi @@ -257,6 +287,10 @@ case $i in SSH_IDENTIY_FILE="${i#*=}" shift ;; + --snapcraft-login=*) + SNAPCRAFT_LOGIN="${i#*=}" + shift + ;; *) echo "Unrecognized option ${i}" exit 1 diff --git a/scripts/install.sh b/scripts/install.sh index f02f3b10267599e5fa480acd85b09a5ef1fc114e..132d0f022ff25223a5a7d3afe43becba722d6d16 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -13,6 +13,9 @@ export OSTYPE set -ex +# Qt_MIN_VER required for client-qt +QT5_MIN_VER="5.14" + global=false static='' client='' @@ -104,6 +107,33 @@ fi make -j"${proc}" make_install "${global}" "${priv_install}" + +# For the client-qt, verify system's version if no path provided +if [ "${client}" = "client-qt" ] && [ -z "$qt5path" ]; then + sys_qt5ver="" + if command -v qmake &> /dev/null; then + sys_qt5ver=$(qmake -v) + elif command -v qmake-qt5 &> /dev/null; then + sys_qt5ver=$(qmake-qt5 -v) # Fedora + else + echo "No valid Qt found"; exit 1; + fi + + sys_qt5ver=${sys_qt5ver#*Qt version} + sys_qt5ver=${sys_qt5ver%\ in\ *} + + installed_qt5ver=$(echo $sys_qt5ver| cut -d'.' -f 2) + required_qt5ver=$(echo $QT5_MIN_VER| cut -d'.' -f 2) + + if [[ $installed_qt5ver -ge $required_qt5ver ]] ; then + # Disable qt5path and qt5ver in order to use system's Qt + qt5path="" + qt5ver="" + else + echo "No valid Qt found"; exit 1; + fi +fi + # libringclient cd "${TOP}/lrc" mkdir -p "${BUILDDIR}" @@ -113,12 +143,12 @@ if [ "${global}" = "true" ]; then cmake .. -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX="${prefix}" $static \ - -DQT_MIN_VER="${qt5ver}" \ + -DQT5_VER="${qt5ver}" \ -DQT5_PATH="${qt5path}" else cmake .. -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \ -DCMAKE_BUILD_TYPE=Debug $static \ - -DQT_MIN_VER="${qt5ver}" \ + -DQT5_VER="${qt5ver}" \ -DQT5_PATH="${qt5path}" fi else @@ -126,7 +156,7 @@ else -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX="${INSTALL}/lrc" \ -DRING_BUILD_DIR="${DAEMON}/src" $static \ - -DQT_MIN_VER="${qt5ver}" \ + -DQT5_VER="${qt5ver}" \ -DQT5_PATH="${qt5path}" fi make -j"${proc}" @@ -137,24 +167,18 @@ cd "${TOP}/${client}" mkdir -p "${BUILDDIR}" cd "${BUILDDIR}" if [ "${client}" = "client-qt" ]; then - echo building client-qt using Qt ${qt5ver} - if ! command -v qmake &> /dev/null; then - eval ${qt5path}/bin/qmake PREFIX="${INSTALL}/${client}" .. + if [ -z ${qt5path} ]; then + if command -v qmake &> /dev/null; then + echo "Build client-qt with $(qmake -v)" + qmake PREFIX="${INSTALL}/${client}" .. + else + echo "Build client-qt with $(qmake-qt5 -v)" # Fedora + qmake-qt5 PREFIX="${INSTALL}/${client}" .. + fi else - # Extract installed Qt version and compare with minimum required - sys_qt5ver=$(qmake -v) - sys_qt5ver=${sys_qt5ver#*Qt version} - sys_qt5ver=${sys_qt5ver%\ in\ *} - - installed_qt5ver=$(echo $sys_qt5ver| cut -d'.' -f 2) - required_qt5ver=$(echo $qt5ver| cut -d'.' -f 2) - - if [[ $installed_qt5ver -ge $required_qt5ver ]] ; then - qmake PREFIX="${INSTALL}/${client}" .. - else + echo "Build client-qt using Qt ${qt5path}" eval ${qt5path}/bin/qmake PREFIX="${INSTALL}/${client}" .. - fi - fi + fi else if [ "${global}" = "true" ]; then if [ "${prefix+set}" ]; then diff --git a/scripts/make-packaging-target.py b/scripts/make-packaging-target.py index d901820652df071dad047c83b7c8477694c75fb9..43ff9c821a67e98f0ad032691d9f4371fd217ca6 100755 --- a/scripts/make-packaging-target.py +++ b/scripts/make-packaging-target.py @@ -47,6 +47,7 @@ PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\ -e DEBIAN_VERSION=%(version)s \\ -e DEBIAN_PACKAGING_OVERRIDE=%(debian_packaging_override)s \\ -e CURRENT_UID=$(CURRENT_UID) \\ + -e CURRENT_GID=$(CURRENT_GID) \\ -e DISTRIBUTION=%(distribution)s \\ -v $(CURDIR):/opt/ring-project-ro:ro \\ -v $(CURDIR)/packages/%(distribution)s:/opt/output \\ @@ -400,6 +401,12 @@ def run_generate_all(parsed_args): "debian_packaging_override": "", "output_file": ".packages-built", }, + # Snap + { + "distribution": "snap", + "debian_packaging_override": "", + "output_file": ".packages-built", + }, ]