From 7d1b203d06408f9dcc360095b46b8e73e870ee3c Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sat, 28 Jan 2017 00:11:08 -0800 Subject: Add install wrapper ... to work around Gentoo's wrapper idiosyncrasy. Signed-off-by: Alexey Neyman diff --git a/scripts/crosstool-NG.sh.in b/scripts/crosstool-NG.sh.in index 41c3bcc..b39dee4 100644 --- a/scripts/crosstool-NG.sh.in +++ b/scripts/crosstool-NG.sh.in @@ -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}" diff --git a/scripts/override/install b/scripts/override/install new file mode 100644 index 0000000..e3954fb --- /dev/null +++ b/scripts/override/install @@ -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@ "$@" -- cgit v0.10.2-6-g49f6