aboutsummaryrefslogtreecommitdiff
path: root/environment.py
diff options
context:
space:
mode:
Diffstat (limited to 'environment.py')
-rw-r--r--environment.py20
1 files changed, 10 insertions, 10 deletions
diff --git a/environment.py b/environment.py
index 6a56ac9..cf32d5e 100644
--- a/environment.py
+++ b/environment.py
@@ -187,8 +187,8 @@ class CCompiler():
def get_std_exe_link_args(self):
return []
- def get_include_arg(self, path):
- return '-I' + path
+ def get_include_args(self, path):
+ return ['-I' + path]
def get_std_shared_lib_link_args(self):
return ['-shared']
@@ -552,8 +552,8 @@ class MonoCompiler():
def get_std_exe_link_args(self):
return []
- def get_include_arg(self, path):
- return ''
+ def get_include_args(self, path):
+ return []
def get_std_shared_lib_link_args(self):
return []
@@ -694,8 +694,8 @@ class JavaCompiler():
def get_std_exe_link_args(self):
return []
- def get_include_arg(self, path):
- return ''
+ def get_include_args(self, path):
+ return []
def get_std_shared_lib_link_args(self):
return []
@@ -1228,11 +1228,11 @@ end program prog
return True
return False
- def get_include_arg(self, path):
- return '-I' + path
+ def get_include_args(self, path):
+ return ['-I' + path]
- def get_module_outdir_arg(self, path):
- return '-J' + path
+ def get_module_outdir_args(self, path):
+ return ['-J' + path]
def get_depfile_suffix(self):
return 'd'
f='#n164'>164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
# Copyright 2016 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 class contains the basic functionality needed to run any interpreter
# or an interpreter-based tool.

from . import interpreterbase, mlog, mparser, mesonlib
from . import environment

from .interpreterbase import InterpreterException, InvalidArguments

import os, sys

class DontCareObject(interpreterbase.InterpreterObject):
    pass

class MockExecutable(interpreterbase.InterpreterObject):
    pass

class MockStaticLibrary(interpreterbase.InterpreterObject):
    pass

class MockSharedLibrary(interpreterbase.InterpreterObject):
    pass

class MockCustomTarget(interpreterbase.InterpreterObject):
    pass

class MockRunTarget(interpreterbase.InterpreterObject):
    pass

ADD_SOURCE = 0
REMOVE_SOURCE = 1

class AstInterpreter(interpreterbase.InterpreterBase):
    def __init__(self, source_root, subdir):
        super().__init__(source_root, subdir)
        self.asts = {}
        self.funcs.update({'project': self.func_do_nothing,
                           'test': self.func_do_nothing,
                           'benchmark': self.func_do_nothing,
                           'install_headers': self.func_do_nothing,
                           'install_man': self.func_do_nothing,
                           'install_data': self.func_do_nothing,
                           'install_subdir': self.func_do_nothing,
                           'configuration_data': self.func_do_nothing,
                           'configure_file': self.func_do_nothing,
                           'find_program': self.func_do_nothing,
                           'include_directories': self.func_do_nothing,
                           'add_global_arguments': self.func_do_nothing,
                           'add_global_link_arguments': self.func_do_nothing,
                           'add_project_arguments': self.func_do_nothing,
                           'add_project_link_arguments': self.func_do_nothing,
                           'message': self.func_do_nothing,
                           'generator': self.func_do_nothing,
                           'error': self.func_do_nothing,
                           'run_command': self.func_do_nothing,
                           'assert': self.func_do_nothing,
                           'subproject': self.func_do_nothing,
                           'dependency': self.func_do_nothing,
                           'get_option': self.func_do_nothing,
                           'join_paths': self.func_do_nothing,
                           'environment': self.func_do_nothing,
                           'import': self.func_do_nothing,
                           'vcs_tag': self.func_do_nothing,
                           'add_languages': self.func_do_nothing,
                           'declare_dependency': self.func_do_nothing,
                           'files': self.func_files,
                           'executable': self.func_executable,
                           'static_library': self.func_static_lib,
                           'shared_library': self.func_shared_lib,
                           'library': self.func_library,
                           'build_target': self.func_build_target,
                           'custom_target': self.func_custom_target,
                           'run_target': self.func_run_target,
                           'subdir': self.func_subdir,
                           'set_variable': self.func_set_variable,
                           'get_variable': self.func_get_variable,
                           'is_variable': self.func_is_variable,
                           })

    def func_do_nothing(self, node, args, kwargs):
        return True

    def method_call(self, node):
        return True

    def func_executable(self, node, args, kwargs):
        if args[0] == self.targetname:
            if self.operation == ADD_SOURCE:
                self.add_source_to_target(node, args, kwargs)
            elif self.operation == REMOVE_SOURCE:
                self.remove_source_from_target(node, args, kwargs)
            else:
                raise NotImplementedError('Bleep bloop')
        return MockExecutable()

    def func_static_lib(self, node, args, kwargs):
        return MockStaticLibrary()

    def func_shared_lib(self, node, args, kwargs):
        return MockSharedLibrary()

    def func_library(self, node, args, kwargs):
        return self.func_shared_lib(node, args, kwargs)

    def func_custom_target(self, node, args, kwargs):
        return MockCustomTarget()

    def func_run_target(self, node, args, kwargs):
        return MockRunTarget()

    def func_subdir(self, node, args, kwargs):
        prev_subdir = self.subdir
        subdir = os.path.join(prev_subdir, args[0])
        self.subdir = subdir
        buildfilename = os.path.join(self.subdir, environment.build_filename)
        absname = os.path.join(self.source_root, buildfilename)
        if not os.path.isfile(absname):
            self.subdir = prev_subdir
            raise InterpreterException('Nonexistent build def file %s.' % buildfilename)
        with open(absname, encoding='utf8') as f:
            code = f.read()
        assert(isinstance(code, str))
        try:
            codeblock = mparser.Parser(code, self.subdir).parse()
            self.asts[subdir] = codeblock
        except mesonlib.MesonException as me:
            me.file = buildfilename
            raise me
        self.evaluate_codeblock(codeblock)
        self.subdir = prev_subdir

    def func_files(self, node, args, kwargs):
        if not isinstance(args, list):
            return [args]
        return args