Skip to content

Commit a52cd31

Browse files
nirbheekjpakkane
authored andcommitted
Print dependencies being used for compiler checks
It is a common idiom to look for a function or a specific type or a header in various locations/libraries, and it can be confusing to see the (seemingly) identical compiler check being done multiple times. Now we print the dependencies being used when a compiler check is run Before: Checking for function "fbGetDisplay": NO Checking for type "GLeglImageOES": YES Checking for function "asinh": YES After: Checking for function "fbGetDisplay" with dependency egl: NO Checking for type "GLeglImageOES" with dependencies glesv2, gl: YES Checking for function "asinh" with dependency -lm: YES
1 parent edccb11 commit a52cd31

File tree

2 files changed

+49
-30
lines changed

2 files changed

+49
-30
lines changed

mesonbuild/interpreter.py

+47-30
Original file line numberDiff line numberDiff line change
@@ -937,6 +937,23 @@ def __init__(self, compiler, env, subproject):
937937
'symbols_have_underscore_prefix': self.symbols_have_underscore_prefix_method,
938938
})
939939

940+
def _dep_msg(self, deps, endl):
941+
msg_single = 'with dependency {}'
942+
msg_many = 'with dependencies {}'
943+
if not deps:
944+
return endl
945+
if endl is None:
946+
endl = ''
947+
tpl = msg_many if len(deps) > 1 else msg_single
948+
names = []
949+
for d in deps:
950+
if isinstance(d, dependencies.ExternalLibrary):
951+
name = '-l' + d.name
952+
else:
953+
name = d.name
954+
names.append(name)
955+
return tpl.format(', '.join(names)) + endl
956+
940957
@noPosargs
941958
@permittedKwargs({})
942959
def version_method(self, args, kwargs):
@@ -967,7 +984,7 @@ def determine_args(self, kwargs):
967984
args += mesonlib.stringlistify(kwargs.get('args', []))
968985
return args
969986

970-
def determine_dependencies(self, kwargs):
987+
def determine_dependencies(self, kwargs, endl=':'):
971988
deps = kwargs.get('dependencies', None)
972989
if deps is not None:
973990
deps = listify(deps)
@@ -981,7 +998,7 @@ def determine_dependencies(self, kwargs):
981998
raise InterpreterException('Dependencies must be external dependencies')
982999
final_deps.append(d)
9831000
deps = final_deps
984-
return deps
1001+
return deps, self._dep_msg(deps, endl)
9851002

9861003
@permittedKwargs({
9871004
'prefix',
@@ -997,9 +1014,9 @@ def alignment_method(self, args, kwargs):
9971014
if not isinstance(prefix, str):
9981015
raise InterpreterException('Prefix argument of sizeof must be a string.')
9991016
extra_args = mesonlib.stringlistify(kwargs.get('args', []))
1000-
deps = self.determine_dependencies(kwargs)
1017+
deps, msg = self.determine_dependencies(kwargs)
10011018
result = self.compiler.alignment(typename, prefix, self.environment, extra_args, deps)
1002-
mlog.log('Checking for alignment of', mlog.bold(typename, True), ':', result)
1019+
mlog.log('Checking for alignment of', mlog.bold(typename, True), msg, result)
10031020
return result
10041021

10051022
@permittedKwargs({
@@ -1022,7 +1039,7 @@ def run_method(self, args, kwargs):
10221039
if not isinstance(testname, str):
10231040
raise InterpreterException('Testname argument must be a string.')
10241041
extra_args = self.determine_args(kwargs)
1025-
deps = self.determine_dependencies(kwargs)
1042+
deps, msg = self.determine_dependencies(kwargs, endl=None)
10261043
result = self.compiler.run(code, self.environment, extra_args, deps)
10271044
if len(testname) > 0:
10281045
if not result.compiled:
@@ -1031,7 +1048,7 @@ def run_method(self, args, kwargs):
10311048
h = mlog.green('YES')
10321049
else:
10331050
h = mlog.red('NO (%d)' % result.returncode)
1034-
mlog.log('Checking if', mlog.bold(testname, True), 'runs:', h)
1051+
mlog.log('Checking if', mlog.bold(testname, True), msg, 'runs:', h)
10351052
return TryRunResultHolder(result)
10361053

10371054
@noPosargs
@@ -1077,15 +1094,15 @@ def has_member_method(self, args, kwargs):
10771094
if not isinstance(prefix, str):
10781095
raise InterpreterException('Prefix argument of has_member must be a string.')
10791096
extra_args = self.determine_args(kwargs)
1080-
deps = self.determine_dependencies(kwargs)
1097+
deps, msg = self.determine_dependencies(kwargs)
10811098
had = self.compiler.has_members(typename, [membername], prefix,
10821099
self.environment, extra_args, deps)
10831100
if had:
10841101
hadtxt = mlog.green('YES')
10851102
else:
10861103
hadtxt = mlog.red('NO')
10871104
mlog.log('Checking whether type', mlog.bold(typename, True),
1088-
'has member', mlog.bold(membername, True), ':', hadtxt)
1105+
'has member', mlog.bold(membername, True), msg, hadtxt)
10891106
return had
10901107

10911108
@permittedKwargs({
@@ -1105,7 +1122,7 @@ def has_members_method(self, args, kwargs):
11051122
if not isinstance(prefix, str):
11061123
raise InterpreterException('Prefix argument of has_members must be a string.')
11071124
extra_args = self.determine_args(kwargs)
1108-
deps = self.determine_dependencies(kwargs)
1125+
deps, msg = self.determine_dependencies(kwargs)
11091126
had = self.compiler.has_members(typename, membernames, prefix,
11101127
self.environment, extra_args, deps)
11111128
if had:
@@ -1114,7 +1131,7 @@ def has_members_method(self, args, kwargs):
11141131
hadtxt = mlog.red('NO')
11151132
members = mlog.bold(', '.join(['"{}"'.format(m) for m in membernames]))
11161133
mlog.log('Checking whether type', mlog.bold(typename, True),
1117-
'has members', members, ':', hadtxt)
1134+
'has members', members, msg, hadtxt)
11181135
return had
11191136

11201137
@permittedKwargs({
@@ -1133,13 +1150,13 @@ def has_function_method(self, args, kwargs):
11331150
if not isinstance(prefix, str):
11341151
raise InterpreterException('Prefix argument of has_function must be a string.')
11351152
extra_args = self.determine_args(kwargs)
1136-
deps = self.determine_dependencies(kwargs)
1153+
deps, msg = self.determine_dependencies(kwargs)
11371154
had = self.compiler.has_function(funcname, prefix, self.environment, extra_args, deps)
11381155
if had:
11391156
hadtxt = mlog.green('YES')
11401157
else:
11411158
hadtxt = mlog.red('NO')
1142-
mlog.log('Checking for function', mlog.bold(funcname, True), ':', hadtxt)
1159+
mlog.log('Checking for function', mlog.bold(funcname, True), msg, hadtxt)
11431160
return had
11441161

11451162
@permittedKwargs({
@@ -1158,13 +1175,13 @@ def has_type_method(self, args, kwargs):
11581175
if not isinstance(prefix, str):
11591176
raise InterpreterException('Prefix argument of has_type must be a string.')
11601177
extra_args = self.determine_args(kwargs)
1161-
deps = self.determine_dependencies(kwargs)
1178+
deps, msg = self.determine_dependencies(kwargs)
11621179
had = self.compiler.has_type(typename, prefix, self.environment, extra_args, deps)
11631180
if had:
11641181
hadtxt = mlog.green('YES')
11651182
else:
11661183
hadtxt = mlog.red('NO')
1167-
mlog.log('Checking for type', mlog.bold(typename, True), ':', hadtxt)
1184+
mlog.log('Checking for type', mlog.bold(typename, True), msg, hadtxt)
11681185
return had
11691186

11701187
@FeatureNew('compiler.compute_int', '0.40.0')
@@ -1196,9 +1213,9 @@ def compute_int_method(self, args, kwargs):
11961213
if guess is not None and not isinstance(guess, int):
11971214
raise InterpreterException('Guess argument of compute_int must be an int.')
11981215
extra_args = self.determine_args(kwargs)
1199-
deps = self.determine_dependencies(kwargs)
1216+
deps, msg = self.determine_dependencies(kwargs)
12001217
res = self.compiler.compute_int(expression, low, high, guess, prefix, self.environment, extra_args, deps)
1201-
mlog.log('Computing int of "%s": %d' % (expression, res))
1218+
mlog.log('Computing int of', mlog.bold(expression, True), msg, res)
12021219
return res
12031220

12041221
@permittedKwargs({
@@ -1217,9 +1234,9 @@ def sizeof_method(self, args, kwargs):
12171234
if not isinstance(prefix, str):
12181235
raise InterpreterException('Prefix argument of sizeof must be a string.')
12191236
extra_args = self.determine_args(kwargs)
1220-
deps = self.determine_dependencies(kwargs)
1237+
deps, msg = self.determine_dependencies(kwargs)
12211238
esize = self.compiler.sizeof(element, prefix, self.environment, extra_args, deps)
1222-
mlog.log('Checking for size of "%s": %d' % (element, esize))
1239+
mlog.log('Checking for size of', mlog.bold(element, True), msg, esize)
12231240
return esize
12241241

12251242
@FeatureNew('compiler.get_define', '0.40.0')
@@ -1239,9 +1256,9 @@ def get_define_method(self, args, kwargs):
12391256
if not isinstance(prefix, str):
12401257
raise InterpreterException('Prefix argument of get_define() must be a string.')
12411258
extra_args = self.determine_args(kwargs)
1242-
deps = self.determine_dependencies(kwargs)
1259+
deps, msg = self.determine_dependencies(kwargs)
12431260
value = self.compiler.get_define(element, prefix, self.environment, extra_args, deps)
1244-
mlog.log('Fetching value of define "%s": %s' % (element, value))
1261+
mlog.log('Fetching value of define', mlog.bold(element, True), msg, value)
12451262
return value
12461263

12471264
@permittedKwargs({
@@ -1264,14 +1281,14 @@ def compiles_method(self, args, kwargs):
12641281
if not isinstance(testname, str):
12651282
raise InterpreterException('Testname argument must be a string.')
12661283
extra_args = self.determine_args(kwargs)
1267-
deps = self.determine_dependencies(kwargs)
1284+
deps, msg = self.determine_dependencies(kwargs, endl=None)
12681285
result = self.compiler.compiles(code, self.environment, extra_args, deps)
12691286
if len(testname) > 0:
12701287
if result:
12711288
h = mlog.green('YES')
12721289
else:
12731290
h = mlog.red('NO')
1274-
mlog.log('Checking if', mlog.bold(testname, True), 'compiles:', h)
1291+
mlog.log('Checking if', mlog.bold(testname, True), msg, 'compiles:', h)
12751292
return result
12761293

12771294
@permittedKwargs({
@@ -1294,14 +1311,14 @@ def links_method(self, args, kwargs):
12941311
if not isinstance(testname, str):
12951312
raise InterpreterException('Testname argument must be a string.')
12961313
extra_args = self.determine_args(kwargs)
1297-
deps = self.determine_dependencies(kwargs)
1314+
deps, msg = self.determine_dependencies(kwargs, endl=None)
12981315
result = self.compiler.links(code, self.environment, extra_args, deps)
12991316
if len(testname) > 0:
13001317
if result:
13011318
h = mlog.green('YES')
13021319
else:
13031320
h = mlog.red('NO')
1304-
mlog.log('Checking if', mlog.bold(testname, True), 'links:', h)
1321+
mlog.log('Checking if', mlog.bold(testname, True), msg, 'links:', h)
13051322
return result
13061323

13071324
@FeatureNew('compiler.check_header', '0.47.0')
@@ -1321,13 +1338,13 @@ def check_header_method(self, args, kwargs):
13211338
if not isinstance(prefix, str):
13221339
raise InterpreterException('Prefix argument of has_header must be a string.')
13231340
extra_args = self.determine_args(kwargs)
1324-
deps = self.determine_dependencies(kwargs)
1341+
deps, msg = self.determine_dependencies(kwargs)
13251342
haz = self.compiler.check_header(hname, prefix, self.environment, extra_args, deps)
13261343
if haz:
13271344
h = mlog.green('YES')
13281345
else:
13291346
h = mlog.red('NO')
1330-
mlog.log('Check usable header "%s":' % hname, h)
1347+
mlog.log('Check usable header', mlog.bold(hname, True), msg, h)
13311348
return haz
13321349

13331350
@permittedKwargs({
@@ -1346,13 +1363,13 @@ def has_header_method(self, args, kwargs):
13461363
if not isinstance(prefix, str):
13471364
raise InterpreterException('Prefix argument of has_header must be a string.')
13481365
extra_args = self.determine_args(kwargs)
1349-
deps = self.determine_dependencies(kwargs)
1366+
deps, msg = self.determine_dependencies(kwargs)
13501367
haz = self.compiler.has_header(hname, prefix, self.environment, extra_args, deps)
13511368
if haz:
13521369
h = mlog.green('YES')
13531370
else:
13541371
h = mlog.red('NO')
1355-
mlog.log('Has header "%s":' % hname, h)
1372+
mlog.log('Has header', mlog.bold(hname, True), msg, h)
13561373
return haz
13571374

13581375
@permittedKwargs({
@@ -1372,13 +1389,13 @@ def has_header_symbol_method(self, args, kwargs):
13721389
if not isinstance(prefix, str):
13731390
raise InterpreterException('Prefix argument of has_header_symbol must be a string.')
13741391
extra_args = self.determine_args(kwargs)
1375-
deps = self.determine_dependencies(kwargs)
1392+
deps, msg = self.determine_dependencies(kwargs)
13761393
haz = self.compiler.has_header_symbol(hname, symbol, prefix, self.environment, extra_args, deps)
13771394
if haz:
13781395
h = mlog.green('YES')
13791396
else:
13801397
h = mlog.red('NO')
1381-
mlog.log('Header <{0}> has symbol "{1}":'.format(hname, symbol), h)
1398+
mlog.log('Header <{0}> has symbol'.format(hname), mlog.bold(symbol, True), msg, h)
13821399
return haz
13831400

13841401
@FeatureNewKwargs('compiler.find_library', '0.49.0', ['disabler'])

mesonbuild/mlog.py

+2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ def process_markup(args, keep):
104104
if log_timestamp_start is not None:
105105
arr = ['[{:.3f}]'.format(time.monotonic() - log_timestamp_start)]
106106
for arg in args:
107+
if arg is None:
108+
continue
107109
if isinstance(arg, str):
108110
arr.append(arg)
109111
elif isinstance(arg, AnsiDecorator):

0 commit comments

Comments
 (0)