summaryrefslogtreecommitdiff
path: root/Tools/pyname_patch.py
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2009-08-18 20:56:02 +0000
committerLorry <lorry@roadtrain.codethink.co.uk>2012-09-25 16:59:08 +0000
commit9f8a09ed743cedd9547bf0661d518647966ab114 (patch)
tree9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Tools/pyname_patch.py
downloadswig-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.py123
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]
+
+