diff options
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 7b87843c..af83c0e54 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -2091,6 +2091,7 @@ class Interpreter(InterpreterBase, HoldableObject): @typed_kwargs( 'install_headers', KwargInfo('install_dir', (str, NoneType)), + KwargInfo('preserve_path', bool, default=False, since='0.63.0'), KwargInfo('subdir', (str, NoneType)), INSTALL_MODE_KW.evolve(since='0.47.0'), ) @@ -2104,12 +2105,25 @@ class Interpreter(InterpreterBase, HoldableObject): raise InterpreterException('install_headers: cannot specify both "install_dir" and "subdir". Use only "install_dir".') if os.path.isabs(install_subdir): mlog.deprecation('Subdir keyword must not be an absolute path. This will be a hard error in the next release.') + else: + install_subdir = '' + + dirs = collections.defaultdict(list) + ret_headers = [] + if kwargs['preserve_path']: + for file in source_files: + dirname = os.path.dirname(file.fname) + dirs[dirname].append(file) + else: + dirs[''].extend(source_files) - h = build.Headers(source_files, install_subdir, kwargs['install_dir'], - kwargs['install_mode'], self.subproject) - self.build.headers.append(h) + for childdir in dirs: + h = build.Headers(dirs[childdir], os.path.join(install_subdir, childdir), kwargs['install_dir'], + kwargs['install_mode'], self.subproject) + ret_headers.append(h) + self.build.headers.append(h) - return h + return ret_headers @typed_pos_args('install_man', varargs=(str, mesonlib.File)) @typed_kwargs( |