Hey! I recently did some ia64-hpux hacking in prefix, and i stumbled over alittle problem:
the native linker collects -L options on the command line, and python uses -L. while building. this results in . beeing in rpath. now when $PWD == $S, there is libpython-*.so, and executing the already installed python finds (through rpath ".") this local libpython. this (although binary exactly the same) refuses to load installed extensions (Fatal Python Error: ....). The problem was caused by the filter-bash-environment.py call in ebuild.sh, _only_ during the "test" phase seemingly. the attached patch fixes the problem for me - what do you think? I guess there are better ways to tackle the problem, but i needed to get this to work ;) Cheers, Markus
Only in portage.orig/bin: .ebuild.sh.swp diff -ru portage.orig/bin/ebuild.sh portage/bin/ebuild.sh --- portage.orig/bin/ebuild.sh 2009-12-14 10:18:06 +0100 +++ portage/bin/ebuild.sh 2009-12-14 14:45:55 +0100 @@ -1791,7 +1791,15 @@ " fi - EPYTHON= "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" + ( + # at least on _some_ platforms, RPATH may contain ".". now if merging + # python, and PWD at call-time of this filter is ${S}, it can be, that + # there is a ./libpython-x.x.so, which gets loaded. Even if the to-be- + # installed is binary identical to the already-installed one: this leads + # to "Fatal Python error: Interpreter not initialized (version mismatch?)" + cd "${T}" + EPYTHON= "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" + ) } # @FUNCTION: preprocess_ebuild_env @@ -2270,7 +2284,7 @@ # Save the env only for relevant phases. if ! hasq "$EBUILD_SH_ARGS" clean help info nofetch ; then umask 002 - save_ebuild_env | filter_readonly_variables > "$T/environment" + save_ebuild_env | filter_readonly_variables > "$T/environment" || exit $? chown ${PORTAGE_USER:-portage}:${PORTAGE_GROUP:-portage} "$T/environment" &>/dev/null chmod g+w "$T/environment" &>/dev/null fi