forked from mesonbuild/meson
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
156 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.') | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
meson.build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
assert(fs.exists('subdirfile.txt'), 'Subdir file lookup is broken.') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
I have no content. |
9 changes: 9 additions & 0 deletions
9
test cases/common/227 fs module/subprojects/subbie/meson.build
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
project('subbie') | ||
|
||
fs = import('fs') | ||
|
||
assert(fs.exists('subprojectfile.txt'), 'Subproject root file not found.') | ||
|
||
subdir('subsub') | ||
|
||
subproject('subbie') |
1 change: 1 addition & 0 deletions
1
test cases/common/227 fs module/subprojects/subbie/subprojectfile.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
I'm not empty. So there's at least that. |
1 change: 1 addition & 0 deletions
1
test cases/common/227 fs module/subprojects/subbie/subsub/meson.build
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
assert(fs.exists('subsubfile.txt'), 'Subproject subdir lookup failed.') |
1 change: 1 addition & 0 deletions
1
test cases/common/227 fs module/subprojects/subbie/subsub/subsubfile.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Thank you for looking inside me. |