python: add debug() function
diff --git a/bindings/python/capstone/__init__.py b/bindings/python/capstone/__init__.py
index 9777165..c786a2f 100644
--- a/bindings/python/capstone/__init__.py
+++ b/bindings/python/capstone/__init__.py
@@ -1 +1 @@
-from capstone import Cs, CsError, cs_disasm_quick, cs_disasm_lite, cs_version, cs_version_bind, cs_support, CS_API_MAJOR, CS_API_MINOR, CS_ARCH_ARM, CS_ARCH_ARM64, CS_ARCH_MIPS, CS_ARCH_X86, CS_ARCH_PPC, CS_ARCH_ALL, CS_MODE_LITTLE_ENDIAN, CS_MODE_ARM, CS_MODE_THUMB, CS_OPT_SYNTAX, CS_OPT_SYNTAX_DEFAULT, CS_OPT_SYNTAX_INTEL, CS_OPT_SYNTAX_ATT, CS_OPT_SYNTAX_NOREGNAME, CS_OPT_DETAIL, CS_OPT_ON, CS_OPT_OFF, CS_MODE_16, CS_MODE_32, CS_MODE_64, CS_MODE_BIG_ENDIAN, CS_MODE_MICRO, CS_MODE_N64, CS_SUPPORT_DIET
+from capstone import Cs, CsError, cs_disasm_quick, cs_disasm_lite, cs_version, cs_version_bind, cs_support, debug, CS_API_MAJOR, CS_API_MINOR, CS_ARCH_ARM, CS_ARCH_ARM64, CS_ARCH_MIPS, CS_ARCH_X86, CS_ARCH_PPC, CS_ARCH_ALL, CS_MODE_LITTLE_ENDIAN, CS_MODE_ARM, CS_MODE_THUMB, CS_OPT_SYNTAX, CS_OPT_SYNTAX_DEFAULT, CS_OPT_SYNTAX_INTEL, CS_OPT_SYNTAX_ATT, CS_OPT_SYNTAX_NOREGNAME, CS_OPT_DETAIL, CS_OPT_ON, CS_OPT_OFF, CS_MODE_16, CS_MODE_32, CS_MODE_64, CS_MODE_BIG_ENDIAN, CS_MODE_MICRO, CS_MODE_N64, CS_SUPPORT_DIET
diff --git a/bindings/python/capstone/capstone.py b/bindings/python/capstone/capstone.py
index 9ead033..32033d8 100644
--- a/bindings/python/capstone/capstone.py
+++ b/bindings/python/capstone/capstone.py
@@ -10,6 +10,7 @@
     'cs_version',
     'cs_version_bind',
     'cs_support',
+    'debug',
 
     'CS_API_MAJOR',
     'CS_API_MINOR',
@@ -647,3 +648,30 @@
             return
             yield
 
+
+# print out debugging info
+def debug():
+    # Tricky: make a dummy call to cs_open() to initialize internal data.
+    # FIXME: core need to be fixed to avoid this.
+    try:
+        md = Cs(CS_ARCH_ALL, 0)
+    except:
+        pass
+
+    if cs_support(CS_SUPPORT_DIET):
+        diet = "diet"
+    else:
+        diet = "standard"
+
+    archs = { "arm": CS_ARCH_ARM, "arm64": CS_ARCH_ARM64, \
+        "mips": CS_ARCH_MIPS, "ppc": CS_ARCH_PPC, "x86": CS_ARCH_X86 }
+
+    all_archs = ""
+    keys = archs.keys()
+    keys.sort()
+    for k in keys:
+        if cs_support(archs[k]):
+            all_archs += "-%s" %k
+
+    return "python-%s%s" %(diet, all_archs)
+
diff --git a/bindings/python/pyx/ccapstone.pyx b/bindings/python/pyx/ccapstone.pyx
index 6d0958f..ca709a9 100644
--- a/bindings/python/pyx/ccapstone.pyx
+++ b/bindings/python/pyx/ccapstone.pyx
@@ -260,3 +260,30 @@
             yield (insn.address, insn.size, insn.mnemonic, insn.op_str)
 
         cc.cs_free(allinsn, res)
+
+
+# print out debugging info
+cdef debug():
+    # Tricky: make a dummy call to cs_open() to initialize internal data.
+    # FIXME: core need to be fixed to avoid this.
+    cdef cc.csh tmp
+    cc.cs_open(capstone.CS_ARCH_ALL, capstone.CS_ARM, &tmp)
+
+    if cc.cs_support(capstone.CS_SUPPORT_DIET):
+        diet = "diet"
+    else:
+        diet = "standard"
+
+    archs = { "arm": capstone.CS_ARCH_ARM, "arm64": capstone.CS_ARCH_ARM64, \
+        "mips": capstone.CS_ARCH_MIPS, "ppc": capstone.CS_ARCH_PPC, \
+        "x86": capstone.CS_ARCH_X86 }
+
+    all_archs = ""
+    keys = archs.keys()
+    keys.sort()
+    for k in keys:
+        if cc.cs_support(archs[k]):
+            all_archs += "-%s" %k
+
+    return "CYTHON-%s%s" %(diet, all_archs)
+