From e4ff4b7c8c9326c8c7b1b5618dcbf54ee9ae24b8 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Fri, 16 Oct 2015 00:03:51 +0300 Subject: [PATCH] Can specify version requirements to subprojects. --- interpreter.py | 9 +++++++-- test cases/common/49 subproject/meson.build | 2 +- test cases/failing/21 subver/meson.build | 3 +++ test cases/failing/21 subver/subprojects/foo/meson.build | 1 + 4 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 test cases/failing/21 subver/meson.build create mode 100644 test cases/failing/21 subver/subprojects/foo/meson.build diff --git a/interpreter.py b/interpreter.py index 7e677115b..9e494f09c 100644 --- a/interpreter.py +++ b/interpreter.py @@ -1196,7 +1196,6 @@ class Interpreter(): self.build.pkgconfig_gens.append(p) @stringArgs - @noKwargs def func_subproject(self, nodes, args, kwargs): if len(args) != 1: raise InterpreterException('Subproject takes exactly one argument') @@ -1225,6 +1224,11 @@ class Interpreter(): subi.subproject_stack = self.subproject_stack + [dirname] current_active = self.active_projectname subi.run() + if 'version' in kwargs: + pv = subi.project_version + wanted = kwargs['version'] + if not mesonlib.version_compare(pv, wanted): + raise InterpreterException('Subproject %s version is %s but %s required.' % (dirname, pv, wanted)) self.active_projectname = current_active mlog.log('\nSubproject', mlog.bold(dirname), 'finished.') self.build.subprojects[dirname] = True @@ -1268,7 +1272,8 @@ class Interpreter(): if not self.is_subproject(): self.build.project_name = args[0] self.active_projectname = args[0] - self.build.dep_manifest[args[0]] = kwargs.get('version', 'undefined') + self.project_version = kwargs.get('version', 'undefined') + self.build.dep_manifest[args[0]] = self.project_version if self.subproject in self.build.projects: raise InvalidCode('Second call to project().') if not self.is_subproject() and 'subproject_dir' in kwargs: diff --git a/test cases/common/49 subproject/meson.build b/test cases/common/49 subproject/meson.build index 9b5171b09..2616853b5 100644 --- a/test cases/common/49 subproject/meson.build +++ b/test cases/common/49 subproject/meson.build @@ -1,6 +1,6 @@ project('subproj user', 'c', version : '2.3.4') -sub = subproject('sublib') +sub = subproject('sublib', version : '1.0.0') if meson.project_version() != '2.3.4' error('Incorrect master project version string:' + meson.project_version()) diff --git a/test cases/failing/21 subver/meson.build b/test cases/failing/21 subver/meson.build new file mode 100644 index 000000000..854f13ce0 --- /dev/null +++ b/test cases/failing/21 subver/meson.build @@ -0,0 +1,3 @@ +project('master', 'c') + +x = subproject('foo', version : '>1.0.0') diff --git a/test cases/failing/21 subver/subprojects/foo/meson.build b/test cases/failing/21 subver/subprojects/foo/meson.build new file mode 100644 index 000000000..f4ff53548 --- /dev/null +++ b/test cases/failing/21 subver/subprojects/foo/meson.build @@ -0,0 +1 @@ +project('foo', 'c', version : '1.0.0')