commit:     d2fb3f82e9c4ea1626eb465b153ccd1e8c5b2c9e
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Mar  1 08:20:12 2017 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Mar  8 07:35:43 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d2fb3f82

python-utils-r1.eclass: _python_set_impls, add integrity check

Add integrity check for multi-inherits, i.e. ensure that PYTHON_COMPAT
has not changed between successive calls to _python_set_impls. If it did
(e.g. because of eclass+ebuild setting different values), then we abort
not to give surprising results to the user.

 eclass/python-utils-r1.eclass | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
index a6f197bd418..c75c4678e31 100644
--- a/eclass/python-utils-r1.eclass
+++ b/eclass/python-utils-r1.eclass
@@ -128,9 +128,25 @@ _python_set_impls() {
                die "No supported implementation in PYTHON_COMPAT."
        fi
 
-       _PYTHON_SUPPORTED_IMPLS=( "${supp[@]}" )
-       _PYTHON_UNSUPPORTED_IMPLS=( "${unsupp[@]}" )
-       readonly _PYTHON_SUPPORTED_IMPLS _PYTHON_UNSUPPORTED_IMPLS
+       if [[ ${_PYTHON_SUPPORTED_IMPLS[@]} ]]; then
+               # set once already, verify integrity
+               if [[ ${_PYTHON_SUPPORTED_IMPLS[@]} != ${supp[@]} ]]; then
+                       eerror "Supported impls (PYTHON_COMPAT) changed between 
inherits!"
+                       eerror "Before: ${_PYTHON_SUPPORTED_IMPLS[*]}"
+                       eerror "Now   : ${supp[*]}"
+                       die "_PYTHON_SUPPORTED_IMPLS integrity check failed"
+               fi
+               if [[ ${_PYTHON_UNSUPPORTED_IMPLS[@]} != ${unsupp[@]} ]]; then
+                       eerror "Unsupported impls changed between inherits!"
+                       eerror "Before: ${_PYTHON_UNSUPPORTED_IMPLS[*]}"
+                       eerror "Now   : ${unsupp[*]}"
+                       die "_PYTHON_UNSUPPORTED_IMPLS integrity check failed"
+               fi
+       else
+               _PYTHON_SUPPORTED_IMPLS=( "${supp[@]}" )
+               _PYTHON_UNSUPPORTED_IMPLS=( "${unsupp[@]}" )
+               readonly _PYTHON_SUPPORTED_IMPLS _PYTHON_UNSUPPORTED_IMPLS
+       fi
 }
 
 # @ECLASS-VARIABLE: PYTHON

Reply via email to