aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-01-26 23:56:32 -0500
committerMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-01-30 06:38:29 -0500
commit1ebaeadf60fd6f162e73ee3938e88cf72659a8a8 (patch)
tree067c08ef70e5a3e5a1f3e7348f757e924331ac56
parentc5a78c9e495058e61a4456fca6b6854b3823fc90 (diff)
downloadmeson-1ebaeadf60fd6f162e73ee3938e88cf72659a8a8.zip
meson-1ebaeadf60fd6f162e73ee3938e88cf72659a8a8.tar.gz
meson-1ebaeadf60fd6f162e73ee3938e88cf72659a8a8.tar.bz2
initial HDF5 pkg-config fortran works
-rw-r--r--docs/markdown/Dependencies.md11
-rw-r--r--docs/markdown/snippets/hdf5.md3
-rw-r--r--mesonbuild/dependencies/__init__.py4
-rw-r--r--mesonbuild/dependencies/base.py1
-rw-r--r--mesonbuild/dependencies/misc.py46
5 files changed, 62 insertions, 3 deletions
diff --git a/docs/markdown/Dependencies.md b/docs/markdown/Dependencies.md
index e3fedc4..4ff5a2a 100644
--- a/docs/markdown/Dependencies.md
+++ b/docs/markdown/Dependencies.md
@@ -269,6 +269,17 @@ e = executable('testprog', 'test.cc', dependencies : gtest_dep)
test('gtest test', e)
```
+## HDF5
+HDF5 is supported for C, C++ and Fortran. Because dependencies are
+language-specific, you must specify the requested language using the
+`language` keyword argument, i.e.,
+ * `dependency('hdf5', language: 'c')` for the C HDF5 headers and libraries
+ * `dependency('hdf5', language: 'cpp')` for the C++ HDF5 headers and libraries
+ * `dependency('hdf5', language: 'fortran')` for the Fortran HDF5 headers and libraries
+
+Meson uses pkg-config to find HDF5. The standard low-level HDF5 function and the `HL` high-level HDF5 functions are linked for each language.
+
+
## libwmf
*(added 0.44.0)*
diff --git a/docs/markdown/snippets/hdf5.md b/docs/markdown/snippets/hdf5.md
new file mode 100644
index 0000000..8ebb4c0
--- /dev/null
+++ b/docs/markdown/snippets/hdf5.md
@@ -0,0 +1,3 @@
+## HDF5
+
+HDF5 support is added via pkg-config.
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py
index afe2a3b..f5034db 100644
--- a/mesonbuild/dependencies/__init__.py
+++ b/mesonbuild/dependencies/__init__.py
@@ -18,7 +18,7 @@ from .base import ( # noqa: F401
ExternalDependency, NotFoundDependency, ExternalLibrary, ExtraFrameworkDependency, InternalDependency,
PkgConfigDependency, CMakeDependency, find_external_dependency, get_dep_identifier, packages, _packages_accept_language)
from .dev import GMockDependency, GTestDependency, LLVMDependency, ValgrindDependency
-from .misc import (MPIDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency)
+from .misc import (HDF5Dependency, MPIDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency)
from .platform import AppleFrameworks
from .ui import GLDependency, GnuStepDependency, Qt4Dependency, Qt5Dependency, SDL2Dependency, WxDependency, VulkanDependency
@@ -33,6 +33,7 @@ packages.update({
# From misc:
'boost': BoostDependency,
'mpi': MPIDependency,
+ 'hdf5': HDF5Dependency,
'openmp': OpenMPDependency,
'python3': Python3Dependency,
'threads': ThreadDependency,
@@ -54,6 +55,7 @@ packages.update({
'vulkan': VulkanDependency,
})
_packages_accept_language.update({
+ 'hdf5',
'mpi',
'openmp',
})
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 4b54005..a9d889a 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -2044,6 +2044,7 @@ display_name_map = {
'dub': 'DUB',
'gmock': 'GMock',
'gtest': 'GTest',
+ 'hdf5': 'HDF5',
'llvm': 'LLVM',
'mpi': 'MPI',
'openmp': 'OpenMP',
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py
index e6f52a5..b9f8bb6 100644
--- a/mesonbuild/dependencies/misc.py
+++ b/mesonbuild/dependencies/misc.py
@@ -14,14 +14,13 @@
# This file contains the detection logic for miscellaneous external dependencies.
+from pathlib import Path
import functools
import os
import re
import shlex
import sysconfig
-from pathlib import Path
-
from .. import mlog
from .. import mesonlib
from ..environment import detect_cpu_family
@@ -33,6 +32,49 @@ from .base import (
)
+class HDF5Dependency(ExternalDependency):
+
+ def __init__(self, environment, kwargs):
+ language = kwargs.get('language', 'c')
+ super().__init__('hdf5', environment, language, kwargs)
+ kwargs['required'] = False
+ kwargs['silent'] = True
+ self.is_found = False
+
+ pkgconfig_files = ['hdf5']
+
+ if language not in ('c', 'cpp', 'fortran'):
+ raise DependencyException('Language {} is not supported with HDF5.'.format(language))
+
+ for pkg in pkgconfig_files:
+ try:
+ pkgdep = PkgConfigDependency(pkg, environment, kwargs, language=self.language)
+ if pkgdep.found():
+ self.compile_args = pkgdep.get_compile_args()
+ # derive needed libraries by language
+ link_args = pkgdep.get_link_args()
+ lang_link_args = []
+ for larg in link_args:
+ lpath = Path(larg)
+ if lpath.is_file():
+ if language == 'c':
+ lang_link_args.append(str(lpath.parent / (lpath.stem + '_hl' + lpath.suffix)))
+ lang_link_args.append(larg)
+ elif language == 'cpp':
+ lang_link_args.append(str(lpath.parent / (lpath.stem + '_hl_cpp' + lpath.suffix)))
+ lang_link_args.append(str(lpath.parent / (lpath.stem + '_cpp' + lpath.suffix)))
+ elif language == 'fortran':
+ lang_link_args.append(str(lpath.parent / (lpath.stem + 'hl_fortran' + lpath.suffix)))
+ lang_link_args.append(str(lpath.parent / (lpath.stem + '_fortran' + lpath.suffix)))
+
+ self.link_args = lang_link_args
+ self.version = pkgdep.get_version()
+ self.is_found = True
+ self.pcdep = pkgdep
+ break
+ except Exception:
+ pass
+
class MPIDependency(ExternalDependency):
def __init__(self, environment, kwargs):