mkmesonconf.py

Thu, 17 Apr 2025 23:35:53 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 17 Apr 2025 23:35:53 -0500
changeset 43233
9a9dd3407402
parent 42457
d9c2194dbc2b
permissions
-rwxr-xr-x

Add keybinding support to the channel join dialog

Pressing enter in any of the fields will now attempt to join the channel and
pressing escape anywhere will close the dialog.

Testing Done:
Opened the dialog and used the keyboard to join a channel and to close the dialog. Also called in the turtles.

Reviewed at https://reviews.imfreedom.org/r/3971/

38538
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
1 #!/usr/bin/env python3
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
2 #
42357
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
3 # Purple - Internet Messaging Library
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
4 # Copyright (C) Pidgin Developers <devel@pidgin.im>
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
5 #
38538
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
6 # Purple is the legal property of its developers, whose names are too numerous
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
7 # to list here. Please refer to the COPYRIGHT file distributed with this
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
8 # source distribution.
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
9 #
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
10 # This program is free software; you can redistribute it and/or modify
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
11 # it under the terms of the GNU General Public License as published by
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
12 # the Free Software Foundation; either version 2 of the License, or
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
13 # (at your option) any later version.
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
14 #
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
15 # This program is distributed in the hope that it will be useful,
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
18 # GNU General Public License for more details.
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
19 #
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
20 # You should have received a copy of the GNU General Public License
42357
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
21 # along with this program; if not, see <https://www.gnu.org/licenses/>.
38538
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
22
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
23 """
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
24 Produce meson-config.h in a build directory.
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
25
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
26 This should not really be run manually. It is used by Meson as a
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
27 post-configuration script to create meson-config.h which for now simply
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
28 contains information about the configuration used to create the build
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
29 directory.
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
30 """
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
31
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
32 import html
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
33 import json
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
34 import os
38653
f5810607660c Split MESONINTROSPECT input before executing subprocess.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38538
diff changeset
35 import shlex
38538
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
36 import subprocess
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
37 import sys
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
38
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
39
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
40 try:
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
41 introspect = os.environ['MESONINTROSPECT']
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
42 except KeyError:
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
43 print('Meson is too old; '
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
44 'it does not set MESONINTROSPECT for postconf scripts.')
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
45 sys.exit(1)
38653
f5810607660c Split MESONINTROSPECT input before executing subprocess.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38538
diff changeset
46 else:
f5810607660c Split MESONINTROSPECT input before executing subprocess.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38538
diff changeset
47 introspect = shlex.split(introspect)
38538
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
48
42357
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
49 # This is the top-most Meson build root.
38538
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
50 try:
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
51 build_root = os.environ['MESON_BUILD_ROOT']
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
52 except KeyError:
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
53 print('Meson is too old; '
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
54 'it does not set MESON_BUILD_ROOT for postconf scripts.')
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
55 sys.exit(1)
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
56
42357
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
57 # This is the build root for the Pidgin project itself, which may be different
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
58 # if it's used as a subproject.
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
59 project_build_root = sys.argv[1]
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
60
38538
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
61
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
62 def tostr(obj):
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
63 if isinstance(obj, str):
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
64 return html.escape(repr(obj))
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
65 else:
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
66 return repr(obj)
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
67
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
68
42357
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
69 def normalize_pidgin_option(option):
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
70 """Promote Pidgin-as-subproject options to global options."""
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
71 name = option['name']
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
72 # Option names for subprojects are determined by the wrap file name + the
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
73 # subproject option. Unfortunately, the wrap file name is determined by the
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
74 # superproject, so we can't know what it is. Just assume it is something
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
75 # semi-standard.
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
76 if ':' in name and name.startswith('pidgin'):
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
77 option['name'] = name.split(':')[1]
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
78 return option
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
79
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
80
38653
f5810607660c Split MESONINTROSPECT input before executing subprocess.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38538
diff changeset
81 conf = subprocess.check_output(introspect + ['--buildoptions', build_root],
38538
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
82 universal_newlines=True)
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
83 conf = json.loads(conf)
b542a6787116 Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
84
42357
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
85 # Skip all subproject options, or else the config string explodes.
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
86 conf = [normalize_pidgin_option(option) for option in conf]
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
87 conf = [option for option in conf if ':' not in option['name']]
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
88
0073491e35ff Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 38653
diff changeset
89 with open(os.path.join(project_build_root, 'meson-config.h'), 'w') as f:
42457
d9c2194dbc2b Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42357
diff changeset
90 f.write('#include <purple.h>\n')
d9c2194dbc2b Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42357
diff changeset
91 f.write('const PurpleKeyValuePair MESON_ARGS[] = {\n')
d9c2194dbc2b Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42357
diff changeset
92 for option in sorted(conf, key=lambda x: x['name']):
d9c2194dbc2b Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42357
diff changeset
93 f.write('{ .key= "' + option['name'] + '",' +
d9c2194dbc2b Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42357
diff changeset
94 ' .value="' + tostr(option['value']) + '" },\n')
d9c2194dbc2b Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42357
diff changeset
95 f.write('{ .key=NULL, .value=NULL },\n')
d9c2194dbc2b Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42357
diff changeset
96 f.write('};\n')

mercurial