libpurple/dbus-analyze-types.py

Thu, 28 Sep 2017 20:33:59 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 28 Sep 2017 20:33:59 -0500
branch
trac-16764
changeset 38726
6128d07bd891
parent 38313
38a40ddbb9b7
child 38358
30ba44276e74
permissions
-rw-r--r--

closing merged branch

11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
1 # This program takes a C header/source as the input and produces
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
2 #
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
3 # with --keyword=enum: the list of all enums
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
4 # with --keyword=struct: the list of all structs
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
5 #
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
6 # the output styles:
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
7 #
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
8 # --enum DBUS_POINTER_NAME1,
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
9 # DBUS_POINTER_NAME2,
33932
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
10 # DBUS_POINTER_NAME3,
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
11 #
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
12 # --list NAME1
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
13 # NAME2
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
14 # NAME3
33932
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
15 #
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
16
38313
38a40ddbb9b7 Ensure all Python scripts are Py3k compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33932
diff changeset
17 from __future__ import absolute_import, division, print_function
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
18 import re
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
19 import sys
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
20
11331
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
21 options = {}
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
22
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
23 def toprint(match, line):
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
24 if verbatim:
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
25 return line
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
26 else:
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
27 return pattern % match
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
28
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
29 for arg in sys.argv[1:]:
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
30 if arg[0:2] == "--":
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
31 mylist = arg[2:].split("=",1)
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
32 command = mylist[0]
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
33 if len(mylist) > 1:
11331
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
34 options[command] = mylist[1]
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
35 else:
11331
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
36 options[command] = None
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
37
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
38 keyword = options.get("keyword", "struct")
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
39 pattern = options.get("pattern", "%s")
33932
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
40 verbatim = "verbatim" in options
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
41
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
42 structregexp1 = re.compile(r"^(typedef\s+)?%s\s+\w+\s+(\w+)\s*;" % keyword)
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
43 structregexp2 = re.compile(r"^(typedef\s+)?%s" % keyword)
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
44 structregexp3 = re.compile(r"^}\s+(\w+)\s*;")
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
45
33932
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
46 print("/* Generated by %s. Do not edit! */" % sys.argv[0])
11331
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
47
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
48 myinput = iter(sys.stdin)
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
49
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
50 for line in myinput:
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
51 match = structregexp1.match(line)
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
52 if match is not None:
33932
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
53 print(toprint(match.group(2), line))
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
54 continue
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
55
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
56 match = structregexp2.match(line)
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
57 if match is not None:
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
58 while True:
11331
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
59 if verbatim:
33932
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
60 print(line.rstrip())
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
61 line = next(myinput)
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
62 match = structregexp3.match(line)
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
63 if match is not None:
33932
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
64 print(toprint(match.group(1), line))
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
65 break
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
66 if line[0] not in [" ", "\t", "{", "\n"]:
11331
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
67 if verbatim:
33932
c49bfe98716d Fix build and other scripts on Python3.
Ashish Gupta <ashmew2@gmail.com>
parents: 15435
diff changeset
68 print(line)
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
69 break

mercurial