diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2009-08-18 20:56:02 +0000 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-09-25 16:59:08 +0000 |
commit | 9f8a09ed743cedd9547bf0661d518647966ab114 (patch) | |
tree | 9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Tools/pyname_patch.py | |
download | swig-tarball-9f8a09ed743cedd9547bf0661d518647966ab114.tar.gz |
Imported from /srv/lorry/lorry-area/swig-tarball/swig-1.3.40.tar.gz.HEADswig-1.3.40master
Diffstat (limited to 'Tools/pyname_patch.py')
-rw-r--r-- | Tools/pyname_patch.py | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/Tools/pyname_patch.py b/Tools/pyname_patch.py new file mode 100644 index 0000000..5931269 --- /dev/null +++ b/Tools/pyname_patch.py @@ -0,0 +1,123 @@ +#!/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] + + |