Patched for Python-310 (rhbz#1914318)
This commit is contained in:
parent
ec1247b200
commit
180e27377e
134
scons-4.0.1-bug3860.patch
Normal file
134
scons-4.0.1-bug3860.patch
Normal file
@ -0,0 +1,134 @@
|
||||
From d3c6a4a199beff6e4d28725da9c0b0a052349359 Mon Sep 17 00:00:00 2001
|
||||
From: Mats Wichmann <mats@linux.com>
|
||||
Date: Tue, 12 Jan 2021 07:48:33 -0700
|
||||
Subject: [PATCH] Work around Py3.10 optimizing out a builder test
|
||||
|
||||
BuilderBase class traps __bool__ call and raises InternalError.
|
||||
On Py 3.10a the unit test for this got optimized out, avoid this.
|
||||
|
||||
While we're at it, eliminate remaining references to __nonzero__,
|
||||
which was a Py2-ism, replaced by __bool__.
|
||||
|
||||
Closes #3860
|
||||
|
||||
Signed-off-by: Mats Wichmann <mats@linux.com>
|
||||
---
|
||||
SCons/Builder.py | 5 +----
|
||||
SCons/BuilderTests.py | 17 ++++++++++++-----
|
||||
SCons/Environment.py | 2 +-
|
||||
SCons/Node/__init__.py | 2 +-
|
||||
SCons/Util.py | 7 +------
|
||||
6 files changed, 18 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/SCons/Builder.py b/SCons/Builder.py
|
||||
index a0df27203..4c2ad7fad 100644
|
||||
--- a/SCons/Builder.py
|
||||
+++ b/SCons/Builder.py
|
||||
@@ -430,11 +430,8 @@ def __init__(self, action = None,
|
||||
src_builder = [ src_builder ]
|
||||
self.src_builder = src_builder
|
||||
|
||||
- def __nonzero__(self):
|
||||
- raise InternalError("Do not test for the Node.builder attribute directly; use Node.has_builder() instead")
|
||||
-
|
||||
def __bool__(self):
|
||||
- return self.__nonzero__()
|
||||
+ raise InternalError("Do not test for the Node.builder attribute directly; use Node.has_builder() instead")
|
||||
|
||||
def get_name(self, env):
|
||||
"""Attempts to get the name of the Builder.
|
||||
diff --git a/SCons/BuilderTests.py b/SCons/BuilderTests.py
|
||||
index 0e46194f2..8d616f131 100644
|
||||
--- a/SCons/BuilderTests.py
|
||||
+++ b/SCons/BuilderTests.py
|
||||
@@ -207,13 +207,14 @@ def test__init__(self):
|
||||
x = builder.overrides['OVERRIDE']
|
||||
assert x == 'x', x
|
||||
|
||||
- def test__nonzero__(self):
|
||||
- """Test a builder raising an exception when __nonzero__ is called
|
||||
- """
|
||||
+ def test__bool__(self):
|
||||
+ """Test a builder raising an exception when __bool__ is called. """
|
||||
+
|
||||
+ # basic test: explicitly call it
|
||||
builder = SCons.Builder.Builder(action="foo")
|
||||
exc_caught = None
|
||||
try:
|
||||
- builder.__nonzero__()
|
||||
+ builder.__bool__()
|
||||
except SCons.Errors.InternalError:
|
||||
exc_caught = 1
|
||||
assert exc_caught, "did not catch expected InternalError exception"
|
||||
@@ -221,12 +222,18 @@ def test__nonzero__(self):
|
||||
class Node:
|
||||
pass
|
||||
|
||||
+ # the interesting test: checking the attribute this way
|
||||
+ # should call back to Builder.__bool__ - so we can tell
|
||||
+ # people not to check that way (for performance).
|
||||
+ # TODO: workaround #3860: with just a "pass" in the check body,
|
||||
+ # py3.10a optimizes out the whole thing, so add a "real" stmt
|
||||
n = Node()
|
||||
n.builder = builder
|
||||
exc_caught = None
|
||||
try:
|
||||
if n.builder:
|
||||
- pass
|
||||
+ #pass
|
||||
+ _ = True
|
||||
except SCons.Errors.InternalError:
|
||||
exc_caught = 1
|
||||
assert exc_caught, "did not catch expected InternalError exception"
|
||||
diff --git a/SCons/Environment.py b/SCons/Environment.py
|
||||
index 0b8a20adc..61128af36 100644
|
||||
--- a/SCons/Environment.py
|
||||
+++ b/SCons/Environment.py
|
||||
@@ -1538,7 +1538,7 @@ def Detect(self, progs):
|
||||
|
||||
|
||||
def Dictionary(self, *args):
|
||||
- """Return construction variables from an environment.
|
||||
+ r"""Return construction variables from an environment.
|
||||
|
||||
Args:
|
||||
\*args (optional): variable names to look up
|
||||
diff --git a/SCons/Node/__init__.py b/SCons/Node/__init__.py
|
||||
index 3685af300..491c6b8c5 100644
|
||||
--- a/SCons/Node/__init__.py
|
||||
+++ b/SCons/Node/__init__.py
|
||||
@@ -886,7 +886,7 @@ def has_builder(self):
|
||||
than simply examining the builder attribute directly ("if
|
||||
node.builder: ..."). When the builder attribute is examined
|
||||
directly, it ends up calling __getattr__ for both the __len__
|
||||
- and __nonzero__ attributes on instances of our Builder Proxy
|
||||
+ and __bool__ attributes on instances of our Builder Proxy
|
||||
class(es), generating a bazillion extra calls and slowing
|
||||
things down immensely.
|
||||
"""
|
||||
diff --git a/SCons/Util.py b/SCons/Util.py
|
||||
index fae2d64fe..0f26fb134 100644
|
||||
--- a/SCons/Util.py
|
||||
+++ b/SCons/Util.py
|
||||
@@ -125,11 +125,8 @@ class NodeList(UserList):
|
||||
# self.data = [ initlist,]
|
||||
|
||||
|
||||
- def __nonzero__(self):
|
||||
- return len(self.data) != 0
|
||||
-
|
||||
def __bool__(self):
|
||||
- return self.__nonzero__()
|
||||
+ return len(self.data) != 0
|
||||
|
||||
def __str__(self):
|
||||
return ' '.join(map(str, self.data))
|
||||
@@ -1563,8 +1560,6 @@ def __call__(self, *args, **kwargs):
|
||||
return self
|
||||
def __repr__(self):
|
||||
return "Null(0x%08X)" % id(self)
|
||||
- def __nonzero__(self):
|
||||
- return False
|
||||
def __bool__(self):
|
||||
return False
|
||||
def __getattr__(self, name):
|
||||
11
scons.spec
11
scons.spec
@ -14,7 +14,7 @@
|
||||
|
||||
Name: scons
|
||||
Version: 4.0.1
|
||||
Release: 3%{?dist}
|
||||
Release: 4%{?dist}
|
||||
Summary: An Open Source software construction tool
|
||||
License: MIT
|
||||
URL: http://www.scons.org
|
||||
@ -22,6 +22,8 @@ Source0: https://github.com/SCons/scons/archive/%{version}/scons-%{version}.ta
|
||||
Source1: https://scons.org/doc/production/scons-doc-%{version}.tar.gz
|
||||
BuildArch: noarch
|
||||
|
||||
Patch0: %{name}-%{version}-bug3860.patch
|
||||
|
||||
%description
|
||||
SCons is an Open Source software construction tool--that is, a build
|
||||
tool; an improved substitute for the classic Make utility; a better way
|
||||
@ -119,6 +121,10 @@ cd ..
|
||||
cd ..
|
||||
%endif
|
||||
|
||||
pushd %{name}-%{version}
|
||||
%autopatch -p1
|
||||
popd
|
||||
|
||||
# Convert to UTF-8
|
||||
for file in %{name}-%{version}/src/*.txt; do
|
||||
iconv -f ISO-8859-1 -t UTF-8 -o $file.new $file && \
|
||||
@ -241,6 +247,9 @@ popd
|
||||
%license LICENSE*
|
||||
|
||||
%changelog
|
||||
* Wed Jan 13 2021 Antonio Trande <sagitter@fedoraproject.org> - 4.0.1-4
|
||||
- Patched for Python-310 (rhbz#1914318)
|
||||
|
||||
* Mon Oct 05 2020 Antonio Trande <sagitter@fedoraproject.org> - 4.0.1-3
|
||||
- BuildRequires python3-setuptools explicitly
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user