summaryrefslogtreecommitdiff
path: root/mesonbuild/compilers/c.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/compilers/c.py')
-rw-r--r--mesonbuild/compilers/c.py21
1 files changed, 14 insertions, 7 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index 354124ab2..4208b8985 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -46,6 +46,7 @@ from .compilers import (
class CCompiler(Compiler):
library_dirs_cache = {}
program_dirs_cache = {}
+ find_library_cache = {}
def __init__(self, exelist, version, is_cross, exe_wrapper=None, **kwargs):
# If a child ObjC or CPP class has already set it, don't set it ourselves
@@ -837,13 +838,8 @@ class CCompiler(Compiler):
raise AssertionError('BUG: unknown libtype {!r}'.format(libtype))
return prefixes, suffixes
- def find_library_impl(self, libname, env, extra_dirs, code, libtype='default'):
- # These libraries are either built-in or invalid
- if libname in self.ignore_libs:
- return []
+ def find_library_real(self, libname, env, extra_dirs, code, libtype):
# First try if we can just add the library as -l.
- if extra_dirs and isinstance(extra_dirs, str):
- extra_dirs = [extra_dirs]
# Gcc + co seem to prefer builtin lib dirs to -L dirs.
# Only try to find std libs if no extra dirs specified.
if not extra_dirs and libtype == 'default':
@@ -864,7 +860,18 @@ class CCompiler(Compiler):
trial = os.path.join(d, prefix + libname + '.' + suffix)
if os.path.isfile(trial):
return [trial]
- return None
+ return []
+
+ def find_library_impl(self, libname, env, extra_dirs, code, libtype):
+ # These libraries are either built-in or invalid
+ if libname in self.ignore_libs:
+ return []
+ if isinstance(extra_dirs, str):
+ extra_dirs = [extra_dirs]
+ key = (tuple(self.exelist), libname, tuple(extra_dirs), code, libtype)
+ if key not in self.find_library_cache:
+ self.find_library_cache[key] = self.find_library_real(libname, env, extra_dirs, code, libtype)
+ return self.find_library_cache[key][:]
def find_library(self, libname, env, extra_dirs, libtype='default'):
code = 'int main(int argc, char **argv) { return 0; }'