mkmesonconf.py

Sat, 09 Aug 2025 17:37:27 +0800

author
Gong Zhile <gongzl@stu.hebust.edu.cn>
date
Sat, 09 Aug 2025 17:37:27 +0800
branch
bird-header-fix
changeset 43304
2599d35e9750
parent 42457
d9c2194dbc2b
permissions
-rwxr-xr-x

Fix the birb header path

The birb header referred would only work with birb provided by wrap casuing
build to fail because of system-installed birb dependency. The commit points
it to the correct path <birb.h>.

See: https://keep.imfreedom.org/birb/birb/file/5bf00c7d7f80/birb/meson.build#l77

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