aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-12-17 22:42:20 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2017-12-17 22:42:20 +0200
commitb949c4792d5893dabbc0cb3dcc2f58aa173d8efc (patch)
treea10c2f7879efe16b3df655cfe21f386a557a44be
parentee9832cdb180aad535a37f973148149df5ef3a1c (diff)
downloadmeson-b949c4792d5893dabbc0cb3dcc2f58aa173d8efc.zip
meson-b949c4792d5893dabbc0cb3dcc2f58aa173d8efc.tar.gz
meson-b949c4792d5893dabbc0cb3dcc2f58aa173d8efc.tar.bz2
Preserve_path_from should be a kwarg of process(), not generator().
-rw-r--r--mesonbuild/build.py27
-rw-r--r--mesonbuild/interpreter.py13
-rw-r--r--test cases/common/173 preserve gendir/meson.build5
-rw-r--r--test cases/frameworks/5 protocol buffers/withpath/meson.build5
4 files changed, 27 insertions, 23 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 59382a4..2b5412d 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -1072,16 +1072,6 @@ class Generator:
if not isinstance(capture, bool):
raise InvalidArguments('Capture must be boolean.')
self.capture = capture
- if 'preserve_path_from' in kwargs:
- self.preserve_path_from = kwargs['preserve_path_from']
- if not isinstance(self.preserve_path_from, str):
- raise InvalidArguments('Preserve_path_from must be a string.')
- self.preserve_path_from = os.path.normpath(self.preserve_path_from)
- if not os.path.isabs(self.preserve_path_from):
- # This is a bit of a hack. Fix properly before merging.
- raise InvalidArguments('Preserve_path_from must be an absolute path for now. Sorry.')
- else:
- self.preserve_path_from = None
def get_base_outnames(self, inname):
plainname = os.path.split(inname)[1]
@@ -1105,23 +1095,23 @@ class Generator:
relpath = os.path.relpath(os.path.normpath(trial), os.path.normpath(parent))
return not relpath.startswith('..') # For subdirs we can only go "down".
- def process_files(self, name, files, state, extra_args=[]):
- output = GeneratedList(self, extra_args=extra_args)
+ def process_files(self, name, files, state, preserve_path_from=None, extra_args=[]):
+ output = GeneratedList(self, preserve_path_from, extra_args=extra_args)
for f in files:
if isinstance(f, str):
f = File.from_source_file(state.environment.source_dir, state.subdir, f)
elif not isinstance(f, File):
raise InvalidArguments('{} arguments must be strings or files not {!r}.'.format(name, f))
- if self.preserve_path_from:
+ if preserve_path_from:
abs_f = f.absolute_path(state.environment.source_dir, state.environment.build_dir)
- if not self.is_parent_path(self.preserve_path_from, abs_f):
+ if not self.is_parent_path(preserve_path_from, abs_f):
raise InvalidArguments('When using preserve_path_from, all input files must be in a subdirectory of the given dir.')
output.add_file(f, state)
return output
class GeneratedList:
- def __init__(self, generator, extra_args=[]):
+ def __init__(self, generator, preserve_path_from=None, extra_args=[]):
if hasattr(generator, 'held_object'):
generator = generator.held_object
self.generator = generator
@@ -1130,13 +1120,14 @@ class GeneratedList:
self.outfilelist = []
self.outmap = {}
self.extra_depends = []
+ self.preserve_path_from = preserve_path_from
self.extra_args = extra_args
def add_preserved_path_segment(self, infile, outfiles, state):
result = []
in_abs = infile.absolute_path(state.environment.source_dir, state.environment.build_dir)
- assert(os.path.isabs(self.generator.preserve_path_from))
- rel = os.path.relpath(in_abs, self.generator.preserve_path_from)
+ assert(os.path.isabs(self.preserve_path_from))
+ rel = os.path.relpath(in_abs, self.preserve_path_from)
path_segment = os.path.split(rel)[0]
for of in outfiles:
result.append(os.path.join(path_segment, of))
@@ -1145,7 +1136,7 @@ class GeneratedList:
def add_file(self, newfile, state):
self.infilelist.append(newfile)
outfiles = self.generator.get_base_outnames(newfile.fname)
- if self.generator.preserve_path_from:
+ if self.preserve_path_from:
outfiles = self.add_preserved_path_segment(newfile, outfiles, state)
self.outfilelist += outfiles
self.outmap[newfile] = outfiles
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index ea741a0..a5aa5fa 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -375,7 +375,18 @@ class GeneratorHolder(InterpreterObject, ObjectHolder):
def process_method(self, args, kwargs):
extras = mesonlib.stringlistify(kwargs.get('extra_args', []))
- gl = self.held_object.process_files('Generator', args, self.interpreter, extra_args=extras)
+ if 'preserve_path_from' in kwargs:
+ preserve_path_from = kwargs['preserve_path_from']
+ if not isinstance(preserve_path_from, str):
+ raise InvalidArguments('Preserve_path_from must be a string.')
+ preserve_path_from = os.path.normpath(preserve_path_from)
+ if not os.path.isabs(preserve_path_from):
+ # This is a bit of a hack. Fix properly before merging.
+ raise InvalidArguments('Preserve_path_from must be an absolute path for now. Sorry.')
+ else:
+ preserve_path_from = None
+ gl = self.held_object.process_files('Generator', args, self.interpreter,
+ preserve_path_from, extra_args=extras)
return GeneratedListHolder(gl)
diff --git a/test cases/common/173 preserve gendir/meson.build b/test cases/common/173 preserve gendir/meson.build
index b1a63b1..ce219f0 100644
--- a/test cases/common/173 preserve gendir/meson.build
+++ b/test cases/common/173 preserve gendir/meson.build
@@ -4,9 +4,10 @@ gprog = find_program('genprog.py')
gen = generator(gprog, \
output : ['@BASENAME@.c', '@BASENAME@.h'],
- preserve_path_from : meson.current_source_dir(),
arguments : ['--searchdir=@CURRENT_SOURCE_DIR@', '--outdir=@BUILD_DIR@', '@INPUT@'])
-generated = gen.process('base.inp', 'com/mesonbuild/subbie.inp')
+generated = gen.process('base.inp', 'com/mesonbuild/subbie.inp',
+ preserve_path_from : meson.current_source_dir())
+
e = executable('testprog', 'testprog.c', generated)
test('testprog', e)
diff --git a/test cases/frameworks/5 protocol buffers/withpath/meson.build b/test cases/frameworks/5 protocol buffers/withpath/meson.build
index f5b453e..a269c97 100644
--- a/test cases/frameworks/5 protocol buffers/withpath/meson.build
+++ b/test cases/frameworks/5 protocol buffers/withpath/meson.build
@@ -4,11 +4,12 @@
gen = generator(protoc, \
output : ['@BASENAME@.pb.cc', '@BASENAME@.pb.h'],
- preserve_path_from : meson.current_source_dir(),
arguments : ['--proto_path=@CURRENT_SOURCE_DIR@', '--cpp_out=@BUILD_DIR@', '@INPUT@'])
generated = gen.process('com/mesonbuild/simple.proto',
- 'com/mesonbuild/subsite/complex.proto')
+ 'com/mesonbuild/subsite/complex.proto',
+ preserve_path_from : meson.current_source_dir(),
+ )
e = executable('pathprog', 'pathprog.cpp', generated,
dependencies : dep)
test('pathprog', e)