summaryrefslogtreecommitdiffstats
path: root/util/wasm/preload/preload_qt_plugins.py
blob: 362d129732060768e7617e29e1c5aa61d9662e5b (plain)
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
#!/usr/bin/env python3
# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

import os
import sys
import json

# Path to plugins on the Qt installation on the web server. "$QTPATH" is replaced by qtloader.js
# at load time (defaults to "qt"), which makes it possible to relocate the application build relative
# to the Qt build on the web server.
qt_plugins_path = "$QTDIR/plugins"

# Path to plugins on the in-memory file system provided by Emscripten. This script emits
# preload commands which copies plugins to this directory.
qt_deploy_plugins_path = "/qt/plugins"


def find_so_files(directory):
    so_files = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(".so"):
                relative_path = os.path.relpath(os.path.join(root, file), directory)
                so_files.append(relative_path)
    return so_files


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python make_qt_symlinks.py <qt-wasm-path>")
        sys.exit(1)

    qt_wasm_path = sys.argv[1]

    # preload all plugins
    plugins = find_so_files(os.path.join(qt_wasm_path, "plugins"))
    preload = [
        {
            "source": os.path.join(qt_plugins_path, plugin),
            "destination": os.path.join(qt_deploy_plugins_path, plugin),
        }
        for plugin in plugins
    ]

    # Create and preload qt.conf which will tell Qt to look for plugins
    # and QML imports in /qt/plugins and /qt/qml. The qt.conf file is
    # written to the current directory.
    qtconf = "[Paths]\nPrefix = /qt\n"
    with open("qt.conf", "w") as f:
        f.write(qtconf)
    preload.append({"source": "qt.conf", "destination": "/qt.conf"})

    print(json.dumps(preload, indent=2))