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 mlog
from .. import dependencies from .. import dependencies
from .. import compilers from .. import compilers
from ..compilers import CompilerArgs, CCompiler, VisualStudioCCompiler from ..compilers import CompilerArgs, CCompiler, VisualStudioCCompiler, Compiler
from ..linkers import ArLinker from ..linkers import ArLinker
from ..mesonlib import File, MesonException, OrderedSet from ..mesonlib import File, MesonException, OrderedSet
from ..mesonlib import get_compiler_for_source, has_path_sep from ..mesonlib import get_compiler_for_source, has_path_sep
@ -322,7 +322,7 @@ int dummy;
return False return False
return True 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 Adds the source file introspection information for a language of a target
@ -349,9 +349,7 @@ int dummy;
# Convert parameters # Convert parameters
if isinstance(parameters, CompilerArgs): if isinstance(parameters, CompilerArgs):
parameters = parameters.to_native(copy=True) parameters = parameters.to_native(copy=True)
for idx, i in enumerate(parameters): parameters = comp.compute_parameters_with_absolute_paths(parameters, self.build_dir)
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:]))
if target.is_cross: if target.is_cross:
parameters += comp.get_cross_extra_flags(self.environment, False) parameters += comp.get_cross_extra_flags(self.environment, False)
# The new entry # The new entry

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

@ -1475,6 +1475,15 @@ class VisualStudioCCompiler(CCompiler):
# msvc does not have a concept of system header dirs. # msvc does not have a concept of system header dirs.
return ['-I' + path] 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 # Visual Studio is special. It ignores some arguments it does not
# understand and you can't tell it to error out on those. # 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 # 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): def compute_int(self, expression, low, high, guess, prefix, env, extra_args, dependencies):
raise EnvironmentException('%s does not support compute_int ' % self.get_id()) 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): 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()) raise EnvironmentException('%s does not support has_member(s) ' % self.get_id())
@ -1547,6 +1550,13 @@ class GnuLikeCompiler(abc.ABC):
return ['-mwindows'] return ['-mwindows']
return [] 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): class GnuCompiler(GnuLikeCompiler):
""" """
GnuCompiler represents an actual GCC in its many incarnations. GnuCompiler represents an actual GCC in its many incarnations.
@ -1776,6 +1786,13 @@ class ArmclangCompiler:
""" """
return ['--symdefs=' + implibname] 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 # Tested on linux for ICC 14.0.3, 15.0.6, 16.0.4, 17.0.1, 19.0.0
class IntelCompiler(GnuLikeCompiler): class IntelCompiler(GnuLikeCompiler):
@ -1910,6 +1927,13 @@ class ArmCompiler:
def get_debug_args(self, is_debug): def get_debug_args(self, is_debug):
return clike_debug_args[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: class CcrxCompiler:
def __init__(self, compiler_type): def __init__(self, compiler_type):
if not self.is_cross: if not self.is_cross:
@ -2003,3 +2027,10 @@ class CcrxCompiler:
continue continue
result.append(i) result.append(i)
return result 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): def get_pic_args(self):
return [] return []
def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
return parameter_list
def name_string(self): def name_string(self):
return ' '.join(self.exelist) return ' '.join(self.exelist)

@ -111,6 +111,13 @@ class DCompiler(Compiler):
def get_include_args(self, path, is_system): def get_include_args(self, path, is_system):
return ['-I=' + path] 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): def get_warn_args(self, level):
return ['-wi'] return ['-wi']
@ -511,6 +518,13 @@ class GnuDCompiler(DCompiler):
def get_buildtype_args(self, buildtype): def get_buildtype_args(self, buildtype):
return d_gdc_buildtype_args[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): 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) 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): def get_module_outdir_args(self, path):
return ['-module', 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): def module_name_to_filename(self, module_name):
return module_name.lower() + '.mod' return module_name.lower() + '.mod'

@ -81,6 +81,9 @@ class JavaCompiler(Compiler):
def get_buildtype_args(self, buildtype): def get_buildtype_args(self, buildtype):
return java_buildtype_args[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): def sanity_check(self, work_dir, environment):
src = 'SanityCheck.java' src = 'SanityCheck.java'
obj = 'SanityCheck' obj = 'SanityCheck'

@ -82,3 +82,6 @@ class RustCompiler(Compiler):
def get_optimization_args(self, optimization_level): def get_optimization_args(self, optimization_level):
return rust_optimization_args[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): def get_compile_only_args(self):
return ['-c'] 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): def sanity_check(self, work_dir, environment):
src = 'swifttest.swift' src = 'swifttest.swift'
source_name = os.path.join(work_dir, src) source_name = os.path.join(work_dir, src)

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

Loading…
Cancel
Save