diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2017-01-26 18:40:35 +0530 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2017-01-28 01:05:19 +0530 |
commit | 01547e8c613dfcdef6e38802b384df4eddaf062c (patch) | |
tree | 5898374c191e353922327d967638a4c7d5b518c4 | |
parent | b98599ad96cc7424872ae6a1dc8f9af8e6dd4a4e (diff) | |
download | meson-01547e8c613dfcdef6e38802b384df4eddaf062c.zip meson-01547e8c613dfcdef6e38802b384df4eddaf062c.tar.gz meson-01547e8c613dfcdef6e38802b384df4eddaf062c.tar.bz2 |
ninja: Fix build_by_default=false targets in tests
Previously, build_by_default=false targets would not be built at all
even if they were used in a test (as the exe or as a command-line
argument) which would lead to a test failure.
Now we look into all the defined tests and add all CustomTargets and
BuildTargets used in them to the list of build_by_default targets.
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 628718f..49ccfca 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -2161,11 +2161,28 @@ rule FORTRAN_DEP_HACK elem.write(outfile) def get_build_by_default_targets(self): - result = [] + result = {} + # Get all build and custom targets that must be built by default for t in self.build.get_targets().values(): if t.build_by_default or t.install or t.build_always: - result.append(t) - return result + result[t] = True + # Get all targets used as test executables and arguments. These must + # also be built by default. XXX: Sometime in the future these should be + # built only before running tests. + for t in self.build.get_tests(): + exe = t.exe + if hasattr(exe, 'held_object'): + exe = exe.held_object + if isinstance(exe, (build.CustomTarget, build.BuildTarget)) and exe not in result: + result[exe] = True + for arg in t.cmd_args: + if hasattr(arg, 'held_object'): + arg = arg.held_object + if not isinstance(arg, (build.CustomTarget, build.BuildTarget)): + continue + if arg not in result: + result[arg] = True + return result.keys() def generate_ending(self, outfile): targetlist = [] |