Update to 1.1.0
... (rhbz#2182559)
This commit is contained in:
parent
38f358356e
commit
61eea2e277
242
11215.patch
242
11215.patch
@ -1,242 +0,0 @@
|
||||
From 9aff189e315ccbe3444c75aef412d311fa95fcd2 Mon Sep 17 00:00:00 2001
|
||||
From: Eli Schwartz <eschwartz@archlinux.org>
|
||||
Date: Sun, 25 Dec 2022 02:19:14 -0500
|
||||
Subject: [PATCH 1/5] add a hidden environment variable to make Meson complain
|
||||
hard on deprecations
|
||||
|
||||
Useful for running the testsuite with this environment variable and
|
||||
catching obscure issues. Just like with the encoding warning later down,
|
||||
we have to do this inside meson itself, not externally injected.
|
||||
---
|
||||
mesonbuild/mesonmain.py | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py
|
||||
index ca38f29b615..369b411c0b0 100644
|
||||
--- a/mesonbuild/mesonmain.py
|
||||
+++ b/mesonbuild/mesonmain.py
|
||||
@@ -235,6 +235,13 @@ def set_meson_command(mainfile):
|
||||
mesonlib.set_meson_command(mainfile)
|
||||
|
||||
def run(original_args, mainfile):
|
||||
+ if os.environ.get('MESON_SHOW_DEPRECATIONS'):
|
||||
+ # workaround for https://bugs.python.org/issue34624
|
||||
+ import warnings
|
||||
+ for typ in [DeprecationWarning, SyntaxWarning, FutureWarning, PendingDeprecationWarning]:
|
||||
+ warnings.filterwarnings('error', category=typ, module='mesonbuild')
|
||||
+ warnings.filterwarnings('ignore', message=".*importlib-resources.*")
|
||||
+
|
||||
if sys.version_info >= (3, 10) and os.environ.get('MESON_RUNNING_IN_PROJECT_TESTS'):
|
||||
# workaround for https://bugs.python.org/issue34624
|
||||
import warnings
|
||||
|
||||
From 56312c057938237671524f49c5206e2a98be7863 Mon Sep 17 00:00:00 2001
|
||||
From: Eli Schwartz <eschwartz@archlinux.org>
|
||||
Date: Sun, 1 Jan 2023 17:37:01 -0500
|
||||
Subject: [PATCH 2/5] mtest: delay creation of asyncio lock until event loop
|
||||
exists
|
||||
|
||||
In https://bugs.python.org/issue42392 this stopped implicitly creating
|
||||
an event loop if none exists. We created it before running _run_tests(),
|
||||
so it would auto-create an event loop and set the default, which means
|
||||
we cannot create one explicitly on our own schedule or we end up with
|
||||
two of them.
|
||||
|
||||
Delay this until we actually start the logger. This happens inside the
|
||||
actual testsuite loop, so it finds the running loop and doesn't create a
|
||||
new one, even on python <3.10.
|
||||
---
|
||||
mesonbuild/mtest.py | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py
|
||||
index bcf84d360b5..b398705789d 100644
|
||||
--- a/mesonbuild/mtest.py
|
||||
+++ b/mesonbuild/mtest.py
|
||||
@@ -502,7 +502,9 @@ def __init__(self) -> None:
|
||||
self.progress_task = None # type: T.Optional[asyncio.Future]
|
||||
self.max_left_width = 0 # type: int
|
||||
self.stop = False
|
||||
- self.update = asyncio.Event()
|
||||
+ # TODO: before 3.10 this cannot be created immediately, because
|
||||
+ # it will create a new event loop
|
||||
+ self.update: asyncio.Event
|
||||
self.should_erase_line = ''
|
||||
self.test_count = 0
|
||||
self.started_tests = 0
|
||||
@@ -600,6 +602,7 @@ async def report_progress() -> None:
|
||||
self.emit_progress(harness)
|
||||
self.flush()
|
||||
|
||||
+ self.update = asyncio.Event()
|
||||
self.test_count = harness.test_count
|
||||
self.cols = max(self.cols, harness.max_left_width + 30)
|
||||
|
||||
|
||||
From ab8081fab66eafcb35021f45ffae0648b658733e Mon Sep 17 00:00:00 2001
|
||||
From: Eli Schwartz <eschwartz@archlinux.org>
|
||||
Date: Sun, 25 Dec 2022 01:45:01 -0500
|
||||
Subject: [PATCH 3/5] mtest: clean up asyncio event loop instantiation
|
||||
|
||||
Fix a TODO comment about moving to asyncio.run, now that we use
|
||||
sufficiently new python to do it.
|
||||
|
||||
Note that we create an event loop for Windows using the new python
|
||||
defaults, but in a completely different part of the code from where we
|
||||
need to use it. Since asyncio.run creates the loop on its own, we need
|
||||
to set the default policy instead -- which we probably should have done
|
||||
all along.
|
||||
---
|
||||
mesonbuild/mtest.py | 13 ++++++-------
|
||||
1 file changed, 6 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py
|
||||
index b398705789d..5c584e05e44 100644
|
||||
--- a/mesonbuild/mtest.py
|
||||
+++ b/mesonbuild/mtest.py
|
||||
@@ -1925,9 +1925,12 @@ def get_pretty_suite(self, test: TestSerialisation) -> str:
|
||||
def run_tests(self, runners: T.List[SingleTestRunner]) -> None:
|
||||
try:
|
||||
self.open_logfiles()
|
||||
- # Replace with asyncio.run once we can require Python 3.7
|
||||
- loop = asyncio.get_event_loop()
|
||||
- loop.run_until_complete(self._run_tests(runners))
|
||||
+
|
||||
+ # TODO: this is the default for python 3.8
|
||||
+ if sys.platform == 'win32':
|
||||
+ asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
|
||||
+
|
||||
+ asyncio.run(self._run_tests(runners))
|
||||
finally:
|
||||
self.close_logfiles()
|
||||
|
||||
@@ -2090,10 +2093,6 @@ def run(options: argparse.Namespace) -> int:
|
||||
if options.wrapper:
|
||||
check_bin = options.wrapper[0]
|
||||
|
||||
- if sys.platform == 'win32':
|
||||
- loop = asyncio.ProactorEventLoop()
|
||||
- asyncio.set_event_loop(loop)
|
||||
-
|
||||
if check_bin is not None:
|
||||
exe = ExternalProgram(check_bin, silent=True)
|
||||
if not exe.found():
|
||||
|
||||
From 40315e6ebb754b5584680c5193540e4638b792a3 Mon Sep 17 00:00:00 2001
|
||||
From: Eli Schwartz <eschwartz@archlinux.org>
|
||||
Date: Sun, 1 Jan 2023 14:33:23 -0500
|
||||
Subject: [PATCH 4/5] mtest: simplify deprecated access to current loop
|
||||
|
||||
These functions constantly want the current asyncio loop, and we run a
|
||||
function call each time to get it. And the function call is a deprecated
|
||||
one. Python 3.7 brings the more explicit get_running_loop for use when
|
||||
we know we're inside one, with the aim of getting rid of get_event_loop
|
||||
once support for python <3.7 disappears. Meson no longer supports python
|
||||
<3.7 either.
|
||||
|
||||
Switch to the new API, and save the reference for reuse instead of
|
||||
constantly re-calculating it.
|
||||
---
|
||||
mesonbuild/mtest.py | 20 +++++++++++---------
|
||||
1 file changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py
|
||||
index 5c584e05e44..4f60a3d32f4 100644
|
||||
--- a/mesonbuild/mtest.py
|
||||
+++ b/mesonbuild/mtest.py
|
||||
@@ -574,7 +574,7 @@ def emit_progress(self, harness: 'TestHarness') -> None:
|
||||
|
||||
def start(self, harness: 'TestHarness') -> None:
|
||||
async def report_progress() -> None:
|
||||
- loop = asyncio.get_event_loop()
|
||||
+ loop = asyncio.get_running_loop()
|
||||
next_update = 0.0
|
||||
self.request_update()
|
||||
while not self.stop:
|
||||
@@ -1232,13 +1232,14 @@ def check_futures(futures: T.Iterable[asyncio.Future]) -> None:
|
||||
|
||||
# Python is silly and does not have a variant of asyncio.wait with an
|
||||
# absolute time as deadline.
|
||||
- deadline = None if timeout is None else asyncio.get_event_loop().time() + timeout
|
||||
+ loop = asyncio.get_running_loop()
|
||||
+ deadline = None if timeout is None else loop.time() + timeout
|
||||
while futures and (timeout is None or timeout > 0):
|
||||
done, futures = await asyncio.wait(futures, timeout=timeout,
|
||||
return_when=asyncio.FIRST_EXCEPTION)
|
||||
check_futures(done)
|
||||
if deadline:
|
||||
- timeout = deadline - asyncio.get_event_loop().time()
|
||||
+ timeout = deadline - loop.time()
|
||||
|
||||
check_futures(futures)
|
||||
|
||||
@@ -1948,6 +1949,7 @@ async def _run_tests(self, runners: T.List[SingleTestRunner]) -> None:
|
||||
running_tests = {} # type: T.Dict[asyncio.Future, str]
|
||||
interrupted = False
|
||||
ctrlc_times = deque(maxlen=MAX_CTRLC) # type: T.Deque[float]
|
||||
+ loop = asyncio.get_running_loop()
|
||||
|
||||
async def run_test(test: SingleTestRunner) -> None:
|
||||
async with semaphore:
|
||||
@@ -1996,7 +1998,7 @@ def sigint_handler() -> None:
|
||||
nonlocal interrupted
|
||||
if interrupted:
|
||||
return
|
||||
- ctrlc_times.append(asyncio.get_event_loop().time())
|
||||
+ ctrlc_times.append(loop.time())
|
||||
if len(ctrlc_times) == MAX_CTRLC and ctrlc_times[-1] - ctrlc_times[0] < 1:
|
||||
self.flush_logfiles()
|
||||
mlog.warning('CTRL-C detected, exiting')
|
||||
@@ -2013,10 +2015,10 @@ def sigint_handler() -> None:
|
||||
|
||||
if sys.platform != 'win32':
|
||||
if os.getpgid(0) == os.getpid():
|
||||
- asyncio.get_event_loop().add_signal_handler(signal.SIGINT, sigint_handler)
|
||||
+ loop.add_signal_handler(signal.SIGINT, sigint_handler)
|
||||
else:
|
||||
- asyncio.get_event_loop().add_signal_handler(signal.SIGINT, sigterm_handler)
|
||||
- asyncio.get_event_loop().add_signal_handler(signal.SIGTERM, sigterm_handler)
|
||||
+ loop.add_signal_handler(signal.SIGINT, sigterm_handler)
|
||||
+ loop.add_signal_handler(signal.SIGTERM, sigterm_handler)
|
||||
try:
|
||||
for runner in runners:
|
||||
if not runner.is_parallel:
|
||||
@@ -2033,8 +2035,8 @@ def sigint_handler() -> None:
|
||||
await complete_all(futures)
|
||||
finally:
|
||||
if sys.platform != 'win32':
|
||||
- asyncio.get_event_loop().remove_signal_handler(signal.SIGINT)
|
||||
- asyncio.get_event_loop().remove_signal_handler(signal.SIGTERM)
|
||||
+ loop.remove_signal_handler(signal.SIGINT)
|
||||
+ loop.remove_signal_handler(signal.SIGTERM)
|
||||
for l in self.loggers:
|
||||
await l.finish(self)
|
||||
|
||||
|
||||
From c5e766af75369009ab9de82baf6c7c7e18f66857 Mon Sep 17 00:00:00 2001
|
||||
From: Eli Schwartz <eschwartz@archlinux.org>
|
||||
Date: Sun, 25 Dec 2022 02:04:49 -0500
|
||||
Subject: [PATCH 5/5] be more explicit about asyncio usage
|
||||
|
||||
`get_event_loop()` would always implicitly create one on demand, but
|
||||
Python upstream has decided it's a bad/confusing API. Explicitly
|
||||
starting our own, then setting it, is exactly equivalent other than not
|
||||
being scheduled for deprecation.
|
||||
---
|
||||
mesonbuild/msubprojects.py | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mesonbuild/msubprojects.py b/mesonbuild/msubprojects.py
|
||||
index d6c182a01e2..1be85435e87 100755
|
||||
--- a/mesonbuild/msubprojects.py
|
||||
+++ b/mesonbuild/msubprojects.py
|
||||
@@ -699,7 +699,8 @@ def run(options: 'Arguments') -> int:
|
||||
raise MesonException(f'Unknown subproject type {t!r}, supported types are: {ALL_TYPES_STRING}')
|
||||
tasks: T.List[T.Awaitable[bool]] = []
|
||||
task_names: T.List[str] = []
|
||||
- loop = asyncio.get_event_loop()
|
||||
+ loop = asyncio.new_event_loop()
|
||||
+ asyncio.set_event_loop(loop)
|
||||
executor = ThreadPoolExecutor(options.num_processes)
|
||||
if types:
|
||||
wraps = [wrap for wrap in wraps if wrap.type in types]
|
@ -6,7 +6,7 @@
|
||||
%bcond_with check
|
||||
|
||||
Name: meson
|
||||
Version: 1.0.1
|
||||
Version: 1.1.0
|
||||
Release: %autorelease
|
||||
Summary: High productivity build system
|
||||
|
||||
@ -14,12 +14,6 @@ License: ASL 2.0
|
||||
URL: https://mesonbuild.com/
|
||||
Source: https://github.com/mesonbuild/meson/releases/download/%{version_no_tilde .}/meson-%{version_no_tilde %{quote:}}.tar.gz
|
||||
|
||||
# Fix for meson test crashes with Python 3.12:
|
||||
# RuntimeError: There is no current event loop in thread 'MainThread'
|
||||
# Merged upstream.
|
||||
# https://bugzilla.redhat.com/2155463
|
||||
Patch: https://github.com/mesonbuild/meson/pull/11215.patch
|
||||
|
||||
BuildArch: noarch
|
||||
|
||||
BuildRequires: python3-devel
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (meson-1.0.1.tar.gz) = 3d2e2630f9eacf2fd999d5068d82b2a719400a55cfdea5d38253410a3ee74def638ac09622bceb72edf7bc867ae3de6a5f48c1846601e7e4b5afdf3ac9339ebc
|
||||
SHA512 (meson-1.1.0.tar.gz) = b8968becd1de25d8e92ecbe4c3b50694269a463430b41fcf5206f35ac952507b01f316721fb36f8c7940437e35c3588f6a4504f5b8256fa47fd9b0ceb588ae39
|
||||
|
Loading…
Reference in New Issue
Block a user