From 20d5e36fe86322fa93b285bbe2c658f163368423 Mon Sep 17 00:00:00 2001 From: Peter Korsgaard Date: Sat, 24 Jan 2026 16:05:39 +0100 Subject: [PATCH] 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: add quotes to make shellcheck happy] Signed-off-by: Peter Korsgaard --- package/swig/swig-wrapper.in | 8 ++++++++ package/swig/swig.mk | 15 +++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 package/swig/swig-wrapper.in diff --git a/package/swig/swig-wrapper.in b/package/swig/swig-wrapper.in new file mode 100644 index 0000000000..61c885fc90 --- /dev/null +++ b/package/swig/swig-wrapper.in @@ -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" "$@" diff --git a/package/swig/swig.mk b/package/swig/swig.mk index ad585c3f97..71e5e05f96 100644 --- a/package/swig/swig.mk +++ b/package/swig/swig.mk @@ -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.