diff --git a/compatibility-ninja-1.12.patch b/compatibility-ninja-1.12.patch new file mode 100644 index 0000000..437cc3e --- /dev/null +++ b/compatibility-ninja-1.12.patch @@ -0,0 +1,139 @@ +From a3b53e3df041c5394e4fbecafc1ba5a2c2bc571b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= +Date: Thu, 2 May 2024 19:20:10 +0200 +Subject: [PATCH] Fix builds with Ninja 12 and remove a 5 year old workaround. + +--- + run_project_tests.py | 3 +-- + run_tests.py | 35 ++++++++++------------------------ + unittests/baseplatformtests.py | 5 +---- + 3 files changed, 12 insertions(+), 31 deletions(-) + +diff --git a/run_project_tests.py b/run_project_tests.py +index a14741364..222e12f74 100755 +--- a/run_project_tests.py ++++ b/run_project_tests.py +@@ -45,7 +45,7 @@ from mesonbuild.coredata import backendlist, version as meson_version + from mesonbuild.modules.python import PythonExternalProgram + from run_tests import ( + get_fake_options, run_configure, get_meson_script, get_backend_commands, +- get_backend_args_for_dir, Backend, ensure_backend_detects_changes, ++ get_backend_args_for_dir, Backend, + guess_backend, handle_meson_skip_test, + ) + +@@ -720,7 +720,6 @@ def _run_test(test: TestDef, + + # Touch the meson.build file to force a regenerate + def force_regenerate() -> None: +- ensure_backend_detects_changes(backend) + os.utime(str(test.path / 'meson.build')) + + # just test building +diff --git a/run_tests.py b/run_tests.py +index 207653219..0b528ea22 100755 +--- a/run_tests.py ++++ b/run_tests.py +@@ -39,29 +39,27 @@ from mesonbuild.mesonlib import OptionKey, setup_vsenv + if T.TYPE_CHECKING: + from mesonbuild.coredata import SharedCMDOptions + +-NINJA_1_9_OR_NEWER = False ++NINJA_1_12_OR_NEWER = False + NINJA_CMD = None + # If we're on CI, detecting ninja for every subprocess unit test that we run is slow + # Optimize this by respecting $NINJA and skipping detection, then exporting it on + # first run. + try: +- NINJA_1_9_OR_NEWER = bool(int(os.environ['NINJA_1_9_OR_NEWER'])) ++ NINJA_1_12_OR_NEWER = bool(int(os.environ['NINJA_1_12_OR_NEWER'])) + NINJA_CMD = [os.environ['NINJA']] + except (KeyError, ValueError): +- # Look for 1.9 to see if https://github.com/ninja-build/ninja/issues/1219 +- # is fixed +- NINJA_CMD = detect_ninja('1.9') ++ # Look for 1.12, which removes -w dupbuild=err ++ NINJA_CMD = detect_ninja('1.12') + if NINJA_CMD is not None: +- NINJA_1_9_OR_NEWER = True ++ NINJA_1_12_OR_NEWER = True + else: +- mlog.warning('Found ninja <1.9, tests will run slower', once=True) + NINJA_CMD = detect_ninja() + + if NINJA_CMD is not None: +- os.environ['NINJA_1_9_OR_NEWER'] = str(int(NINJA_1_9_OR_NEWER)) ++ os.environ['NINJA_1_12_OR_NEWER'] = str(int(NINJA_1_12_OR_NEWER)) + os.environ['NINJA'] = NINJA_CMD[0] + else: +- raise RuntimeError('Could not find Ninja v1.7 or newer') ++ raise RuntimeError('Could not find Ninja') + + # Emulate running meson with -X utf8 by making sure all open() calls have a + # sane encoding. This should be a python default, but PEP 540 considered it not +@@ -271,7 +269,9 @@ def get_backend_commands(backend: Backend, debug: bool = False) -> \ + test_cmd = cmd + ['-target', 'RUN_TESTS'] + elif backend is Backend.ninja: + global NINJA_CMD +- cmd = NINJA_CMD + ['-w', 'dupbuild=err', '-d', 'explain'] ++ cmd = NINJA_CMD + ['-d', 'explain'] ++ if not NINJA_1_12_OR_NEWER: ++ cmd += ['-w', 'dupbuild=err'] + if debug: + cmd += ['-v'] + clean_cmd = cmd + ['clean'] +@@ -282,21 +282,6 @@ def get_backend_commands(backend: Backend, debug: bool = False) -> \ + raise AssertionError(f'Unknown backend: {backend!r}') + return cmd, clean_cmd, test_cmd, install_cmd, uninstall_cmd + +-def ensure_backend_detects_changes(backend: Backend) -> None: +- global NINJA_1_9_OR_NEWER +- if backend is not Backend.ninja: +- return +- need_workaround = False +- # We're using ninja >= 1.9 which has QuLogic's patch for sub-1s resolution +- # timestamps +- if not NINJA_1_9_OR_NEWER: +- mlog.warning('Don\'t have ninja >= 1.9, enabling timestamp resolution workaround', once=True) +- need_workaround = True +- # Increase the difference between build.ninja's timestamp and the timestamp +- # of whatever you changed: https://github.com/ninja-build/ninja/issues/371 +- if need_workaround: +- time.sleep(1) +- + def run_mtest_inprocess(commandlist: T.List[str]) -> T.Tuple[int, str, str]: + out = StringIO() + with mock.patch.object(sys, 'stdout', out), mock.patch.object(sys, 'stderr', out): +diff --git a/unittests/baseplatformtests.py b/unittests/baseplatformtests.py +index 6125ed933..10881abc6 100644 +--- a/unittests/baseplatformtests.py ++++ b/unittests/baseplatformtests.py +@@ -28,7 +28,7 @@ import mesonbuild.modules.pkgconfig + + + from run_tests import ( +- Backend, ensure_backend_detects_changes, get_backend_commands, ++ Backend, get_backend_commands, + get_builddir_target_args, get_meson_script, run_configure_inprocess, + run_mtest_inprocess, handle_meson_skip_test, + ) +@@ -289,8 +289,6 @@ class BasePlatformTests(TestCase): + def setconf(self, arg, will_build=True): + if not isinstance(arg, list): + arg = [arg] +- if will_build: +- ensure_backend_detects_changes(self.backend) + self._run(self.mconf_command + arg + [self.builddir]) + + def getconf(self, optname: str): +@@ -304,7 +302,6 @@ class BasePlatformTests(TestCase): + windows_proof_rmtree(self.builddir) + + def utime(self, f): +- ensure_backend_detects_changes(self.backend) + os.utime(f) + + def get_compdb(self): +-- +2.44.0 + diff --git a/meson.changes b/meson.changes index 459efca..5fec582 100644 --- a/meson.changes +++ b/meson.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu May 2 16:53:21 UTC 2024 - Christoph G + +- Add compatibility-ninja-1.12.patch from upstream to restore + compatibility with latest Ninja release, back-ported to 1.4.0 + ------------------------------------------------------------------- Mon Apr 15 10:35:55 UTC 2024 - Yifan Jiang diff --git a/meson.spec b/meson.spec index e78d5f9..3c1f4c8 100644 --- a/meson.spec +++ b/meson.spec @@ -52,6 +52,8 @@ Patch1: extend-test-timeout-on-qemu-builds.patch Patch2: meson-distutils.patch # PATCH-FIX-UPSTREAM get_llvm_tool_names-llvm18.patch -- Accept LLVM 18.1. Patch3: get_llvm_tool_names-llvm18.patch +# PATCH-FIX-UPSTREAM compatibility-ninja-1.12.patch -- compatibility with Ninja 1.12, tagged for Meson 1.4.1 +Patch4: compatibility-ninja-1.12.patch BuildRequires: %{python_module base >= 3.7} BuildRequires: fdupes @@ -188,6 +190,7 @@ Vim/NeoVim. %patch -P 2 -p1 %endif %patch -P 3 -p1 +%patch -P 4 -p1 %if 0%{?sle_version} >= 150400 && 0%{?sle_version} < 160000 # AddressSanitizer fails here because of ulimit.