aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter
diff options
context:
space:
mode:
authorPablo Correa Gómez <ablocorrea@hotmail.com>2021-11-22 15:46:15 +0100
committerEli Schwartz <eschwartz93@gmail.com>2021-12-01 13:59:54 -0500
commit4f882ff8ec81cbc42b097d3aee8ca4a8013f538b (patch)
tree9cef0e48e71fda1e116023ca8f0791cdfea59b2c /mesonbuild/interpreter
parentbb5a09de45a99b657b16edef7a9be423735aec79 (diff)
downloadmeson-4f882ff8ec81cbc42b097d3aee8ca4a8013f538b.zip
meson-4f882ff8ec81cbc42b097d3aee8ca4a8013f538b.tar.gz
meson-4f882ff8ec81cbc42b097d3aee8ca4a8013f538b.tar.bz2
add install_symlink function
Allows installing symlinks directly from meson, which can become useful in multiple scenarios. Current main use is to help moving forward #9557
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r--mesonbuild/interpreter/interpreter.py22
-rw-r--r--mesonbuild/interpreter/interpreterobjects.py3
2 files changed, 25 insertions, 0 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 97e1a06..ae6be3b 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -364,6 +364,7 @@ class Interpreter(InterpreterBase, HoldableObject):
'install_headers': self.func_install_headers,
'install_man': self.func_install_man,
'install_subdir': self.func_install_subdir,
+ 'install_symlink': self.func_install_symlink,
'is_disabler': self.func_is_disabler,
'is_variable': self.func_is_variable,
'jar': self.func_jar,
@@ -425,6 +426,7 @@ class Interpreter(InterpreterBase, HoldableObject):
build.Man: OBJ.ManHolder,
build.EmptyDir: OBJ.EmptyDirHolder,
build.Data: OBJ.DataHolder,
+ build.SymlinkData: OBJ.SymlinkDataHolder,
build.InstallDir: OBJ.InstallDirHolder,
build.IncludeDirs: OBJ.IncludeDirsHolder,
build.EnvironmentVariables: OBJ.EnvironmentVariablesHolder,
@@ -476,6 +478,8 @@ class Interpreter(InterpreterBase, HoldableObject):
self.build.install_scripts.append(v)
elif isinstance(v, build.Data):
self.build.data.append(v)
+ elif isinstance(v, build.SymlinkData):
+ self.build.symlinks.append(v)
elif isinstance(v, dependencies.InternalDependency):
# FIXME: This is special cased and not ideal:
# The first source is our new VapiTarget, the rest are deps
@@ -1968,6 +1972,24 @@ This will become a hard error in the future.''', location=node)
return d
+ @FeatureNew('install_symlink', '0.61.0')
+ @typed_pos_args('symlink_name', str)
+ @typed_kwargs(
+ 'install_symlink',
+ KwargInfo('pointing_to', str, required=True),
+ KwargInfo('install_dir', str, required=True),
+ KwargInfo('install_tag', (str, NoneType)),
+ )
+ def func_install_symlink(self, node: mparser.BaseNode,
+ args: T.Tuple[T.List[str]],
+ kwargs) -> build.SymlinkData:
+ name = args[0] # Validation while creating the SymlinkData object
+ target = kwargs['pointing_to']
+ l = build.SymlinkData(target, name, kwargs['install_dir'],
+ self.subproject, kwargs['install_tag'])
+ self.build.symlinks.append(l)
+ return l
+
@typed_pos_args('subdir', str)
@typed_kwargs(
'subdir',
diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py
index 602623a..6ff4b0f 100644
--- a/mesonbuild/interpreter/interpreterobjects.py
+++ b/mesonbuild/interpreter/interpreterobjects.py
@@ -641,6 +641,9 @@ class HeadersHolder(ObjectHolder[build.Headers]):
class DataHolder(ObjectHolder[build.Data]):
pass
+class SymlinkDataHolder(ObjectHolder[build.SymlinkData]):
+ pass
+
class InstallDirHolder(ObjectHolder[build.InstallDir]):
pass