add pypy3 support

This commit is contained in:
ndparker 2014-11-16 15:33:53 +01:00
parent dd237bb395
commit 1477189b9a
6 changed files with 83 additions and 42 deletions

View File

@ -62,6 +62,18 @@
#define EXT3
#ifndef Py_TPFLAGS_HAVE_CLASS
#define Py_TPFLAGS_HAVE_CLASS (0)
#endif
#ifndef Py_TPFLAGS_HAVE_WEAKREFS
#define Py_TPFLAGS_HAVE_WEAKREFS (0)
#endif
#ifndef Py_TPFLAGS_HAVE_ITER
#define Py_TPFLAGS_HAVE_ITER (0)
#endif
#ifndef PyMODINIT_FUNC
#define EXT_INIT_FUNC PyObject *CONCATENATE(PyInit_, EXT_MODULE)(void)
#else
@ -85,10 +97,17 @@ static struct PyModuleDef EXT_DEFINE_VAR = { \
#define EXT_INIT_ERROR(module) do {Py_XDECREF(module); return NULL;} while(0)
#define EXT_INIT_RETURN(module) return module
#define EXT_DOC_UNICODE(m)
#else /* end py3k */
#define EXT2
#ifndef PyVarObject_HEAD_INIT
#define PyVarObject_HEAD_INIT(type, size) \
PyObject_HEAD_INIT(type) size,
#endif
#ifndef PyMODINIT_FUNC
#define EXT_INIT_FUNC void CONCATENATE(init, EXT_MODULE)(void)
#else
@ -117,6 +136,25 @@ static struct EXT_DEFINE__STRUCT EXT_DEFINE_VAR = { \
#define EXT_INIT_ERROR(module) return
#define EXT_INIT_RETURN(module) return
#define EXT_DOC_UNICODE(m) do { \
PyObject *doc__, *uni__; \
int res__; \
\
if ((doc__ = PyObject_GetAttrString(m, "__doc__"))) { \
uni__ = PyUnicode_FromEncodedObject(doc__, "utf-8", "strict"); \
Py_DECREF(doc__); \
if (!uni__) \
EXT_INIT_ERROR(m); \
res__ = PyObject_SetAttrString(m, "__doc__", uni__); \
Py_DECREF(uni__); \
if (res__ == -1) \
EXT_INIT_ERROR(m); \
} \
else if (!(PyErr_Occurred() \
&& PyErr_ExceptionMatches(PyExc_AttributeError))) \
EXT_INIT_ERROR(m); \
} while(0)
#endif /* end py2K */
#define EXT_INIT_TYPE(module, type) do { \
@ -232,13 +270,17 @@ typedef int Py_ssize_t;
#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
#endif
#define DEFINE_GENERIC_DEALLOC(prefix) \
static void prefix##_dealloc(void *self) \
{ \
if (PyType_IS_GC(((PyObject *)self)->ob_type)) \
PyObject_GC_UnTrack(self); \
(void)prefix##_clear(self); \
((PyObject *)self)->ob_type->tp_free((PyObject *)self); \
#ifndef Py_TYPE
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
#endif
#define DEFINE_GENERIC_DEALLOC(prefix) \
static void prefix##_dealloc(void *self) \
{ \
if (PyType_IS_GC(Py_TYPE(self))) \
PyObject_GC_UnTrack(self); \
(void)prefix##_clear(self); \
(Py_TYPE(self))->tp_free((PyObject *)self); \
}
#endif /* SETUP_CEXT_H */

View File

@ -41,7 +41,7 @@ def _cleanup_epydoc(target):
"""
search = _re.compile(r'<table[^<>]+width="100%%"').search
for filename in _shell.files(target, '*.html'):
fp = open(filename, 'r', encoding='latin-1')
fp = open(filename, 'r')
try:
html = fp.read()
finally:
@ -53,7 +53,7 @@ def _cleanup_epydoc(target):
if end >= 0:
end += len('</table>') + 1
html = html[:start] + html[end:]
fp = open(filename, 'w', encoding='latin-1')
fp = open(filename, 'w')
try:
fp.write(html)
finally:

View File

@ -87,7 +87,7 @@ def find_description(docs):
summary = None
filename = docs.get('meta.summary', 'SUMMARY').strip()
if filename and _os.path.isfile(filename):
fp = open(filename, encoding='utf-8')
fp = open(filename)
try:
try:
summary = fp.read().strip().splitlines()[0].rstrip()
@ -99,7 +99,7 @@ def find_description(docs):
description = None
filename = docs.get('meta.description', 'DESCRIPTION').strip()
if filename and _os.path.isfile(filename):
fp = open(filename, encoding='utf-8')
fp = open(filename)
try:
description = fp.read().rstrip()
finally:
@ -125,7 +125,7 @@ def find_classifiers(docs):
"""
filename = docs.get('meta.classifiers', 'CLASSIFIERS').strip()
if filename and _os.path.isfile(filename):
fp = open(filename, encoding='utf-8')
fp = open(filename)
try:
content = fp.read()
finally:
@ -144,7 +144,7 @@ def find_provides(docs):
"""
filename = docs.get('meta.provides', 'PROVIDES').strip()
if filename and _os.path.isfile(filename):
fp = open(filename, encoding='utf-8')
fp = open(filename)
try:
content = fp.read()
finally:
@ -163,7 +163,7 @@ def find_license(docs):
"""
filename = docs.get('meta.license', 'LICENSE').strip()
if filename and _os.path.isfile(filename):
fp = open(filename, encoding='utf-8')
fp = open(filename)
try:
return fp.read().rstrip()
finally:
@ -338,7 +338,7 @@ def run(config=('package.cfg',), ext=None, script_args=None, manifest_only=0):
ext = []
cfg = _util.SafeConfigParser()
cfg.read(config, encoding='utf-8')
cfg.read(config)
pkg = dict(cfg.items('package'))
python_min = pkg.get('python.min') or None
python_max = pkg.get('python.max') or None
@ -368,13 +368,13 @@ def run(config=('package.cfg',), ext=None, script_args=None, manifest_only=0):
keywords = keywords.split()
revision = pkg.get('version.revision', '').strip()
if revision:
revision = "-r%s" % (revision,)
revision = int(revision)
kwargs = {
'name': pkg['name'],
'version': "%s%s" % (
pkg['version.number'],
["", "-dev%s" % (revision,)][_util.humanbool(
["", ".dev%d" % (revision,)][_util.humanbool(
'version.dev', pkg.get('version.dev', 'false')
)],
),

View File

@ -1,6 +1,6 @@
# -*- coding: ascii -*-
#
# Copyright 2007, 2008, 2009, 2010, 2011
# Copyright 2007 - 2015
# Andr\xe9 Malo or his licensors, as applicable
#
# Licensed under the Apache License, Version 2.0 (the "License");
@ -54,8 +54,7 @@ class _INFO(dict):
""" Make color control string """
seq = _curses.tigetstr('setaf')
if seq is not None:
# XXX may fail - need better logic
seq = seq.replace("%p1", "") % color
seq = _curses.tparm(seq, color)
return seq
self['NORMAL'] = _curses.tigetstr('sgr0')
@ -71,7 +70,7 @@ class _INFO(dict):
def __getitem__(self, key):
""" Deliver always """
dict.get(self, key) or ""
return dict.get(self, key) or ""
def terminfo():
@ -111,5 +110,3 @@ def announce(fmt, **kwargs):
write(fmt, **kwargs)
_sys.stdout.write("\n")
_sys.stdout.flush()

View File

@ -250,14 +250,14 @@ def make_manifest(manifest, config, docs, kwargs):
kwargs['packages'] = list(kwargs.get('packages') or ()) + [
'_setup', '_setup.py2', '_setup.py3',
] + list(manifest.get('packages.extra', '').split() or ())
_core._setup_stop_after = "commandline"
_core._setup_stop_after = "commandline" # noqa pylint: disable = protected-access
try:
dist = _core.setup(**kwargs)
finally:
_core._setup_stop_after = None
_core._setup_stop_after = None # pylint: disable = protected-access
result = ['MANIFEST', 'PKG-INFO', 'setup.py'] + list(config)
# TODO: work with default values:
# xx: work with default values?
for key in ('classifiers', 'description', 'summary', 'provides',
'license'):
filename = docs.get('meta.' + key, '').strip()
@ -266,7 +266,7 @@ def make_manifest(manifest, config, docs, kwargs):
cmd = dist.get_command_obj("build_py")
cmd.ensure_finalized()
#from pprint import pprint; pprint(("build_py", cmd.get_source_files()))
# from pprint import pprint; pprint(("build_py", cmd.get_source_files()))
for item in cmd.get_source_files():
result.append(_posixpath.sep.join(
_os.path.normpath(item).split(_os.path.sep)
@ -274,7 +274,7 @@ def make_manifest(manifest, config, docs, kwargs):
cmd = dist.get_command_obj("build_ext")
cmd.ensure_finalized()
#from pprint import pprint; pprint(("build_ext", cmd.get_source_files()))
# from pprint import pprint; pprint(("build_ext", cmd.get_source_files()))
for item in cmd.get_source_files():
result.append(_posixpath.sep.join(
_os.path.normpath(item).split(_os.path.sep)
@ -288,7 +288,7 @@ def make_manifest(manifest, config, docs, kwargs):
cmd = dist.get_command_obj("build_clib")
cmd.ensure_finalized()
if cmd.libraries:
#import pprint; pprint.pprint(("build_clib", cmd.get_source_files()))
# import pprint; pprint.pprint(("build_clib", cmd.get_source_files()))
for item in cmd.get_source_files():
result.append(_posixpath.sep.join(
_os.path.normpath(item).split(_os.path.sep)
@ -301,7 +301,7 @@ def make_manifest(manifest, config, docs, kwargs):
cmd = dist.get_command_obj("build_scripts")
cmd.ensure_finalized()
#import pprint; pprint.pprint(("build_scripts", cmd.get_source_files()))
# import pprint; pprint.pprint(("build_scripts", cmd.get_source_files()))
if cmd.get_source_files():
for item in cmd.get_source_files():
result.append(_posixpath.sep.join(
@ -310,7 +310,7 @@ def make_manifest(manifest, config, docs, kwargs):
cmd = dist.get_command_obj("install_data")
cmd.ensure_finalized()
#from pprint import pprint; pprint(("install_data", cmd.get_inputs()))
# from pprint import pprint; pprint(("install_data", cmd.get_inputs()))
try:
strings = str
except NameError:
@ -335,11 +335,15 @@ def make_manifest(manifest, config, docs, kwargs):
def run(config=('package.cfg',), ext=None, script_args=None, manifest_only=0):
""" Main runner """
# pylint: disable = too-many-locals
if ext is None:
ext = []
cfg = _util.SafeConfigParser()
cfg.read(config, encoding='utf-8')
if (3, 0, 0) <= _sys.version_info < (3, 2, 0):
cfg.read(config)
else:
cfg.read(config, encoding='utf-8')
pkg = dict(cfg.items('package'))
python_min = pkg.get('python.min') or None
python_max = pkg.get('python.max') or None
@ -369,13 +373,13 @@ def run(config=('package.cfg',), ext=None, script_args=None, manifest_only=0):
keywords = keywords.split()
revision = pkg.get('version.revision', '').strip()
if revision:
revision = "-r%s" % (revision,)
revision = int(revision)
kwargs = {
'name': pkg['name'],
'version': "%s%s" % (
pkg['version.number'],
["", "-dev%s" % (revision,)][_util.humanbool(
["", ".dev%d" % (revision,)][_util.humanbool(
'version.dev', pkg.get('version.dev', 'false')
)],
),

View File

@ -1,6 +1,6 @@
# -*- coding: ascii -*-
#
# Copyright 2007, 2008, 2009, 2010, 2011
# Copyright 2007 - 2015
# Andr\xe9 Malo or his licensors, as applicable
#
# Licensed under the Apache License, Version 2.0 (the "License");
@ -53,16 +53,16 @@ class _INFO(dict):
try:
_curses.tigetstr('sgr0')
except TypeError: # pypy3
# pylint: disable = invalid-name
bc = lambda val: val.encode('ascii')
else:
bc = lambda val: val
bc = lambda val: val # pylint: disable = invalid-name
def make_color(color):
""" Make color control string """
seq = _curses.tigetstr(bc('setaf')).decode('ascii')
seq = _curses.tigetstr(bc('setaf'))
if seq is not None:
# XXX may fail - need better logic
seq = seq.replace("%p1", "") % color
seq = _curses.tparm(seq, color).decode('ascii')
return seq
self['NORMAL'] = _curses.tigetstr(bc('sgr0')).decode('ascii')
@ -79,7 +79,7 @@ class _INFO(dict):
def __getitem__(self, key):
""" Deliver always """
dict.get(self, key) or ""
return dict.get(self, key) or ""
def terminfo():
@ -119,5 +119,3 @@ def announce(fmt, **kwargs):
write(fmt, **kwargs)
_sys.stdout.write("\n")
_sys.stdout.flush()