mkmesonconf.py

Sat, 09 Aug 2025 18:21:54 -0500

author
Gong Zhile <gongzl@stu.hebust.edu.cn>
date
Sat, 09 Aug 2025 18:21:54 -0500
changeset 43308
6a22b547f0c8
parent 42457
d9c2194dbc2b
permissions
-rwxr-xr-x

Add builtin library dependency for introspection

Without specifying, gir defaults to the system pidgin/purple libraries by default,
which fails the build when new symbols were added and gir failed to link for them.

The failed build log before patch:
```
FAILED: pidgin/Pidgin-3.0.gir
...
/usr/bin/ld: /usr/local/lib/x86_64-linux-gnu/libpidgin3.so: undefined reference to `purple_image_get_filename'
collect2: error: ld returned 1 exit status
linking of temporary binary failed: Command '['ccache', 'cc', '-o', '/home/goodspeed/Development/pidgin/build/tmp-introspectineovzv0/Pidgin-3.0', '/home/goodspeed/Development/pidgin/build/tmp-introspectineovzv0/Pidgin-3.0.o', '-L.', '-Wl,-rpath,.', '-Wl,--no-as-needed', '-L/home/goodspeed/Development/pidgin/build/libpurple', '-Wl,-rpath,/home/goodspeed/Development/pidgin/build/libpurple', '-L/usr/local/lib/x86_64-linux-gnu', '-Wl,-rpath,/usr/local/lib/x86_64-linux-gnu', '-L/home/goodspeed/Development/pidgin/build/pidgin', '-Wl,-rpath,/home/goodspeed/Development/pidgin/build/pidgin', '-L/home/goodspeed/Development/pidgin/build/libpurple', '-Wl,-rpath,/home/goodspeed/Development/pidgin/build/libpurple', '-L/usr/local/lib/x86_64-linux-gnu', '-Wl,-rpath,/usr/local/lib/x86_64-linux-gnu', '-L/usr/local/lib/x86_64-linux-gnu', '-Wl,-rpath,/usr/local/lib/x86_64-linux-gnu', '-lpidgin3', '-lpurple3', '-lglib-2.0', '-lgplugin-gtk4', '-lgplugin', '-lgmodule-2.0', '-lgtk-4', '-lpangocairo-1.0', '-lpango-1.0', '-lharfbuzz', '-lgdk_pixbuf-2.0', '-lcairo-gobject', '-lcairo', '-lvulkan', '-lgraphene-1.0', '-lgio-2.0', '-lgobject-2.0', '-lgtksourceview-5', '-ljson-glib-1.0', '-ladwaita-1', '-lspelling-1', '-lm', '-lbirb', '-lgstreamer-1.0', '-lsoup-3.0', '-lxml2', '-lgstapp-1.0', '-lgstbase-1.0', '-lseagull', '-lsqlite3', '-lgirepository-1.0', '-lgio-2.0', '-lgobject-2.0', '-Wl,--export-dynamic', '-lgmodule-2.0', '-pthread', '-lglib-2.0', '-lglib-2.0']' returned non-zero exit status 1.
ninja: build stopped: subcommand failed.
```

Testing Done:
Succeed building pidgin with an out-of-date pidgin installed on system. Introspection no longer uses the system library and links fine now.

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

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