aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2021-11-21 16:31:36 -0500
committerEli Schwartz <eschwartz@archlinux.org>2021-11-28 11:52:36 -0500
commitbea735dd76db32f6ea34ab66fee496d4be2f7eb1 (patch)
tree8ea80300099c25584d0893a6477064db55f33df1
parent69fa37e9ca885f55c92670bb228213db1b4ebbd8 (diff)
downloadmeson-bea735dd76db32f6ea34ab66fee496d4be2f7eb1.zip
meson-bea735dd76db32f6ea34ab66fee496d4be2f7eb1.tar.gz
meson-bea735dd76db32f6ea34ab66fee496d4be2f7eb1.tar.bz2
make sure files arguments to compiler.compiles and friends, performs rebuild
If the compiler check is updated as a string in meson.build, we force rebuild, which is a good thing since the outcome of that check changes the configuration context and can enable or disable parts of the build. If the compiler check came from a files() object then we didn't add a regen rule on those files. Fixes #1656
-rw-r--r--mesonbuild/interpreter/compiler.py3
-rw-r--r--unittests/allplatformstests.py7
2 files changed, 10 insertions, 0 deletions
diff --git a/mesonbuild/interpreter/compiler.py b/mesonbuild/interpreter/compiler.py
index 49ca541..b46f1fe 100644
--- a/mesonbuild/interpreter/compiler.py
+++ b/mesonbuild/interpreter/compiler.py
@@ -275,6 +275,7 @@ class CompilerHolder(ObjectHolder['Compiler']):
def run_method(self, args: T.Tuple['mesonlib.FileOrString'], kwargs: 'CompileKW') -> 'RunResult':
code = args[0]
if isinstance(code, mesonlib.File):
+ self.interpreter.add_build_def_file(code)
code = mesonlib.File.from_absolute_file(
code.rel_to_builddir(self.environment.source_dir))
testname = kwargs['name']
@@ -434,6 +435,7 @@ class CompilerHolder(ObjectHolder['Compiler']):
def compiles_method(self, args: T.Tuple['mesonlib.FileOrString'], kwargs: 'CompileKW') -> bool:
code = args[0]
if isinstance(code, mesonlib.File):
+ self.interpreter.add_build_def_file(code)
code = mesonlib.File.from_absolute_file(
code.rel_to_builddir(self.environment.source_dir))
testname = kwargs['name']
@@ -457,6 +459,7 @@ class CompilerHolder(ObjectHolder['Compiler']):
code = args[0]
compiler = None
if isinstance(code, mesonlib.File):
+ self.interpreter.add_build_def_file(code)
code = mesonlib.File.from_absolute_file(
code.rel_to_builddir(self.environment.source_dir))
suffix = code.suffix
diff --git a/unittests/allplatformstests.py b/unittests/allplatformstests.py
index 30c0572..daa1385 100644
--- a/unittests/allplatformstests.py
+++ b/unittests/allplatformstests.py
@@ -1965,6 +1965,13 @@ class AllPlatformTests(BasePlatformTests):
# cxx.links with C source
self.assertEqual(cmds[3][0], cc)
self.assertEqual(cmds[4][0], cxx)
+ if self.backend is Backend.ninja:
+ # updating the file to check causes a reconfigure
+ #
+ # only the ninja backend is competent enough to detect reconfigured
+ # no-op builds without build targets
+ self.utime(os.path.join(testdir, 'test.c'))
+ self.assertReconfiguredBuildIsNoop()
def test_ndebug_if_release_disabled(self):
testdir = os.path.join(self.unit_test_dir, '28 ndebug if-release')