summaryrefslogtreecommitdiff
path: root/debian/scripts/gen-backend-versions.py
diff options
context:
space:
mode:
Diffstat (limited to 'debian/scripts/gen-backend-versions.py')
-rwxr-xr-xdebian/scripts/gen-backend-versions.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/debian/scripts/gen-backend-versions.py b/debian/scripts/gen-backend-versions.py
new file mode 100755
index 0000000..9dd5fa8
--- /dev/null
+++ b/debian/scripts/gen-backend-versions.py
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+
+import codecs
+import os
+import re
+import subprocess
+
+
+def cffi_version():
+ with codecs.open('lib_pypy/cffi/__init__.py', encoding='UTF-8') as f:
+ for line in f:
+ m = re.match(r'^__version__ = "([0-9.]+)"$', line)
+ if m:
+ return m.group(1)
+ raise Exception('Version not found')
+
+
+def target_version():
+ with codecs.open('lib_pypy/cffi/recompiler.py', encoding='UTF-8') as f:
+ for line in f:
+ m = re.match(r'^VERSION_CHAR16CHAR32 = (0x[0-9A-F]+)$', line)
+ if m:
+ return int(m.group(1), 16)
+ raise Exception('Version not found')
+
+
+def backend_supported_versions():
+ versions = {}
+ with codecs.open('pypy/module/_cffi_backend/cffi1_module.py',
+ encoding='UTF-8') as f:
+ for line in f:
+ m = re.match(r'^VERSION_(MIN|MAX) *= (0x[0-9A-F]+)$',
+ line)
+ if m:
+ versions[m.group(1)] = int(m.group(2), 16)
+ if len(versions) == 2:
+ return versions['MIN'], versions['MAX']
+ raise Exception('Versions not found')
+
+
+def pypy_abi():
+ if 'pypy' not in subprocess.check_output(('dh_listpackages',)).split():
+ return ''
+ soabi = subprocess.check_output((
+ 'pypy/goal/pypy-c', '-c',
+ 'import sysconfig; print sysconfig.get_config_var("SOABI")'))
+ return soabi.strip().replace('-', '-abi-')
+
+
+cffi = cffi_version()
+versions = backend_supported_versions()
+target = target_version()
+
+subst = {
+ 'cffi': cffi,
+ 'min': versions[0],
+ 'max': versions[1],
+ 'target': target,
+}
+with codecs.open('debian/pypy-lib.substvars', 'a', encoding='UTF-8') as f:
+ f.write('cffi:Provides=pypy-cffi (= {cffi}), '
+ 'pypy-cffi-backend-api-min (= {min}), '
+ 'pypy-cffi-backend-api-max (= {max}), '
+ 'pypy-cffi-backend-api-{target}\n'.format(**subst))
+
+with codecs.open('debian/pypy.substvars', 'a', encoding='UTF-8') as f:
+ f.write('pypy-abi={}\n'.format(pypy_abi()))
+
+path = 'debian/pypy-lib/usr/share/pypy/dist'
+os.makedirs(path)
+with codecs.open(os.path.join(path, 'pypy-cffi'), 'w', encoding='UTF-8') as f:
+ f.write('cffi pypy-cffi-backend-api-min (<= {target}), '
+ 'pypy-cffi-backend-api-max (>= {target})\n'
+ .format(**subst))