cmake: Some minor style changes

pull/4969/head
Daniel Mensinger 6 years ago
parent 493e505d58
commit 5c603a900b
No known key found for this signature in database
GPG Key ID: 54DD94C131E277D4
  1. 40
      mesonbuild/cmake/interpreter.py

@ -24,10 +24,10 @@ from ..mparser import Token, BaseNode, CodeBlockNode, FunctionNode, ArrayNode, A
from ..backend.backends import Backend from ..backend.backends import Backend
from ..dependencies.base import CMakeDependency, ExternalProgram from ..dependencies.base import CMakeDependency, ExternalProgram
from subprocess import Popen, PIPE, STDOUT from subprocess import Popen, PIPE, STDOUT
from typing import Dict, List from typing import List
import os, re import os, re
CMAKE_BACKEND_GENERATOR_MAP = { backend_generator_map = {
'ninja': 'Ninja', 'ninja': 'Ninja',
'xcode': 'Xcode', 'xcode': 'Xcode',
'vs2010': 'Visual Studio 10 2010', 'vs2010': 'Visual Studio 10 2010',
@ -35,7 +35,7 @@ CMAKE_BACKEND_GENERATOR_MAP = {
'vs2017': 'Visual Studio 15 2017', 'vs2017': 'Visual Studio 15 2017',
} }
CMAKE_LANGUAGE_MAP = { language_map = {
'c': 'C', 'c': 'C',
'cpp': 'CXX', 'cpp': 'CXX',
'cuda': 'CUDA', 'cuda': 'CUDA',
@ -45,7 +45,7 @@ CMAKE_LANGUAGE_MAP = {
'swift': 'Swift', 'swift': 'Swift',
} }
CMAKE_TGT_TYPE_MAP = { target_type_map = {
'STATIC_LIBRARY': 'static_library', 'STATIC_LIBRARY': 'static_library',
'MODULE_LIBRARY': 'shared_module', 'MODULE_LIBRARY': 'shared_module',
'SHARED_LIBRARY': 'shared_library', 'SHARED_LIBRARY': 'shared_library',
@ -53,10 +53,12 @@ CMAKE_TGT_TYPE_MAP = {
'OBJECT_LIBRARY': 'static_library', 'OBJECT_LIBRARY': 'static_library',
} }
CMAKE_TGT_SKIP = ['UTILITY'] skip_targets = ['UTILITY']
skip_input_extensions = ['.rule']
class ConverterTarget: class ConverterTarget:
lang_cmake_to_meson = {val.lower(): key for key, val in CMAKE_LANGUAGE_MAP.items()} lang_cmake_to_meson = {val.lower(): key for key, val in language_map.items()}
def __init__(self, target: CMakeTarget, env: Environment): def __init__(self, target: CMakeTarget, env: Environment):
self.env = env self.env = env
@ -116,7 +118,7 @@ class ConverterTarget:
def postprocess(self, output_target_map: dict, root_src_dir: str, subdir: str, install_prefix: str) -> None: def postprocess(self, output_target_map: dict, root_src_dir: str, subdir: str, install_prefix: str) -> None:
# Detect setting the C and C++ standard # Detect setting the C and C++ standard
for i in ['c', 'cpp']: for i in ['c', 'cpp']:
if not i in self.compile_opts: if i not in self.compile_opts:
continue continue
temp = [] temp = []
@ -158,8 +160,12 @@ class ConverterTarget:
build_dir_rel = os.path.relpath(self.build_dir, os.path.join(self.env.get_build_dir(), subdir)) build_dir_rel = os.path.relpath(self.build_dir, os.path.join(self.env.get_build_dir(), subdir))
self.includes = list(set([rel_path(x) for x in set(self.includes)] + [build_dir_rel])) self.includes = list(set([rel_path(x) for x in set(self.includes)] + [build_dir_rel]))
self.sources = [rel_path(x) for x in self.sources if not x.endswith('.rule')] self.sources = [rel_path(x) for x in self.sources]
self.generated = [rel_path(x) for x in self.generated if not x.endswith('.rule')] self.generated = [rel_path(x) for x in self.generated]
# Filter out CMake rule files
self.sources = [x for x in self.sources if not any([x.endswith(y) for y in skip_input_extensions])]
self.generated = [x for x in self.generated if not any([x.endswith(y) for y in skip_input_extensions])]
# Make sure '.' is always in the include directories # Make sure '.' is always in the include directories
if '.' not in self.includes: if '.' not in self.includes:
@ -182,7 +188,7 @@ class ConverterTarget:
break break
def meson_func(self) -> str: def meson_func(self) -> str:
return CMAKE_TGT_TYPE_MAP.get(self.type.upper()) return target_type_map.get(self.type.upper())
def log(self) -> None: def log(self) -> None:
mlog.log('Target', mlog.bold(self.name)) mlog.log('Target', mlog.bold(self.name))
@ -235,14 +241,14 @@ class CMakeInterpreter:
if not cmake_exe.found(): if not cmake_exe.found():
raise CMakeException('Unable to find CMake') raise CMakeException('Unable to find CMake')
generator = CMAKE_BACKEND_GENERATOR_MAP[self.backend_name] generator = backend_generator_map[self.backend_name]
cmake_args = cmake_exe.get_command() cmake_args = cmake_exe.get_command()
# Map meson compiler to CMake variables # Map meson compiler to CMake variables
for lang, comp in self.build.compilers.items(): for lang, comp in self.build.compilers.items():
if lang not in CMAKE_LANGUAGE_MAP: if lang not in language_map:
continue continue
cmake_lang = CMAKE_LANGUAGE_MAP[lang] cmake_lang = language_map[lang]
exelist = comp.get_exelist() exelist = comp.get_exelist()
if len(exelist) == 1: if len(exelist) == 1:
cmake_args += ['-DCMAKE_{}_COMPILER={}'.format(cmake_lang, exelist[0])] cmake_args += ['-DCMAKE_{}_COMPILER={}'.format(cmake_lang, exelist[0])]
@ -284,7 +290,7 @@ class CMakeInterpreter:
self.configure(extra_cmake_options) self.configure(extra_cmake_options)
with self.client.connect(): with self.client.connect():
generator = CMAKE_BACKEND_GENERATOR_MAP[self.backend_name] generator = backend_generator_map[self.backend_name]
self.client.do_handshake(self.src_dir, self.build_dir, generator, 1) self.client.do_handshake(self.src_dir, self.build_dir, generator, 1)
# Do a second configure to initialise the server # Do a second configure to initialise the server
@ -300,7 +306,7 @@ class CMakeInterpreter:
cm_reply = self.client.query_checked(RequestCodeModel(), 'Querying the CMake code model') cm_reply = self.client.query_checked(RequestCodeModel(), 'Querying the CMake code model')
src_dir = bs_reply.src_dir src_dir = bs_reply.src_dir
self.bs_files = [x.file for x in bs_reply.build_files if not x.is_cmake and not x.is_temp] self.bs_files = [x.file for x in bs_reply.build_files if not x.is_cmake and not x.is_temp]
self.bs_files = [os.path.relpath(os.path.join(src_dir, x), self.env.get_source_dir()) for x in self.bs_files] self.bs_files = [os.path.relpath(os.path.join(src_dir, x), self.env.get_source_dir()) for x in self.bs_files]
self.bs_files = list(set(self.bs_files)) self.bs_files = list(set(self.bs_files))
self.codemodel = cm_reply self.codemodel = cm_reply
@ -320,7 +326,7 @@ class CMakeInterpreter:
if not self.project_name: if not self.project_name:
self.project_name = j.name self.project_name = j.name
for k in j.targets: for k in j.targets:
if k.type not in CMAKE_TGT_SKIP: if k.type not in skip_targets:
self.targets += [ConverterTarget(k, self.env)] self.targets += [ConverterTarget(k, self.env)]
output_target_map = {x.full_name: x for x in self.targets} output_target_map = {x.full_name: x for x in self.targets}
@ -391,8 +397,8 @@ class CMakeInterpreter:
# Generate the root code block and the project function call # Generate the root code block and the project function call
root_cb = CodeBlockNode(token()) root_cb = CodeBlockNode(token())
root_cb.lines += [function('project', [self.project_name] + self.languages)] root_cb.lines += [function('project', [self.project_name] + self.languages)]
processed = {} processed = {}
def process_target(tgt: ConverterTarget): def process_target(tgt: ConverterTarget):
# First handle inter target dependencies # First handle inter target dependencies
link_with = [] link_with = []

Loading…
Cancel
Save