summaryrefslogtreecommitdiff
path: root/mesonbuild/environment.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/environment.py')
-rw-r--r--mesonbuild/environment.py46
1 files changed, 34 insertions, 12 deletions
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index d8530206b..b23509ad4 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import configparser, os, platform, re, sys, shlex, shutil, subprocess
+import configparser, os, platform, re, sys, shlex, shutil, subprocess, typing
from . import coredata
from .linkers import ArLinker, ArmarLinker, VisualStudioLinker, DLinker, CcrxLinker
@@ -321,7 +321,7 @@ def search_version(text):
# This regex is reaching magic levels. If it ever needs
# to be updated, do not complexify but convert to something
# saner instead.
- version_regex = '(?<!(\d|\.))(\d{1,2}(\.\d+)+(-[a-zA-Z0-9]+)?)'
+ version_regex = r'(?<!(\d|\.))(\d{1,2}(\.\d+)+(-[a-zA-Z0-9]+)?)'
match = re.search(version_regex, text)
if match:
return match.group(0)
@@ -433,6 +433,7 @@ class Environment:
self.cuda_static_linker = ['nvlink']
self.gcc_static_linker = ['gcc-ar']
self.clang_static_linker = ['llvm-ar']
+ self.default_cmake = ['cmake']
self.default_pkgconfig = ['pkg-config']
# Various prefixes and suffixes for import libraries, shared libraries,
@@ -765,7 +766,22 @@ class Environment:
except OSError as e:
popen_exceptions[' '.join(compiler + [arg])] = e
continue
- version = search_version(out)
+ # Example nvcc printout:
+ #
+ # nvcc: NVIDIA (R) Cuda compiler driver
+ # Copyright (c) 2005-2018 NVIDIA Corporation
+ # Built on Sat_Aug_25_21:08:01_CDT_2018
+ # Cuda compilation tools, release 10.0, V10.0.130
+ #
+ # search_version() first finds the "10.0" after "release",
+ # rather than the more precise "10.0.130" after "V".
+ # The patch version number is occasionally important; For
+ # instance, on Linux,
+ # - CUDA Toolkit 8.0.44 requires NVIDIA Driver 367.48
+ # - CUDA Toolkit 8.0.61 requires NVIDIA Driver 375.26
+ # Luckily, the "V" also makes it very simple to extract
+ # the full version:
+ version = out.strip().split('V')[-1]
cls = CudaCompiler
return cls(ccache + compiler, version, is_cross, exe_wrap)
raise EnvironmentException('Could not find suitable CUDA compiler: "' + ' '.join(compilers) + '"')
@@ -1085,7 +1101,7 @@ class Environment:
def detect_compilers(self, lang: str, need_cross_compiler: bool):
(comp, cross_comp) = self.compilers_from_language(lang, need_cross_compiler)
if comp is not None:
- self.coredata.process_new_compilers(lang, comp, cross_comp, self.cmd_line_options)
+ self.coredata.process_new_compilers(lang, comp, cross_comp, self)
return comp, cross_comp
def detect_static_linker(self, compiler):
@@ -1267,14 +1283,10 @@ class MesonConfigFile:
return out
class Properties:
- def __init__(self):
- self.properties = {}
-
- def get_external_args(self, language):
- return mesonlib.stringlistify(self.properties.get(language + '_args', []))
-
- def get_external_link_args(self, language):
- return mesonlib.stringlistify(self.properties.get(language + '_link_args', []))
+ def __init__(
+ self,
+ properties: typing.Optional[typing.Dict[str, typing.Union[str, typing.List[str]]]] = None):
+ self.properties = properties or {}
def has_stdlib(self, language):
return language + '_stdlib' in self.properties
@@ -1288,6 +1300,11 @@ class Properties:
def get_sys_root(self):
return self.properties.get('sys_root', None)
+ def __eq__(self, other):
+ if isinstance(other, type(self)):
+ return self.properties == other.properties
+ return NotImplemented
+
# TODO consider removing so Properties is less freeform
def __getitem__(self, key):
return self.properties[key]
@@ -1321,6 +1338,9 @@ class MachineInfo:
return NotImplemented
return not self.__eq__(other)
+ def __repr__(self):
+ return '<MachineInfo: {} {} ({})>'.format(self.system, self.cpu_family, self.cpu)
+
@staticmethod
def detect(compilers = None):
"""Detect the machine we're running on
@@ -1503,6 +1523,8 @@ class BinaryTable:
'ar': 'AR',
'windres': 'WINDRES',
+ 'cmake': 'CMAKE',
+ 'qmake': 'QMAKE',
'pkgconfig': 'PKG_CONFIG',
}