| #!/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 occurred 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] |
| |
| |