From 39a3bdb43f66c61f9ff93b7bb947cb772948dbf3 Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Tue, 20 Mar 2018 22:37:45 +0000 Subject: Add tests for b_ndebug=if-release and buildtype default options Co-authored-by: David Seifert --- test cases/common/185 ndebug if-release enabled/main.c | 15 +++++++++++++++ .../common/185 ndebug if-release enabled/meson.build | 7 +++++++ test cases/common/186 ndebug if-release disabled/main.c | 7 +++++++ .../common/186 ndebug if-release disabled/meson.build | 7 +++++++ 4 files changed, 36 insertions(+) create mode 100644 test cases/common/185 ndebug if-release enabled/main.c create mode 100644 test cases/common/185 ndebug if-release enabled/meson.build create mode 100644 test cases/common/186 ndebug if-release disabled/main.c create mode 100644 test cases/common/186 ndebug if-release disabled/meson.build diff --git a/test cases/common/185 ndebug if-release enabled/main.c b/test cases/common/185 ndebug if-release enabled/main.c new file mode 100644 index 0000000..984ebca --- /dev/null +++ b/test cases/common/185 ndebug if-release enabled/main.c @@ -0,0 +1,15 @@ +#include +#include + +int meson_test_side_effect = EXIT_FAILURE; + +int meson_test_set_side_effect(void) { + meson_test_side_effect = EXIT_SUCCESS; + return 1; +} + +int main(void) { + // meson_test_side_effect is set only if assert is executed + assert(meson_test_set_side_effect()); + return meson_test_side_effect; +} diff --git a/test cases/common/185 ndebug if-release enabled/meson.build b/test cases/common/185 ndebug if-release enabled/meson.build new file mode 100644 index 0000000..be26375 --- /dev/null +++ b/test cases/common/185 ndebug if-release enabled/meson.build @@ -0,0 +1,7 @@ +project('ndebug enabled', 'c', + default_options : [ + 'buildtype=debugoptimized', + 'b_ndebug=if-release', + ]) + +test('exe', executable('main', 'main.c')) diff --git a/test cases/common/186 ndebug if-release disabled/main.c b/test cases/common/186 ndebug if-release disabled/main.c new file mode 100644 index 0000000..cb3ec3f --- /dev/null +++ b/test cases/common/186 ndebug if-release disabled/main.c @@ -0,0 +1,7 @@ +#include +#include + +int main(void) { + assert(0); + return EXIT_SUCCESS; +} diff --git a/test cases/common/186 ndebug if-release disabled/meson.build b/test cases/common/186 ndebug if-release disabled/meson.build new file mode 100644 index 0000000..a9a79ea --- /dev/null +++ b/test cases/common/186 ndebug if-release disabled/meson.build @@ -0,0 +1,7 @@ +project('ndebug disabled', 'c', + default_options : [ + 'buildtype=release', + 'b_ndebug=if-release', + ]) + +test('exe', executable('main', 'main.c')) -- cgit v1.1 From af0b569ced2bc3d0eb8d30bf4bc26cdee975ea60 Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Wed, 21 Mar 2018 01:20:58 +0000 Subject: Add unittests for b_ndebug=if-release and buildtype interactions --- run_unittests.py | 14 ++++++++++++++ test cases/unit/25 ndebug if-release/main.c | 11 +++++++++++ test cases/unit/25 ndebug if-release/meson.build | 3 +++ 3 files changed, 28 insertions(+) create mode 100644 test cases/unit/25 ndebug if-release/main.c create mode 100644 test cases/unit/25 ndebug if-release/meson.build diff --git a/run_unittests.py b/run_unittests.py index b6367c1..94e39c8 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -1895,6 +1895,20 @@ int main(int argc, char **argv) { exception_raised = True self.assertTrue(exception_raised, 'Double locking did not raise exception.') + def test_ndebug_if_release_disabled(self): + testdir = os.path.join(self.unit_test_dir, '25 ndebug if-release') + self.init(testdir, extra_args=['--buildtype=release', '-Db_ndebug=if-release']) + self.build() + exe = os.path.join(self.builddir, 'main') + self.assertEqual(b'NDEBUG=1', subprocess.check_output(exe).strip()) + + def test_ndebug_if_release_enabled(self): + testdir = os.path.join(self.unit_test_dir, '25 ndebug if-release') + self.init(testdir, extra_args=['--buildtype=debugoptimized', '-Db_ndebug=if-release']) + self.build() + exe = os.path.join(self.builddir, 'main') + self.assertEqual(b'NDEBUG=0', subprocess.check_output(exe).strip()) + class FailureTests(BasePlatformTests): ''' diff --git a/test cases/unit/25 ndebug if-release/main.c b/test cases/unit/25 ndebug if-release/main.c new file mode 100644 index 0000000..70b3d04 --- /dev/null +++ b/test cases/unit/25 ndebug if-release/main.c @@ -0,0 +1,11 @@ +#include +#include + +int main(void) { +#ifdef NDEBUG + printf("NDEBUG=1\n"); +#else + printf("NDEBUG=0\n"); +#endif + return 0; +} diff --git a/test cases/unit/25 ndebug if-release/meson.build b/test cases/unit/25 ndebug if-release/meson.build new file mode 100644 index 0000000..4af2406 --- /dev/null +++ b/test cases/unit/25 ndebug if-release/meson.build @@ -0,0 +1,3 @@ +project('ndebug enabled', 'c') + +executable('main', 'main.c') -- cgit v1.1 From 2febb99eee8ed71c9122db88ca58dd33be0b9550 Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Wed, 21 Mar 2018 14:58:50 +0000 Subject: Fix b_ndebug=if-release option Provide get_{type}_options_for_target() methods that unite {type} and builtin options. --- mesonbuild/backend/backends.py | 25 ++++++++++++++++++++++--- mesonbuild/backend/ninjabackend.py | 3 +-- mesonbuild/compilers/compilers.py | 4 +++- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index b8ca71f..ad45204 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -89,12 +89,17 @@ class OptionProxy: class OptionOverrideProxy: '''Mimic an option list but transparently override selected option values.''' - def __init__(self, overrides, options): + def __init__(self, overrides, *options): self.overrides = overrides self.options = options def __getitem__(self, option_name): - base_opt = self.options[option_name] + for opts in self.options: + if option_name in opts: + return self._get_override(option_name, opts[option_name]) + raise KeyError('Option not found', option_name) + + def _get_override(self, option_name, base_opt): if option_name in self.overrides: return OptionProxy(base_opt.name, base_opt.validate_value(self.overrides[option_name])) return base_opt @@ -123,6 +128,20 @@ class Backend: def get_target_filename_abs(self, target): return os.path.join(self.environment.get_build_dir(), self.get_target_filename(target)) + def get_builtin_options_for_target(self, target): + return OptionOverrideProxy(target.option_overrides, + self.environment.coredata.builtins) + + def get_base_options_for_target(self, target): + return OptionOverrideProxy(target.option_overrides, + self.environment.coredata.builtins, + self.environment.coredata.base_options) + + def get_compiler_options_for_target(self, target): + return OptionOverrideProxy(target.option_overrides, + # no code depends on builtins for now + self.environment.coredata.compiler_options) + def get_option_for_target(self, option_name, target): if option_name in target.option_overrides: override = target.option_overrides[option_name] @@ -444,7 +463,7 @@ class Backend: # starting from hard-coded defaults followed by build options and so on. commands = CompilerArgs(compiler) - copt_proxy = OptionOverrideProxy(target.option_overrides, self.environment.coredata.compiler_options) + copt_proxy = self.get_compiler_options_for_target(target) # First, the trivial ones that are impossible to override. # # Add -nostdinc/-nostdinc++ if needed; can't be overridden diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index f0ea09b..39e4ce9 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -2137,8 +2137,7 @@ rule FORTRAN_DEP_HACK return incs def _generate_single_compile(self, target, compiler, is_generated=False): - base_proxy = backends.OptionOverrideProxy(target.option_overrides, - self.environment.coredata.base_options) + base_proxy = self.get_base_options_for_target(target) # Create an empty commands list, and start adding arguments from # various sources in the order in which they must override each other commands = CompilerArgs(compiler) diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index f8dfc96..65c942b 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -315,7 +315,9 @@ def get_base_compile_args(options, compiler): except KeyError: pass try: - if options['b_ndebug'].value == 'true' or (options['b_ndebug'].value == 'if-release' and options['buildtype'] == 'release'): + if (options['b_ndebug'].value == 'true' or + (options['b_ndebug'].value == 'if-release' and + options['buildtype'].value == 'release')): args += ['-DNDEBUG'] except KeyError: pass -- cgit v1.1 From 6910f604ed60ffc5da37b86c4ab6d3f2da618c60 Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Wed, 21 Mar 2018 17:30:21 +0000 Subject: Disable b_ndebug tests on MSVC --- test cases/common/185 ndebug if-release enabled/meson.build | 4 ++++ test cases/common/186 ndebug if-release disabled/meson.build | 4 ++++ test cases/unit/25 ndebug if-release/meson.build | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/test cases/common/185 ndebug if-release enabled/meson.build b/test cases/common/185 ndebug if-release enabled/meson.build index be26375..ac4f0e7 100644 --- a/test cases/common/185 ndebug if-release enabled/meson.build +++ b/test cases/common/185 ndebug if-release enabled/meson.build @@ -4,4 +4,8 @@ project('ndebug enabled', 'c', 'b_ndebug=if-release', ]) +if meson.get_compiler('c').get_id() == 'msvc' + error('MESON_SKIP_TEST b_ndebug is not supported on Visual Studio') +endif + test('exe', executable('main', 'main.c')) diff --git a/test cases/common/186 ndebug if-release disabled/meson.build b/test cases/common/186 ndebug if-release disabled/meson.build index a9a79ea..f2678ed 100644 --- a/test cases/common/186 ndebug if-release disabled/meson.build +++ b/test cases/common/186 ndebug if-release disabled/meson.build @@ -4,4 +4,8 @@ project('ndebug disabled', 'c', 'b_ndebug=if-release', ]) +if meson.get_compiler('c').get_id() == 'msvc' + error('MESON_SKIP_TEST b_ndebug is not supported on Visual Studio') +endif + test('exe', executable('main', 'main.c')) diff --git a/test cases/unit/25 ndebug if-release/meson.build b/test cases/unit/25 ndebug if-release/meson.build index 4af2406..d45bd86 100644 --- a/test cases/unit/25 ndebug if-release/meson.build +++ b/test cases/unit/25 ndebug if-release/meson.build @@ -1,3 +1,7 @@ project('ndebug enabled', 'c') +if meson.get_compiler('c').get_id() == 'msvc' + error('MESON_SKIP_TEST b_ndebug is not supported on Visual Studio') +endif + executable('main', 'main.c') -- cgit v1.1