/trunk/Tools/pyname_patch.py
Python | 123 lines | 116 code | 1 blank | 6 comment | 8 complexity | 3f7c7c750be524ec91cd5a85d6b103eb MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- #!/usr/bin/env python
- """
- From SWIG 1.3.37 we deprecated all SWIG symbols that start with Py,
- since they are inappropriate and discouraged in Python documentation
- (from http://www.python.org/doc/2.5.2/api/includes.html):
- "All user visible names defined by Python.h (except those defined by the included
- standard headers) have one of the prefixes "Py" or "_Py". Names beginning with
- "_Py" are for internal use by the Python implementation and should not be used
- by extension writers. Structure member names do not have a reserved prefix.
- Important: user code should never define names that begin with "Py" or "_Py".
- This confuses the reader, and jeopardizes the portability of the user code to
- future Python versions, which may define additional names beginning with one
- of these prefixes."
- This file is a simple script used for change all of these symbols, for user code
- or SWIG itself.
- """
- import re
- from shutil import copyfile
- import sys
- symbols = [
- #(old name, new name)
- ("PySequence_Base", "SwigPySequence_Base"),
- ("PySequence_Cont", "SwigPySequence_Cont"),
- ("PySwigIterator_T", "SwigPyIterator_T"),
- ("PyPairBoolOutputIterator", "SwigPyPairBoolOutputIterator"),
- ("PySwigIterator", "SwigPyIterator"),
- ("PySwigIterator_T", "SwigPyIterator_T"),
- ("PyMapIterator_T", "SwigPyMapIterator_T"),
- ("PyMapKeyIterator_T", "SwigPyMapKeyIterator_T"),
- ("PyMapValueIterator_T", "SwigPyMapValueITerator_T"),
- ("PyObject_ptr", "SwigPtr_PyObject"),
- ("PyObject_var", "SwigVar_PyObject"),
- ("PyOper", "SwigPyOper"),
- ("PySeq", "SwigPySeq"),
- ("PySequence_ArrowProxy", "SwigPySequence_ArrowProxy"),
- ("PySequence_Cont", "SwigPySequence_Cont"),
- ("PySequence_InputIterator", "SwigPySequence_InputIterator"),
- ("PySequence_Ref", "SwigPySequence_Ref"),
- ("PySwigClientData", "SwigPyClientData"),
- ("PySwigClientData_Del", "SwigPyClientData_Del"),
- ("PySwigClientData_New", "SwigPyClientData_New"),
- ("PySwigIterator", "SwigPyIterator"),
- ("PySwigIteratorClosed_T", "SwigPyIteratorClosed_T"),
- ("PySwigIteratorOpen_T", "SwigPyIteratorOpen_T"),
- ("PySwigIterator_T", "SwigPyIterator_T"),
- ("PySwigObject", "SwigPyObject"),
- ("PySwigObject_Check", "SwigPyObject_Check"),
- ("PySwigObject_GetDesc", "SwigPyObject_GetDesc"),
- ("PySwigObject_New", "SwigPyObject_New"),
- ("PySwigObject_acquire", "SwigPyObject_acquire"),
- ("PySwigObject_append", "SwigPyObject_append"),
- ("PySwigObject_as_number", "SwigPyObject_as_number"),
- ("PySwigObject_compare", "SwigPyObject_compare"),
- ("PySwigObject_dealloc", "SwigPyObject_dealloc"),
- ("PySwigObject_disown", "SwigPyObject_disown"),
- ("PySwigObject_format", "SwigPyObject_format"),
- ("PySwigObject_getattr", "SwigPyObject_getattr"),
- ("PySwigObject_hex", "SwigPyObject_hex"),
- ("PySwigObject_long", "SwigPyObject_long"),
- ("PySwigObject_next", "SwigPyObject_next"),
- ("PySwigObject_oct", "SwigPyObject_oct"),
- ("PySwigObject_own", "SwigPyObject_own"),
- ("PySwigObject_print", "SwigPyObject_print"),
- ("PySwigObject_repr", "SwigPyObject_repr"),
- ("PySwigObject_richcompare", "SwigPyObject_richcompare"),
- ("PySwigObject_str", "SwigPyObject_str"),
- ("PySwigObject_type", "SwigPyObject_type"),
- ("PySwigPacked", "SwigPyPacked"),
- ("PySwigPacked_Check", "SwigPyPacked_Check"),
- ("PySwigPacked_New", "SwigPyPacked_New"),
- ("PySwigPacked_UnpackData", "SwigPyPacked_UnpackData"),
- ("PySwigPacked_compare", "SwigPyPacked_compare"),
- ("PySwigPacked_dealloc", "SwigPyPacked_dealloc"),
- ("PySwigPacked_print", "SwigPyPacked_print"),
- ("PySwigPacked_repr", "SwigPyPacked_repr"),
- ("PySwigPacked_str", "SwigPyPacked_str"),
- ("PySwigPacked_type", "SwigPyPacked_type"),
- ("pyseq", "swigpyseq"),
- ("pyswigobject_type", "swigpyobject_type"),
- ("pyswigpacked_type", "swigpypacked_type"),
- ]
- res = [(re.compile("\\b(%s)\\b"%oldname), newname) for oldname, newname in symbols]
- def patch_file(fn):
- newf = []
- changed = False
- for line in open(fn):
- for r, newname in res:
- line, n = r.subn(newname, line)
- if n>0:
- changed = True
- newf.append(line)
- if changed:
- copyfile(fn, fn+".bak")
- f = open(fn, "w")
- f.write("".join(newf))
- f.close()
- return changed
- def main(fns):
- for fn in fns:
- try:
- if patch_file(fn):
- print "Patched file", fn
- except IOError:
- print "Error occured during patching", fn
- return
- if __name__=="__main__":
- if len(sys.argv) > 1:
- main(sys.argv[1:])
- else:
- print "Patch your interface file for SWIG's Py* symbol name deprecation."
- print "Usage:"
- print " %s files..."%sys.argv[0]
-