package/swig: add host-swig wrapper script

Swig has a compiled in absolute path to its data files, which can be
overridden using the SWIG_LIB environment variable:

https://github.com/swig/swig/blob/v4.1.1/Source/Modules/main.cxx#L931-L945

This unfortunately means that host-swig misbehaves when used in the SDK, as
this points to the ${HOST_DIR}/bin of the build, which may not be available
when the SDK is used.

The issue was reported upstream but rejected in
https://github.com/swig/swig/issues/253, so instead add a wrapper script
which calculates a sensible SWIG_LIB relative to the wrapper location unless
SWIG_LIB is set, similar to how we do it for E.G. gcc or pkgconf.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
[Peter: add quotes to make shellcheck happy]
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
Peter Korsgaard
2026-01-24 16:05:39 +01:00
parent febdbea58b
commit 20d5e36fe8
2 changed files with 23 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
#!/bin/sh
# wrapper to make swig relocatable
if [ -z "${SWIG_LIB}" ]; then
export SWIG_LIB="${0%/*}/../share/swig/@SWIG_VERSION@"
fi
exec "${0}.br_real" "$@"

View File

@@ -15,6 +15,21 @@ HOST_SWIG_CONF_OPTS = \
SWIG_LICENSE = GPL-3.0+, BSD-2-Clause, BSD-3-Clause
SWIG_LICENSE_FILES = LICENSE LICENSE-GPL LICENSE-UNIVERSITIES
# Swig has a compiled in absolute path to its data files, so it does
# not work when copied somewhere else for the SDK. Issue was reported
# upstream but rejected in https://github.com/swig/swig/issues/253 so
# instead add a wrapper to work around this
define HOST_SWIG_INSTALL_WRAPPER
mv -f $(HOST_DIR)/bin/swig $(HOST_DIR)/bin/swig.br_real
$(INSTALL) -m 0755 -D package/swig/swig-wrapper.in \
$(HOST_DIR)/bin/swig
$(SED) 's,@SWIG_VERSION@,$(SWIG_VERSION),g' \
$(HOST_DIR)/bin/swig
endef
HOST_SWIG_POST_INSTALL_HOOKS += HOST_SWIG_INSTALL_WRAPPER
# CMake looks first at swig3.0, then swig2.0 and then swig. However,
# when doing the search, it will look into the PATH for swig2.0 first,
# and then for swig.