diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2018-06-03 18:10:54 +0530 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek.chauhan@gmail.com> | 2018-06-05 10:50:22 +0000 |
commit | ad0121d259c2155e81b5eb75ef40ace47e5244f8 (patch) | |
tree | c2023d99da7b1e1d3d2252cee3d285d47e2c2446 /mesonbuild/compilers/c.py | |
parent | bc4dd5e20163ef01f7fe3e518599f8bbd84c6f90 (diff) | |
download | meson-ad0121d259c2155e81b5eb75ef40ace47e5244f8.zip meson-ad0121d259c2155e81b5eb75ef40ace47e5244f8.tar.gz meson-ad0121d259c2155e81b5eb75ef40ace47e5244f8.tar.bz2 |
Add prog/lib dirs from the mingw cross-compiler to PATH
These directories contain DLLs that the executable may need, such as
libstdc++-6.dll, libwinpthread, etc.
Diffstat (limited to 'mesonbuild/compilers/c.py')
-rw-r--r-- | mesonbuild/compilers/c.py | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index 4cc9660..354124a 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -45,6 +45,7 @@ from .compilers import ( class CCompiler(Compiler): library_dirs_cache = {} + program_dirs_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 @@ -166,11 +167,12 @@ class CCompiler(Compiler): env = os.environ.copy() env['LC_ALL'] = 'C' stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=env)[1] + paths = [] for line in stdo.split('\n'): if line.startswith('libraries:'): libstr = line.split('=', 1)[1] - return libstr.split(':') - return [] + paths = [os.path.realpath(p) for p in libstr.split(':')] + return paths def get_library_dirs(self): key = tuple(self.exelist) @@ -178,6 +180,27 @@ class CCompiler(Compiler): self.library_dirs_cache[key] = self.get_library_dirs_real() return self.library_dirs_cache[key][:] + def get_program_dirs_real(self): + env = os.environ.copy() + env['LC_ALL'] = 'C' + stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=env)[1] + paths = [] + for line in stdo.split('\n'): + if line.startswith('programs:'): + libstr = line.split('=', 1)[1] + paths = [os.path.realpath(p) for p in libstr.split(':')] + return paths + + def get_program_dirs(self): + ''' + Programs used by the compiler. Also where toolchain DLLs such as + libstdc++-6.dll are found with MinGW. + ''' + key = tuple(self.exelist) + if key not in self.program_dirs_cache: + self.program_dirs_cache[key] = self.get_program_dirs_real() + return self.program_dirs_cache[key][:] + def get_pic_args(self): return ['-fPIC'] |