diff options
-rw-r--r-- | src/php.eselect.in.in | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/src/php.eselect.in.in b/src/php.eselect.in.in index 7e52f53..63b9d42 100644 --- a/src/php.eselect.in.in +++ b/src/php.eselect.in.in @@ -173,23 +173,42 @@ parse_target_major_version() { esac } +# Remove dead active symlinks for the given SAPI. +# +# If a symlink for an SAPI is dead, then that SAPI is at least +# partially broken. For example, if the symlink to php-cgi is dead, +# then CGI just isn't going to work -- the SAPI is broken. It +# therefore makes sense to run update() after we find and remove any +# broken links. The update at least has the potential to leave things +# working. +# +# There is one potential caveat to that approach, for SAPIs with more +# than one active symlink. What if "phpize" is broken but "php" is OK? +# (Forget for the moment how that might happen...). Do we want to +# update() the entire SAPI because one of the symlinks is dead? +# Answer: I guess. +# +# INPUT: +# +# The name of the SAPI to clean up. +# +# OUTPUT: +# +# If any symlinks are removed, that fact will be announced. If an +# update occurs, that will be noted as well +# cleanup_sapi() { local sapi="${1}" - local l="${sapi}_link" - local link=${!l} - if [[ -L $link && ! -e $link ]] ; then - echo -n "Broken link for ${sapi}" - if update_sapi $1 ; then - echo ", updated version to $(get_sapi_active_target "${sapi}")" - return - else - rm $link || die "failed to remove ${link}" - - return - fi - fi + local link_dir=$(sapi_active_link_dir "${sapi}") - return 1 + for link_name in $(sapi_active_link_names "${sapi}"); do + local link_path="${link_dir}/${link_name}" + if [[ -L "${link_path}" && ! -e "${link_path}" ]] ; then + rm -f "${link_path}" || die "failed to remove ${link_path}" + echo "Removed broken symlink ${link_path}." + update_sapi "${sapi}" # Try to fix it. + fi + done } update_sapi() { |