parent
48a719033e
commit
46788d1b5b
14 changed files with 156 additions and 1 deletions
@ -0,0 +1,31 @@ |
||||
# FS (filesystem) module |
||||
|
||||
This module provides functions to inspect the file system. It is |
||||
available starting with version 0.53.0. |
||||
|
||||
## File lookup rules |
||||
|
||||
Non-absolute paths are looked up relative to the directory where the |
||||
current `meson.build` file is. |
||||
|
||||
### exists |
||||
|
||||
Takes a single string argument and returns true if an entity with that |
||||
name exists on the file system. This can be a file, directory or a |
||||
special entry such as a device node. |
||||
|
||||
### is_dir |
||||
|
||||
Takes a single string argument and returns true if a directory with |
||||
that name exists on the file system. This method follows symbolic |
||||
links. |
||||
|
||||
### is_file |
||||
|
||||
Takes a single string argument and returns true if an file with that |
||||
name exists on the file system. This method follows symbolic links. |
||||
|
||||
### is_symlink |
||||
|
||||
Takes a single string argument and returns true if the path pointed to |
||||
by the string is a symbolic link. |
@ -0,0 +1,10 @@ |
||||
## A new module for filesystem operations |
||||
|
||||
The new `fs` module can be used to examine the contents of the current |
||||
file system. |
||||
|
||||
```meson |
||||
fs = import('fs') |
||||
assert(fs.exists('important_file'), |
||||
'The important file is missing.') |
||||
``` |
@ -0,0 +1,59 @@ |
||||
# Copyright 2019 The Meson development team |
||||
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||
# you may not use this file except in compliance with the License. |
||||
# You may obtain a copy of the License at |
||||
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
||||
# Unless required by applicable law or agreed to in writing, software |
||||
# distributed under the License is distributed on an "AS IS" BASIS, |
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
# See the License for the specific language governing permissions and |
||||
# limitations under the License. |
||||
|
||||
import os |
||||
|
||||
from . import ExtensionModule |
||||
from . import ModuleReturnValue |
||||
from ..mesonlib import MesonException |
||||
|
||||
from ..interpreterbase import stringArgs, noKwargs |
||||
|
||||
class FSModule(ExtensionModule): |
||||
|
||||
def __init__(self, interpreter): |
||||
super().__init__(interpreter) |
||||
self.snippets.add('generate_dub_file') |
||||
|
||||
@stringArgs |
||||
@noKwargs |
||||
def exists(self, state, args, kwargs): |
||||
if len(args) != 1: |
||||
MesonException('method takes exactly one argument.') |
||||
test_file = os.path.join(state.source_root, state.subdir, args[0]) |
||||
return ModuleReturnValue(os.path.exists(test_file), []) |
||||
|
||||
def _check(self, check_fun, state, args): |
||||
if len(args) != 1: |
||||
MesonException('method takes exactly one argument.') |
||||
test_file = os.path.join(state.source_root, state.subdir, args[0]) |
||||
return ModuleReturnValue(check_fun(test_file), []) |
||||
|
||||
@stringArgs |
||||
@noKwargs |
||||
def is_symlink(self, state, args, kwargs): |
||||
return self._check(os.path.islink, state, args) |
||||
|
||||
@stringArgs |
||||
@noKwargs |
||||
def is_file(self, state, args, kwargs): |
||||
return self._check(os.path.isfile, state, args) |
||||
|
||||
@stringArgs |
||||
@noKwargs |
||||
def is_dir(self, state, args, kwargs): |
||||
return self._check(os.path.isdir, state, args) |
||||
|
||||
def initialize(*args, **kwargs): |
||||
return FSModule(*args, **kwargs) |
@ -0,0 +1 @@ |
||||
meson.build |
@ -0,0 +1,21 @@ |
||||
project('fs module test') |
||||
|
||||
fs = import('fs') |
||||
|
||||
assert(fs.exists('meson.build'), 'Existing file reported as missing.') |
||||
assert(not fs.exists('nonexisting'), 'Nonexisting file was found.') |
||||
|
||||
if build_machine.system() != 'windows' and build_machine.system() != 'cygwin' |
||||
assert(fs.is_symlink('a_symlink'), 'Symlink not detected.') |
||||
assert(not fs.is_symlink('meson.build'), 'Regular file detected as symlink.') |
||||
endif |
||||
|
||||
assert(fs.is_file('meson.build'), 'File not detected as a file.') |
||||
assert(not fs.is_file('subprojects'), 'Directory detected as a file.') |
||||
assert(not fs.is_file('nonexisting'), 'Bad path detected as a file.') |
||||
|
||||
assert(fs.is_dir('subprojects'), 'Dir not detected correctly.') |
||||
assert(not fs.is_dir('meson.build'), 'File detected as a dir.') |
||||
assert(not fs.is_dir('nonexisting'), 'Bad path detected as a dir.') |
||||
|
||||
subdir('subdir') |
@ -0,0 +1 @@ |
||||
assert(fs.exists('subdirfile.txt'), 'Subdir file lookup is broken.') |
@ -0,0 +1 @@ |
||||
I have no content. |
@ -0,0 +1,9 @@ |
||||
project('subbie') |
||||
|
||||
fs = import('fs') |
||||
|
||||
assert(fs.exists('subprojectfile.txt'), 'Subproject root file not found.') |
||||
|
||||
subdir('subsub') |
||||
|
||||
subproject('subbie') |
@ -0,0 +1 @@ |
||||
I'm not empty. So there's at least that. |
@ -0,0 +1 @@ |
||||
assert(fs.exists('subsubfile.txt'), 'Subproject subdir lookup failed.') |
@ -0,0 +1 @@ |
||||
Thank you for looking inside me. |
Loading…
Reference in new issue