init
This commit is contained in:
@@ -0,0 +1,40 @@
|
|||||||
|
pkgbase = nipaplay-reload
|
||||||
|
pkgdesc = A modern cross-platform local danmaku video player
|
||||||
|
pkgver = 1.11.2
|
||||||
|
pkgrel = 1
|
||||||
|
url = https://github.com/AimesSoft/NipaPlay-Reload
|
||||||
|
arch = x86_64
|
||||||
|
arch = aarch64
|
||||||
|
license = MIT
|
||||||
|
makedepends = git
|
||||||
|
makedepends = flutter
|
||||||
|
makedepends = flutter-target-linux
|
||||||
|
makedepends = flutter-target-web
|
||||||
|
makedepends = rustup
|
||||||
|
makedepends = java-environment
|
||||||
|
makedepends = clang
|
||||||
|
makedepends = cmake
|
||||||
|
makedepends = ninja
|
||||||
|
makedepends = patchelf
|
||||||
|
makedepends = pkgconf
|
||||||
|
makedepends = unzip
|
||||||
|
depends = glibc
|
||||||
|
depends = gcc-libs
|
||||||
|
depends = gtk3
|
||||||
|
depends = mpv
|
||||||
|
depends = sqlite
|
||||||
|
depends = libkeybinder3
|
||||||
|
depends = libayatana-appindicator
|
||||||
|
depends = libepoxy
|
||||||
|
optdepends = xdg-utils: open external links in the default browser
|
||||||
|
provides = nipaplay
|
||||||
|
conflicts = nipaplay
|
||||||
|
options = !strip
|
||||||
|
options = !debug
|
||||||
|
options = !lto
|
||||||
|
source = nipaplay-reload::git+https://github.com/AimesSoft/NipaPlay-Reload.git#tag=v1.11.2
|
||||||
|
source = media-kit::git+https://github.com/AimesSoft/media-kit.git
|
||||||
|
sha256sums = SKIP
|
||||||
|
sha256sums = SKIP
|
||||||
|
|
||||||
|
pkgname = nipaplay-reload
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
[nipaplay-reload]
|
||||||
|
source = "github"
|
||||||
|
github = "AimesSoft/NipaPlay-Reload"
|
||||||
|
prefix = "v"
|
||||||
|
use_max_release = true
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
Copyright (C) 2026 by Uyanide pywang0608@foxmail.com
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
# Maintainer: Uyanide <pywang0608@foxmail.com>
|
||||||
|
|
||||||
|
pkgname=nipaplay-reload
|
||||||
|
pkgver=1.11.2
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc='A modern cross-platform local danmaku video player'
|
||||||
|
arch=('x86_64' 'aarch64')
|
||||||
|
url='https://github.com/AimesSoft/NipaPlay-Reload'
|
||||||
|
license=('MIT')
|
||||||
|
provides=('nipaplay')
|
||||||
|
conflicts=('nipaplay')
|
||||||
|
depends=(
|
||||||
|
'glibc'
|
||||||
|
'gcc-libs'
|
||||||
|
'gtk3'
|
||||||
|
'mpv' # libmpv, media_kit's playback backend; pulls in libass/ffmpeg
|
||||||
|
'sqlite' # libsqlite3.so, dlopen'ed
|
||||||
|
'libkeybinder3' # hotkey_manager_linux
|
||||||
|
'libayatana-appindicator' # tray_manager
|
||||||
|
'libepoxy'
|
||||||
|
)
|
||||||
|
# Note: upstream's linux/CMakeLists.txt does pass -lmimalloc, but the Flutter runner
|
||||||
|
# objects reference no allocator symbol at all, so Arch's default -Wl,--as-needed drops
|
||||||
|
# it again. The binary is able to run on glibc malloc, hence no mimalloc dependency here.
|
||||||
|
makedepends=(
|
||||||
|
'git'
|
||||||
|
'flutter'
|
||||||
|
'flutter-target-linux'
|
||||||
|
'flutter-target-web' # embedded web remote UI; the build script skips it when absent
|
||||||
|
'rustup' # cargokit hard-requires `rustup run <toolchain> cargo build`
|
||||||
|
'java-environment' # the jni plugin's linux CMake needs the JNI headers
|
||||||
|
'clang'
|
||||||
|
'cmake'
|
||||||
|
'ninja'
|
||||||
|
'patchelf' # strip the $srcdir flutter bakes into each plugin's DT_RUNPATH
|
||||||
|
'pkgconf'
|
||||||
|
'unzip'
|
||||||
|
)
|
||||||
|
optdepends=(
|
||||||
|
'xdg-utils: open external links in the default browser'
|
||||||
|
)
|
||||||
|
# Flutter/Dart AOT output and the bundled .so files must not be post-processed by makepkg
|
||||||
|
options=('!strip' '!debug' '!lto')
|
||||||
|
source=(
|
||||||
|
"${pkgname}::git+${url}.git#tag=v${pkgver}"
|
||||||
|
'media-kit::git+https://github.com/AimesSoft/media-kit.git'
|
||||||
|
)
|
||||||
|
sha256sums=('SKIP'
|
||||||
|
'SKIP')
|
||||||
|
|
||||||
|
prepare() {
|
||||||
|
cd "${pkgname}"
|
||||||
|
|
||||||
|
git submodule init third_party/media-kit-upstream
|
||||||
|
git config submodule.third_party/media-kit-upstream.url "${srcdir}/media-kit"
|
||||||
|
git -c protocol.file.allow=always submodule update third_party/media-kit-upstream
|
||||||
|
|
||||||
|
# Restore media_kit's isolated EGL context; this fork reuses Flutter's context
|
||||||
|
# instead, which blue-screens the video area on NVIDIA GPUs.
|
||||||
|
# https://github.com/AimesSoft/NipaPlay-Reload/pull/798
|
||||||
|
local _mkv_upstream='third_party/media-kit-upstream/media_kit_video/linux'
|
||||||
|
cp "${_mkv_upstream}/video_output.cc" packages/media_kit_video/linux/video_output.cc
|
||||||
|
cp "${_mkv_upstream}/texture_gl.cc" packages/media_kit_video/linux/texture_gl.cc
|
||||||
|
|
||||||
|
# The desktop file name disagrees with appdata's <launchable>
|
||||||
|
# (MCDFsteve vs MCDFSteve); settle on the AppStream ID.
|
||||||
|
mv assets/linux/io.github.MCDFsteve.NipaPlay-Reload.desktop \
|
||||||
|
assets/linux/io.github.MCDFSteve.NipaPlay-Reload.desktop
|
||||||
|
sed -i \
|
||||||
|
-e "s|^Exec=.*|Exec=${pkgname} %f|" \
|
||||||
|
-e 's|^Icon=.*|Icon=io.github.MCDFSteve.NipaPlay-Reload|' \
|
||||||
|
assets/linux/io.github.MCDFSteve.NipaPlay-Reload.desktop
|
||||||
|
|
||||||
|
flutter pub get
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cd "${pkgname}"
|
||||||
|
|
||||||
|
export FLUTTER_SUPPRESS_ANALYTICS=true
|
||||||
|
# Match upstream CI: fvp takes its deps from the latest mdk-sdk release
|
||||||
|
export FVP_DEPS_URL='https://github.com/wang-bin/mdk-sdk/releases/latest/download/'
|
||||||
|
export FVP_DEPS_LATEST=1
|
||||||
|
|
||||||
|
# Build the embedded web remote UI into assets/web/ (the script degrades on failure)
|
||||||
|
bash build_and_copy_web.sh
|
||||||
|
|
||||||
|
flutter build linux --release
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd "${pkgname}"
|
||||||
|
|
||||||
|
local _flutter_arch
|
||||||
|
case "${CARCH}" in
|
||||||
|
x86_64) _flutter_arch='x64' ;;
|
||||||
|
aarch64) _flutter_arch='arm64' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# A source build has no reason to live in /opt; use /usr/lib as usual
|
||||||
|
install -dm755 "${pkgdir}/usr/lib/${pkgname}"
|
||||||
|
cp -a "build/linux/${_flutter_arch}/release/bundle/." "${pkgdir}/usr/lib/${pkgname}/"
|
||||||
|
|
||||||
|
find "${pkgdir}/usr/lib/${pkgname}" -type d -exec chmod 755 {} +
|
||||||
|
find "${pkgdir}/usr/lib/${pkgname}" -type f -exec chmod 644 {} +
|
||||||
|
find "${pkgdir}/usr/lib/${pkgname}" -name '*.so*' -type f -exec chmod 755 {} +
|
||||||
|
chmod 755 "${pkgdir}/usr/lib/${pkgname}/NipaPlay"
|
||||||
|
|
||||||
|
# Unlike DT_RPATH, DT_RUNPATH is not inherited by the libraries the main binary
|
||||||
|
# loads, so every .so has to locate its own siblings. Two spots get this wrong:
|
||||||
|
# 1. flutter bakes $srcdir straight into each plugin's RUNPATH, and none of the
|
||||||
|
# 14 plugins carry $ORIGIN at all -- librust_lib_nipaplay_plugin.so can only
|
||||||
|
# find librust_lib_nipaplay.so below $srcdir;
|
||||||
|
# 2. mdk-sdk's libffmpeg.so.8 has no RUNPATH whatsoever and ends up loading the
|
||||||
|
# system libc++.so.1 (not a base package on Arch) even though the bundle
|
||||||
|
# ships one of its own.
|
||||||
|
# Prepend $ORIGIN to every ELF under lib/, keeping the non-$srcdir entries.
|
||||||
|
local _elf _entry _rpath
|
||||||
|
while IFS= read -r -d '' _elf; do
|
||||||
|
_rpath='$ORIGIN'
|
||||||
|
while IFS= read -r _entry; do
|
||||||
|
[[ -z ${_entry} || ${_entry} == '$ORIGIN' || ${_entry} == "${srcdir}"* ]] && continue
|
||||||
|
_rpath+=":${_entry}"
|
||||||
|
done < <(patchelf --print-rpath "${_elf}" | tr ':' '\n')
|
||||||
|
patchelf --set-rpath "${_rpath}" "${_elf}"
|
||||||
|
done < <(find "${pkgdir}/usr/lib/${pkgname}/lib" -type f -name '*.so*' -print0)
|
||||||
|
|
||||||
|
# The binary's RUNPATH is $ORIGIN/lib, and $ORIGIN expands to the resolved real
|
||||||
|
# path, so putting a symlink in /usr/bin is safe
|
||||||
|
install -dm755 "${pkgdir}/usr/bin"
|
||||||
|
ln -s "/usr/lib/${pkgname}/NipaPlay" "${pkgdir}/usr/bin/${pkgname}"
|
||||||
|
|
||||||
|
install -Dm644 assets/linux/io.github.MCDFSteve.NipaPlay-Reload.desktop \
|
||||||
|
-t "${pkgdir}/usr/share/applications"
|
||||||
|
install -Dm644 assets/linux/io.github.MCDFSteve.NipaPlay-Reload.appdata.xml \
|
||||||
|
-t "${pkgdir}/usr/share/metainfo"
|
||||||
|
install -Dm644 assets/images/logo512.png \
|
||||||
|
"${pkgdir}/usr/share/icons/hicolor/512x512/apps/io.github.MCDFSteve.NipaPlay-Reload.png"
|
||||||
|
install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user