Add support for BuildTargetTypes to various fs module functions
The new support was added to fs.name, fs.parent, fs.replace_suffix, and fs.stem.
This commit is contained in:
parent
0b19d1c015
commit
6a119256a1
|
@ -0,0 +1,9 @@
|
|||
## Added support for `[[@build_tgt]]`, `[[@custom_tgt]]`, and `[[@custom_idx]]` to certain FS module functions
|
||||
|
||||
Support for `[[@build_tgt]]`, `[[@custom_tgt]]`, and `[[@custom_idx]]` was
|
||||
added to the following FS module APIs:
|
||||
|
||||
- `fs.name`
|
||||
- `fs.parent`
|
||||
- `fs.replace_suffix`
|
||||
- `fs.stem`
|
|
@ -72,6 +72,18 @@ class FSModule(ExtensionModule):
|
|||
return Path(arg.absolute_path(state.source_root, state.environment.get_build_dir()))
|
||||
return Path(state.source_root) / Path(state.subdir) / Path(arg).expanduser()
|
||||
|
||||
@staticmethod
|
||||
def _obj_to_path(feature_new_prefix: str, obj: T.Union[FileOrString, BuildTargetTypes], state: ModuleState) -> PurePath:
|
||||
if isinstance(obj, str):
|
||||
return PurePath(obj)
|
||||
|
||||
if isinstance(obj, File):
|
||||
FeatureNew(f'{feature_new_prefix} with file', '0.59.0').use(state.subproject, location=state.current_node)
|
||||
return PurePath(str(obj))
|
||||
|
||||
FeatureNew(f'{feature_new_prefix} with build_tgt, custom_tgt, and custom_idx', '1.4.0').use(state.subproject, location=state.current_node)
|
||||
return PurePath(state.backend.get_target_filename(obj))
|
||||
|
||||
def _resolve_dir(self, state: 'ModuleState', arg: 'FileOrString') -> Path:
|
||||
"""
|
||||
resolves symlinks and makes absolute a directory relative to calling meson.build,
|
||||
|
@ -178,41 +190,29 @@ class FSModule(ExtensionModule):
|
|||
return False
|
||||
|
||||
@noKwargs
|
||||
@typed_pos_args('fs.replace_suffix', (str, File), str)
|
||||
def replace_suffix(self, state: 'ModuleState', args: T.Tuple['FileOrString', str], kwargs: T.Dict[str, T.Any]) -> str:
|
||||
if isinstance(args[0], File):
|
||||
FeatureNew('fs.replace_suffix with file', '0.59.0').use(state.subproject, location=state.current_node)
|
||||
original = PurePath(str(args[0]))
|
||||
new = original.with_suffix(args[1])
|
||||
return str(new)
|
||||
@typed_pos_args('fs.replace_suffix', (str, File, CustomTarget, CustomTargetIndex, BuildTarget), str)
|
||||
def replace_suffix(self, state: 'ModuleState', args: T.Tuple[T.Union[FileOrString, BuildTargetTypes], str], kwargs: T.Dict[str, T.Any]) -> str:
|
||||
path = self._obj_to_path('fs.replace_suffix', args[0], state)
|
||||
return str(path.with_suffix(args[1]))
|
||||
|
||||
@noKwargs
|
||||
@typed_pos_args('fs.parent', (str, File))
|
||||
def parent(self, state: 'ModuleState', args: T.Tuple['FileOrString'], kwargs: T.Dict[str, T.Any]) -> str:
|
||||
if isinstance(args[0], File):
|
||||
FeatureNew('fs.parent_file', '0.59.0').use(state.subproject, location=state.current_node)
|
||||
original = PurePath(str(args[0]))
|
||||
new = original.parent
|
||||
return str(new)
|
||||
@typed_pos_args('fs.parent', (str, File, CustomTarget, CustomTargetIndex, BuildTarget))
|
||||
def parent(self, state: 'ModuleState', args: T.Tuple[T.Union[FileOrString, BuildTargetTypes]], kwargs: T.Dict[str, T.Any]) -> str:
|
||||
path = self._obj_to_path('fs.parent', args[0], state)
|
||||
return str(path.parent)
|
||||
|
||||
@noKwargs
|
||||
@typed_pos_args('fs.name', (str, File))
|
||||
def name(self, state: 'ModuleState', args: T.Tuple['FileOrString'], kwargs: T.Dict[str, T.Any]) -> str:
|
||||
if isinstance(args[0], File):
|
||||
FeatureNew('fs.name with file', '0.59.0').use(state.subproject, location=state.current_node)
|
||||
original = PurePath(str(args[0]))
|
||||
new = original.name
|
||||
return str(new)
|
||||
@typed_pos_args('fs.name', (str, File, CustomTarget, CustomTargetIndex, BuildTarget))
|
||||
def name(self, state: 'ModuleState', args: T.Tuple[T.Union[FileOrString, BuildTargetTypes]], kwargs: T.Dict[str, T.Any]) -> str:
|
||||
path = self._obj_to_path('fs.name', args[0], state)
|
||||
return str(path.name)
|
||||
|
||||
@noKwargs
|
||||
@typed_pos_args('fs.stem', (str, File))
|
||||
@typed_pos_args('fs.stem', (str, File, CustomTarget, CustomTargetIndex, BuildTarget))
|
||||
@FeatureNew('fs.stem', '0.54.0')
|
||||
def stem(self, state: 'ModuleState', args: T.Tuple['FileOrString'], kwargs: T.Dict[str, T.Any]) -> str:
|
||||
if isinstance(args[0], File):
|
||||
FeatureNew('fs.stem with file', '0.59.0').use(state.subproject, location=state.current_node)
|
||||
original = PurePath(str(args[0]))
|
||||
new = original.stem
|
||||
return str(new)
|
||||
def stem(self, state: 'ModuleState', args: T.Tuple[T.Union[FileOrString, BuildTargetTypes]], kwargs: T.Dict[str, T.Any]) -> str:
|
||||
path = self._obj_to_path('fs.stem', args[0], state)
|
||||
return str(path.stem)
|
||||
|
||||
@FeatureNew('fs.read', '0.57.0')
|
||||
@typed_pos_args('fs.read', (str, File))
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
int
|
||||
main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
|
@ -5,6 +5,8 @@ is_windows = build_machine.system() == 'windows'
|
|||
fs = import('fs')
|
||||
|
||||
f = files('meson.build')
|
||||
btgt = executable('btgt', 'btgt.c')
|
||||
ctgt = fs.copyfile('ctgt.txt')
|
||||
|
||||
assert(fs.exists('meson.build'), 'Existing file reported as missing.')
|
||||
assert(not fs.exists('nonexisting'), 'Nonexisting file was found.')
|
||||
|
@ -88,6 +90,13 @@ new_check = is_windows ? 'j:\\foo\\bar.ini' : '/foo/bar.ini'
|
|||
new = fs.replace_suffix(original, '.ini')
|
||||
assert(new == new_check, 'absolute path replace_suffix failed')
|
||||
|
||||
new = fs.replace_suffix(btgt, '.ini')
|
||||
assert(new == 'btgt.ini', 'replace_suffix failed for build target')
|
||||
new = fs.replace_suffix(ctgt, '.ini')
|
||||
assert(new == 'ctgt.ini', 'replace_suffix failed for custom target')
|
||||
new = fs.replace_suffix(ctgt[0], '.ini')
|
||||
assert(new == 'ctgt.ini', 'replace_suffix failed for custom target index')
|
||||
|
||||
# -- hash
|
||||
|
||||
md5 = fs.hash('subdir/subdirfile.txt', 'md5')
|
||||
|
@ -135,11 +144,25 @@ assert(fs.parent(f[1]) == 'subdir/..', 'failed to get dirname')
|
|||
else
|
||||
assert(fs.parent(f[1]) == 'subdir\..', 'failed to get dirname')
|
||||
endif
|
||||
assert(fs.parent(btgt) == '.', 'failed to get dirname for build target')
|
||||
assert(fs.parent(ctgt) == '.', 'failed to get dirname for custom target')
|
||||
assert(fs.parent(ctgt[0]) == '.', 'failed to get dirname for custom target index')
|
||||
|
||||
assert(fs.name('foo/bar') == 'bar', 'failed to get basename')
|
||||
assert(fs.name(f[1]) == 'meson.build', 'failed to get basename')
|
||||
assert(fs.name('foo/bar/baz.dll.a') == 'baz.dll.a', 'failed to get basename with compound suffix')
|
||||
if host_machine.system() in ['cygwin', 'windows']
|
||||
assert(fs.name(btgt) == 'btgt.exe', 'failed to get basename of build target')
|
||||
else
|
||||
assert(fs.name(btgt) == 'btgt', 'failed to get basename of build target')
|
||||
endif
|
||||
assert(fs.name(ctgt) == 'ctgt.txt', 'failed to get basename of custom target')
|
||||
assert(fs.name(ctgt[0]) == 'ctgt.txt', 'failed to get basename of custom target index')
|
||||
assert(fs.stem('foo/bar/baz.dll') == 'baz', 'failed to get stem with suffix')
|
||||
assert(fs.stem('foo/bar/baz.dll.a') == 'baz.dll', 'failed to get stem with compound suffix')
|
||||
assert(fs.stem(btgt) == 'btgt', 'failed to get stem of build target')
|
||||
assert(fs.stem(ctgt) == 'ctgt', 'failed to get stem of custom target')
|
||||
assert(fs.stem(ctgt[0]) == 'ctgt', 'failed to get stem of custom target index')
|
||||
|
||||
# relative_to
|
||||
if build_machine.system() == 'windows'
|
||||
|
|
Loading…
Reference in New Issue