diff options
Diffstat (limited to 'debian/scripts/gen-backend-versions.py')
-rwxr-xr-x | debian/scripts/gen-backend-versions.py | 74 |
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)) |