commit:     91160d1d55182b52650910472288e283d55f2811
Author:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
AuthorDate: Fri Jan  8 17:14:51 2016 +0000
Commit:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
CommitDate: Fri Jan  8 17:14:51 2016 +0000
URL:        https://gitweb.gentoo.org/proj/eselect-php.git/commit/?id=91160d1d

Split sapi_active_link_path() into sapi_active_link_{names,dir}().

In preparation for refactoting the set_foo() functions, refactor the
function that gets the (one) active link path into two functions that
get the (one) active link directory and (more than one, potentially)
active link names.

 src/php.eselect.in | 89 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 77 insertions(+), 12 deletions(-)

diff --git a/src/php.eselect.in b/src/php.eselect.in
index 72e6610..15792f3 100644
--- a/src/php.eselect.in
+++ b/src/php.eselect.in
@@ -8,13 +8,71 @@ MAINTAINER="php-b...@gentoo.org"
 
 MODULES="cli apache2 fpm cgi phpdbg"
 
+#
+# Output a list of link names (not full paths) belonging to the given
+# SAPI. These need to be updated when the user changes his active
+# target.
+#
+# INPUT:
+#
+# The name of a SAPI.
+#
+# OUTPUT:
+#
+# A space-separated list of link names belonging to the given
+# SAPI. For example, the "cli" SAPI has three link names: "php phpize
+# php-config". The "cgi" sapi has only "php-cgi".
+#
+sapi_active_link_names() {
+       local sapi="${1}"
+
+       case "${sapi}" in
+               apache2) echo "mod_php.so" ;;
+               cli)     echo "php phpize php-config" ;;
+               fpm)     echo "php-fpm" ;;
+               cgi)     echo "php-cgi" ;;
+               dbg)     echo "phpdbg"  ;;
+        *)       die "invalid SAPI name: ${sapi}" ;;
+       esac
+}
+
+
+# Each SAPI provides a few (one or more) "active" links in a
+# predictable location. And fortunately that location is fixed for a
+# given SAPI. For example, the "cgi" SAPI has its sole active symlink,
+# /usr/bin/php-cgi, in /usr/bin. Given a SAPI name, we return the
+# directory where that SAPI's links are located.
+#
+# INPUT:
+#
+# The name of a SAPI.
+#
+# OUTPUT:
+#
+# The directory in which the given SAPI's symlinks are located. For
+# example, the "cli" sapi has its three executable links in "/usr/bin".
+#
+sapi_active_link_dir() {
+       local sapi="${1}"
+       local bin_dir="${EROOT}/usr/bin"
+
+       case "${sapi}" in
+               apache2) echo "${EROOT}$(get_active_libdir)/apache2/modules" ;;
+               cli)     echo "${bin_dir}" ;;
+               fpm)     echo "${bin_dir}" ;;
+               cgi)     echo "${bin_dir}" ;;
+               dbg)     echo "${bin_dir}" ;;
+        *)       die "invalid SAPI name: ${sapi}" ;;
+       esac
+}
+
 
 # Each SAPI provides at least one "active" link in a predictable
 # location.  For example, the "cgi" SAPI has its active symlink at
 # /usr/bin/php-cgi. Given a SAPI name we return the path to that link.
 #
-# Note that the "cli" SAPI actually provides three executables -- we
-# return the path for only one. This is an API wart, not by design.
+# Note that SAPIs may provide more than one active link -- we return
+# the path for only the first.
 #
 # INPUT:
 #
@@ -27,16 +85,11 @@ MODULES="cli apache2 fpm cgi phpdbg"
 #
 sapi_active_link_path() {
        local sapi="${1}"
-       local bin_dir="${EROOT}/usr/bin/"
-       case "${sapi}" in
-               apache2)
-                        echo 
"${EROOT}$(get_active_libdir)/apache2/modules/mod_php.so" ;;
-               cli) echo "${bin_dir}/php"     ;;
-               fpm) echo "${bin_dir}/php-fpm" ;;
-               cgi) echo "${bin_dir}/php-cgi" ;;
-               dbg) echo "${bin_dir}/phpdbg"  ;;
-        *)   die "invalid SAPI name: ${sapi}" ;;
-       esac
+       local dir=$(sapi_active_link_dir "${sapi}")
+       local link_names=( $(sapi_active_link_names "${sapi}") )
+
+       # Use the first link name only.
+       echo "${dir}/${link_names[0]}"
 }
 
 
@@ -319,6 +372,18 @@ list_phpdbg() {
        list_sapi dbg
 }
 
+
+set_sapi() {
+       local sapi="${1}"
+       local target="${2}"
+       local target_name=$(resolv_target "${sapi}" "${target}")
+       [[ -z $t ]] && die -q "invalid target ${target} for SAPI ${sapi}"
+
+       @LN_S@ --force "../..$(get_active_libdir)/${t}/bin/php-cgi" \
+           "$(sapi_active_link_path cgi)" || \
+               die -q "failed to create active php-cgi symlink"
+}
+
 set_apache2() {
        local active_symlink libdir major target=$(resolv_target apache2 $1)
        active_symlink="$(sapi_active_link_path apache2)"

Reply via email to