Rename to ruffle-nightly

This commit is contained in:
Zhang Hua 2024-11-07 16:51:39 +08:00
commit b4d3280981
No known key found for this signature in database
GPG key ID: 69528D6DCD2BE030
4 changed files with 341 additions and 0 deletions

64
.SRCINFO Normal file
View file

@ -0,0 +1,64 @@
pkgbase = ruffle-nightly
pkgdesc = A Flash Player emulator written in Rust. (Nightly version)
pkgver = 0.1.0+nightly+20241107
pkgrel = 1
url = https://ruffle.rs/
arch = x86_64
license = MIT OR Apache-2.0
makedepends = cargo
makedepends = cmake
makedepends = java-environment
makedepends = npm
makedepends = nodejs-lts-iron
makedepends = wasm-bindgen
makedepends = binaryen
makedepends = gtk3
makedepends = alsa-lib
makedepends = libxcb
makedepends = systemd-libs
makedepends = clang
makedepends = jq
makedepends = git
makedepends = chromium
makedepends = openssl
options = !lto
source = git+https://github.com/ruffle-rs/ruffle.git#tag=nightly-2024-11-07
source = chromium-extension-ruffle.key
sha256sums = c8500797af9b5928c1057f3f9dee1db4292c9f086d9902384d93cd178e19938a
sha256sums = dac5c0e9661e41834b76d6d047dc94e41dd7a80d98e1c39cb4f2c95b1a7c7a46
pkgname = ruffle-nightly
pkgdesc = A Flash Player emulator written in Rust. (Nightly version) (Desktop app and utils)
depends = hicolor-icon-theme
depends = alsa-lib
depends = systemd-libs
depends = gcc-libs
depends = glibc
provides = ruffle
conflicts = ruffle
pkgname = ruffle-demo-nightly
pkgdesc = A Flash Player emulator written in Rust. (Nightly version) (Demo web app)
arch = any
provides = ruffle-demo
conflicts = ruffle-demo
pkgname = ruffle-selfhosted-nightly
pkgdesc = A Flash Player emulator written in Rust. (Nightly version) (JavaScript module)
arch = any
provides = ruffle-selfhosted
conflicts = ruffle-selfhosted
pkgname = firefox-extension-ruffle-nightly
pkgdesc = A Flash Player emulator written in Rust. (Nightly version) (Unsigned Firefox extension)
arch = any
optdepends = firefox: Load extension in browser.
provides = firefox-extension-ruffle
conflicts = firefox-extension-ruffle
pkgname = chromium-extension-ruffle-nightly
pkgdesc = A Flash Player emulator written in Rust. (Nightly version) (Self-signed Chromium extension)
arch = any
optdepends = chromium: Load extension in browser.
provides = chromium-extension-ruffle
conflicts = chromium-extension-ruffle

5
.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
src
pkg
*.pkg.tar.*
*.log
/ruffle/

244
PKGBUILD Normal file
View file

@ -0,0 +1,244 @@
# private key to sign chromium extension is generated with `openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -traditional`
_channel=nightly
_date=2024-11-07
pkgbase=ruffle-nightly
pkgname=(
ruffle-nightly
ruffle-demo-nightly
ruffle-selfhosted-nightly
firefox-extension-ruffle-nightly
chromium-extension-ruffle-nightly
)
pkgver="0.1.0+$_channel+${_date//-}"
pkgrel=1
arch=("x86_64")
pkgdesc="A Flash Player emulator written in Rust. (Nightly version)"
url="https://ruffle.rs/"
license=("MIT OR Apache-2.0")
makedepends=("cargo" "cmake" "java-environment" "npm" "nodejs-lts-iron"
"wasm-bindgen" "binaryen" "gtk3" "alsa-lib" "libxcb" "systemd-libs"
"clang" "jq" "git" "chromium" "openssl")
source=("git+https://github.com/ruffle-rs/ruffle.git#tag=$_channel-$_date"
"chromium-extension-ruffle.key")
sha256sums=('c8500797af9b5928c1057f3f9dee1db4292c9f086d9902384d93cd178e19938a'
'dac5c0e9661e41834b76d6d047dc94e41dd7a80d98e1c39cb4f2c95b1a7c7a46')
options=("!lto")
_FIREFOX_EXTRNSION_ID="ruffle@ruffle.rs"
prepare() {
cd "$srcdir/$pkgbase"
export RUSTUP_TOOLCHAIN=stable
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
cd web
npm ci
# TODO version_name=$version_number when not nightly
jq --null-input \
--arg version_channel "$_channel" \
--arg version_number "$(jq -r .version package.json)" \
--arg version_name "$_channel $_date" \
--arg build_date "$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y-%m-%d)" \
--arg build_id "$pkgrel" \
--arg commitHash "$(git rev-parse HEAD)" \
--arg firefox_extension_id "$_FIREFOX_EXTRNSION_ID" \
'$ARGS.named' > version_seal.json
echo "Generated version_seal.json:"
cat version_seal.json
}
build() {
cd "$srcdir/$pkgbase"
export RUSTUP_TOOLCHAIN=stable
export CARGO_TARGET_DIR=target
cargo build --frozen --release --all-features \
--package=ruffle_desktop
# libtracy_client-sys seems missing some symbols, skip enabling all features.
cargo build --frozen --release \
--package=ruffle_scanner \
--package=exporter
export CARGO_FEATURES=jpegxr
# Script will read binary at hardcoded path
# See web/packages/core/tools/build_wasm.ts for more info.
unset CARGO_TARGET_DIR
# Flags does not supported by WASM target:
# C/CXX: -mtune -march -fcf-protection
# RUST: -Ctarget-cpu
local flag flags
for flags in "$CFLAGS" "$CXXFLAGS"
do
for flag in $flags
do
if [[ "$flag" =~ ^-m(tune|arch)=[0-9a-z]+ ]] || [[ "$flag" == "-fcf-protection" ]]
then
echo "Removing $flag in C/CXX FLAGS"
CFLAGS=${CFLAGS/$flag/}
fi
done
done
if flags="$(echo "$RUSTFLAGS" | grep -o -P '(\ *-C\s*target-cpu=[0-9a-z]+)')"
then
for flag in $flags
do
echo "Removing $flag in Rust FLAGS"
RUSTFLAGS=${RUSTFLAGS/$flag/}
done
fi
cd web
npm run build:repro
unset CARGO_FEATURES
echo "Signing chromium extension..."
mkdir -p extension-chromium
bsdtar -x -C extension-chromium -f packages/extension/dist/ruffle_extension.zip
local extension_version pubkey extension_id userdatadir
extension_version="$(jq -r .version extension-chromium/manifest.json)"
pubkey="$(openssl rsa -in "$srcdir/chromium-extension-ruffle.key" -pubout -outform DER | base64 -w0)"
extension_id="$(echo "$pubkey" | base64 -d | sha256sum | head -c32 | tr '0-9a-f' 'a-p')"
echo "Chromium extension id is $extension_id"
echo "$extension_id" > .chromium_extension_id
jq --null-input \
--arg external_crx "/usr/lib/chromium-extension-ruffle/$extension_id.crx" \
--arg external_version "$extension_version" \
'$ARGS.named' > "$extension_id.json"
jq --ascii-output \
--arg key "$pubkey" \
'. + {"key": $key}' extension-chromium/manifest.json > manifest.json
mv manifest.json extension-chromium/manifest.json
userdatadir="$(mktemp -d chromium-pack-XXXXXX)"
chromium --user-data-dir="$userdatadir" --pack-extension="extension-chromium" \
--pack-extension-key="$srcdir/chromium-extension-ruffle.key"
}
check() {
cd "$srcdir/$pkgbase"
export RUSTUP_TOOLCHAIN=stable
cargo test --frozen --all-features \
--package=ruffle_desktop
cargo test --frozen \
--package=ruffle_scanner \
--package=exporter
cd web
npm run test
}
package_ruffle-nightly() {
depends=("hicolor-icon-theme" "alsa-lib" "systemd-libs" "gcc-libs" "glibc")
pkgdesc+=" (Desktop app and utils)"
provides=("ruffle")
conflicts=("ruffle")
cd "$srcdir/$pkgbase"
local f
find target/release -maxdepth 1 -executable -type f | while read -r f
do
local target
target="$(basename "$f")"
target=${target/_/-}
if ! [[ "$target" =~ ^ruffle- ]]
then
target="ruffle-$target"
fi
if [[ "$target" == "ruffle-desktop" ]]
then
target="ruffle"
fi
echo "Installing $f to $target..."
install -Dm755 "$f" "$pkgdir/usr/bin/$target"
done
install -Dm644 desktop/packages/linux/rs.ruffle.Ruffle.desktop \
"$pkgdir/usr/share/applications/rs.ruffle.Ruffle.desktop"
install -Dm644 desktop/packages/linux/rs.ruffle.Ruffle.metainfo.xml \
"$pkgdir/usr/share/metainfo/rs.ruffle.Ruffle.metainfo.xml"
install -Dm644 desktop/packages/linux/rs.ruffle.Ruffle.svg \
"$pkgdir/usr/share/icons/hicolor/scalable/apps/rs.ruffle.Ruffle.svg"
install -Dm644 LICENSE.md \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE.md"
install -Dm644 README.md \
"$pkgdir/usr/share/doc/ruffle/README.md"
}
package_ruffle-demo-nightly() {
pkgdesc+=" (Demo web app)"
arch=("any")
provides=("ruffle-demo")
conflicts=("ruffle-demo")
cd "$srcdir/$pkgbase"
mkdir -p "$pkgdir/usr/share/webapps"
cp -a --no-preserve=ownership \
web/packages/demo/dist \
"$pkgdir/usr/share/webapps/ruffle"
install -Dm644 web/packages/demo/LICENSE_APACHE \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_APACHE"
install -Dm644 web/packages/demo/LICENSE_MIT \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_MIT"
install -Dm644 web/packages/demo/README.md \
"$pkgdir/usr/share/doc/ruffle/demo/README.md"
}
package_ruffle-selfhosted-nightly() {
pkgdesc+=" (JavaScript module)"
arch=("any")
provides=("ruffle-selfhosted")
conflicts=("ruffle-selfhosted")
cd "$srcdir/$pkgbase"
mkdir -p \
"$pkgdir/usr/lib/node_modules" \
"$pkgdir/usr/share/licenses/$pkgname"
cp -a --no-preserve=ownership \
web/packages/selfhosted/dist \
"$pkgdir/usr/lib/node_modules/ruffle"
ln -srfv \
"$pkgdir/usr/lib/node_modules/ruffle/LICENSE_APACHE" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_APACHE"
ln -srfv \
"$pkgdir/usr/lib/node_modules/ruffle/LICENSE_MIT" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_MIT"
install -Dm644 web/packages/selfhosted/README.md \
"$pkgdir/usr/share/doc/ruffle/selfhosted/README.md"
}
package_firefox-extension-ruffle-nightly() {
optdepends=("firefox: Load extension in browser.")
pkgdesc+=" (Unsigned Firefox extension)"
arch=("any")
provides=("firefox-extension-ruffle")
conflicts=("firefox-extension-ruffle")
cd "$srcdir/$pkgbase"
install -Dm644 web/packages/extension/dist/firefox_unsigned.xpi \
"$pkgdir/usr/lib/firefox/browser/extensions/$_FIREFOX_EXTRNSION_ID.xpi"
install -Dm644 web/packages/extension/LICENSE_APACHE \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_APACHE"
install -Dm644 web/packages/extension/LICENSE_MIT \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_MIT"
}
package_chromium-extension-ruffle-nightly() {
optdepends=("chromium: Load extension in browser.")
pkgdesc+=" (Self-signed Chromium extension)"
arch=("any")
provides=("chromium-extension-ruffle")
conflicts=("chromium-extension-ruffle")
cd "$srcdir/$pkgbase"
local extension_id
extension_id=$(<web/.chromium_extension_id)
echo "Installing chromium extension $extension_id..."
install -Dm644 "web/$extension_id.json" \
"$pkgdir/usr/share/chromium/extensions/$extension_id.json"
install -Dm644 web/extension-chromium.crx \
"$pkgdir/usr/lib/$pkgname/$extension_id.crx"
install -Dm644 web/packages/extension/LICENSE_APACHE \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_APACHE"
install -Dm644 web/packages/extension/LICENSE_MIT \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_MIT"
}

View file

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCbGREdqWhocl6J
SZDSx6psVkdOzxqjUFfvlr+rS3WAoJr3hm/Bq8xV2GEYUoOKe015MRf5SI8HkXNN
0r/Rx4lVCOVtCpXIorcJCP3+J79Y0PcV2/kVPglATogYgB9kRLa16yJQ+9yWuaPt
BrzOT5SpmuvW340a0hbfFW6fPzEhMjzabFWiLwGexQOxfikOKIYob2vSzeXpRqo6
56SfonWOHu9Ozh1mgXES9DXgnNmnI95XRQjLO2sGbztz5pOx2s6JAbOrLs327F2m
0pp3VL4UNIAaLAWbYMNysvZSwA8S5gh1kqVlKoAteOa5qLWF8IbW96wWTfQlkWy/
USkS1n79AgMBAAECggEAB0jIGwKH2s/0TLJd0Oh7wpbSxorHj4AIgUItQlhK7n2c
iZ+QxCHTePyuorvNXcWov9Zkb9rOjOZx6efKBoo+kvXWAKcMnd22hwAbHcK0I/G8
iRRJwIunV5PYpH3v+3+WrTib5f3OQG37mvhECdSHAOg7x128fNP9KwEQrv4CyrJE
mt74xYcCzcjeWmL69aHni3qPWF73mSrd7G72IsH1x9ej2Mv7Vf3XZIHZ7osKmamI
zktsQay3jQSooTv8hHnQYgzTgP+DsvGsVIR9b8I1+sppszCO6fq7CPj3G4O5ccXn
TTDiMIDCkQsp2oVWVAHrGyavIzIizymaaVwlDhZBgQKBgQDOVUd6/v9hWl6T4erZ
uI9pl8uqF7BHPYujOr8/YWOhkNJg3MBoJSZPBIScdRvH6jNt8hpT7di8K4IKRXK1
0ldN5SRWd0+NEFowCz27Hgth0yP18t8A7IzcdWl7zXZUvwuADhx6KI4eQKWM1eEY
pFiamLMI0vAZ1E5di6Kvug0cDQKBgQDAbo6CxHj0iUr6mhGeISDqNvkFhVx/4urX
0VeW1huE08MEgwjfgiGhR2NA5K+3Wx56DqZrQByNHB1147bBuQ+oPaFaDobeOMvK
84IUZCDLdBlQod+OiRkEH7hBbO7TUhP/afD7DHWJMrYqrMm0Y9GNAby2ZwYwtQhg
S+vR0kYCsQKBgAUSbZZlbEutWAPUmtxNQCE9XQFKYcfuiF8z032wXC2djL5aztQA
jceFeekKq+snI6qBOAp2H0zI2QJ9oIs9p22/wzvo5Oi3zS+/Jv5Rh8AY25pxJPA1
4GSO8k/bxhvhMlwsfKC4HH474pXqsATWDWOHe2ctID/SSzbbdt1Q+n+FAoGAMXI3
HFLv4aYFpi9Ap6lLk+NcSZbjFdlxDtOz9gY+O/tN+TLSbNw7V/3H+zzICg1X33U0
PgrTS08WItzIcS7kXw63DzT8Ys2lUBkSK7su0hibCKUPlMiVrQGZjvY2yAYnLVJD
ob6p1P863+xWSAv+JIV1wEjoxks+Q8A+cEPfyYECgYAxnbbSKIiX+NIzOqExrOSm
y6o0Xaf+xKQNiYkSglV9JjlPBjyXeSIEM+2PmB6FxGjhmSKdO0+9fx+OUqcBg9iD
CjFf0y0bCwNvV3nWIfR5BzoZV4lXFwT9NIt4rb8YRQbBa3OtuAYDju70amvW1TiL
JnkhzopNaX5lN+U7ZZQ7sQ==
-----END PRIVATE KEY-----