aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Griffis <tingping@tingping.se>2018-09-23 15:23:39 -0400
committerJussi Pakkanen <jpakkane@gmail.com>2018-10-03 01:22:59 +0300
commit46a42a69a6a761b3d058ca151028ad9b9f497281 (patch)
tree257da214573a063def89d02b94942c651f12c113
parent386e5b876fa1395ec2699c9895ac93e4eaf680ad (diff)
downloadmeson-46a42a69a6a761b3d058ca151028ad9b9f497281.zip
meson-46a42a69a6a761b3d058ca151028ad9b9f497281.tar.gz
meson-46a42a69a6a761b3d058ca151028ad9b9f497281.tar.bz2
Add custom libgcrypt dependency using libgcrypt-config
Fixes #3563
-rw-r--r--ciimage/Dockerfile3
-rw-r--r--docs/markdown/Dependencies.md11
-rw-r--r--docs/markdown/Release-notes-for-0.49.0.md5
-rw-r--r--mesonbuild/dependencies/__init__.py3
-rw-r--r--mesonbuild/dependencies/misc.py31
-rw-r--r--test cases/frameworks/24 libgcrypt/libgcrypt_prog.c8
-rw-r--r--test cases/frameworks/24 libgcrypt/meson.build23
7 files changed, 80 insertions, 4 deletions
diff --git a/ciimage/Dockerfile b/ciimage/Dockerfile
index 326013b..ac59ca9 100644
--- a/ciimage/Dockerfile
+++ b/ciimage/Dockerfile
@@ -12,7 +12,8 @@ RUN apt-get -y update && apt-get -y upgrade \
&& apt-get -y install qt4-linguist-tools \
&& apt-get -y install python-dev \
&& apt-get -y install libomp-dev openssh-client \
-&& apt-get -y install -y clang libclang-dev llvm-dev flex \
+&& apt-get -y install clang libclang-dev llvm-dev flex \
+&& apt-get -y install libgcrypt11-dev \
&& apt-get -y install gdc ldc \
&& python3 -m pip install hotdoc codecov \
&& dub fetch urld \
diff --git a/docs/markdown/Dependencies.md b/docs/markdown/Dependencies.md
index 08ff1e2..c853677 100644
--- a/docs/markdown/Dependencies.md
+++ b/docs/markdown/Dependencies.md
@@ -165,15 +165,16 @@ wmf_dep = dependency('libwmf', method : 'config-tool')
## Dependencies using config tools
[CUPS](#cups), [LLVM](#llvm), [pcap](#pcap), [WxWidgets](#wxwidgets),
-[libwmf](#libwmf), and GnuStep either do not provide pkg-config
+[libwmf](#libwmf), [GCrypt](#libgcrypt), and GnuStep either do not provide pkg-config
modules or additionally can be detected via a config tool
-(cups-config, llvm-config, etc). Meson has native support for these
+(cups-config, llvm-config, libgcrypt-config, etc). Meson has native support for these
tools, and they can be found like other dependencies:
```meson
pcap_dep = dependency('pcap', version : '>=1.0')
cups_dep = dependency('cups', version : '>=1.4')
llvm_dep = dependency('llvm', version : '>=4.0')
+libgcrypt_dep = dependency('libgcrypt', version: '>= 1.8')
```
## AppleFrameworks
@@ -309,6 +310,12 @@ The `language` keyword may used.
`method` may be `auto`, `config-tool` or `pkg-config`.
+## libgcrypt
+
+*(added 0.49.0)*
+
+`method` may be `auto`, `config-tool` or `pkg-config`.
+
## Python3
Python3 is handled specially by meson:
diff --git a/docs/markdown/Release-notes-for-0.49.0.md b/docs/markdown/Release-notes-for-0.49.0.md
index b294ad5..bdf5769 100644
--- a/docs/markdown/Release-notes-for-0.49.0.md
+++ b/docs/markdown/Release-notes-for-0.49.0.md
@@ -15,3 +15,8 @@ whose contents should look like this:
A short description explaining the new feature and how it should be used.
+## Libgcrypt dependency now supports libgcrypt-config
+
+Earlier, `dependency('libgcrypt')` could only detect the library with pkg-config
+files. Now, if pkg-config files are not found, Meson will look for
+`libgcrypt-config` and if it's found, will use that to find the library.
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py
index 00b6fa2..0375537 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, 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)
+from .misc import (MPIDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency)
from .platform import AppleFrameworks
from .ui import GLDependency, GnuStepDependency, Qt4Dependency, Qt5Dependency, SDL2Dependency, WxDependency, VulkanDependency
@@ -39,6 +39,7 @@ packages.update({
'pcap': PcapDependency,
'cups': CupsDependency,
'libwmf': LibWmfDependency,
+ 'libgcrypt': LibGCryptDependency,
# From platform:
'appleframeworks': AppleFrameworks,
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py
index 5164512..a2f7daf 100644
--- a/mesonbuild/dependencies/misc.py
+++ b/mesonbuild/dependencies/misc.py
@@ -506,3 +506,34 @@ class LibWmfDependency(ExternalDependency):
@staticmethod
def get_methods():
return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL]
+
+
+class LibGCryptDependency(ExternalDependency):
+ def __init__(self, environment, kwargs):
+ super().__init__('libgcrypt', environment, None, kwargs)
+
+ @classmethod
+ def _factory(cls, environment, kwargs):
+ methods = cls._process_method_kw(kwargs)
+ candidates = []
+
+ if DependencyMethods.PKGCONFIG in methods:
+ candidates.append(functools.partial(PkgConfigDependency, 'libgcrypt', environment, kwargs))
+
+ if DependencyMethods.CONFIG_TOOL in methods:
+ candidates.append(functools.partial(ConfigToolDependency.factory,
+ 'libgcrypt', environment, None, kwargs, ['libgcrypt-config'],
+ 'libgcrypt-config',
+ LibGCryptDependency.tool_finish_init))
+
+ return candidates
+
+ @staticmethod
+ def tool_finish_init(ctdep):
+ ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
+ ctdep.link_args = ctdep.get_config_value(['--libs'], 'link_args')
+ ctdep.version = ctdep.get_config_value(['--version'], 'version')[0]
+
+ @staticmethod
+ def get_methods():
+ return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL]
diff --git a/test cases/frameworks/24 libgcrypt/libgcrypt_prog.c b/test cases/frameworks/24 libgcrypt/libgcrypt_prog.c
new file mode 100644
index 0000000..f131359
--- /dev/null
+++ b/test cases/frameworks/24 libgcrypt/libgcrypt_prog.c
@@ -0,0 +1,8 @@
+#include <gcrypt.h>
+
+int
+main()
+{
+ gcry_check_version(NULL);
+ return 0;
+}
diff --git a/test cases/frameworks/24 libgcrypt/meson.build b/test cases/frameworks/24 libgcrypt/meson.build
new file mode 100644
index 0000000..5aadb13
--- /dev/null
+++ b/test cases/frameworks/24 libgcrypt/meson.build
@@ -0,0 +1,23 @@
+project('libgcrypt test', 'c')
+
+wm = find_program('libgcrypt-config', required : false)
+if not wm.found()
+ error('MESON_SKIP_TEST: libgcrypt-config not installed')
+endif
+
+libgcrypt_dep = dependency('libgcrypt', version : '>= 1.0')
+libgcrypt_ver = libgcrypt_dep.version()
+assert(libgcrypt_ver.split('.').length() > 1, 'libgcrypt version is "@0@"'.format(libgcrypt_ver))
+message('libgcrypt version is "@0@"'.format(libgcrypt_ver))
+e = executable('libgcrypt_prog', 'libgcrypt_prog.c', dependencies : libgcrypt_dep)
+
+test('libgcrypttest', e)
+
+# Test using the method keyword:
+
+dependency('libgcrypt', method : 'config-tool')
+dependency('libgcrypt', method : 'pkg-config', required: false)
+
+# Check we can apply a version constraint
+dependency('libgcrypt', version: '>=@0@'.format(libgcrypt_dep.version()), method: 'pkg-config', required: false)
+dependency('libgcrypt', version: '>=@0@'.format(libgcrypt_dep.version()), method: 'config-tool')