summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/php.eselect.in.in47
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() {