aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2020-09-18 14:23:17 -0700
committerDylan Baker <dylan@pnwbakers.com>2020-09-25 11:11:46 -0700
commit54329eeed75d9fc4b9cc2ccbafb0773d24b2f92b (patch)
treebfd5bb67c98fd4c4eb892c9adc0f87e24580c6b1
parentb7cb30e175f28b6af555a04bcf7e000eb330578e (diff)
downloadmeson-54329eeed75d9fc4b9cc2ccbafb0773d24b2f92b.zip
meson-54329eeed75d9fc4b9cc2ccbafb0773d24b2f92b.tar.gz
meson-54329eeed75d9fc4b9cc2ccbafb0773d24b2f92b.tar.bz2
dependencies/hdf5: Use the correct compilers for the machine
Instead of the default ones, this is especially important when cross compiling or when using compilers that aren't compatible with the default ones. squash! dependencies/hdf5: Use the actual system compilers
-rw-r--r--docs/markdown/snippets/hdf5_dependnecy_improvements.md3
-rw-r--r--mesonbuild/coredata.py2
-rw-r--r--mesonbuild/dependencies/hdf5.py24
3 files changed, 23 insertions, 6 deletions
diff --git a/docs/markdown/snippets/hdf5_dependnecy_improvements.md b/docs/markdown/snippets/hdf5_dependnecy_improvements.md
index 1f6b2e8..857eb90 100644
--- a/docs/markdown/snippets/hdf5_dependnecy_improvements.md
+++ b/docs/markdown/snippets/hdf5_dependnecy_improvements.md
@@ -4,3 +4,6 @@ HDF5 has been improved so that the internal representations have been split.
This allows selecting pkg-config and config-tool dependencies separately.
Both work as proper dependencies of their type, so `get_variable` and similar
now work correctly.
+
+It has also been fixed to use the selected compiler for the build instead of
+the default compiler.
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index 5827a4e..a6cfd5b 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -390,7 +390,7 @@ class CoreData:
) # type: PerMachine[T.defaultdict[str, OptionDictType]]
self.base_options = {} # type: OptionDictType
self.cross_files = self.__load_config_files(options, scratch_dir, 'cross')
- self.compilers = PerMachine(OrderedDict(), OrderedDict())
+ self.compilers = PerMachine(OrderedDict(), OrderedDict()) # type: PerMachine[T.Dict[str, Compiler]]
build_cache = DependencyCache(self.builtins_per_machine, MachineChoice.BUILD)
host_cache = DependencyCache(self.builtins_per_machine, MachineChoice.BUILD)
diff --git a/mesonbuild/dependencies/hdf5.py b/mesonbuild/dependencies/hdf5.py
index 10bdb25..21f4e71 100644
--- a/mesonbuild/dependencies/hdf5.py
+++ b/mesonbuild/dependencies/hdf5.py
@@ -15,12 +15,13 @@
# This file contains the detection logic for miscellaneous external dependencies.
import functools
-import subprocess
-import shutil
+import os
import re
+import shutil
+import subprocess
from pathlib import Path
-from ..mesonlib import OrderedSet
+from ..mesonlib import OrderedSet, join_args
from .base import (
DependencyException, DependencyMethods, ConfigToolDependency,
PkgConfigDependency, factory_methods
@@ -94,10 +95,13 @@ class HDF5ConfigToolDependency(ConfigToolDependency):
raise DependencyException('Language {} is not supported with HDF5.'.format(language))
if language == 'c':
+ cenv = 'CC'
tools = ['h5cc']
elif language == 'cpp':
+ cenv = 'CXX'
tools = ['h5c++']
elif language == 'fortran':
+ cenv = 'FC'
tools = ['h5fc']
else:
raise DependencyException('How did you get here?')
@@ -108,7 +112,17 @@ class HDF5ConfigToolDependency(ConfigToolDependency):
nkwargs = kwargs.copy()
nkwargs['tools'] = tools
- super().__init__(name, environment, nkwargs, language)
+ # Override the compiler that the config tools are going to use by
+ # setting the environment variables that they use for the compiler and
+ # linkers.
+ compiler = environment.coredata.compilers[for_machine][language]
+ try:
+ os.environ['HDF5_{}'.format(cenv)] = join_args(compiler.get_exelist())
+ os.environ['HDF5_{}LINKER'.format(cenv)] = join_args(compiler.get_linker_exelist())
+ super().__init__(name, environment, nkwargs, language)
+ finally:
+ del os.environ['HDF5_{}'.format(cenv)]
+ del os.environ['HDF5_{}LINKER'.format(cenv)]
if not self.is_found:
return
@@ -126,7 +140,7 @@ class HDF5ConfigToolDependency(ConfigToolDependency):
nkwargs = kwargs.copy()
nkwargs['language'] = 'c'
# I'm being too clever for mypy and pylint
- self.is_found = self._add_sub_dependency(hdf5_factory(environment, self.for_machine, nkwargs)) # type: ignore # pylint: disable=no-value-for-parameter
+ self.is_found = self._add_sub_dependency(hdf5_factory(environment, for_machine, nkwargs)) # type: ignore # pylint: disable=no-value-for-parameter
def _sanitize_version(self, ver: str) -> str:
v = re.search(r'\s*HDF5 Version: (\d+\.\d+\.\d+)', ver)