diff --git a/docs/markdown/Fs-module.md b/docs/markdown/Fs-module.md index 45cb589da..3569b506f 100644 --- a/docs/markdown/Fs-module.md +++ b/docs/markdown/Fs-module.md @@ -68,6 +68,8 @@ fs.samefile(x, z) # true ## Filename modification +The files need not actually exist yet for this method, as it's just string manipulation. + ### replace_suffix The `replace_suffix` method is a *string manipulation* convenient for filename modifications. @@ -101,4 +103,10 @@ original = '/opt/foo.dll.a' new = fs.replace_suffix(original, '') # /opt/foo.dll ``` -The files need not actually exist yet for this method, as it's just string manipulation. \ No newline at end of file +### parent + +Returns the parent directory (i.e. dirname). + +### name + +Returns the last component of the path (i.e. basename). diff --git a/mesonbuild/modules/fs.py b/mesonbuild/modules/fs.py index 86861ae08..6e1f5f7ef 100644 --- a/mesonbuild/modules/fs.py +++ b/mesonbuild/modules/fs.py @@ -118,6 +118,23 @@ class FSModule(ExtensionModule): new = original.with_suffix(args[1]) return ModuleReturnValue(str(new), []) + @stringArgs + @noKwargs + def parent(self, state: 'ModuleState', args: typing.Sequence[str], kwargs: dict) -> ModuleReturnValue: + if len(args) != 1: + MesonException('method takes exactly one argument.') + original = PurePath(args[0]) + new = original.parent + return ModuleReturnValue(str(new), []) + + @stringArgs + @noKwargs + def name(self, state: 'ModuleState', args: typing.Sequence[str], kwargs: dict) -> ModuleReturnValue: + if len(args) != 1: + MesonException('method takes exactly one argument.') + original = PurePath(args[0]) + new = original.name + return ModuleReturnValue(str(new), []) def initialize(*args, **kwargs) -> FSModule: return FSModule(*args, **kwargs) diff --git a/test cases/common/227 fs module/meson.build b/test cases/common/227 fs module/meson.build index 3c452d08c..131dcf3ac 100644 --- a/test cases/common/227 fs module/meson.build +++ b/test cases/common/227 fs module/meson.build @@ -69,4 +69,7 @@ if not is_windows and build_machine.system() != 'cygwin' assert(fs.samefile('a_symlink', 'meson.build'), 'symlink samefile fail') endif +assert(fs.parent('foo/bar') == 'foo', 'failed to get dirname') +assert(fs.name('foo/bar') == 'bar', 'failed to get basename') + subdir('subdir')