mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2025-01-18 10:46:26 +00:00
Add install wrapper
... to work around Gentoo's wrapper idiosyncrasy. Signed-off-by: Alexey Neyman <stilor@att.net>
This commit is contained in:
parent
a08a4c4b88
commit
7d1b203d06
@ -116,8 +116,12 @@ cat "${CT_LIB_DIR}/paths.sh" |while read trash line; do
|
||||
tmpl="${CT_LIB_DIR}/scripts/override/__default"
|
||||
fi
|
||||
CT_DoLog DEBUG "Creating script-override for '${tool}' -> '${path}' using '${tmpl}' template"
|
||||
${sed} -r -e "s#@CONFIG_SHELL@#${CT_CONFIG_SHELL}#g" \
|
||||
-e "s#@TOOL_PATH@#${path}#g" "${tmpl}" > "${CT_TOOLS_OVERRIDE_DIR}/bin/${tool}"
|
||||
CT_DoExecLog ALL cp "${tmpl}" "${CT_TOOLS_OVERRIDE_DIR}/bin/${tool}"
|
||||
CT_DoExecLog ALL ${sed} -i -r \
|
||||
-e "s#@CONFIG_SHELL@#${CT_CONFIG_SHELL}#g" \
|
||||
-e "s#@TOOL_PATH@#${path}#g" \
|
||||
-e "s#@TOOLS_OVERRIDE_DIR@#${CT_TOOLS_OVERRIDE_DIR}#g" \
|
||||
"${CT_TOOLS_OVERRIDE_DIR}/bin/${tool}"
|
||||
CT_DoExecLog ALL chmod 700 "${CT_TOOLS_OVERRIDE_DIR}/bin/${tool}"
|
||||
done
|
||||
export PATH="${CT_TOOLS_OVERRIDE_DIR}/bin:${PATH}"
|
||||
|
35
scripts/override/install
Normal file
35
scripts/override/install
Normal file
@ -0,0 +1,35 @@
|
||||
#!@CONFIG_SHELL@
|
||||
|
||||
# Do the most common case first
|
||||
if [ -z "${__PORTAGE_HELPER_PATH}" ]; then
|
||||
exec @TOOL_PATH@ "$@"
|
||||
fi
|
||||
|
||||
# Not so simple case: Gentoo uses *two* wrappers around install script
|
||||
# to deal with extended attributes:
|
||||
# - /usr/lib/portage/python*/ebuild-helpers/xattr/install
|
||||
# This sets __PORTAGE_HELPER_PATH (see the check above) and
|
||||
# invokes either C- or Python-based wrapper (they do the same
|
||||
# thing anyway). E.g., let it be /usr/bin/install-xattrs...
|
||||
# - /usr/bin/install-xattrs
|
||||
# This now analyzes $PATH and invokes 'install' in the first directory
|
||||
# in $PATH where it is found, but not the __PORTAGE_HELPER_PATH
|
||||
# This scheme breaks if we interject another install wrapper, resulting
|
||||
# in a fork bomb. Hence, if we detected a loop, we need to remove our
|
||||
# own directory from $PATH and try again. Ironically, the very code below
|
||||
# based on that portage helper.
|
||||
IFS=:
|
||||
set -f
|
||||
path=
|
||||
for x in ${PATH}; do
|
||||
case "${x}" in
|
||||
@TOOLS_OVERRIDE_DIR@/bin) continue;;
|
||||
esac
|
||||
if test -n "${path}"; then
|
||||
path="${path}:${x}"
|
||||
else
|
||||
path="${x}"
|
||||
fi
|
||||
done
|
||||
PATH="${path}"
|
||||
exec @TOOL_PATH@ "$@"
|
Loading…
Reference in New Issue
Block a user