From 9a4a633be607635cf9d7a6a6160357cffc35d1f0 Mon Sep 17 00:00:00 2001 From: TomIO Date: Thu, 21 Nov 2024 15:17:18 +0100 Subject: [PATCH] fix(main/neovim): turn nvim into a wrapper to fix dynamic linking This is required to make Android's dlopen() implementation resolve symbols exported by libluajit.so to Lua modules. Co-authored-by: Pip Cet closes #22328 --- packages/neovim/build.sh | 6 ++++++ packages/neovim/nvim-shim.sh | 9 +++++++++ 2 files changed, 15 insertions(+) create mode 100644 packages/neovim/nvim-shim.sh diff --git a/packages/neovim/build.sh b/packages/neovim/build.sh index fd3faaa4ec9758..f33afe8fe3fa12 100644 --- a/packages/neovim/build.sh +++ b/packages/neovim/build.sh @@ -83,6 +83,12 @@ termux_step_post_make_install() { # Tree-sitter grammars are packaged separately and installed into TERMUX_PREFIX/lib/tree_sitter. ln -s "${TERMUX_PREFIX}"/lib/tree_sitter "${TERMUX_PREFIX}"/share/nvim/runtime/parser + + # Move the `nvim` binary to $PREFIX/libexec + # and replace it with our LD_PRELOAD shim. + # See: packages/neovim/nvim-shim.sh for details. + mv "${TERMUX_PREFIX}"/bin/nvim "${TERMUX_PREFIX}"/libexec/nvim + install -m755 "$TERMUX_PKG_BUILDER_DIR/nvim-shim.sh" "${TERMUX_PREFIX}/bin/nvim" } termux_step_create_debscripts() { diff --git a/packages/neovim/nvim-shim.sh b/packages/neovim/nvim-shim.sh new file mode 100644 index 00000000000000..d34180f4fa3010 --- /dev/null +++ b/packages/neovim/nvim-shim.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh + +# For further details see: +# https://github.com/termux/termux-packages/issues/22328 +# https://github.com/termux/termux-packages/wiki/Common-porting-problems#android-dynamic-linker +# https://github.com/android/ndk/issues/201 +# +# Shim to properly expose LuaJIT runtime symbols to dynamically linked plugin modules +LD_PRELOAD="$LD_PRELOAD:libluajit.so" exec "$PREFIX/libexec/nvim" "$@"