Skip to content

Commit 0544ffa

Browse files
committed
add builtin option to install licenses
Unless `meson.install_dependency_manifest()` is explicitly used, this will cause a default implied one to be installed.
1 parent 2fa0749 commit 0544ffa

6 files changed

Lines changed: 27 additions & 6 deletions

File tree

‎docs/markdown/Builtin-options.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ not be relied on, since they can be absolute paths in the following cases:
4141
| includedir | include | Header file directory |
4242
| infodir | share/info | Info page directory |
4343
| libdir | see below | Library directory |
44+
| licensedir | see below | Licenses directory (since 1.1.0)|
4445
| libexecdir | libexec | Library executable directory |
4546
| localedir | share/locale | Locale data directory |
4647
| localstatedir | var | Localstate data directory |
@@ -61,6 +62,10 @@ different distributions have different defaults. Using a [cross
6162
file](Cross-compilation.md#defining-the-environment), particularly the
6263
paths section may be necessary.
6364

65+
`licensedir` is empty by default. If set, it defines the default location
66+
to install a dependency manifest and project licenses. For more details,
67+
see [[meson.install_dependency_manifest]].
68+
6469
### Core options
6570

6671
Options that are labeled "per machine" in the table are set per
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
## A new core directory option "licensedir" is available
2+
3+
This will install a dependency manifest to the specified directory, if none
4+
is is explicitly set.

‎docs/yaml/builtins/meson.yaml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,10 @@ methods:
323323
If license files are defined as well, they will be copied next to the
324324
manifest and referenced in it.
325325
326+
If this function is not used, the builtin option `licensedir` can
327+
be used to install the manifest to a given directory with the name
328+
`depmf.json`.
329+
326330
posargs:
327331
output_name:
328332
type: str

‎mesonbuild/backend/backends.py‎

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,13 +1187,19 @@ def construct_target_rel_paths(self, t: T.Union[build.Target, build.CustomTarget
11871187
return outputs
11881188

11891189
def generate_depmf_install(self, d: InstallData) -> None:
1190-
if self.build.dep_manifest_name is None:
1191-
return
1190+
depmf_path = self.build.dep_manifest_name
1191+
if depmf_path is None:
1192+
option_dir = self.environment.coredata.get_option(OptionKey('licensedir'))
1193+
assert isinstance(option_dir, str), 'for mypy'
1194+
if option_dir:
1195+
depmf_path = os.path.join(option_dir, 'depmf.json')
1196+
else:
1197+
return
11921198
ifilename = os.path.join(self.environment.get_build_dir(), 'depmf.json')
1193-
ofilename = os.path.join(self.environment.get_prefix(), self.build.dep_manifest_name)
1194-
odirname = os.path.join(self.environment.get_prefix(), os.path.dirname(self.build.dep_manifest_name))
1195-
out_name = os.path.join('{prefix}', self.build.dep_manifest_name)
1196-
out_dir = os.path.join('{prefix}', os.path.dirname(self.build.dep_manifest_name))
1199+
ofilename = os.path.join(self.environment.get_prefix(), depmf_path)
1200+
odirname = os.path.join(self.environment.get_prefix(), os.path.dirname(depmf_path))
1201+
out_name = os.path.join('{prefix}', depmf_path)
1202+
out_dir = os.path.join('{prefix}', os.path.dirname(depmf_path))
11971203
mfobj = {'type': 'dependency manifest', 'version': '1.0',
11981204
'projects': {k: v.to_json() for k, v in self.build.dep_manifest.items()}}
11991205
with open(ifilename, 'w', encoding='utf-8') as f:

‎mesonbuild/coredata.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,6 +1197,7 @@ def add_to_argparse(self, name: str, parser: argparse.ArgumentParser, help_suffi
11971197
(OptionKey('includedir'), BuiltinOption(UserStringOption, 'Header file directory', 'include')),
11981198
(OptionKey('infodir'), BuiltinOption(UserStringOption, 'Info page directory', 'share/info')),
11991199
(OptionKey('libdir'), BuiltinOption(UserStringOption, 'Library directory', default_libdir())),
1200+
(OptionKey('licensedir'), BuiltinOption(UserStringOption, 'Licenses directory', '')),
12001201
(OptionKey('libexecdir'), BuiltinOption(UserStringOption, 'Library executable directory', default_libexecdir())),
12011202
(OptionKey('localedir'), BuiltinOption(UserStringOption, 'Locale data directory', 'share/locale')),
12021203
(OptionKey('localstatedir'), BuiltinOption(UserStringOption, 'Localstate data directory', 'var')),

‎mesonbuild/utils/universal.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2062,6 +2062,7 @@ class OptionType(enum.IntEnum):
20622062
'includedir',
20632063
'infodir',
20642064
'libdir',
2065+
'licensedir',
20652066
'libexecdir',
20662067
'localedir',
20672068
'localstatedir',

0 commit comments

Comments
 (0)