diff options
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r-- | mesonbuild/compilers/c.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/compilers.py | 81 | ||||
-rw-r--r-- | mesonbuild/compilers/cpp.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/cs.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/cuda.py | 13 | ||||
-rw-r--r-- | mesonbuild/compilers/d.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/fortran.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/java.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/mixins/clike.py | 2 | ||||
-rw-r--r-- | mesonbuild/compilers/mixins/gnu.py | 15 | ||||
-rw-r--r-- | mesonbuild/compilers/mixins/pgi.py | 3 | ||||
-rw-r--r-- | mesonbuild/compilers/objc.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/objcpp.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/rust.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/swift.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/vala.py | 4 |
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'): |