diff options
author | Jon Turney <jon.turney@dronecode.org.uk> | 2018-11-05 14:34:06 +0000 |
---|---|---|
committer | Jon Turney <jon.turney@dronecode.org.uk> | 2018-11-06 13:19:44 +0000 |
commit | 94cdb68a3a1336e3806dc98ea4da0595ccd14a1b (patch) | |
tree | 2f32cd6492202bf840cce43fca1234ac1b4982e6 /run_project_tests.py | |
parent | e116b948335328e6cda5303901edc81df779a910 (diff) | |
download | meson-94cdb68a3a1336e3806dc98ea4da0595ccd14a1b.zip meson-94cdb68a3a1336e3806dc98ea4da0595ccd14a1b.tar.gz meson-94cdb68a3a1336e3806dc98ea4da0595ccd14a1b.tar.bz2 |
Deal with clang-cl generating empty implibs
Deal with clang-cl doing the sane (but different to MSVC) thing, of
generating an empty import library, rather than silently ignoring
/IMPLIB when there are no exports.
Diffstat (limited to 'run_project_tests.py')
-rwxr-xr-x | run_project_tests.py | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/run_project_tests.py b/run_project_tests.py index 234f97e..0d64f47 100755 --- a/run_project_tests.py +++ b/run_project_tests.py @@ -118,8 +118,14 @@ def get_relative_files_list_from_dir(fromdir): return paths def platform_fix_name(fname, compiler, env): + # canonicalize compiler + if compiler == 'clang-cl': + canonical_compiler = 'msvc' + else: + canonical_compiler = compiler + if '?lib' in fname: - if mesonlib.for_windows(env.is_cross_build(), env) and compiler == 'msvc': + if mesonlib.for_windows(env.is_cross_build(), env) and canonical_compiler == 'msvc': fname = re.sub(r'lib/\?lib(.*)\.', r'bin/\1.', fname) fname = re.sub(r'/\?lib/', r'/bin/', fname) elif mesonlib.for_windows(env.is_cross_build(), env): @@ -141,17 +147,17 @@ def platform_fix_name(fname, compiler, env): if fname.startswith('?msvc:'): fname = fname[6:] - if compiler != 'msvc': + if canonical_compiler != 'msvc': return None if fname.startswith('?gcc:'): fname = fname[5:] - if compiler == 'msvc': + if canonical_compiler == 'msvc': return None if fname.startswith('?cygwin:'): fname = fname[8:] - if compiler == 'msvc' or not mesonlib.for_cygwin(env.is_cross_build(), env): + if not mesonlib.for_cygwin(env.is_cross_build(), env): return None if fname.endswith('?so'): @@ -173,11 +179,14 @@ def platform_fix_name(fname, compiler, env): else: return fname[:-3] + '.so' - if fname.endswith('?implib'): - if mesonlib.for_windows(env.is_cross_build(), env) and compiler == 'msvc': - return re.sub(r'/(?:lib|)([^/]*?)\?implib$', r'/\1.lib', fname) + if fname.endswith('?implib') or fname.endswith('?implibempty'): + if mesonlib.for_windows(env.is_cross_build(), env) and canonical_compiler == 'msvc': + # only MSVC doesn't generate empty implibs + if fname.endswith('?implibempty') and compiler == 'msvc': + return None + return re.sub(r'/(?:lib|)([^/]*?)\?implib(?:empty|)$', r'/\1.lib', fname) elif mesonlib.for_windows(env.is_cross_build(), env) or mesonlib.for_cygwin(env.is_cross_build(), env): - return fname[:-7] + '.dll.a' + return re.sub(r'\?implib(?:empty|)$', r'.dll.a', fname) else: return None @@ -732,10 +741,6 @@ def detect_system_compiler(): raise RuntimeError("Could not find C compiler.") system_compiler = comp.get_id() - # canonicalize for platform_fix_name() - if system_compiler == 'clang-cl': - system_compiler = 'msvc' - if __name__ == '__main__': parser = argparse.ArgumentParser(description="Run the test suite of Meson.") parser.add_argument('extra_args', nargs='*', |