~snappy-dev/snapcraft/core

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
#
# Copyright (C) 2015 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 snapcraft.common


class QmlPlugin(snapcraft.BasePlugin):

    @classmethod
    def schema(cls):
        return {}

    def __init__(self, name, options):
        super().__init__(name, options)
        self.stage_packages.extend([
            "qmlscene",
            "qtdeclarative5-qtmir-plugin",
            "mir-graphics-drivers-desktop",
            "qtubuntu-desktop",
            "ttf-ubuntu-font-family",
            # if there's a metapackage for these, please swap it in here:
            "qml-module-qt-labs-folderlistmodel",
            "qml-module-qt-labs-settings",
            "qml-module-qt-websockets",
            "qml-module-qtfeedback",
            "qml-module-qtgraphicaleffects",
            "qml-module-qtlocation",
            "qml-module-qtmultimedia",
            "qml-module-qtorganizer",
            "qml-module-qtpositioning",
            "qml-module-qtqml-models2",
            "qml-module-qtqml-statemachine",
            "qml-module-qtquick-controls",
            "qml-module-qtquick-dialogs",
            "qml-module-qtquick-layouts",
            "qml-module-qtquick-localstorage",
            "qml-module-qtquick-particles2",
            "qml-module-qtquick-privatewidgets",
            "qml-module-qtquick-window2",
            "qml-module-qtquick-xmllistmodel",
            "qml-module-qtquick2",
            "qml-module-qtsensors",
            "qml-module-qtsysteminfo",
            "qml-module-qttest",
            "qml-module-qtwebkit",
            "qml-module-ubuntu-connectivity",
            "qml-module-ubuntu-onlineaccounts",
            "qml-module-ubuntu-onlineaccounts-client",
        ])

    def snap_fileset(self):
        return ['*',
                'etc/xdg/qtchooser/snappy-qt5.conf',
                ]

    def _build_qt_config(self):
        arch = snapcraft.common.get_arch_triplet()
        configdir = os.path.join(self.installdir, 'etc', 'xdg', 'qtchooser')
        os.makedirs(configdir, exist_ok=True)
        config = open(os.path.join(configdir, 'snappy-qt5.conf'), 'w')
        config.write('./usr/lib/{}/qt5/bin\n'.format(arch))
        config.write('./usr/lib/{}\n'.format(arch))
        config.close

    def build(self):
        self._build_qt_config()

    def env(self, root):
        arch = snapcraft.common.get_arch_triplet()
        return [
            "LD_LIBRARY_PATH=%s/usr/lib/%s:$LD_LIBRARY_PATH" % (root, arch),
            # Mir config
            "MIR_SOCKET=/run/mir_socket",
            "MIR_CLIENT_PLATFORM_PATH={}/usr/lib/{}/mir/client-platform"
            .format(root, arch),
            # XKB config
            "XKB_CONFIG_ROOT=%s/usr/share/X11/xkb" % root,
            # Qt Platform to Mir
            "QT_QPA_PLATFORM=ubuntumirclient",
            "QTCHOOSER_NO_GLOBAL_DIR=1",
            "QT_SELECT=snappy-qt5",
            # Qt Libs
            "LD_LIBRARY_PATH={}/usr/lib/{}/qt5/libs:$LD_LIBRARY_PATH"
            .format(root, arch),
            "LD_LIBRARY_PATH={}/usr/lib/{}/pulseaudio:$LD_LIBRARY_PATH"
            .format(root, arch),
            # Qt Modules
            "QT_PLUGIN_PATH=%s/usr/lib/%s/qt5/plugins" % (root, arch),
            "QML2_IMPORT_PATH=%s/usr/lib/%s/qt5/qml" % (root, arch),
            # Mesa Libs
            "LD_LIBRARY_PATH={}/usr/lib/{}/mesa:$LD_LIBRARY_PATH"
            .format(root, arch),
            "LD_LIBRARY_PATH={}/usr/lib/{}/mesa-egl:$LD_LIBRARY_PATH"
            .format(root, arch),
            # XDG Config
            "XDG_CONFIG_DIRS=%s/etc/xdg:$XDG_CONFIG_DIRS" % root,
            "XDG_CONFIG_DIRS=%s/usr/xdg:$XDG_CONFIG_DIRS" % root,
            "XDG_DATA_DIRS=%s/usr/share:$XDG_DATA_DIRS" % root,
            # Not good, needed for fontconfig
            "XDG_DATA_HOME=%s/usr/share" % root,
            # Font Config
            "FONTCONFIG_PATH=%s/etc/fonts/config.d" % root,
            "FONTCONFIG_FILE=%s/etc/fonts/fonts.conf" % root,
        ]