diff --git a/interpreter.py b/interpreter.py index 1ca1713c1..d01ebc00d 100644 --- a/interpreter.py +++ b/interpreter.py @@ -301,9 +301,10 @@ class Headers(InterpreterObject): return self.custom_install_dir class Data(InterpreterObject): - def __init__(self, subdir, sources, kwargs): + def __init__(self, source_subdir, subdir, sources, kwargs): InterpreterObject.__init__(self) - self.subdir = subdir + self.source_subdir = source_subdir + self.install_subdir = subdir self.sources = sources kwsource = kwargs.get('sources', []) if not isinstance(kwsource, list): @@ -313,8 +314,11 @@ class Data(InterpreterObject): if self.custom_install_dir is not None and not isinstance(self.custom_install_dir, str): raise InterpreterException('Custom_install_dir must be a string.') - def get_subdir(self): - return self.subdir + def get_install_subdir(self): + return self.install_subdir + + def get_source_subdir(self): + return self.source_subdir def get_sources(self): return self.sources @@ -1210,7 +1214,7 @@ class Interpreter(): for a in args: if not isinstance(a, str): raise InvalidArguments('Argument %s is not a string.' % str(a)) - data = Data(args[0], args[1:], kwargs) + data = Data(self.subdir, args[0], args[1:], kwargs) self.build.data.append(data) return data diff --git a/ninjabackend.py b/ninjabackend.py index 178e371e6..398b0efdf 100644 --- a/ninjabackend.py +++ b/ninjabackend.py @@ -459,9 +459,9 @@ class NinjaBackend(backends.Backend): for de in data: subdir = de.get_custom_install_dir() if subdir is None: - subdir = os.path.join(dataroot, de.get_subdir()) + subdir = os.path.join(dataroot, de.get_install_subdir()) for f in de.get_sources(): - srcabs = os.path.join(self.environment.get_source_dir(), f) + srcabs = os.path.join(self.environment.get_source_dir(), de.get_source_subdir(), f) dstabs = os.path.join(subdir, f) i = [srcabs, dstabs] d.data.append(i) diff --git a/test cases/common/12 data/installed_files.txt b/test cases/common/12 data/installed_files.txt index 362b7ce97..8d7ff7073 100644 --- a/test cases/common/12 data/installed_files.txt +++ b/test cases/common/12 data/installed_files.txt @@ -1 +1,2 @@ share/progname/datafile.dat +share/progname/vanishing.dat diff --git a/test cases/common/12 data/meson.build b/test cases/common/12 data/meson.build index ea9cfd73e..850704624 100644 --- a/test cases/common/12 data/meson.build +++ b/test cases/common/12 data/meson.build @@ -1,2 +1,3 @@ project('data install test', 'c') install_data('progname', sources : 'datafile.dat') +subdir('vanishing') diff --git a/test cases/common/12 data/vanishing/meson.build b/test cases/common/12 data/vanishing/meson.build new file mode 100644 index 000000000..d2283e701 --- /dev/null +++ b/test cases/common/12 data/vanishing/meson.build @@ -0,0 +1 @@ +install_data('progname', sources : 'vanishing.dat') \ No newline at end of file diff --git a/test cases/common/12 data/vanishing/vanishing.dat b/test cases/common/12 data/vanishing/vanishing.dat new file mode 100644 index 000000000..b7d06090e --- /dev/null +++ b/test cases/common/12 data/vanishing/vanishing.dat @@ -0,0 +1 @@ +This is a data file to be installed in a subdirectory.