aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2015-08-21 20:50:40 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2015-08-21 22:11:44 +0300
commit5ffe46bc6a09461b046c3deefbf5ed9d84a0c5c1 (patch)
treee9a248f7d38d546d9d1ab9473b09cf382778a61d
parent24d23c3086afe687cc93b26a07f504902f4a0b02 (diff)
downloadmeson-5ffe46bc6a09461b046c3deefbf5ed9d84a0c5c1.zip
meson-5ffe46bc6a09461b046c3deefbf5ed9d84a0c5c1.tar.gz
meson-5ffe46bc6a09461b046c3deefbf5ed9d84a0c5c1.tar.bz2
Add version numbers to projects and generate a dep manifest.
-rw-r--r--backends.py12
-rw-r--r--build.py3
-rw-r--r--interpreter.py18
-rw-r--r--ninjabackend.py1
-rw-r--r--test cases/common/49 subproject/installed_files.txt1
-rw-r--r--test cases/common/49 subproject/meson.build8
-rw-r--r--test cases/common/49 subproject/subprojects/sublib/meson.build6
7 files changed, 45 insertions, 4 deletions
diff --git a/backends.py b/backends.py
index 05e4429..d3c3157 100644
--- a/backends.py
+++ b/backends.py
@@ -16,6 +16,7 @@ import os, pickle
import build
import dependencies
import mesonlib
+import json
from coredata import MesonException
class TestSerialisation:
@@ -303,3 +304,14 @@ class Backend():
ofile.write(' ')
ofile.write('\n')
+
+ def generate_depmf_install(self, d):
+ if self.build.dep_manifest_name is None:
+ return
+ ifilename = os.path.join(self.environment.get_build_dir(), 'depmf.json')
+ ofilename = os.path.join(self.environment.get_prefix(), self.build.dep_manifest_name)
+ mfobj = {'type': 'dependency manifest',
+ 'version': '1.0'}
+ mfobj['projects'] = self.build.dep_manifest
+ open(ifilename, 'w').write(json.dumps(mfobj))
+ d.data.append([ifilename, ofilename])
diff --git a/build.py b/build.py
index 80fb2ca..cadfb89 100644
--- a/build.py
+++ b/build.py
@@ -57,6 +57,7 @@ class Build:
def __init__(self, environment):
self.project_name = 'name of master project'
+ self.project_version = None
self.environment = environment
self.projects = {}
self.targets = {}
@@ -74,6 +75,8 @@ class Build:
self.pkgconfig_gens = []
self.install_scripts = []
self.install_dirs = []
+ self.dep_manifest_name = None
+ self.dep_manifest = {}
def has_language(self, language):
for i in self.compilers:
diff --git a/interpreter.py b/interpreter.py
index bc2f6f3..4202496 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -723,6 +723,8 @@ class MesonMain(InterpreterObject):
'source_root' : self.source_root_method,
'build_root' : self.build_root_method,
'add_install_script' : self.add_install_script_method,
+ 'install_dependency_manifest': self.install_dependency_manifest_method,
+ 'project_version': self.project_version_method,
})
def add_install_script_method(self, args, kwargs):
@@ -791,6 +793,16 @@ class MesonMain(InterpreterObject):
def is_subproject_method(self, args, kwargs):
return self.interpreter.is_subproject()
+ def install_dependency_manifest_method(self, args, kwargs):
+ if len(args) != 1:
+ raise InterpreterException('Must specify manifest install file name')
+ if not isinstance(args[0], str):
+ raise InterpreterException('Argument must be a string.')
+ self.build.dep_manifest_name = args[0]
+
+ def project_version_method(self, args, kwargs):
+ return self.build.dep_manifest[self.interpreter.active_projectname]
+
class Interpreter():
def __init__(self, build, subproject='', subdir='', subproject_dir='subprojects'):
@@ -1168,7 +1180,9 @@ class Interpreter():
subi.subprojects = self.subprojects
subi.subproject_stack = self.subproject_stack + [dirname]
+ current_active = self.active_projectname
subi.run()
+ self.active_projectname = current_active
mlog.log('\nSubproject', mlog.bold(dirname), 'finished.')
self.build.subprojects[dirname] = True
self.subprojects.update(subi.subprojects)
@@ -1202,11 +1216,11 @@ class Interpreter():
def func_project(self, node, args, kwargs):
if len(args) < 2:
raise InvalidArguments('Not enough arguments to project(). Needs at least the project name and one language')
- if list(kwargs.keys()) != ['subproject_dir'] and len(kwargs) != 0:
- raise InvalidArguments('project() only accepts the keyword argument "subproject_dir"')
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')
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/ninjabackend.py b/ninjabackend.py
index cefed1f..a51ea5f 100644
--- a/ninjabackend.py
+++ b/ninjabackend.py
@@ -383,6 +383,7 @@ class NinjaBackend(backends.Backend):
elem.add_item('DESC', 'Installing files.')
elem.add_item('COMMAND', [sys.executable, install_script, install_data_file])
elem.add_item('pool', 'console')
+ self.generate_depmf_install(d)
self.generate_target_install(d)
self.generate_header_install(d)
self.generate_man_install(d)
diff --git a/test cases/common/49 subproject/installed_files.txt b/test cases/common/49 subproject/installed_files.txt
index 55a8595..f2e1e27 100644
--- a/test cases/common/49 subproject/installed_files.txt
+++ b/test cases/common/49 subproject/installed_files.txt
@@ -1,2 +1,3 @@
usr/bin/user
usr/lib/libsublib.so
+usr/share/sublib/sublib.depmf
diff --git a/test cases/common/49 subproject/meson.build b/test cases/common/49 subproject/meson.build
index 613a9f3..9b5171b 100644
--- a/test cases/common/49 subproject/meson.build
+++ b/test cases/common/49 subproject/meson.build
@@ -1,7 +1,11 @@
-project('subproj user', 'c')
+project('subproj user', 'c', version : '2.3.4')
sub = subproject('sublib')
+if meson.project_version() != '2.3.4'
+ error('Incorrect master project version string:' + meson.project_version())
+endif
+
if meson.is_subproject()
error('Claimed to be a subproject even though we are the master project.')
endif
@@ -11,3 +15,5 @@ lib = sub.get_variable('l')
e = executable('user', 'user.c', include_directories : inc, link_with : lib, install : true)
test('subdirtest', e)
+
+meson.install_dependency_manifest('share/sublib/sublib.depmf')
diff --git a/test cases/common/49 subproject/subprojects/sublib/meson.build b/test cases/common/49 subproject/subprojects/sublib/meson.build
index 0b6911d..922c6cf 100644
--- a/test cases/common/49 subproject/subprojects/sublib/meson.build
+++ b/test cases/common/49 subproject/subprojects/sublib/meson.build
@@ -1,9 +1,13 @@
-project('subproject', 'c')
+project('subproject', 'c', version : '1.0.0')
if not meson.is_subproject()
error('Claimed to be master project even though we are a subproject.')
endif
+if meson.project_version() != '1.0.0'
+ error('Incorrect version string in subproject.')
+endif
+
i = include_directories('include')
l = shared_library('sublib', 'sublib.c', include_directories : i, install : true,
c_args : '-DBUILDING_SUB=2')