Make cross-compilation scripts work from MSYS2

This is weird and runs very slowly.

Meson can also find libraries outside the subroot,
in particular the fast float plugin.
This commit is contained in:
2023-06-22 01:48:02 +02:00
parent a4772ce319
commit 86622e0c31
4 changed files with 22 additions and 5 deletions

76
msys2-install.sh Executable file
View File

@@ -0,0 +1,76 @@
#!/bin/sh -e
export LC_ALL=C
cd "$MESON_INSTALL_DESTDIR_PREFIX"
msys2_root=$1
# Support running directly from within MSYS2 on Windows.
if [ -n "$MSYSTEM" ]
then
wine64() { "$@"; }
awk() { command awk -v RS='\r?\n' "$@"; }
fi
# Copy binaries we directly or indirectly depend on.
cp -p "$msys2_root"/bin/*.dll .
cp -p "$msys2_root"/bin/wperl.exe .
cp -p "$msys2_root"/bin/exiftool .
# The console helper is only useful for debug builds.
cp -p "$msys2_root"/bin/gspawn-*-helper*.exe .
cp -pR "$msys2_root"/etc/ .
mkdir -p lib
cp -pR "$msys2_root"/lib/gdk-pixbuf-2.0/ lib
cp -pR "$msys2_root"/lib/perl5/ lib
mkdir -p share/glib-2.0/schemas
cp -pR "$msys2_root"/share/glib-2.0/schemas/*.Settings.* share/glib-2.0/schemas
mkdir -p share
cp -pR "$msys2_root"/share/mime/ share
mkdir -p share/icons
cp -pR "$msys2_root"/share/icons/Adwaita/ share/icons
mkdir -p share/icons/hicolor
cp -p "$msys2_root"/share/icons/hicolor/index.theme share/icons/hicolor
# Remove unreferenced libraries.
find lib -name '*.a' -exec rm -- {} +
awk 'function whitelist(binary) {
if (seen[binary]++)
return
delete orphans[binary]
while (("strings -a \"" binary "\" 2>/dev/null" | getline string) > 0)
if (match(string, /[-.+_a-zA-Z0-9]+[.][Dd][Ll][Ll]$/))
whitelist("./" substr(string, RSTART, RLENGTH))
} BEGIN {
while (("find . -type f -path \"./*.[Dd][Ll][Ll]\"" | getline) > 0)
orphans[$0]++
while (("find . -type f -path \"./*.[Ee][Xx][Ee]\"" | getline) > 0)
whitelist($0)
while (("find ./lib -type f -path \"./*.[Dd][Ll][Ll]\"" | getline) > 0)
whitelist($0)
for (library in orphans)
print library
}' | xargs rm --
# Removes unused icons from the Adwaita theme. It could be even more aggressive,
# since it keeps around lots of sizes and all the GTK+ stock icons.
find share/icons/Adwaita -type f | awk 'BEGIN {
while (("grep -aho \"[a-z][a-z-]*\" *.dll *.exe" | getline) > 0)
good[$0] = 1
} /[.](png|svg|cur|ani)$/ {
# Cut out the basename without extensions.
match($0, /[^\/]+$/)
base = substr($0, RSTART)
sub(/[.].+$/, "", base)
# Try matching while cutting off suffixes.
# Disregarding the not-much-used GTK_ICON_LOOKUP_GENERIC_FALLBACK.
while (!(keep = good[base]) &&
sub(/-(ltr|rtl|symbolic)$/, "", base)) {}
if (!keep)
print
}' | xargs rm --
wine64 "$msys2_root"/bin/glib-compile-schemas.exe share/glib-2.0/schemas
# This may speed up program start-up a little bit.
wine64 "$msys2_root"/bin/gtk-update-icon-cache-3.0.exe share/icons/Adwaita