diff -ru baselayout-1.12.5.orig/etc/profile baselayout-1.12.5/etc/profile --- baselayout-1.12.5.orig/etc/profile 2009-03-24 08:18:37.000000000 +0100 +++ baselayout-1.12.5/etc/profile 2009-03-24 11:50:57.000000000 +0100 @@ -4,6 +4,40 @@ # environment for login shells. # +# +# for prefix-chaining, the very first thing to do is to load +# the profiles for all chained instances above. +# +# TODO: is it safe in any case to shell source make.conf? +# don't do any recursive expansion here. if the parent can +# use READONLY_EPREFIX's, it has to have the same profile as +# we have here, and thus it will source parents before +# evaluating anything from itself. +# +_ro_root=$(. "@GENTOO_PORTAGE_EPREFIX@"/etc/make.conf && echo $READONLY_EPREFIX) +_ro_deps=${_ro_root#*:} +_ro_root=${_ro_root%:*} +if [ -n "${_ro_root}" -a -f "${_ro_root}"/etc/profile ]; then + . "${_ro_root}"/etc/profile +fi + +# +# With prefix-chaining we want another set of variables that +# should be retained for all prefixes. for example it is ok +# to retain PKG_CONFIG_PATH if the parent of the chain can +# be used to resolve RDEPEND... +# +if [[ -n "${_ro_root}" ]]; then + _ro_chained_path_vars="PATH MANPATH" + + [[ ${_ro_deps} == *RDEPEND* ]] && + _ro_chained_path_vars="${_ro_chained_path_vars} PKG_CONFIG_PATH" + + for var in ${_ro_chained_path_vars}; do + eval "_ro_backupenv_paths_${var}=\${${var}}" + done +fi + # Load environment settings from profile.env, which is created by # env-update from the files in /etc/env.d if [ -e "@GENTOO_PORTAGE_EPREFIX@"/etc/profile.env ] ; then @@ -21,10 +55,17 @@ # It is intentional in the following line to use || instead of -o. # This way the evaluation can be short-circuited and calling whoami is # avoided. +# +# system directories are only appended if this prefix is the last +# one in a chain of prefixes (or the only prefix in the chain), so +# that they don't end up in the middle of multiple different prefix +# paths (profile is recursive now, see above!) if [ "$EUID" = "0" ] || [ "$USER" = "root" ] ; then - PATH="@GENTOO_PORTAGE_EPREFIX@/usr/sbin:@GENTOO_PORTAGE_EPREFIX@/usr/bin:@GENTOO_PORTAGE_EPREFIX@/sbin:@GENTOO_PORTAGE_EPREFIX@/bin:${ROOTPATH}:/usr/sbin:/usr/bin:/sbin:/bin" + PATH="@GENTOO_PORTAGE_EPREFIX@/usr/sbin:@GENTOO_PORTAGE_EPREFIX@/usr/bin:@GENTOO_PORTAGE_EPREFIX@/sbin:@GENTOO_PORTAGE_EPREFIX@/bin:${ROOTPATH}" + [[ -z "${_ro_root}" ]] && PATH="$PATH:/usr/sbin:/usr/bin:/sbin:/bin" else - PATH="@GENTOO_PORTAGE_EPREFIX@/usr/bin:@GENTOO_PORTAGE_EPREFIX@/bin:${PATH}:/usr/bin:/bin" + PATH="@GENTOO_PORTAGE_EPREFIX@/usr/bin:@GENTOO_PORTAGE_EPREFIX@/bin:${PATH}" + [[ -z "${_ro_root}" ]] && PATH="$PATH:/usr/bin:/bin" fi export PATH unset ROOTPATH @@ -63,3 +104,18 @@ fi done unset sh + +# +# finally chain the save variables for previous prefixes in the chain. +# +if [[ -n "${_ro_chained_path_vars}" ]]; then + for var in ${_ro_chained_path_vars}; do + eval "export ${var}=\${${var}}:\${_ro_backupenv_paths_${var}}" + eval "unset _ro_backupenv_paths_${var}" + done +fi + +unset _ro_root +unset _ro_deps +unset _ro_chained_path_vars +