commit:     af7dba769693a706174ea2177ff7fde23eb8a394
Author:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 10 14:48:22 2021 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Tue Aug 10 16:26:06 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=af7dba76

dev-db/mariadb: fix parameter parsing in pkg_config

Bug: https://bugs.gentoo.org/801898
Package-Manager: Portage-3.0.21, Repoman-3.0.3
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 dev-db/mariadb/mariadb-10.2.40.ebuild | 25 ++++++++++++++++++++-----
 dev-db/mariadb/mariadb-10.3.31.ebuild | 25 ++++++++++++++++++++-----
 dev-db/mariadb/mariadb-10.4.21.ebuild | 25 ++++++++++++++++++++-----
 dev-db/mariadb/mariadb-10.5.12.ebuild | 25 ++++++++++++++++++++-----
 4 files changed, 80 insertions(+), 20 deletions(-)

diff --git a/dev-db/mariadb/mariadb-10.2.40.ebuild 
b/dev-db/mariadb/mariadb-10.2.40.ebuild
index f3462ac3ca6..a5fc6881ea9 100644
--- a/dev-db/mariadb/mariadb-10.2.40.ebuild
+++ b/dev-db/mariadb/mariadb-10.2.40.ebuild
@@ -788,18 +788,33 @@ pkg_postinst() {
 pkg_config() {
        _getoptval() {
                local section="${1}"
-               local flag="--${2}="
+               local option="--${2}"
                local extra_options="${3}"
                local cmd=(
                        "${my_print_defaults_binary}"
                        "${extra_options}"
                        "${section}"
                )
-               local results=( $(eval "${cmd[@]}" 2>/dev/null | sed -n 
"/^${flag}/s,${flag},,gp") )
 
-               if [[ ${#results[@]} -gt 0 ]] ; then
-                       # When option is set multiple times only return last 
value
-                       echo "${results[-1]}"
+               local values=()
+               local parameters=( $(eval "${cmd[@]}" 2>/dev/null) )
+               for parameter in "${parameters[@]}"
+               do
+                       # my_print_defaults guarantees output of options, one 
per line,
+                       # in the form that they would be specified on the 
command line.
+                       # So checking for --option=* should be safe.
+                       case ${parameter} in
+                               ${option}=*)
+                                       values+=( "${parameter#*=}" )
+                                       ;;
+                       esac
+               done
+
+               if [[ ${#values[@]} -gt 0 ]] ; then
+                       # Option could have been set multiple times
+                       # in which case only the last occurrence
+                       # contains the current value
+                       echo "${values[-1]}"
                fi
        }
 

diff --git a/dev-db/mariadb/mariadb-10.3.31.ebuild 
b/dev-db/mariadb/mariadb-10.3.31.ebuild
index d3463517487..cbbc8dfba20 100644
--- a/dev-db/mariadb/mariadb-10.3.31.ebuild
+++ b/dev-db/mariadb/mariadb-10.3.31.ebuild
@@ -779,18 +779,33 @@ pkg_postinst() {
 pkg_config() {
        _getoptval() {
                local section="${1}"
-               local flag="--${2}="
+               local option="--${2}"
                local extra_options="${3}"
                local cmd=(
                        "${my_print_defaults_binary}"
                        "${extra_options}"
                        "${section}"
                )
-               local results=( $(eval "${cmd[@]}" 2>/dev/null | sed -n 
"/^${flag}/s,${flag},,gp") )
 
-               if [[ ${#results[@]} -gt 0 ]] ; then
-                       # When option is set multiple times only return last 
value
-                       echo "${results[-1]}"
+               local values=()
+               local parameters=( $(eval "${cmd[@]}" 2>/dev/null) )
+               for parameter in "${parameters[@]}"
+               do
+                       # my_print_defaults guarantees output of options, one 
per line,
+                       # in the form that they would be specified on the 
command line.
+                       # So checking for --option=* should be safe.
+                       case ${parameter} in
+                               ${option}=*)
+                                       values+=( "${parameter#*=}" )
+                                       ;;
+                       esac
+               done
+
+               if [[ ${#values[@]} -gt 0 ]] ; then
+                       # Option could have been set multiple times
+                       # in which case only the last occurrence
+                       # contains the current value
+                       echo "${values[-1]}"
                fi
        }
 

diff --git a/dev-db/mariadb/mariadb-10.4.21.ebuild 
b/dev-db/mariadb/mariadb-10.4.21.ebuild
index 2c6e7495a0f..e41458e1ca6 100644
--- a/dev-db/mariadb/mariadb-10.4.21.ebuild
+++ b/dev-db/mariadb/mariadb-10.4.21.ebuild
@@ -800,18 +800,33 @@ pkg_postinst() {
 pkg_config() {
        _getoptval() {
                local section="${1}"
-               local flag="--${2}="
+               local option="--${2}"
                local extra_options="${3}"
                local cmd=(
                        "${my_print_defaults_binary}"
                        "${extra_options}"
                        "${section}"
                )
-               local results=( $(eval "${cmd[@]}" 2>/dev/null | sed -n 
"/^${flag}/s,${flag},,gp") )
 
-               if [[ ${#results[@]} -gt 0 ]] ; then
-                       # When option is set multiple times only return last 
value
-                       echo "${results[-1]}"
+               local values=()
+               local parameters=( $(eval "${cmd[@]}" 2>/dev/null) )
+               for parameter in "${parameters[@]}"
+               do
+                       # my_print_defaults guarantees output of options, one 
per line,
+                       # in the form that they would be specified on the 
command line.
+                       # So checking for --option=* should be safe.
+                       case ${parameter} in
+                               ${option}=*)
+                                       values+=( "${parameter#*=}" )
+                                       ;;
+                       esac
+               done
+
+               if [[ ${#values[@]} -gt 0 ]] ; then
+                       # Option could have been set multiple times
+                       # in which case only the last occurrence
+                       # contains the current value
+                       echo "${values[-1]}"
                fi
        }
 

diff --git a/dev-db/mariadb/mariadb-10.5.12.ebuild 
b/dev-db/mariadb/mariadb-10.5.12.ebuild
index 633f14472c2..845b70ab1fb 100644
--- a/dev-db/mariadb/mariadb-10.5.12.ebuild
+++ b/dev-db/mariadb/mariadb-10.5.12.ebuild
@@ -794,18 +794,33 @@ pkg_postinst() {
 pkg_config() {
        _getoptval() {
                local section="${1}"
-               local flag="--${2}="
+               local option="--${2}"
                local extra_options="${3}"
                local cmd=(
                        "${my_print_defaults_binary}"
                        "${extra_options}"
                        "${section}"
                )
-               local results=( $(eval "${cmd[@]}" 2>/dev/null | sed -n 
"/^${flag}/s,${flag},,gp") )
 
-               if [[ ${#results[@]} -gt 0 ]] ; then
-                       # When option is set multiple times only return last 
value
-                       echo "${results[-1]}"
+               local values=()
+               local parameters=( $(eval "${cmd[@]}" 2>/dev/null) )
+               for parameter in "${parameters[@]}"
+               do
+                       # my_print_defaults guarantees output of options, one 
per line,
+                       # in the form that they would be specified on the 
command line.
+                       # So checking for --option=* should be safe.
+                       case ${parameter} in
+                               ${option}=*)
+                                       values+=( "${parameter#*=}" )
+                                       ;;
+                       esac
+               done
+
+               if [[ ${#values[@]} -gt 0 ]] ; then
+                       # Option could have been set multiple times
+                       # in which case only the last occurrence
+                       # contains the current value
+                       echo "${values[-1]}"
                fi
        }
 

Reply via email to