aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers/compilers.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/compilers/compilers.py')
-rw-r--r--mesonbuild/compilers/compilers.py69
1 files changed, 32 insertions, 37 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index c03f1fd..b9605cc 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright 2012-2022 The Meson development team
-# Copyright © 2023 Intel Corporation
+# Copyright © 2023-2024 Intel Corporation
from __future__ import annotations
@@ -9,23 +9,24 @@ import contextlib, os.path, re
import enum
import itertools
import typing as T
-from dataclasses import dataclass
+from dataclasses import dataclass, field
from functools import lru_cache
-from .. import coredata
from .. import mlog
from .. import mesonlib
from .. import options
from ..mesonlib import (
HoldableObject,
EnvironmentException, MesonException,
- Popen_safe_logged, LibType, TemporaryDirectoryWinProof, OptionKey,
+ Popen_safe_logged, LibType, TemporaryDirectoryWinProof,
)
+from ..options import OptionKey
+
from ..arglist import CompilerArgs
if T.TYPE_CHECKING:
- from typing import Any
+ from .. import coredata
from ..build import BuildTarget, DFeatures
from ..coredata import MutableKeyedOptionDictType, KeyedOptionDictType
from ..envconfig import MachineInfo
@@ -405,34 +406,27 @@ def get_base_link_args(options: 'KeyedOptionDictType', linker: 'Compiler',
class CrossNoRunException(MesonException):
pass
+@dataclass
class RunResult(HoldableObject):
- def __init__(self, compiled: bool, returncode: int = 999,
- stdout: str = 'UNDEFINED', stderr: str = 'UNDEFINED',
- cached: bool = False):
- self.compiled = compiled
- self.returncode = returncode
- self.stdout = stdout
- self.stderr = stderr
- self.cached = cached
+ compiled: bool
+ returncode: int = 999
+ stdout: str = 'UNDEFINED'
+ stderr: str = 'UNDEFINED'
+ cached: bool = False
+@dataclass
class CompileResult(HoldableObject):
"""The result of Compiler.compiles (and friends)."""
- def __init__(self, stdo: T.Optional[str] = None, stde: T.Optional[str] = None,
- command: T.Optional[T.List[str]] = None,
- returncode: int = 999,
- input_name: T.Optional[str] = None,
- output_name: T.Optional[str] = None,
- cached: bool = False):
- self.stdout = stdo
- self.stderr = stde
- self.input_name = input_name
- self.output_name = output_name
- self.command = command or []
- self.cached = cached
- self.returncode = returncode
+ stdout: str
+ stderr: str
+ command: T.List[str]
+ returncode: int
+ input_name: str
+ output_name: T.Optional[str] = field(default=None, init=False)
+ cached: bool = field(default=False, init=False)
class Compiler(HoldableObject, metaclass=abc.ABCMeta):
@@ -936,11 +930,11 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta):
def thread_link_flags(self, env: 'Environment') -> T.List[str]:
return self.linker.thread_flags(env)
- def openmp_flags(self) -> T.List[str]:
+ def openmp_flags(self, env: Environment) -> T.List[str]:
raise EnvironmentException('Language %s does not support OpenMP flags.' % self.get_display_language())
- def openmp_link_flags(self) -> T.List[str]:
- return self.openmp_flags()
+ def openmp_link_flags(self, env: Environment) -> T.List[str]:
+ return self.openmp_flags(env)
def language_stdlib_only_link_flags(self, env: 'Environment') -> T.List[str]:
return []
@@ -969,7 +963,8 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta):
def get_pie_link_args(self) -> T.List[str]:
return self.linker.get_pie_args()
- def get_argument_syntax(self) -> str:
+ @staticmethod
+ def get_argument_syntax() -> str:
"""Returns the argument family type.
Compilers fall into families if they try to emulate the command line
@@ -1352,18 +1347,18 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta):
"""
raise EnvironmentException(f'{self.get_id()} does not support preprocessor')
- def form_langopt_key(self, basename: str) -> OptionKey:
- return OptionKey(basename, machine=self.for_machine, lang=self.language)
+ def form_compileropt_key(self, basename: str) -> OptionKey:
+ return OptionKey(f'{self.language}_{basename}', machine=self.for_machine)
def get_global_options(lang: str,
comp: T.Type[Compiler],
for_machine: MachineChoice,
- env: 'Environment') -> 'dict[OptionKey, options.UserOption[Any]]':
+ env: 'Environment') -> dict[OptionKey, options.UserOption[T.Any]]:
"""Retrieve options that apply to all compilers for a given language."""
description = f'Extra arguments passed to the {lang}'
- argkey = OptionKey('args', lang=lang, machine=for_machine)
- largkey = argkey.evolve('link_args')
- envkey = argkey.evolve('env_args')
+ argkey = OptionKey(f'{lang}_args', machine=for_machine)
+ largkey = argkey.evolve(f'{lang}_link_args')
+ envkey = argkey.evolve(f'{lang}_env_args')
comp_key = argkey if argkey in env.options else envkey
@@ -1388,6 +1383,6 @@ def get_global_options(lang: str,
# autotools compatibility.
largs.extend_value(comp_options)
- opts: 'dict[OptionKey, options.UserOption[Any]]' = {argkey: cargs, largkey: largs}
+ opts: dict[OptionKey, options.UserOption[T.Any]] = {argkey: cargs, largkey: largs}
return opts