aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-09-29 21:41:51 +0300
committerGitHub <noreply@github.com>2017-09-29 21:41:51 +0300
commit5e47739633969fcb08afe086de46c031c4a8d4d2 (patch)
tree2c0ea8f7c9bc886f5258d2b430f53bb792a6ff32
parentfd339759f20192ff9c464c112b27e402c7e42cbb (diff)
parent5a8d1b6431c80c53ea9f2de155906f67a9f664bc (diff)
downloadmeson-5e47739633969fcb08afe086de46c031c4a8d4d2.zip
meson-5e47739633969fcb08afe086de46c031c4a8d4d2.tar.gz
meson-5e47739633969fcb08afe086de46c031c4a8d4d2.tar.bz2
Merge pull request #2378 from dcbaker/llvm-cleanups
Llvm cleanups
-rw-r--r--mesonbuild/dependencies/dev.py84
-rw-r--r--test cases/frameworks/15 llvm/meson.build5
2 files changed, 43 insertions, 46 deletions
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index f991d3c..d2dd107 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -129,9 +129,6 @@ class LLVMDependency(ExternalDependency):
'llvm-config-3.5', 'llvm-config35',
'llvm-config-5.0', 'llvm-config-devel', # development snapshot
]
- llvmconfig = None
- _llvmconfig_found = False
- __best_found = None
__cpp_blacklist = {'-DNDEBUG'}
def __init__(self, environment, kwargs):
@@ -139,11 +136,12 @@ class LLVMDependency(ExternalDependency):
# the C linker works fine if only using the C API.
super().__init__('llvm-config', environment, 'cpp', kwargs)
self.modules = []
+ self.llvmconfig = None
+ self.__best_found = None
# FIXME: Support multiple version requirements ala PkgConfigDependency
req_version = kwargs.get('version', None)
+ self.check_llvmconfig(req_version)
if self.llvmconfig is None:
- self.check_llvmconfig(req_version)
- if not self._llvmconfig_found:
if self.__best_found is not None:
mlog.log('found {!r} but need:'.format(self.__best_found),
req_version)
@@ -159,31 +157,36 @@ class LLVMDependency(ExternalDependency):
mlog.debug('stdout: {}\nstderr: {}'.format(out, err))
if self.required:
raise DependencyException('Dependency LLVM not found')
+ mlog.log('Dependency LLVM found:', mlog.red('NO'))
return
- else:
- self.version = out.strip()
- mlog.log('Dependency LLVM found:', mlog.green('YES'))
- self.is_found = True
- p, out = Popen_safe(
- [self.llvmconfig, '--libs', '--ldflags', '--system-libs'])[:2]
- if p.returncode != 0:
- raise DependencyException('Could not generate libs for LLVM.')
- self.link_args = shlex.split(out)
-
- p, out = Popen_safe([self.llvmconfig, '--cppflags'])[:2]
- if p.returncode != 0:
- raise DependencyException('Could not generate includedir for LLVM.')
- cargs = mesonlib.OrderedSet(shlex.split(out))
- self.compile_args = list(cargs.difference(self.__cpp_blacklist))
-
- p, out = Popen_safe([self.llvmconfig, '--components'])[:2]
- if p.returncode != 0:
- raise DependencyException('Could not generate modules for LLVM.')
- self.modules = shlex.split(out)
-
- modules = mesonlib.stringlistify(kwargs.get('modules', []))
- for mod in modules:
+ mlog.log('Dependency LLVM found:', mlog.green('YES'))
+ self.is_found = True
+
+ # Currently meson doesn't really atempt to handle pre-release versions,
+ # so strip the 'svn' off the end, since it will probably cuase problems
+ # for users who want the patch version.
+ self.version = out.strip().rstrip('svn')
+
+ p, out = Popen_safe(
+ [self.llvmconfig, '--libs', '--ldflags', '--system-libs'])[:2]
+ if p.returncode != 0:
+ raise DependencyException('Could not generate libs for LLVM.')
+ self.link_args = shlex.split(out)
+
+ p, out = Popen_safe([self.llvmconfig, '--cppflags'])[:2]
+ if p.returncode != 0:
+ raise DependencyException('Could not generate includedir for LLVM.')
+ cargs = mesonlib.OrderedSet(shlex.split(out))
+ self.compile_args = list(cargs.difference(self.__cpp_blacklist))
+
+ p, out = Popen_safe([self.llvmconfig, '--components'])[:2]
+ if p.returncode != 0:
+ raise DependencyException('Could not generate modules for LLVM.')
+ self.modules = shlex.split(out)
+
+ modules = mesonlib.stringlistify(mesonlib.flatten(kwargs.get('modules', [])))
+ for mod in sorted(set(modules)):
if mod not in self.modules:
mlog.log('LLVM module', mod, 'found:', mlog.red('NO'))
self.is_found = False
@@ -193,38 +196,33 @@ class LLVMDependency(ExternalDependency):
else:
mlog.log('LLVM module', mod, 'found:', mlog.green('YES'))
- @classmethod
- def check_llvmconfig(cls, version_req):
+ def check_llvmconfig(self, version_req):
"""Try to find the highest version of llvm-config."""
- for llvmconfig in cls.llvm_config_bins:
+ for llvmconfig in self.llvm_config_bins:
try:
p, out = Popen_safe([llvmconfig, '--version'])[0:2]
out = out.strip()
if p.returncode != 0:
continue
- # FIXME: As soon as some llvm-config is found, version checks
- # in further dependnecy() calls will be ignored
if version_req:
if version_compare(out, version_req, strict=True):
- if cls.__best_found and version_compare(out, '<={}'.format(cls.__best_found), strict=True):
+ if self.__best_found and version_compare(
+ out, '<={}'.format(self.__best_found), strict=True):
continue
- cls.__best_found = out
- cls.llvmconfig = llvmconfig
+ self.__best_found = out
+ self.llvmconfig = llvmconfig
else:
# If no specific version is requested use the first version
# found, since that should be the best.
- cls.__best_found = out
- cls.llvmconfig = llvmconfig
+ self.__best_found = out
+ self.llvmconfig = llvmconfig
break
except (FileNotFoundError, PermissionError):
pass
- if cls.__best_found:
+ if self.__best_found:
mlog.log('Found llvm-config:',
- mlog.bold(shutil.which(cls.llvmconfig)),
+ mlog.bold(shutil.which(self.llvmconfig)),
'({})'.format(out.strip()))
- cls._llvmconfig_found = True
- else:
- cls.llvmconfig = False
def need_threads(self):
return True
diff --git a/test cases/frameworks/15 llvm/meson.build b/test cases/frameworks/15 llvm/meson.build
index af7f8c6..e1d97cb 100644
--- a/test cases/frameworks/15 llvm/meson.build
+++ b/test cases/frameworks/15 llvm/meson.build
@@ -10,8 +10,7 @@ llvm_dep = dependency(
d = dependency('llvm', modules : 'not-found', required : false)
assert(d.found() == false, 'not-found llvm module found')
-# XXX: Version checks are broken, see FIXME in LLVMDependency
-#d = dependency('llvm', version : '<0.1', required : false)
-#assert(d.found() == false, 'ancient llvm module found')
+d = dependency('llvm', version : '<0.1', required : false)
+assert(d.found() == false, 'ancient llvm module found')
executable('sum', 'sum.c', dependencies : llvm_dep)