aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/interpreter.py3
-rw-r--r--mesonbuild/modules/__init__.py17
-rw-r--r--mesonbuild/modules/fs.py59
3 files changed, 78 insertions, 1 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 6f1f0a7..38e12ea 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1689,7 +1689,7 @@ class CompilerHolder(InterpreterObject):
ModuleState = namedtuple('ModuleState', [
- 'build_to_src', 'subproject', 'subdir', 'current_lineno', 'environment',
+ 'source_root', 'build_to_src', 'subproject', 'subdir', 'current_lineno', 'environment',
'project_name', 'project_version', 'backend', 'targets',
'data', 'headers', 'man', 'global_args', 'project_args', 'build_machine',
'host_machine', 'target_machine', 'current_node'])
@@ -1714,6 +1714,7 @@ class ModuleHolder(InterpreterObject, ObjectHolder):
# because the Build object contains dicts and lists.
num_targets = len(self.interpreter.build.targets)
state = ModuleState(
+ source_root = self.interpreter.environment.get_source_dir(),
build_to_src=mesonlib.relpath(self.interpreter.environment.get_source_dir(),
self.interpreter.environment.get_build_dir()),
subproject=self.interpreter.subproject,
diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py
index 6b6aa8b..dc3c786 100644
--- a/mesonbuild/modules/__init__.py
+++ b/mesonbuild/modules/__init__.py
@@ -1,3 +1,20 @@
+# 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.
+
+# This file contains the detection logic for external dependencies that
+# are UI-related.
+
import os
from .. import build
diff --git a/mesonbuild/modules/fs.py b/mesonbuild/modules/fs.py
new file mode 100644
index 0000000..61ad917
--- /dev/null
+++ b/mesonbuild/modules/fs.py
@@ -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)