From 71d17b44e45c68b8d0b5189a8ebe8412ab99c622 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Wed, 28 Nov 2018 15:15:54 +0100 Subject: Fixed list_target_files and list_targets --- mesonbuild/compilers/java.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mesonbuild/compilers/java.py') diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py index 978562ca1..686d2e051 100644 --- a/mesonbuild/compilers/java.py +++ b/mesonbuild/compilers/java.py @@ -63,7 +63,7 @@ class JavaCompiler(Compiler): def get_std_exe_link_args(self): return [] - def get_include_args(self, path): + def get_include_args(self, path, is_system): return [] def get_pic_args(self): -- cgit v1.2.3 From c4eb5c79fe89ca49dd9d9f5bd72be99d919dd2a0 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Thu, 29 Nov 2018 12:56:52 +0100 Subject: Added unit test --- mesonbuild/build.py | 2 +- mesonbuild/compilers/cs.py | 2 +- mesonbuild/compilers/java.py | 2 +- mesonbuild/compilers/swift.py | 2 +- mesonbuild/msetup.py | 3 - run_unittests.py | 145 ++++++++++++++++++--- test cases/unit/49 introspection/meson.build | 14 ++ .../unit/49 introspection/sharedlib/meson.build | 2 + .../unit/49 introspection/sharedlib/shared.cpp | 9 ++ .../unit/49 introspection/sharedlib/shared.hpp | 10 ++ .../unit/49 introspection/staticlib/meson.build | 2 + .../unit/49 introspection/staticlib/static.c | 5 + .../unit/49 introspection/staticlib/static.h | 3 + test cases/unit/49 introspection/t1.cpp | 13 ++ test cases/unit/49 introspection/t2.cpp | 8 ++ test cases/unit/49 introspection/t3.cpp | 16 +++ 16 files changed, 216 insertions(+), 22 deletions(-) create mode 100644 test cases/unit/49 introspection/meson.build create mode 100644 test cases/unit/49 introspection/sharedlib/meson.build create mode 100644 test cases/unit/49 introspection/sharedlib/shared.cpp create mode 100644 test cases/unit/49 introspection/sharedlib/shared.hpp create mode 100644 test cases/unit/49 introspection/staticlib/meson.build create mode 100644 test cases/unit/49 introspection/staticlib/static.c create mode 100644 test cases/unit/49 introspection/staticlib/static.h create mode 100644 test cases/unit/49 introspection/t1.cpp create mode 100644 test cases/unit/49 introspection/t2.cpp create mode 100644 test cases/unit/49 introspection/t3.cpp (limited to 'mesonbuild/compilers/java.py') diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 1054451d9..4fa6bde63 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1515,7 +1515,6 @@ class SharedLibrary(BuildTarget): known_kwargs = known_shlib_kwargs def __init__(self, name, subdir, subproject, is_cross, sources, objects, environment, kwargs): - self.typename = 'shared library' self.soversion = None self.ltversion = None # Max length 2, first element is compatibility_version, second is current_version @@ -1528,6 +1527,7 @@ class SharedLibrary(BuildTarget): # The import library that GCC would generate (and prefer) self.gcc_import_filename = None super().__init__(name, subdir, subproject, is_cross, sources, objects, environment, kwargs) + self.typename = 'shared library' if 'rust' in self.compilers: # If no crate type is specified, or it's the generic lib type, use dylib if not hasattr(self, 'rust_crate_type') or self.rust_crate_type == 'lib': diff --git a/mesonbuild/compilers/cs.py b/mesonbuild/compilers/cs.py index 95b160393..a6c74d260 100644 --- a/mesonbuild/compilers/cs.py +++ b/mesonbuild/compilers/cs.py @@ -82,7 +82,7 @@ class CsCompiler(Compiler): def get_std_exe_link_args(self): return [] - def get_include_args(self, path, is_system): + def get_include_args(self, path): return [] def get_pic_args(self): diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py index 686d2e051..978562ca1 100644 --- a/mesonbuild/compilers/java.py +++ b/mesonbuild/compilers/java.py @@ -63,7 +63,7 @@ class JavaCompiler(Compiler): def get_std_exe_link_args(self): return [] - def get_include_args(self, path, is_system): + def get_include_args(self, path): return [] def get_pic_args(self): diff --git a/mesonbuild/compilers/swift.py b/mesonbuild/compilers/swift.py index c156541d7..4d5dd0cfe 100644 --- a/mesonbuild/compilers/swift.py +++ b/mesonbuild/compilers/swift.py @@ -85,7 +85,7 @@ class SwiftCompiler(Compiler): def build_rpath_args(self, *args): return [] # FIXME - def get_include_args(self, dirname, is_system): + def get_include_args(self, dirname): return ['-I' + dirname] def get_compile_only_args(self): diff --git a/mesonbuild/msetup.py b/mesonbuild/msetup.py index 491ea2fc8..402f756e9 100644 --- a/mesonbuild/msetup.py +++ b/mesonbuild/msetup.py @@ -218,9 +218,6 @@ class MesonApp: coredata.update_cmd_line_file(self.build_dir, self.options) # Generate an IDE introspection file with the same syntax as the already existing API - intro_tests = intr.backend.create_test_serialisation(b.get_tests()) - intro_benchmarks = intr.backend.create_test_serialisation(b.get_benchmarks()) - intro_install = intr.backend.create_install_data() if self.options.profile: fname = os.path.join(self.build_dir, 'meson-private', 'profile-introspector.log') profile.runctx('mintro.generate_introspection_file(b, intr.backend)', globals(), locals(), filename=fname) diff --git a/run_unittests.py b/run_unittests.py index 9120a43a7..811df6bd3 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -3110,26 +3110,141 @@ recommended as it is not supported on some platforms''') self.maxDiff = None self.assertListEqual(res_nb, res_wb) - def test_introspect_all_command(self): - testdir = os.path.join(self.common_test_dir, '6 linkshared') + def test_introspect_json_dump(self): + testdir = os.path.join(self.unit_test_dir, '49 introspection') self.init(testdir) - res = self.introspect('--all') - keylist = [ - 'benchmarks', - 'buildoptions', - 'buildsystem_files', - 'dependencies', - 'installed', - 'projectinfo', - 'targets', - 'tests' + introfile = os.path.join(self.builddir, 'meson-introspection.json') + self.assertPathExists(introfile) + with open(introfile, 'r') as fp: + res = json.load(fp) + + def assertKeyTypes(key_type_list, obj): + for i in key_type_list: + self.assertIn(i[0], obj) + self.assertIsInstance(obj[i[0]], i[1]) + + root_keylist = [ + ('benchmarks', list), + ('buildoptions', list), + ('buildsystem_files', list), + ('dependencies', list), + ('installed', dict), + ('projectinfo', dict), + ('targets', list), + ('tests', list), + ] + + test_keylist = [ + ('cmd', list), + ('env', dict), + ('name', str), + ('timeout', int), + ('suite', list), + ('is_parallel', bool), + ] + + buildoptions_keylist = [ + ('name', str), + ('section', str), + ('type', str), + ('description', str), + ] + + buildoptions_typelist = [ + ('combo', str, [('choices', list)]), + ('string', str, []), + ('boolean', bool, []), + ('integer', int, []), + ('array', list, []), + ] + + dependencies_typelist = [ + ('name', str), + ('compile_args', list), + ('link_args', list), + ] + + targets_typelist = [ + ('name', str), + ('id', str), + ('type', str), + ('filename', str), + ('build_by_default', bool), + ('sources', list), + ('installed', bool), + ] + + targets_sources_typelist = [ + ('language', str), + ('compiler', list), + ('parameters', list), + ('source_files', list), ] - for i in keylist: - self.assertIn(i, res) + assertKeyTypes(root_keylist, res) + + # Check Tests and benchmarks + tests_to_find = ['test case 1', 'test case 2', 'benchmark 1'] + for i in res['benchmarks'] + res['tests']: + assertKeyTypes(test_keylist, i) + if i['name'] in tests_to_find: + tests_to_find.remove(i['name']) + self.assertListEqual(tests_to_find, []) + + # Check buildoptions + buildopts_to_find = {'cpp_std': 'c++11'} + for i in res['buildoptions']: + assertKeyTypes(buildoptions_keylist, i) + valid_type = False + for j in buildoptions_typelist: + if i['type'] == j[0]: + self.assertIsInstance(i['value'], j[1]) + assertKeyTypes(j[2], i) + valid_type = True + break + + self.assertTrue(valid_type) + if i['name'] in buildopts_to_find: + self.assertEqual(i['value'], buildopts_to_find[i['name']]) + buildopts_to_find.pop(i['name'], None) + self.assertDictEqual(buildopts_to_find, {}) + + # Check buildsystem_files + self.assertListEqual(res['buildsystem_files'], ['meson.build', 'sharedlib/meson.build', 'staticlib/meson.build']) + + # Check dependencies + dependencies_to_find = ['zlib'] + for i in res['dependencies']: + assertKeyTypes(dependencies_typelist, i) + if i['name'] in dependencies_to_find: + dependencies_to_find.remove(i['name']) + self.assertListEqual(dependencies_to_find, []) + + # Check projectinfo + self.assertDictEqual(res['projectinfo'], {'version': '1.2.3', 'descriptive_name': 'introspection', 'subprojects': []}) + + # Check targets + targets_to_find = { + 'sharedTestLib': ('shared library', True, False), + 'staticTestLib': ('static library', True, False), + 'test1': ('executable', True, True), + 'test2': ('executable', True, False), + 'test3': ('executable', True, False), + } + for i in res['targets']: + assertKeyTypes(targets_typelist, i) + if i['name'] in targets_to_find: + tgt = targets_to_find[i['name']] + self.assertEqual(i['type'], tgt[0]) + self.assertEqual(i['build_by_default'], tgt[1]) + self.assertEqual(i['installed'], tgt[2]) + targets_to_find.pop(i['name'], None) + for j in i['sources']: + assertKeyTypes(targets_sources_typelist, j) + self.assertDictEqual(targets_to_find, {}) def test_introspect_file_dump_eauals_all(self): - testdir = os.path.join(self.common_test_dir, '6 linkshared') + testdir = os.path.join(self.unit_test_dir, '49 introspection') self.init(testdir) res_all = self.introspect('--all') res_file = {} diff --git a/test cases/unit/49 introspection/meson.build b/test cases/unit/49 introspection/meson.build new file mode 100644 index 000000000..bd5d51a89 --- /dev/null +++ b/test cases/unit/49 introspection/meson.build @@ -0,0 +1,14 @@ +project('introspection', ['c', 'cpp'], version: '1.2.3', default_options: ['cpp_std=c++11']) + +dep1 = dependency('zlib') + +subdir('sharedlib') +subdir('staticlib') + +t1 = executable('test1', 't1.cpp', link_with: [sharedlib], install: true) +t2 = executable('test2', 't2.cpp', link_with: [staticlib]) +t3 = executable('test3', 't3.cpp', link_with: [sharedlib, staticlib], dependencies: [dep1]) + +test('test case 1', t1) +test('test case 2', t2) +benchmark('benchmark 1', t3) diff --git a/test cases/unit/49 introspection/sharedlib/meson.build b/test cases/unit/49 introspection/sharedlib/meson.build new file mode 100644 index 000000000..3de3493db --- /dev/null +++ b/test cases/unit/49 introspection/sharedlib/meson.build @@ -0,0 +1,2 @@ +SRC_shared = ['shared.cpp'] +sharedlib = shared_library('sharedTestLib', SRC_shared) diff --git a/test cases/unit/49 introspection/sharedlib/shared.cpp b/test cases/unit/49 introspection/sharedlib/shared.cpp new file mode 100644 index 000000000..5030ab75e --- /dev/null +++ b/test cases/unit/49 introspection/sharedlib/shared.cpp @@ -0,0 +1,9 @@ +#include "shared.hpp" + +void SharedClass::doStuff() { + number++; +} + +int SharedClass::getNumber() const { + return number; +} diff --git a/test cases/unit/49 introspection/sharedlib/shared.hpp b/test cases/unit/49 introspection/sharedlib/shared.hpp new file mode 100644 index 000000000..dc9b2da28 --- /dev/null +++ b/test cases/unit/49 introspection/sharedlib/shared.hpp @@ -0,0 +1,10 @@ +#pragma once + +class SharedClass { + private: + int number = 42; + public: + SharedClass() = default; + void doStuff(); + int getNumber() const; +}; \ No newline at end of file diff --git a/test cases/unit/49 introspection/staticlib/meson.build b/test cases/unit/49 introspection/staticlib/meson.build new file mode 100644 index 000000000..b1b9afe02 --- /dev/null +++ b/test cases/unit/49 introspection/staticlib/meson.build @@ -0,0 +1,2 @@ +SRC_static = ['static.c'] +staticlib = static_library('staticTestLib', SRC_static) diff --git a/test cases/unit/49 introspection/staticlib/static.c b/test cases/unit/49 introspection/staticlib/static.c new file mode 100644 index 000000000..37ebc0d80 --- /dev/null +++ b/test cases/unit/49 introspection/staticlib/static.c @@ -0,0 +1,5 @@ +#include "static.h" + +int add_numbers(int a, int b) { + return a + b; +} \ No newline at end of file diff --git a/test cases/unit/49 introspection/staticlib/static.h b/test cases/unit/49 introspection/staticlib/static.h new file mode 100644 index 000000000..506784e43 --- /dev/null +++ b/test cases/unit/49 introspection/staticlib/static.h @@ -0,0 +1,3 @@ +#pragma once + +int add_numbers(int a, int b); \ No newline at end of file diff --git a/test cases/unit/49 introspection/t1.cpp b/test cases/unit/49 introspection/t1.cpp new file mode 100644 index 000000000..2bcaab87c --- /dev/null +++ b/test cases/unit/49 introspection/t1.cpp @@ -0,0 +1,13 @@ +#include "sharedlib/shared.hpp" + +int main() { + SharedClass cl1; + if(cl1.getNumber() != 42) { + return 1; + } + cl1.doStuff(); + if(cl1.getNumber() != 43) { + return 2; + } + return 0; +} diff --git a/test cases/unit/49 introspection/t2.cpp b/test cases/unit/49 introspection/t2.cpp new file mode 100644 index 000000000..fee5097c3 --- /dev/null +++ b/test cases/unit/49 introspection/t2.cpp @@ -0,0 +1,8 @@ +#include "staticlib/static.h" + +int main() { + if(add_numbers(1, 2) != 3) { + return 1; + } + return 0; +} diff --git a/test cases/unit/49 introspection/t3.cpp b/test cases/unit/49 introspection/t3.cpp new file mode 100644 index 000000000..8a906e079 --- /dev/null +++ b/test cases/unit/49 introspection/t3.cpp @@ -0,0 +1,16 @@ +#include "sharedlib/shared.hpp" +#include "staticlib/static.h" + +int main() { + for(int i = 0; i < 1000; add_numbers(i, 1)) { + SharedClass cl1; + if(cl1.getNumber() != 42) { + return 1; + } + cl1.doStuff(); + if(cl1.getNumber() != 43) { + return 2; + } + } + return 0; +} -- cgit v1.2.3 From 97429279031d9b9f0ad9e2e66511c67d2dd0c6a0 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Sun, 30 Dec 2018 13:37:41 +0100 Subject: Absolute path generation refactoring --- mesonbuild/backend/ninjabackend.py | 8 +++----- mesonbuild/compilers/__init__.py | 2 ++ mesonbuild/compilers/c.py | 9 +++++++++ mesonbuild/compilers/compilers.py | 31 +++++++++++++++++++++++++++++++ mesonbuild/compilers/cs.py | 3 +++ mesonbuild/compilers/d.py | 14 ++++++++++++++ mesonbuild/compilers/fortran.py | 7 +++++++ mesonbuild/compilers/java.py | 3 +++ mesonbuild/compilers/rust.py | 3 +++ mesonbuild/compilers/swift.py | 7 +++++++ mesonbuild/compilers/vala.py | 3 +++ 11 files changed, 85 insertions(+), 5 deletions(-) (limited to 'mesonbuild/compilers/java.py') diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 818c9793a..1b8c8ec91 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.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 diff --git a/mesonbuild/compilers/__init__.py b/mesonbuild/compilers/__init__.py index 31b7b897b..b5b2475dd 100644 --- a/mesonbuild/compilers/__init__.py +++ b/mesonbuild/compilers/__init__.py @@ -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, diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index 92a9fa6d7..6350eee9a 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -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 diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 2be6ef124..3ef4ffcc1 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -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 diff --git a/mesonbuild/compilers/cs.py b/mesonbuild/compilers/cs.py index a6c74d260..a504f80fe 100644 --- a/mesonbuild/compilers/cs.py +++ b/mesonbuild/compilers/cs.py @@ -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) diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py index 2cf0fbd92..a3e336983 100644 --- a/mesonbuild/compilers/d.py +++ b/mesonbuild/compilers/d.py @@ -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) diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py index 75db26d5b..456e63e34 100644 --- a/mesonbuild/compilers/fortran.py +++ b/mesonbuild/compilers/fortran.py @@ -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' diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py index 978562ca1..89d4c9c2c 100644 --- a/mesonbuild/compilers/java.py +++ b/mesonbuild/compilers/java.py @@ -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' diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py index 93c291786..b5695662b 100644 --- a/mesonbuild/compilers/rust.py +++ b/mesonbuild/compilers/rust.py @@ -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 diff --git a/mesonbuild/compilers/swift.py b/mesonbuild/compilers/swift.py index 4d5dd0cfe..1d12cbcdc 100644 --- a/mesonbuild/compilers/swift.py +++ b/mesonbuild/compilers/swift.py @@ -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) diff --git a/mesonbuild/compilers/vala.py b/mesonbuild/compilers/vala.py index 46bb210e9..bfe48f403 100644 --- a/mesonbuild/compilers/vala.py +++ b/mesonbuild/compilers/vala.py @@ -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) -- cgit v1.2.3 From 9eca2e46a05870065e3cfa88ae42362d81aa3157 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Sun, 30 Dec 2018 23:28:28 +0100 Subject: Added more compiler option support --- mesonbuild/compilers/cs.py | 6 ++++++ mesonbuild/compilers/d.py | 8 +++++++- mesonbuild/compilers/fortran.py | 2 +- mesonbuild/compilers/java.py | 6 ++++++ mesonbuild/compilers/rust.py | 8 ++++++++ mesonbuild/compilers/swift.py | 2 +- mesonbuild/compilers/vala.py | 10 ++++++++++ 7 files changed, 39 insertions(+), 3 deletions(-) (limited to 'mesonbuild/compilers/java.py') diff --git a/mesonbuild/compilers/cs.py b/mesonbuild/compilers/cs.py index a504f80fe..cbfcd9c9d 100644 --- a/mesonbuild/compilers/cs.py +++ b/mesonbuild/compilers/cs.py @@ -89,6 +89,12 @@ class CsCompiler(Compiler): return [] def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): + for idx, i in enumerate(parameter_list): + if i[:2] == '-L': + parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:])) + if i[:5] == '-lib:': + parameter_list[idx] = i[:5] + os.path.normpath(os.path.join(build_dir, i[5:])) + return parameter_list def name_string(self): diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py index a3e336983..3065ac74d 100644 --- a/mesonbuild/compilers/d.py +++ b/mesonbuild/compilers/d.py @@ -115,6 +115,12 @@ class DCompiler(Compiler): 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:])) + if i[:4] == '-L-L': + parameter_list[idx] = i[:4] + os.path.normpath(os.path.join(build_dir, i[4:])) + if i[:5] == '-L=-L': + parameter_list[idx] = i[:5] + os.path.normpath(os.path.join(build_dir, i[5:])) + if i[:6] == '-Wl,-L': + parameter_list[idx] = i[:6] + os.path.normpath(os.path.join(build_dir, i[6:])) return parameter_list @@ -520,7 +526,7 @@ class GnuDCompiler(DCompiler): def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): for idx, i in enumerate(parameter_list): - if i[:2] == '-I': + 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 diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py index 456e63e34..8056969aa 100644 --- a/mesonbuild/compilers/fortran.py +++ b/mesonbuild/compilers/fortran.py @@ -173,7 +173,7 @@ end program prog def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): for idx, i in enumerate(parameter_list): - if i[:2] == '-I': + 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 diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py index 89d4c9c2c..03cc1b078 100644 --- a/mesonbuild/compilers/java.py +++ b/mesonbuild/compilers/java.py @@ -82,6 +82,12 @@ class JavaCompiler(Compiler): return java_buildtype_args[buildtype] def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): + for idx, i in enumerate(parameter_list): + if i[:4] == '-cp:' or i[:4] == '-cp;': + parameter_list[idx] = i[:4] + os.path.normpath(os.path.join(build_dir, i[4:])) + if i[:11] == '-classpath:' or i[:11] == '-classpath;': + parameter_list[idx] = i[:11] + os.path.normpath(os.path.join(build_dir, i[11:])) + return parameter_list def sanity_check(self, work_dir, environment): diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py index b5695662b..68da82361 100644 --- a/mesonbuild/compilers/rust.py +++ b/mesonbuild/compilers/rust.py @@ -84,4 +84,12 @@ class RustCompiler(Compiler): return rust_optimization_args[optimization_level] def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): + for idx, i in enumerate(parameter_list): + if i[:2] == '-L': + for j in ['dependency', 'crate', 'native', 'framework', 'all']: + combined_len = len(j) + 3 + if i[:combined_len] == '-L{}='.format(j): + parameter_list[idx] = i[:combined_len] + os.path.normpath(os.path.join(build_dir, i[combined_len:])) + break + return parameter_list diff --git a/mesonbuild/compilers/swift.py b/mesonbuild/compilers/swift.py index 1d12cbcdc..eb58d11b3 100644 --- a/mesonbuild/compilers/swift.py +++ b/mesonbuild/compilers/swift.py @@ -93,7 +93,7 @@ class SwiftCompiler(Compiler): def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): for idx, i in enumerate(parameter_list): - if i[:2] == '-I': + 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 diff --git a/mesonbuild/compilers/vala.py b/mesonbuild/compilers/vala.py index bfe48f403..e64d57f36 100644 --- a/mesonbuild/compilers/vala.py +++ b/mesonbuild/compilers/vala.py @@ -67,6 +67,16 @@ class ValaCompiler(Compiler): return [] def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): + for idx, i in enumerate(parameter_list): + if i[:9] == '--girdir=': + parameter_list[idx] = i[:9] + os.path.normpath(os.path.join(build_dir, i[9:])) + if i[:10] == '--vapidir=': + parameter_list[idx] = i[:10] + os.path.normpath(os.path.join(build_dir, i[10:])) + if i[:13] == '--includedir=': + parameter_list[idx] = i[:13] + os.path.normpath(os.path.join(build_dir, i[13:])) + if i[:14] == '--metadatadir=': + parameter_list[idx] = i[:14] + os.path.normpath(os.path.join(build_dir, i[14:])) + return parameter_list def sanity_check(self, work_dir, environment): -- cgit v1.2.3 From 681532452cf3863fe133108c54f99e9fe33c859c Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Mon, 31 Dec 2018 00:15:50 +0100 Subject: Handle java correct --- mesonbuild/compilers/java.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mesonbuild/compilers/java.py') diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py index 03cc1b078..dbd1f3fda 100644 --- a/mesonbuild/compilers/java.py +++ b/mesonbuild/compilers/java.py @@ -83,10 +83,10 @@ class JavaCompiler(Compiler): def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): for idx, i in enumerate(parameter_list): - if i[:4] == '-cp:' or i[:4] == '-cp;': - parameter_list[idx] = i[:4] + os.path.normpath(os.path.join(build_dir, i[4:])) - if i[:11] == '-classpath:' or i[:11] == '-classpath;': - parameter_list[idx] = i[:11] + os.path.normpath(os.path.join(build_dir, i[11:])) + if i in ['-cp', '-classpath', '-sourcepath'] and idx + 1 < len(parameter_list): + path_list = parameter_list[idx + 1].replace(';', ':').split(':') + path_list = [os.path.normpath(os.path.join(build_dir, x)) for x in path_list] + parameter_list[idx + 1] = ':'.join(path_list) return parameter_list -- cgit v1.2.3 From 477b69b505c35ffe9fea758df74b1d821f47bf0b Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Mon, 31 Dec 2018 00:23:44 +0100 Subject: Use os.pathsep --- mesonbuild/compilers/java.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mesonbuild/compilers/java.py') diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py index dbd1f3fda..16495116a 100644 --- a/mesonbuild/compilers/java.py +++ b/mesonbuild/compilers/java.py @@ -84,7 +84,7 @@ class JavaCompiler(Compiler): def compute_parameters_with_absolute_paths(self, parameter_list, build_dir): for idx, i in enumerate(parameter_list): if i in ['-cp', '-classpath', '-sourcepath'] and idx + 1 < len(parameter_list): - path_list = parameter_list[idx + 1].replace(';', ':').split(':') + path_list = parameter_list[idx + 1].split(os.pathsep) path_list = [os.path.normpath(os.path.join(build_dir, x)) for x in path_list] parameter_list[idx + 1] = ':'.join(path_list) -- cgit v1.2.3 From ca808a070273ad3dfa579a6f0849b33c561b459a Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Mon, 31 Dec 2018 00:28:25 +0100 Subject: More os.pathsep --- mesonbuild/compilers/java.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mesonbuild/compilers/java.py') diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py index 16495116a..03ee38241 100644 --- a/mesonbuild/compilers/java.py +++ b/mesonbuild/compilers/java.py @@ -86,7 +86,7 @@ class JavaCompiler(Compiler): if i in ['-cp', '-classpath', '-sourcepath'] and idx + 1 < len(parameter_list): path_list = parameter_list[idx + 1].split(os.pathsep) path_list = [os.path.normpath(os.path.join(build_dir, x)) for x in path_list] - parameter_list[idx + 1] = ':'.join(path_list) + parameter_list[idx + 1] = os.pathsep.join(path_list) return parameter_list -- cgit v1.2.3