python-r1.eclass: Add integrity checks for globals
authorMichał Górny <mgorny@gentoo.org>
Wed, 1 Mar 2017 08:57:12 +0000 (09:57 +0100)
committerMichał Górny <mgorny@gentoo.org>
Wed, 8 Mar 2017 07:35:48 +0000 (08:35 +0100)
eclass/python-r1.eclass

index 856f7554dd59ad6a69508cb7f753b09a20675501..df57cf1e1322d69442e9ebc921ba15fe89d37b43 100644 (file)
@@ -51,6 +51,8 @@ fi
 [[ ${EAPI} == [45] ]] && inherit eutils
 inherit multibuild python-utils-r1
 
+fi
+
 # @ECLASS-VARIABLE: PYTHON_COMPAT
 # @REQUIRED
 # @DESCRIPTION:
@@ -198,15 +200,45 @@ _python_set_globals() {
                deps+=">=dev-lang/python-exec-2:=[${usedep}]"
        fi
 
-       PYTHON_DEPS=${deps}
-       IUSE=${flags[*]}
-       PYTHON_REQUIRED_USE=${requse}
-       PYTHON_USEDEP=${usedep}
-       readonly PYTHON_DEPS PYTHON_REQUIRED_USE PYTHON_USEDEP
+       if [[ ${PYTHON_DEPS+1} ]]; then
+               # IUSE is magical, so we can't really check it
+               # (but we verify PYTHON_COMPAT already)
+
+               if [[ ${PYTHON_DEPS} != "${deps}" ]]; then
+                       eerror "PYTHON_DEPS have changed between inherits (PYTHON_REQ_USE?)!"
+                       eerror "Before: ${PYTHON_DEPS}"
+                       eerror "Now   : ${deps}"
+                       die "PYTHON_DEPS integrity check failed"
+               fi
+
+               # these two are formality -- they depend on PYTHON_COMPAT only
+               if [[ ${PYTHON_REQUIRED_USE} != ${requse} ]]; then
+                       eerror "PYTHON_REQUIRED_USE have changed between inherits!"
+                       eerror "Before: ${PYTHON_REQUIRED_USE}"
+                       eerror "Now   : ${requse}"
+                       die "PYTHON_REQUIRED_USE integrity check failed"
+               fi
+
+               if [[ ${PYTHON_USEDEP} != "${usedep}" ]]; then
+                       eerror "PYTHON_USEDEP have changed between inherits!"
+                       eerror "Before: ${PYTHON_USEDEP}"
+                       eerror "Now   : ${usedep}"
+                       die "PYTHON_USEDEP integrity check failed"
+               fi
+       else
+               IUSE=${flags[*]}
+
+               PYTHON_DEPS=${deps}
+               PYTHON_REQUIRED_USE=${requse}
+               PYTHON_USEDEP=${usedep}
+               readonly PYTHON_DEPS PYTHON_REQUIRED_USE PYTHON_USEDEP
+       fi
 }
 _python_set_globals
 unset -f _python_set_globals
 
+if [[ ! ${_PYTHON_R1} ]]; then
+
 # @FUNCTION: _python_validate_useflags
 # @INTERNAL
 # @DESCRIPTION: