From 276ea89986b05aedaa849587285bb4ab2c6bbd20 Mon Sep 17 00:00:00 2001 From: KalinaGabor Date: Sun, 1 Mar 2026 18:57:11 +0100 Subject: [PATCH] x86 UI and Playback ok --- .gitignore | 1 + build-webos.sh | 18 ++- extras/package/webos/package.sh | 273 +++++++++++++++++++++++++++++++- 3 files changed, 280 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 867904d707..35d0dc03f8 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ Frameworks # Ignore build dirs webos-package/ +webos-package-x86_64/ po/ vlc-webos-deploy-x86_64/ vlc-webos-deploy-qt-x86_64/ diff --git a/build-webos.sh b/build-webos.sh index f62d515ee6..fef6235c6f 100755 --- a/build-webos.sh +++ b/build-webos.sh @@ -33,13 +33,13 @@ else WEBOS_NATIVE_TOOLCHAIN="${WEBOS_NATIVE_TOOLCHAIN:-0}" fi DEFAULT_WEBOS_CONTRIB_BOOTSTRAP_FLAGS="--disable-disc --disable-sout --disable-basu --disable-flac --disable-vorbis --disable-fluid --disable-libaribcaption --disable-ass --disable-live555 --disable-harfbuzz --disable-vulkan-loader --disable-sidplay2 --disable-vncclient" -DEFAULT_WEBOS_CONFIGURE_EXTRA_FLAGS="--disable-libass --disable-libdrm --disable-qt --disable-vpx --disable-aom --disable-fluidsynth --disable-openapv" +DEFAULT_WEBOS_CONFIGURE_EXTRA_FLAGS="--disable-libass --disable-libdrm --disable-vpx --disable-aom --disable-fluidsynth --disable-openapv --disable-vdpau --disable-caca" WEBOS_CONTRIB_BOOTSTRAP_FLAGS="${WEBOS_CONTRIB_BOOTSTRAP_FLAGS:-$DEFAULT_WEBOS_CONTRIB_BOOTSTRAP_FLAGS}" WEBOS_CONFIGURE_EXTRA_FLAGS="${WEBOS_CONFIGURE_EXTRA_FLAGS:-$DEFAULT_WEBOS_CONFIGURE_EXTRA_FLAGS}" if [ "$WEBOS_PROFILE" = "x86_64" ]; then WEBOS_CONTRIB_BOOTSTRAP_FLAGS="${WEBOS_CONTRIB_BOOTSTRAP_FLAGS} --disable-ssh2" - WEBOS_CONFIGURE_EXTRA_FLAGS="${WEBOS_CONFIGURE_EXTRA_FLAGS} --disable-sftp" + WEBOS_CONFIGURE_EXTRA_FLAGS="${WEBOS_CONFIGURE_EXTRA_FLAGS} --disable-sftp --enable-qt" fi usage() { @@ -240,8 +240,18 @@ else SYSROOT="/" fi export PKG_CONFIG_SYSROOT_DIR="" -export PKG_CONFIG_LIBDIR="${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig:${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig" -export PKG_CONFIG_PATH="${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig" + HOST_MULTIARCH="" + if [ "$WEBOS_NATIVE_TOOLCHAIN" = "1" ] && command -v gcc >/dev/null 2>&1; then + HOST_MULTIARCH="$(gcc -print-multiarch 2>/dev/null || true)" + fi + + if [ "$WEBOS_NATIVE_TOOLCHAIN" = "1" ] && [ -n "$HOST_MULTIARCH" ]; then + export PKG_CONFIG_LIBDIR="${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig:/usr/lib/${HOST_MULTIARCH}/pkgconfig:${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig" + export PKG_CONFIG_PATH="${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig:/usr/lib/${HOST_MULTIARCH}/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig" + else + export PKG_CONFIG_LIBDIR="${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig:${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig" + export PKG_CONFIG_PATH="${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig" + fi export CPPFLAGS="${CPPFLAGS:-} -I${DEPS_PREFIX}/include -I${SYSROOT}/usr/include" if [ "$WEBOS_PROFILE" = "x86_64" ]; then export CFLAGS="${CFLAGS:-} -m64 -I${DEPS_PREFIX}/include" diff --git a/extras/package/webos/package.sh b/extras/package/webos/package.sh index efcb03498d..618f3689aa 100755 --- a/extras/package/webos/package.sh +++ b/extras/package/webos/package.sh @@ -8,7 +8,13 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" APP_ID="${WEBOS_APP_ID:-org.videolan.vlc.webos}" APP_VERSION="${WEBOS_APP_VERSION:-1.0.0}" TARGET_ARCH="${WEBOS_TARGET_ARCH:-arm}" -DEPLOY_DIR="${WEBOS_DEPLOY_DIR:-$TOP_DIR/vlc-webos-deploy}" +if [ -n "${WEBOS_DEPLOY_DIR:-}" ]; then + DEPLOY_DIR="$WEBOS_DEPLOY_DIR" +elif [ "$TARGET_ARCH" = "x86_64" ]; then + DEPLOY_DIR="$TOP_DIR/vlc-webos-deploy-x86_64" +else + DEPLOY_DIR="$TOP_DIR/vlc-webos-deploy" +fi OUT_DIR="${WEBOS_OUTPUT_DIR:-$TOP_DIR/webos-package}" PKG_WORK_DIR="${WEBOS_PACKAGE_DIR:-$TOP_DIR/webos-package/stage}" @@ -62,7 +68,7 @@ echo "VLC_ROOT: $VLC_ROOT" echo "PLUGIN_SRC: $VLC_PLUGIN_SRC" rm -rf "$PKG_WORK_DIR" -mkdir -p "$PKG_WORK_DIR/bin" "$PKG_WORK_DIR/vlc" "$PKG_WORK_DIR/libexec/vlc" +mkdir -p "$PKG_WORK_DIR/bin" "$PKG_WORK_DIR/vlc" "$PKG_WORK_DIR/libexec/vlc" "$PKG_WORK_DIR/share/vlc" cat > "$PKG_WORK_DIR/appinfo.json" </dev/null | awk '/SONAME/ { print $2; exit }')" + if [ -n "$soname" ] && [ "$soname" != "$real_base" ] && [ ! -e "$PKG_WORK_DIR/vlc/lib/$soname" ]; then + ln -s "$real_base" "$PKG_WORK_DIR/vlc/lib/$soname" + fi +} + +bundle_runtime_closure() { + local pending done current dep base + + pending="$(mktemp)" + done="$(mktemp)" + printf '%s\n' "$@" > "$pending" + + while [ -s "$pending" ]; do + current="$(head -n 1 "$pending")" + sed -i '1d' "$pending" + + [ -f "$current" ] || continue + grep -Fxq "$current" "$done" && continue + echo "$current" >> "$done" + + ldd "$current" 2>/dev/null | awk '/=> \/.*/ { print $3 }' | while IFS= read -r dep; do + [ -f "$dep" ] || continue + base="$(basename "$dep")" + case "$base" in + ld-linux-*.so*|libc.so.*|libm.so.*|libdl.so.*|librt.so.*|libpthread.so.*|libanl.so.*) + continue + ;; + esac + + copy_host_lib "$dep" + if ! grep -Fxq "$dep" "$done"; then + echo "$dep" >> "$pending" + fi + done + done + + rm -f "$pending" "$done" +} + +if [ "$TARGET_ARCH" = "x86_64" ]; then + HOST_MULTIARCH="$(gcc -print-multiarch 2>/dev/null || true)" + [ -n "$HOST_MULTIARCH" ] || HOST_MULTIARCH="x86_64-linux-gnu" + + mkdir -p "$PKG_WORK_DIR/qt6" + if [ -d "/usr/lib/${HOST_MULTIARCH}/qt6/plugins" ]; then + cp -a "/usr/lib/${HOST_MULTIARCH}/qt6/plugins" "$PKG_WORK_DIR/qt6/" + fi + if [ -d "/usr/lib/${HOST_MULTIARCH}/qt6/qml" ]; then + cp -a "/usr/lib/${HOST_MULTIARCH}/qt6/qml" "$PKG_WORK_DIR/qt6/" + rm -rf "$PKG_WORK_DIR/qt6/qml/QtTest" + fi + + rm -f \ + "$PKG_WORK_DIR/qt6/plugins/imageformats/libqjpeg.so" \ + "$PKG_WORK_DIR/qt6/plugins/imageformats/libqtiff.so" \ + "$PKG_WORK_DIR/qt6/plugins/imageformats/libqmng.so" + + QT_INPUTS="" + for candidate in \ + "$VLC_ROOT/lib/vlc/plugins/gui/libqt_plugin.so" \ + "$VLC_ROOT/lib/vlc/plugins/gui/libqt_wayland_plugin.so" \ + "$PKG_WORK_DIR/qt6/qml/QtQuick/Templates/libqtquicktemplates2plugin.so" \ + "$PKG_WORK_DIR/qt6/qml/QtQuick/Controls/libqtquickcontrols2plugin.so" \ + "$PKG_WORK_DIR/qt6/qml/QtQuick/Controls/Basic/libqtquickcontrols2basicstyleplugin.so" \ + "$PKG_WORK_DIR/qt6/qml/QtQuick/Controls/Fusion/libqtquickcontrols2fusionstyleplugin.so" \ + "$PKG_WORK_DIR/qt6/qml/QtQuick/Window/libquickwindowplugin.so" \ + "$PKG_WORK_DIR/qt6/plugins/platforms/libqwayland-egl.so" \ + "$PKG_WORK_DIR/qt6/plugins/platforms/libqwayland-generic.so" \ + "$PKG_WORK_DIR/qt6/plugins/platforms/libqxcb.so"; do + if [ -f "$candidate" ]; then + QT_INPUTS="$QT_INPUTS $candidate" + fi + done + + if [ -f "/usr/lib/${HOST_MULTIARCH}/libidn.so.12" ]; then + copy_host_lib "/usr/lib/${HOST_MULTIARCH}/libidn.so.12" + fi + + for xlib in \ + "/usr/lib/${HOST_MULTIARCH}/libX11.so.6" \ + "/usr/lib/${HOST_MULTIARCH}/libXext.so.6"; do + if [ -f "$xlib" ]; then + copy_host_lib "$xlib" + fi + done + + if [ -f "/usr/lib/${HOST_MULTIARCH}/libvdpau.so.1" ]; then + copy_host_lib "/usr/lib/${HOST_MULTIARCH}/libvdpau.so.1" + fi + + for qtlib in \ + "/usr/lib/${HOST_MULTIARCH}/libQt6QuickLayouts.so.6" \ + "/usr/lib/${HOST_MULTIARCH}/libQt6QuickTemplates2.so.6" \ + "/usr/lib/${HOST_MULTIARCH}/libQt6QuickControls2.so.6" \ + "/usr/lib/${HOST_MULTIARCH}/libQt6QuickControls2Impl.so.6" \ + "/usr/lib/${HOST_MULTIARCH}/libQt6QuickControls2BasicStyleImpl.so.6" \ + "/usr/lib/${HOST_MULTIARCH}/libQt6Svg.so.6"; do + if [ -f "$qtlib" ]; then + copy_host_lib "$qtlib" + fi + done + + if [ -n "$QT_INPUTS" ]; then + # shellcheck disable=SC2086 + bundle_runtime_closure $QT_INPUTS + fi + + rm -f "$PKG_WORK_DIR/vlc/lib/libEGL.so"* +fi + +cat > "$PKG_WORK_DIR/bin/qt.conf" <<'EOF' +[Paths] +Prefix=.. +Plugins=qt6/plugins +QmlImports=qt6/qml +Libraries=vlc/lib +EOF + if [ -x "$PKG_WORK_DIR/libexec/vlc/vlc-cache-gen" ]; then "$PKG_WORK_DIR/libexec/vlc/vlc-cache-gen" "$PKG_WORK_DIR/vlc/plugins" >/dev/null 2>&1 || true fi @@ -114,27 +321,77 @@ fi cat > "$PKG_WORK_DIR/run.sh" <<'EOF' #!/bin/sh APP_DIR="/media/developer/apps/usr/palm/applications/__WEBOS_APP_ID__" -export LD_LIBRARY_PATH="${APP_DIR}/vlc/lib:${LD_LIBRARY_PATH}" +SYS_LIB_PATH="/usr/lib/x86_64-linux-gnu" +export LD_LIBRARY_PATH="${APP_DIR}/vlc/lib:${SYS_LIB_PATH}:${LD_LIBRARY_PATH}" export VLC_PLUGIN_PATH="${APP_DIR}/vlc/plugins" export VLC_LIBEXEC_PATH="${APP_DIR}/libexec/vlc" - -if [ -z "${XDG_RUNTIME_DIR}" ] && [ -S /tmp/xdg/wayland-0 ]; then +export VLC_DATA_PATH="${APP_DIR}/share/vlc" +export QT_PLUGIN_PATH="${APP_DIR}/qt6/plugins" +export QT_QPA_PLATFORM_PLUGIN_PATH="${APP_DIR}/qt6/plugins/platforms" +export QML2_IMPORT_PATH="${APP_DIR}/qt6/qml" +export QT_QUICK_CONTROLS_STYLE=Basic +export QT_NO_SETLOCALE=1 +export LANG=C.UTF-8 +export LC_ALL=C.UTF-8 +export QT_WAYLAND_SHELL_INTEGRATION=xdg-shell +export VLC_QT_SKIP_CHECK=1 +export VLC_VOUT="${VLC_VOUT:-wl_shm,wl_shell,xdg_shell,gles2,gl,any}" + +if [ -d /tmp/xdg ]; then export XDG_RUNTIME_DIR=/tmp/xdg fi -if [ -z "${WAYLAND_DISPLAY}" ] && [ -S "${XDG_RUNTIME_DIR}/wayland-0" ]; then +if [ -S "${XDG_RUNTIME_DIR}/wayland-0" ]; then export WAYLAND_DISPLAY=wayland-0 fi +export QT_QPA_PLATFORM=wayland + cd "$APP_DIR" +LOG_FILE="/tmp/vlc-sam-launch.log" +if [ "${1#\{}" != "$1" ]; then + { + echo "===== $(date '+%F %T') run.sh launch =====" + echo "args: $*" + } >> "$LOG_FILE" + exec >> "$LOG_FILE" 2>&1 +fi + +run_vlc() { + if [ -x ./bin/vlc ]; then + if [ ! -e /lib64/ld-linux-x86-64.so.2 ] && [ -x /lib/ld-linux-x86-64.so.2 ]; then + for helper in vlc-preparser vlc-cache-gen vlc-qt-check; do + if [ -x "${APP_DIR}/libexec/vlc/${helper}" ]; then + if [ "$(head -n 1 "${APP_DIR}/libexec/vlc/${helper}" 2>/dev/null || true)" != "#!/bin/sh" ]; then + mv -f "${APP_DIR}/libexec/vlc/${helper}" "${APP_DIR}/libexec/vlc/${helper}.real" + fi + + if [ ! -x "${APP_DIR}/libexec/vlc/${helper}.real" ]; then + continue + fi + + cat > "${APP_DIR}/libexec/vlc/${helper}" <