aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules/pkgconfig.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2018-03-22 16:40:58 -0400
committerJussi Pakkanen <jpakkane@gmail.com>2018-03-25 23:20:09 +0300
commit8efd9400922f6f8eb876f9ef8d0042679d836c90 (patch)
treef91f267ee5cbfaf00ff80dda5bfd1fdb332a101b /mesonbuild/modules/pkgconfig.py
parentf6f07840388db4aa5800ac4b69211c8b2cb87a70 (diff)
downloadmeson-8efd9400922f6f8eb876f9ef8d0042679d836c90.zip
meson-8efd9400922f6f8eb876f9ef8d0042679d836c90.tar.gz
meson-8efd9400922f6f8eb876f9ef8d0042679d836c90.tar.bz2
pkgconfig generator: Add required version
Diffstat (limited to 'mesonbuild/modules/pkgconfig.py')
-rw-r--r--mesonbuild/modules/pkgconfig.py56
1 files changed, 48 insertions, 8 deletions
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py
index 79a4423..c85624c 100644
--- a/mesonbuild/modules/pkgconfig.py
+++ b/mesonbuild/modules/pkgconfig.py
@@ -31,6 +31,7 @@ class DependenciesHelper:
self.priv_libs = []
self.priv_reqs = []
self.cflags = []
+ self.version_reqs = {}
def add_pub_libs(self, libs):
libs, reqs, cflags = self._process_libs(libs, True)
@@ -57,12 +58,17 @@ class DependenciesHelper:
processed_reqs.append(obj.generated_pc)
elif hasattr(obj, 'pcdep'):
pcdeps = mesonlib.listify(obj.pcdep)
- processed_reqs += [i.name for i in pcdeps]
+ for d in pcdeps:
+ processed_reqs += d.name
+ self.add_version_reqs(d.name, obj.version_reqs)
elif isinstance(obj, dependencies.PkgConfigDependency):
if obj.found():
processed_reqs.append(obj.name)
+ self.add_version_reqs(obj.name, obj.version_reqs)
elif isinstance(obj, str):
- processed_reqs.append(obj)
+ name, version_req = self.split_version_req(obj)
+ processed_reqs.append(name)
+ self.add_version_reqs(name, version_req)
elif isinstance(obj, dependencies.Dependency) and not obj.found():
pass
else:
@@ -83,12 +89,15 @@ class DependenciesHelper:
for obj in libs:
if hasattr(obj, 'pcdep'):
pcdeps = mesonlib.listify(obj.pcdep)
- processed_reqs += [i.name for i in pcdeps]
+ for d in pcdeps:
+ processed_reqs += d.name
+ self.add_version_reqs(d.name, obj.version_reqs)
elif hasattr(obj, 'generated_pc'):
processed_reqs.append(obj.generated_pc)
elif isinstance(obj, dependencies.PkgConfigDependency):
if obj.found():
processed_reqs.append(obj.name)
+ self.add_version_reqs(obj.name, obj.version_reqs)
elif isinstance(obj, dependencies.ThreadDependency):
processed_libs += obj.get_compiler().thread_link_flags(obj.env)
processed_cflags += obj.get_compiler().thread_flags(obj.env)
@@ -123,6 +132,36 @@ class DependenciesHelper:
return processed_libs, processed_reqs, processed_cflags
+ def add_version_reqs(self, name, version_reqs):
+ if version_reqs:
+ vreqs = self.version_reqs.get(name, [])
+ vreqs += mesonlib.stringlistify(version_reqs)
+ self.version_reqs[name] = vreqs
+
+ def split_version_req(self, s):
+ for op in ['>=', '<=', '!=', '==', '=', '>', '<']:
+ pos = s.find(op)
+ if pos > 0:
+ return s[0:pos].strip(), s[pos:].strip()
+ return s, None
+
+ def format_vreq(self, vreq):
+ # vreq are '>=1.0' and pkgconfig wants '>= 1.0'
+ for op in ['>=', '<=', '!=', '==', '=', '>', '<']:
+ if vreq.startswith(op):
+ return op + ' ' + vreq[len(op):]
+ return vreq
+
+ def format_reqs(self, reqs):
+ result = []
+ for name in reqs:
+ vreqs = self.version_reqs.get(name, None)
+ if vreqs:
+ result += [name + ' ' + self.format_vreq(vreq) for vreq in vreqs]
+ else:
+ result += [name]
+ return ', '.join(result)
+
def remove_dups(self):
def _fn(xs):
# Remove duplicates whilst preserving original order
@@ -207,11 +246,12 @@ class PkgConfigModule(ExtensionModule):
if len(url) > 0:
ofile.write('URL: %s\n' % url)
ofile.write('Version: %s\n' % version)
- if len(deps.pub_reqs) > 0:
- ofile.write('Requires: {}\n'.format(' '.join(deps.pub_reqs)))
- if len(deps.priv_reqs) > 0:
- ofile.write(
- 'Requires.private: {}\n'.format(' '.join(deps.priv_reqs)))
+ reqs_str = deps.format_reqs(deps.pub_reqs)
+ if len(reqs_str) > 0:
+ ofile.write('Requires: {}\n'.format(reqs_str))
+ reqs_str = deps.format_reqs(deps.priv_reqs)
+ if len(reqs_str) > 0:
+ ofile.write('Requires.private: {}\n'.format(reqs_str))
if len(conflicts) > 0:
ofile.write('Conflicts: {}\n'.format(' '.join(conflicts)))