aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r--mesonbuild/compilers/c.py4
-rw-r--r--mesonbuild/compilers/compilers.py81
-rw-r--r--mesonbuild/compilers/cpp.py4
-rw-r--r--mesonbuild/compilers/cs.py4
-rw-r--r--mesonbuild/compilers/cuda.py13
-rw-r--r--mesonbuild/compilers/d.py4
-rw-r--r--mesonbuild/compilers/fortran.py4
-rw-r--r--mesonbuild/compilers/java.py4
-rw-r--r--mesonbuild/compilers/mixins/clike.py2
-rw-r--r--mesonbuild/compilers/mixins/gnu.py15
-rw-r--r--mesonbuild/compilers/mixins/pgi.py3
-rw-r--r--mesonbuild/compilers/objc.py4
-rw-r--r--mesonbuild/compilers/objcpp.py4
-rw-r--r--mesonbuild/compilers/rust.py4
-rw-r--r--mesonbuild/compilers/swift.py4
-rw-r--r--mesonbuild/compilers/vala.py4
16 files changed, 90 insertions, 68 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index aac99b4..feae8ac 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -16,7 +16,7 @@ import os.path
import typing as T
from .. import coredata
-from ..mesonlib import MachineChoice, MesonException, mlog, version_compare
+from ..mesonlib import Language, MachineChoice, MesonException, mlog, version_compare
from ..linkers import LinkerEnvVarsMixin
from .c_function_attributes import C_FUNC_ATTRIBUTES
from .mixins.clike import CLikeCompiler
@@ -50,7 +50,7 @@ class CCompiler(CLikeCompiler, Compiler):
except KeyError:
raise MesonException('Unknown function attribute "{}"'.format(name))
- language = 'c'
+ language = Language.C
def __init__(self, exelist, version, for_machine: MachineChoice, is_cross: bool,
info: 'MachineInfo', exe_wrapper: T.Optional[str] = None, **kwargs):
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 0de59a4..c31439c 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -23,7 +23,7 @@ from .. import mlog
from .. import mesonlib
from ..linkers import LinkerEnvVarsMixin
from ..mesonlib import (
- EnvironmentException, MachineChoice, MesonException,
+ EnvironmentException, Language, MachineChoice, MesonException,
Popen_safe, split_args
)
from ..envconfig import (
@@ -49,52 +49,67 @@ lib_suffixes = ('a', 'lib', 'dll', 'dll.a', 'dylib', 'so')
# Mapping of language to suffixes of files that should always be in that language
# This means we can't include .h headers here since they could be C, C++, ObjC, etc.
lang_suffixes = {
- 'c': ('c',),
- 'cpp': ('cpp', 'cc', 'cxx', 'c++', 'hh', 'hpp', 'ipp', 'hxx', 'ino'),
- 'cuda': ('cu',),
+ Language.C: ('c',),
+ Language.CPP: ('cpp', 'cc', 'cxx', 'c++', 'hh', 'hpp', 'ipp', 'hxx', 'ino'),
+ Language.CUDA: ('cu',),
# f90, f95, f03, f08 are for free-form fortran ('f90' recommended)
# f, for, ftn, fpp are for fixed-form fortran ('f' or 'for' recommended)
- 'fortran': ('f90', 'f95', 'f03', 'f08', 'f', 'for', 'ftn', 'fpp'),
- 'd': ('d', 'di'),
- 'objc': ('m',),
- 'objcpp': ('mm',),
- 'rust': ('rs',),
- 'vala': ('vala', 'vapi', 'gs'),
- 'cs': ('cs',),
- 'swift': ('swift',),
- 'java': ('java',),
+ Language.FORTRAN: ('f90', 'f95', 'f03', 'f08', 'f', 'for', 'ftn', 'fpp'),
+ Language.D: ('d', 'di'),
+ Language.OBJC: ('m',),
+ Language.OBJCPP: ('mm',),
+ Language.RUST: ('rs',),
+ Language.VALA: ('vala', 'vapi', 'gs'),
+ Language.CS: ('cs',),
+ Language.SWIFT: ('swift',),
+ Language.JAVA: ('java',),
}
all_languages = lang_suffixes.keys()
-cpp_suffixes = lang_suffixes['cpp'] + ('h',)
-c_suffixes = lang_suffixes['c'] + ('h',)
+cpp_suffixes = lang_suffixes[Language.CPP] + ('h',)
+c_suffixes = lang_suffixes[Language.C] + ('h',)
# List of languages that by default consume and output libraries following the
# C ABI; these can generally be used interchangebly
-clib_langs = ('objcpp', 'cpp', 'objc', 'c', 'fortran',)
+clib_langs = (Language.OBJCPP, Language.CPP, Language.OBJC, Language.C, Language.FORTRAN,)
# List of languages that can be linked with C code directly by the linker
# used in build.py:process_compilers() and build.py:get_dynamic_linker()
-clink_langs = ('d', 'cuda') + clib_langs
+clink_langs = (Language.D, Language.CUDA) + clib_langs
clink_suffixes = ()
-for _l in clink_langs + ('vala',):
+for _l in clink_langs + (Language.VALA,):
clink_suffixes += lang_suffixes[_l]
clink_suffixes += ('h', 'll', 's')
all_suffixes = set(itertools.chain(*lang_suffixes.values(), clink_suffixes))
# Languages that should use LDFLAGS arguments when linking.
-languages_using_ldflags = {'objcpp', 'cpp', 'objc', 'c', 'fortran', 'd', 'cuda'}
+languages_using_ldflags = {
+ Language.OBJCPP,
+ Language.CPP,
+ Language.OBJC,
+ Language.C,
+ Language.FORTRAN,
+ Language.D,
+ Language.CUDA
+}
# Languages that should use CPPFLAGS arguments when linking.
-languages_using_cppflags = {'c', 'cpp', 'objc', 'objcpp'}
+languages_using_cppflags = {
+ Language.C,
+ Language.CPP,
+ Language.OBJC,
+ Language.OBJCPP,
+}
soregex = re.compile(r'.*\.so(\.[0-9]+)?(\.[0-9]+)?(\.[0-9]+)?$')
# Environment variables that each lang uses.
-cflags_mapping = {'c': 'CFLAGS',
- 'cpp': 'CXXFLAGS',
- 'cuda': 'CUFLAGS',
- 'objc': 'OBJCFLAGS',
- 'objcpp': 'OBJCXXFLAGS',
- 'fortran': 'FFLAGS',
- 'd': 'DFLAGS',
- 'vala': 'VALAFLAGS',
- 'rust': 'RUSTFLAGS'}
+cflags_mapping = {
+ Language.C: 'CFLAGS',
+ Language.CPP: 'CXXFLAGS',
+ Language.CUDA: 'CUFLAGS',
+ Language.OBJC: 'OBJCFLAGS',
+ Language.OBJCPP: 'OBJCXXFLAGS',
+ Language.FORTRAN: 'FFLAGS',
+ Language.D: 'DFLAGS',
+ Language.VALA: 'VALAFLAGS',
+ Language.RUST: 'RUSTFLAGS',
+}
# All these are only for C-linkable languages; see `clink_langs` above.
@@ -474,7 +489,7 @@ class Compiler(metaclass=abc.ABCMeta):
@classmethod
def get_display_language(cls) -> str:
- return cls.language.capitalize()
+ return cls.language.get_display_name()
def get_default_suffix(self) -> str:
return self.default_suffix
@@ -909,7 +924,7 @@ def get_largefile_args(compiler):
return []
-def get_args_from_envvars(lang: str,
+def get_args_from_envvars(lang: Language,
for_machine: MachineChoice,
is_cross: bool,
use_linker_args: bool) -> T.Tuple[T.List[str], T.List[str]]:
@@ -946,7 +961,7 @@ def get_args_from_envvars(lang: str,
return compile_flags, link_flags
-def get_global_options(lang: str,
+def get_global_options(lang: Language,
comp: T.Type[Compiler],
for_machine: MachineChoice,
is_cross: bool,
@@ -970,7 +985,7 @@ def get_global_options(lang: str,
comp.INVOKES_LINKER)
for k, o in opts.items():
- user_k = lang + '_' + k
+ user_k = lang.get_lower_case_name() + '_' + k
if user_k in properties:
# Get from configuration files.
o.set_value(properties[user_k])
diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py
index f5b0c05..71a300a 100644
--- a/mesonbuild/compilers/cpp.py
+++ b/mesonbuild/compilers/cpp.py
@@ -19,7 +19,7 @@ import typing as T
from .. import coredata
from .. import mlog
-from ..mesonlib import MesonException, MachineChoice, version_compare
+from ..mesonlib import Language, MesonException, MachineChoice, version_compare
from ..linkers import LinkerEnvVarsMixin
from .compilers import (
@@ -60,7 +60,7 @@ class CPPCompiler(CLikeCompiler, Compiler):
except KeyError:
raise MesonException('Unknown function attribute "{}"'.format(name))
- language = 'cpp'
+ language = Language.CPP
def __init__(self, exelist, version, for_machine: MachineChoice, is_cross: bool,
info: 'MachineInfo', exe_wrap: T.Optional[str] = None, **kwargs):
diff --git a/mesonbuild/compilers/cs.py b/mesonbuild/compilers/cs.py
index 843348e..bc917cb 100644
--- a/mesonbuild/compilers/cs.py
+++ b/mesonbuild/compilers/cs.py
@@ -15,7 +15,7 @@
import os.path, subprocess
import typing as T
-from ..mesonlib import EnvironmentException
+from ..mesonlib import Language, EnvironmentException
from .compilers import Compiler, MachineChoice, mono_buildtype_args
from .mixins.islinker import BasicLinkerIsCompilerMixin
@@ -34,7 +34,7 @@ cs_optimization_args = {'0': [],
class CsCompiler(BasicLinkerIsCompilerMixin, Compiler):
- language = 'cs'
+ language = Language.CS
def __init__(self, exelist, version, for_machine: MachineChoice,
info: 'MachineInfo', comp_id, runner=None):
diff --git a/mesonbuild/compilers/cuda.py b/mesonbuild/compilers/cuda.py
index 934ad12..b109572 100644
--- a/mesonbuild/compilers/cuda.py
+++ b/mesonbuild/compilers/cuda.py
@@ -18,9 +18,14 @@ from functools import partial
from .. import coredata
from .. import mlog
-from ..mesonlib import EnvironmentException, MachineChoice, Popen_safe, OptionOverrideProxy, is_windows, LibType
-from .compilers import (Compiler, cuda_buildtype_args, cuda_optimization_args,
- cuda_debug_args)
+from ..mesonlib import (
+ EnvironmentException, Language, LibType, MachineChoice, OptionOverrideProxy,
+ Popen_safe, is_windows
+)
+from .compilers import (
+ Compiler, cuda_buildtype_args, cuda_optimization_args,
+ cuda_debug_args
+)
if T.TYPE_CHECKING:
from ..environment import Environment # noqa: F401
@@ -30,7 +35,7 @@ if T.TYPE_CHECKING:
class CudaCompiler(Compiler):
LINKER_PREFIX = '-Xlinker='
- language = 'cuda'
+ language = Language.CUDA
_universal_flags = {'compiler': ['-I', '-D', '-U', '-E'], 'linker': ['-l', '-L']}
diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py
index 32919e4..d233713 100644
--- a/mesonbuild/compilers/d.py
+++ b/mesonbuild/compilers/d.py
@@ -16,7 +16,7 @@ import os.path, subprocess
import typing as T
from ..mesonlib import (
- EnvironmentException, MachineChoice, version_compare,
+ EnvironmentException, Language, MachineChoice, version_compare,
)
from .compilers import (
@@ -436,7 +436,7 @@ class DCompiler(Compiler):
'mtd': ['-mscrtlib=libcmtd'],
}
- language = 'd'
+ language = Language.D
def __init__(self, exelist, version, for_machine: MachineChoice,
info: 'MachineInfo', arch, is_cross, exe_wrapper, **kwargs):
diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py
index af83c0e56..31b8558 100644
--- a/mesonbuild/compilers/fortran.py
+++ b/mesonbuild/compilers/fortran.py
@@ -32,7 +32,7 @@ from .mixins.pgi import PGICompiler
from .. import mlog
from mesonbuild.mesonlib import (
- version_compare, EnvironmentException, MesonException, MachineChoice, LibType
+ version_compare, EnvironmentException, Language, MesonException, MachineChoice, LibType
)
if T.TYPE_CHECKING:
@@ -41,7 +41,7 @@ if T.TYPE_CHECKING:
class FortranCompiler(CLikeCompiler, Compiler):
- language = 'fortran'
+ language = Language.FORTRAN
def __init__(self, exelist, version, for_machine: MachineChoice,
is_cross, info: 'MachineInfo', exe_wrapper=None, **kwargs):
diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py
index 5aeb250..c9a7af9 100644
--- a/mesonbuild/compilers/java.py
+++ b/mesonbuild/compilers/java.py
@@ -17,7 +17,7 @@ import shutil
import subprocess
import typing as T
-from ..mesonlib import EnvironmentException, MachineChoice
+from ..mesonlib import EnvironmentException, Language, MachineChoice
from .compilers import Compiler, java_buildtype_args
from .mixins.islinker import BasicLinkerIsCompilerMixin
@@ -26,7 +26,7 @@ if T.TYPE_CHECKING:
class JavaCompiler(BasicLinkerIsCompilerMixin, Compiler):
- language = 'java'
+ language = Language.JAVA
def __init__(self, exelist, version, for_machine: MachineChoice,
info: 'MachineInfo'):
diff --git a/mesonbuild/compilers/mixins/clike.py b/mesonbuild/compilers/mixins/clike.py
index 95b9592..a42b050 100644
--- a/mesonbuild/compilers/mixins/clike.py
+++ b/mesonbuild/compilers/mixins/clike.py
@@ -388,7 +388,7 @@ class CLikeCompiler:
cargs += cleaned_sys_args
if mode == 'link':
- ld_value = env.lookup_binary_entry(self.for_machine, self.language + '_ld')
+ ld_value = env.lookup_binary_entry(self.for_machine, self.language.get_lower_case_name() + '_ld')
if ld_value is not None:
largs += self.use_linker_args(ld_value[0])
diff --git a/mesonbuild/compilers/mixins/gnu.py b/mesonbuild/compilers/mixins/gnu.py
index 83f7047..f5fd7ef 100644
--- a/mesonbuild/compilers/mixins/gnu.py
+++ b/mesonbuild/compilers/mixins/gnu.py
@@ -23,6 +23,7 @@ import subprocess
import typing as T
from ... import mesonlib
+from ...mesonlib import Language
from ... import mlog
if T.TYPE_CHECKING:
@@ -84,12 +85,12 @@ gnu_color_args = {
@functools.lru_cache(maxsize=None)
-def gnulike_default_include_dirs(compiler: T.Tuple[str], lang: str) -> T.List[str]:
+def gnulike_default_include_dirs(compiler: T.Tuple[str], lang: Language) -> T.List[str]:
lang_map = {
- 'c': 'c',
- 'cpp': 'c++',
- 'objc': 'objective-c',
- 'objcpp': 'objective-c++'
+ Language.C: 'c',
+ Language.CPP: 'c++',
+ Language.OBJC: 'objective-c',
+ Language.OBJCPP: 'objective-c++'
}
if lang not in lang_map:
return []
@@ -364,9 +365,9 @@ class GnuCompiler(GnuLikeCompiler):
# another language, but still complete with exit_success
with self._build_wrapper(code, env, args, None, mode) as p:
result = p.returncode == 0
- if self.language in {'cpp', 'objcpp'} and 'is valid for C/ObjC' in p.stde:
+ if self.language in {Language.CPP, Language.OBJCPP} and 'is valid for C/ObjC' in p.stde:
result = False
- if self.language in {'c', 'objc'} and 'is valid for C++/ObjC++' in p.stde:
+ if self.language in {Language.C, Language.OBJC} and 'is valid for C++/ObjC++' in p.stde:
result = False
return result, p.cached
diff --git a/mesonbuild/compilers/mixins/pgi.py b/mesonbuild/compilers/mixins/pgi.py
index 77a7a28..e5df38e 100644
--- a/mesonbuild/compilers/mixins/pgi.py
+++ b/mesonbuild/compilers/mixins/pgi.py
@@ -18,6 +18,7 @@ import typing as T
import os
from pathlib import Path
+from ...mesonlib import Language
from ..compilers import clike_debug_args, clike_optimization_args
pgi_buildtype_args = {
@@ -87,7 +88,7 @@ class PGICompiler:
def get_pch_use_args(self, pch_dir: str, header: str) -> T.List[str]:
# PGI supports PCH for C++ only.
hdr = Path(pch_dir).resolve().parent / header
- if self.language == 'cpp':
+ if self.language == Language.CPP:
return ['--pch',
'--pch_dir', str(hdr.parent),
'-I{}'.format(hdr.parent)]
diff --git a/mesonbuild/compilers/objc.py b/mesonbuild/compilers/objc.py
index d351c88..f642a1f 100644
--- a/mesonbuild/compilers/objc.py
+++ b/mesonbuild/compilers/objc.py
@@ -15,7 +15,7 @@
import os.path, subprocess
import typing as T
-from ..mesonlib import EnvironmentException, MachineChoice
+from ..mesonlib import EnvironmentException, Language, MachineChoice
from .compilers import Compiler
from .mixins.clike import CLikeCompiler
@@ -28,7 +28,7 @@ if T.TYPE_CHECKING:
class ObjCCompiler(CLikeCompiler, Compiler):
- language = 'objc'
+ language = Language.OBJC
def __init__(self, exelist, version, for_machine: MachineChoice,
is_cross: bool, info: 'MachineInfo',
diff --git a/mesonbuild/compilers/objcpp.py b/mesonbuild/compilers/objcpp.py
index 10555b4..871a0a6 100644
--- a/mesonbuild/compilers/objcpp.py
+++ b/mesonbuild/compilers/objcpp.py
@@ -15,7 +15,7 @@
import os.path, subprocess
import typing as T
-from ..mesonlib import EnvironmentException, MachineChoice
+from ..mesonlib import EnvironmentException, Language, MachineChoice
from .mixins.clike import CLikeCompiler
from .compilers import Compiler
@@ -27,7 +27,7 @@ if T.TYPE_CHECKING:
class ObjCPPCompiler(CLikeCompiler, Compiler):
- language = 'objcpp'
+ language = Language.OBJCPP
def __init__(self, exelist, version, for_machine: MachineChoice,
is_cross: bool, info: 'MachineInfo',
diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py
index c2e21c4..46832c5 100644
--- a/mesonbuild/compilers/rust.py
+++ b/mesonbuild/compilers/rust.py
@@ -15,7 +15,7 @@
import subprocess, os.path
import typing as T
-from ..mesonlib import EnvironmentException, MachineChoice, Popen_safe
+from ..mesonlib import EnvironmentException, Language, MachineChoice, Popen_safe
from .compilers import Compiler, rust_buildtype_args, clike_debug_args
if T.TYPE_CHECKING:
@@ -33,7 +33,7 @@ rust_optimization_args = {'0': [],
class RustCompiler(Compiler):
# rustc doesn't invoke the compiler itself, it doesn't need a LINKER_PREFIX
- language = 'rust'
+ language = Language.RUST
def __init__(self, exelist, version, for_machine: MachineChoice,
is_cross, info: 'MachineInfo', exe_wrapper=None, **kwargs):
diff --git a/mesonbuild/compilers/swift.py b/mesonbuild/compilers/swift.py
index 1942120..c7d0041 100644
--- a/mesonbuild/compilers/swift.py
+++ b/mesonbuild/compilers/swift.py
@@ -15,7 +15,7 @@
import subprocess, os.path
import typing as T
-from ..mesonlib import EnvironmentException, MachineChoice
+from ..mesonlib import EnvironmentException, Language, MachineChoice
from .compilers import Compiler, swift_buildtype_args, clike_debug_args
@@ -33,7 +33,7 @@ swift_optimization_args = {'0': [],
class SwiftCompiler(Compiler):
LINKER_PREFIX = ['-Xlinker']
- language = 'swift'
+ language = Language.SWIFT
def __init__(self, exelist, version, for_machine: MachineChoice,
is_cross, info: 'MachineInfo', **kwargs):
diff --git a/mesonbuild/compilers/vala.py b/mesonbuild/compilers/vala.py
index a5d49b6..635cce3 100644
--- a/mesonbuild/compilers/vala.py
+++ b/mesonbuild/compilers/vala.py
@@ -16,7 +16,7 @@ import os.path
import typing as T
from .. import mlog
-from ..mesonlib import EnvironmentException, MachineChoice, version_compare
+from ..mesonlib import EnvironmentException, Language, MachineChoice, version_compare
from .compilers import Compiler
@@ -25,7 +25,7 @@ if T.TYPE_CHECKING:
class ValaCompiler(Compiler):
- language = 'vala'
+ language = Language.VALA
def __init__(self, exelist, version, for_machine: MachineChoice,
is_cross, info: 'MachineInfo'):