|
36 | 36 | if: runner.os == 'Linux' |
37 | 37 | run: | |
38 | 38 | sudo apt-get update |
39 | | - sudo apt-get install -y ninja-build libgl1-mesa-dev |
| 39 | + sudo apt-get install -y ninja-build libgl1-mesa-dev libxcb-cursor0 libxkbcommon-x11-0 |
40 | 40 |
|
41 | 41 | - name: Install macOS packages |
42 | 42 | if: runner.os == 'macOS' |
@@ -103,8 +103,81 @@ jobs: |
103 | 103 | find build/release -maxdepth 6 -print |
104 | 104 | exit 1 |
105 | 105 | fi |
106 | | - cp "$binary_target" "$package_root/" |
| 106 | +
|
| 107 | + mkdir -p "$package_root/bin" "$package_root/lib" "$package_root/plugins" |
| 108 | + cp "$binary_target" "$package_root/bin/FluentSerialAssistant" |
| 109 | + chmod +x "$package_root/bin/FluentSerialAssistant" |
| 110 | +
|
| 111 | + qt_prefix="${QT_ROOT_DIR:-}" |
| 112 | + if [ -z "$qt_prefix" ]; then |
| 113 | + qt_prefix="$(qtpaths6 --install-prefix 2>/dev/null || qtpaths --install-prefix)" |
| 114 | + fi |
| 115 | + qt_plugins_dir="$(qtpaths6 --plugin-dir 2>/dev/null || qtpaths --plugin-dir)" |
| 116 | +
|
| 117 | + copy_qt_dependencies() { |
| 118 | + local source_file="$1" |
| 119 | + while IFS= read -r dep; do |
| 120 | + if [ -z "$dep" ] || [ ! -f "$dep" ]; then |
| 121 | + continue |
| 122 | + fi |
| 123 | + case "$dep" in |
| 124 | + "$qt_prefix"/*) |
| 125 | + copy_qt_library "$dep" |
| 126 | + ;; |
| 127 | + esac |
| 128 | + done < <(ldd "$source_file" | awk '{ if ($2 == "=>") print $3; else if ($1 ~ /^\//) print $1; }') |
| 129 | + } |
| 130 | +
|
| 131 | + copy_qt_library() { |
| 132 | + local dep="$1" |
| 133 | + local base |
| 134 | + base="$(basename "$dep")" |
| 135 | + if [ -f "$package_root/lib/$base" ]; then |
| 136 | + return |
| 137 | + fi |
| 138 | + cp -Lf "$dep" "$package_root/lib/$base" |
| 139 | + copy_qt_dependencies "$dep" |
| 140 | + } |
| 141 | +
|
| 142 | + copy_qt_plugin_group() { |
| 143 | + local group="$1" |
| 144 | + shift |
| 145 | + local destination="$package_root/plugins/$group" |
| 146 | + mkdir -p "$destination" |
| 147 | + local pattern plugin |
| 148 | + for pattern in "$@"; do |
| 149 | + for plugin in "$qt_plugins_dir/$group"/$pattern; do |
| 150 | + if [ ! -e "$plugin" ]; then |
| 151 | + continue |
| 152 | + fi |
| 153 | + cp -Lf "$plugin" "$destination/" |
| 154 | + copy_qt_dependencies "$plugin" |
| 155 | + done |
| 156 | + done |
| 157 | + } |
| 158 | +
|
| 159 | + copy_qt_dependencies "$package_root/bin/FluentSerialAssistant" |
| 160 | + copy_qt_plugin_group platforms 'libqxcb.so' |
| 161 | + copy_qt_plugin_group imageformats '*.so' |
| 162 | + copy_qt_plugin_group iconengines '*.so' |
| 163 | + copy_qt_plugin_group tls '*.so' |
| 164 | + copy_qt_plugin_group platforminputcontexts '*.so' |
| 165 | +
|
| 166 | + printf '%s\n' '[Paths]' 'Prefix = ..' 'Plugins = ../plugins' > "$package_root/bin/qt.conf" |
| 167 | + printf '%s\n' \ |
| 168 | + '#!/usr/bin/env bash' \ |
| 169 | + 'set -e' \ |
| 170 | + 'app_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"' \ |
| 171 | + 'export LD_LIBRARY_PATH="$app_dir/lib:${LD_LIBRARY_PATH:-}"' \ |
| 172 | + 'export QT_PLUGIN_PATH="$app_dir/plugins"' \ |
| 173 | + 'exec "$app_dir/bin/FluentSerialAssistant" "$@"' \ |
| 174 | + > "$package_root/FluentSerialAssistant" |
107 | 175 | chmod +x "$package_root/FluentSerialAssistant" |
| 176 | +
|
| 177 | + mkdir -p "$package_root/share/applications" "$package_root/share/icons/hicolor/1024x1024/apps" |
| 178 | + cp packaging/linux/tech.zhangshu.FluentSerialAssistant.desktop "$package_root/share/applications/" |
| 179 | + cp logo.png "$package_root/share/icons/hicolor/1024x1024/apps/tech.zhangshu.FluentSerialAssistant.png" |
| 180 | + du -sh "$package_root" |
108 | 181 | fi |
109 | 182 |
|
110 | 183 | cp README.md CHANGELOG.md LICENSE "$package_root/" |
|
0 commit comments