diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2022-08-30 17:55:39 -0400 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2022-09-01 01:05:48 +0300 |
commit | 388cb0f805ec9ee54ab721fad28f51a842e66186 (patch) | |
tree | f144349c072725f113374a32eec28ce0d520971f /mesonbuild/scripts/env2mfile.py | |
parent | e121cd123ccc1ee2f33a76d736ee91770a0debe2 (diff) | |
download | meson-388cb0f805ec9ee54ab721fad28f51a842e66186.zip meson-388cb0f805ec9ee54ab721fad28f51a842e66186.tar.gz meson-388cb0f805ec9ee54ab721fad28f51a842e66186.tar.bz2 |
env2mfile: reuse logical lists of interesting facts from meson itself
Meson internally knows about many languages and tools, and *FLAGS
variables, and which languages to use them for. Instead of duplicating
this logic, import it from mesonbuild.*
This logic was originally standalone, but now that it is merged into the
Meson tree we can have a single source of truth.
Diffstat (limited to 'mesonbuild/scripts/env2mfile.py')
-rwxr-xr-x | mesonbuild/scripts/env2mfile.py | 57 |
1 files changed, 12 insertions, 45 deletions
diff --git a/mesonbuild/scripts/env2mfile.py b/mesonbuild/scripts/env2mfile.py index 4675143..fb92a5e 100755 --- a/mesonbuild/scripts/env2mfile.py +++ b/mesonbuild/scripts/env2mfile.py @@ -17,51 +17,16 @@ import sys, os, subprocess, shutil import shlex import typing as T +from .. import envconfig from .. import mlog +from ..compilers import compilers +from ..compilers.detect import defaults as compiler_names if T.TYPE_CHECKING: import argparse -UNIXY_ENVVARS_COMPILER = {'c': 'CC', - 'cpp': 'CXX', - 'objc': 'OBJCC', - 'objcpp': 'OBJCXX', - 'fortran': 'FC', - 'rust': 'RUSTC', - 'vala': 'VALAC', - 'cs': 'CSC', - } - -UNIXY_ENVVARS_TOOLS = {'ar': 'AR', - 'strip': 'STRIP', - 'windres': 'WINDRES', - 'pkgconfig': 'PKG_CONFIG', - 'vapigen': 'VAPIGEN', - 'cmake': 'CMAKE', - 'qmake': 'QMAKE', - } - -UNIXY_ENVVARS_FLAGS = {'c': 'CFLAGS', - 'cpp': 'CXXFLAGS', - 'objc': 'OBJCFLAGS', - 'objcpp': 'OBJCXXFLAGS', - 'fortran': 'FFLAGS', - 'rust': 'RUSTFLAGS', - 'vala': 'VALAFLAGS', - 'cs': 'CSFLAGS', # This one might not be standard. - } - -TYPICAL_UNIXY_COMPILER_NAMES = {'c': ['cc', 'gcc', 'clang'], - 'cpp': ['c++', 'g++', 'clang++'], - 'objc': ['objc', 'clang'], - 'objcpp': ['objcpp', 'clang++'], - 'fortran': ['gfortran'], - } - -LANGS_USING_CPPFLAGS = {'c', 'cpp', 'objc', 'objcxx'} - def has_for_build() -> bool: - for cenv in UNIXY_ENVVARS_COMPILER.values(): + for cenv in envconfig.ENV_VAR_COMPILER_MAP.values(): if os.environ.get(cenv + '_FOR_BUILD'): return True return False @@ -262,8 +227,8 @@ def write_machine_file(infos: MachineInfo, ofilename: str, write_system_info: bo def detect_language_args_from_envvars(langname: str, envvar_suffix: str = '') -> T.Tuple[T.List[str], T.List[str]]: ldflags = tuple(shlex.split(os.environ.get('LDFLAGS' + envvar_suffix, ''))) - compile_args = shlex.split(os.environ.get(UNIXY_ENVVARS_FLAGS[langname] + envvar_suffix, '')) - if langname in LANGS_USING_CPPFLAGS: + compile_args = shlex.split(os.environ.get(compilers.CFLAGS_MAPPING[langname] + envvar_suffix, '')) + if langname in compilers.LANGUAGES_USING_CPPFLAGS: cppflags = tuple(shlex.split(os.environ.get('CPPFLAGS' + envvar_suffix, ''))) lang_compile_args = list(cppflags) + compile_args else: @@ -273,7 +238,7 @@ def detect_language_args_from_envvars(langname: str, envvar_suffix: str = '') -> def detect_compilers_from_envvars(envvar_suffix: str = '') -> MachineInfo: infos = MachineInfo() - for langname, envvarname in UNIXY_ENVVARS_COMPILER.items(): + for langname, envvarname in envconfig.ENV_VAR_COMPILER_MAP.items(): compilerstr = os.environ.get(envvarname + envvar_suffix) if not compilerstr: continue @@ -287,7 +252,7 @@ def detect_compilers_from_envvars(envvar_suffix: str = '') -> MachineInfo: return infos def detect_binaries_from_envvars(infos: MachineInfo, envvar_suffix: str = '') -> None: - for binname, envvar_base in UNIXY_ENVVARS_TOOLS.items(): + for binname, envvar_base in envconfig.ENV_VAR_TOOL_MAP.items(): envvar = envvar_base + envvar_suffix binstr = os.environ.get(envvar) if binstr: @@ -328,12 +293,14 @@ def add_compiler_if_missing(infos: MachineInfo, langname: str, exe_names: T.List def detect_missing_native_compilers(infos: MachineInfo) -> None: # T.Any per-platform special detection should go here. - for langname, exes in TYPICAL_UNIXY_COMPILER_NAMES.items(): + for langname, exes in compiler_names.items(): + if langname not in envconfig.ENV_VAR_COMPILER_MAP: + continue add_compiler_if_missing(infos, langname, exes) def detect_missing_native_binaries(infos: MachineInfo) -> None: # T.Any per-platform special detection should go here. - for toolname in sorted(UNIXY_ENVVARS_TOOLS.keys()): + for toolname in sorted(envconfig.ENV_VAR_TOOL_MAP.keys()): if toolname in infos.binaries: continue exe = shutil.which(toolname) |