Absolute path generation refactoring

pull/4547/head
Daniel Mensinger 6 years ago
parent 2487e0a1fb
commit 9742927903
No known key found for this signature in database
GPG Key ID: 54DD94C131E277D4
  1. 8
      mesonbuild/backend/ninjabackend.py
  2. 2
      mesonbuild/compilers/__init__.py
  3. 9
      mesonbuild/compilers/c.py
  4. 31
      mesonbuild/compilers/compilers.py
  5. 3
      mesonbuild/compilers/cs.py
  6. 14
      mesonbuild/compilers/d.py
  7. 7
      mesonbuild/compilers/fortran.py
  8. 3
      mesonbuild/compilers/java.py
  9. 3
      mesonbuild/compilers/rust.py
  10. 7
      mesonbuild/compilers/swift.py
  11. 3
      mesonbuild/compilers/vala.py

@ -29,7 +29,7 @@ from .. import build
from .. import mlog
from .. import dependencies
from .. import compilers
from ..compilers import CompilerArgs, CCompiler, VisualStudioCCompiler
from ..compilers import CompilerArgs, CCompiler, VisualStudioCCompiler, Compiler
from ..linkers import ArLinker
from ..mesonlib import File, MesonException, OrderedSet
from ..mesonlib import get_compiler_for_source, has_path_sep
@ -322,7 +322,7 @@ int dummy;
return False
return True
def create_target_source_introspection(self, target, comp, parameters, sources, generated_sources):
def create_target_source_introspection(self, target: build.Target, comp: compilers.Compiler, parameters, sources, generated_sources):
'''
Adds the source file introspection information for a language of a target
@ -349,9 +349,7 @@ int dummy;
# Convert parameters
if isinstance(parameters, CompilerArgs):
parameters = parameters.to_native(copy=True)
for idx, i in enumerate(parameters):
if i[:2] == '-I' or i[:2] == '/I' or i[:2] == '-L':
parameters[idx] = i[:2] + os.path.normpath(os.path.join(self.build_dir, i[2:]))
parameters = comp.compute_parameters_with_absolute_paths(parameters, self.build_dir)
if target.is_cross:
parameters += comp.get_cross_extra_flags(self.environment, False)
# The new entry

@ -15,6 +15,7 @@
# Public symbols for compilers sub-package when using 'from . import compilers'
__all__ = [
'CompilerType',
'Compiler',
'all_languages',
'base_options',
@ -91,6 +92,7 @@ __all__ = [
# Bring symbols from each module into compilers sub-package namespace
from .compilers import (
CompilerType,
Compiler,
all_languages,
base_options,
clib_langs,

@ -1475,6 +1475,15 @@ class VisualStudioCCompiler(CCompiler):
# msvc does not have a concept of system header dirs.
return ['-I' + path]
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:2] == '-I' or i[:2] == '/I':
parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
elif i[:9] == '/LIBPATH:':
parameter_list[idx] = i[:9] + os.path.normpath(os.path.join(build_dir, i[9:]))
return parameter_list
# Visual Studio is special. It ignores some arguments it does not
# understand and you can't tell it to error out on those.
# http://stackoverflow.com/questions/15259720/how-can-i-make-the-microsoft-c-compiler-treat-unknown-flags-as-errors-rather-t

@ -884,6 +884,9 @@ class Compiler:
def compute_int(self, expression, low, high, guess, prefix, env, extra_args, dependencies):
raise EnvironmentException('%s does not support compute_int ' % self.get_id())
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
raise EnvironmentException('%s does not support compute_parameters_with_absolute_paths ' % self.get_id())
def has_members(self, typename, membernames, prefix, env, *, extra_args=None, dependencies=None):
raise EnvironmentException('%s does not support has_member(s) ' % self.get_id())
@ -1547,6 +1550,13 @@ class GnuLikeCompiler(abc.ABC):
return ['-mwindows']
return []
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:2] == '-I' or i[:2] == '-L':
parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
return parameter_list
class GnuCompiler(GnuLikeCompiler):
"""
GnuCompiler represents an actual GCC in its many incarnations.
@ -1776,6 +1786,13 @@ class ArmclangCompiler:
"""
return ['--symdefs=' + implibname]
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:2] == '-I' or i[:2] == '-L':
parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
return parameter_list
# Tested on linux for ICC 14.0.3, 15.0.6, 16.0.4, 17.0.1, 19.0.0
class IntelCompiler(GnuLikeCompiler):
@ -1910,6 +1927,13 @@ class ArmCompiler:
def get_debug_args(self, is_debug):
return clike_debug_args[is_debug]
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:2] == '-I' or i[:2] == '-L':
parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
return parameter_list
class CcrxCompiler:
def __init__(self, compiler_type):
if not self.is_cross:
@ -2003,3 +2027,10 @@ class CcrxCompiler:
continue
result.append(i)
return result
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:9] == '-include=':
parameter_list[idx] = i[:9] + os.path.normpath(os.path.join(build_dir, i[9:]))
return parameter_list

@ -88,6 +88,9 @@ class CsCompiler(Compiler):
def get_pic_args(self):
return []
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
return parameter_list
def name_string(self):
return ' '.join(self.exelist)

@ -111,6 +111,13 @@ class DCompiler(Compiler):
def get_include_args(self, path, is_system):
return ['-I=' + path]
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:3] == '-I=':
parameter_list[idx] = i[:3] + os.path.normpath(os.path.join(build_dir, i[3:]))
return parameter_list
def get_warn_args(self, level):
return ['-wi']
@ -511,6 +518,13 @@ class GnuDCompiler(DCompiler):
def get_buildtype_args(self, buildtype):
return d_gdc_buildtype_args[buildtype]
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:2] == '-I':
parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
return parameter_list
def build_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath):
return self.build_unix_rpath_args(build_dir, from_dir, rpath_paths, build_rpath, install_rpath)

@ -171,6 +171,13 @@ end program prog
def get_module_outdir_args(self, path):
return ['-module', path]
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:2] == '-I':
parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
return parameter_list
def module_name_to_filename(self, module_name):
return module_name.lower() + '.mod'

@ -81,6 +81,9 @@ class JavaCompiler(Compiler):
def get_buildtype_args(self, buildtype):
return java_buildtype_args[buildtype]
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
return parameter_list
def sanity_check(self, work_dir, environment):
src = 'SanityCheck.java'
obj = 'SanityCheck'

@ -82,3 +82,6 @@ class RustCompiler(Compiler):
def get_optimization_args(self, optimization_level):
return rust_optimization_args[optimization_level]
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
return parameter_list

@ -91,6 +91,13 @@ class SwiftCompiler(Compiler):
def get_compile_only_args(self):
return ['-c']
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
for idx, i in enumerate(parameter_list):
if i[:2] == '-I':
parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
return parameter_list
def sanity_check(self, work_dir, environment):
src = 'swifttest.swift'
source_name = os.path.join(work_dir, src)

@ -66,6 +66,9 @@ class ValaCompiler(Compiler):
return ['--color=' + colortype]
return []
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
return parameter_list
def sanity_check(self, work_dir, environment):
code = 'class MesonSanityCheck : Object { }'
args = self.get_cross_extra_flags(environment, link=False)

Loading…
Cancel
Save