Skip to content

Commit 3600c7b

Browse files
committed
compilers: Replace try/except for options with default getter values
1 parent 83f51bb commit 3600c7b

1 file changed

Lines changed: 70 additions & 87 deletions

File tree

mesonbuild/compilers/compilers.py

Lines changed: 70 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -247,40 +247,37 @@ def are_asserts_disabled(target: 'BuildTarget', env: 'Environment') -> bool:
247247
:return: whether to disable assertions or not
248248
"""
249249
key = OptionKey('b_ndebug', target.subproject, target.for_machine)
250-
return (env.coredata.optstore.get_option_for_target(target, key, str) == 'true' or
251-
(env.coredata.optstore.get_option_for_target(target, key, str) == 'if-release' and
250+
n_debug = env.coredata.optstore.get_option_for_target(target, key, str, default='false')
251+
return (n_debug == 'true' or
252+
(n_debug == 'if-release' and
252253
env.coredata.optstore.get_option_for_target(target, key.evolve(name='buildtype'), str) in {'release', 'plain'}))
253254

254255

255256
def are_asserts_disabled_for_subproject(subproject: str, env: 'Environment') -> bool:
256257
key = OptionKey('b_ndebug', subproject)
257-
return (env.coredata.optstore.get_value_for(key, str) == 'true' or
258-
(env.coredata.optstore.get_value_for(key, str) == 'if-release' and
258+
n_debug = env.coredata.optstore.get_value_for(key, str, default='false')
259+
return (n_debug == 'true' or
260+
(n_debug == 'if-release' and
259261
env.coredata.optstore.get_value_for(key.evolve(name='buildtype'), str) in {'release', 'plain'}))
260262

261263

262264
# TODO: remove use of try/except, use default= instead
263265
def get_base_compile_args(target: 'BuildTarget', compiler: 'Compiler', env: 'Environment') -> T.List[str]:
264266
args: T.List[str] = []
265-
lto = False
266-
try:
267-
if env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto'), bool):
268-
num_threads = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto_threads'), int, default=0)
269-
ltomode = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto_mode'), str, default='default')
270-
args.extend(compiler.get_lto_compile_args(
271-
target=target,
272-
threads=num_threads,
273-
mode=ltomode))
274-
lto = True
275-
except (KeyError, AttributeError):
276-
pass
277-
try:
278-
clrout = env.coredata.optstore.get_option_for_target(target, OptionKey('b_colorout'), str)
267+
lto = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto'), bool, default=False)
268+
if lto:
269+
num_threads = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto_threads'), int, default=0)
270+
ltomode = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto_mode'), str, default='default')
271+
args.extend(compiler.get_lto_compile_args(
272+
target=target,
273+
threads=num_threads,
274+
mode=ltomode))
275+
276+
if (clrout := env.coredata.optstore.get_option_for_target(target, OptionKey('b_colorout'), str, default='')) != '':
279277
args += compiler.get_colorout_args(clrout)
280-
except KeyError:
281-
pass
282-
try:
283-
sanitize = env.coredata.optstore.get_option_for_target(target, OptionKey('b_sanitize'), list)
278+
279+
sanitize = env.coredata.optstore.get_option_for_target(target, OptionKey('b_sanitize'), list, default=['sentinel'])
280+
if sanitize != ['sentinel']:
284281
if sanitize == ['none']:
285282
sanitize = []
286283
sanitize_args = compiler.sanitizer_compile_args(target, sanitize)
@@ -290,37 +287,30 @@ def get_base_compile_args(target: 'BuildTarget', compiler: 'Compiler', env: 'Env
290287
if not compiler.has_multi_arguments(sanitize_args)[0]:
291288
raise MesonException(f'Compiler {compiler.name_string()} does not support sanitizer arguments {sanitize_args}')
292289
args.extend(sanitize_args)
293-
except KeyError:
294-
pass
295-
try:
296-
pgo_val = env.coredata.optstore.get_option_for_target(target, OptionKey('b_pgo'), str)
297-
if pgo_val == 'generate':
298-
args.extend(compiler.get_profile_generate_args())
299-
elif pgo_val == 'use':
300-
args.extend(compiler.get_profile_use_args())
301-
except (KeyError, AttributeError):
302-
pass
303-
try:
304-
if env.coredata.optstore.get_option_for_target(target, OptionKey('b_coverage'), bool):
305-
args += compiler.get_coverage_args()
306-
except (KeyError, AttributeError):
307-
pass
308-
try:
309-
args += compiler.get_assert_args(are_asserts_disabled(target, env))
310-
except KeyError:
311-
pass
290+
291+
pgo_val = env.coredata.optstore.get_option_for_target(target, OptionKey('b_pgo'), str, default='')
292+
if pgo_val == 'generate':
293+
args.extend(compiler.get_profile_generate_args())
294+
elif pgo_val == 'use':
295+
args.extend(compiler.get_profile_use_args())
296+
297+
if env.coredata.optstore.get_option_for_target(target, OptionKey('b_coverage'), bool, default=False):
298+
args += compiler.get_coverage_args()
299+
300+
args += compiler.get_assert_args(are_asserts_disabled(target, env))
301+
312302
# This does not need a try...except
313303
bitcode = env.coredata.optstore.get_option_for_target(target, OptionKey('b_bitcode'), bool, default=False)
314304
args.extend(compiler.get_embed_bitcode_args(bitcode, lto))
315-
try:
316-
crt_val = env.coredata.optstore.get_option_for_target(target, OptionKey('b_vscrt'), str)
317-
# TODO: Is this attributeError posible?
305+
306+
if crt_val := env.coredata.optstore.get_option_for_target(target, OptionKey('b_vscrt'), str, default=''):
307+
# We must try except here because `b_vscrt` is a global option, but
308+
# while b_vscrt can be true a language my not support it.
318309
try:
319310
args += compiler.get_crt_compile_args(crt_val)
320311
except EnvironmentException:
321312
pass
322-
except KeyError:
323-
pass
313+
324314
return args
325315

326316
def get_base_link_args(target: 'BuildTarget',
@@ -330,28 +320,27 @@ def get_base_link_args(target: 'BuildTarget',
330320
build_dir = env.get_build_dir()
331321
if env.coredata.optstore.get_option_for_target(target, OptionKey('werror'), bool):
332322
args.extend(linker.get_linker_fatal_warnings())
333-
try:
334-
if env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto'), bool, default=False):
335-
thinlto_cache_dir = None
336-
cachedir_key = OptionKey('b_thinlto_cache')
337-
if env.coredata.optstore.get_option_for_target(target, cachedir_key, bool, default=False):
338-
thinlto_cache_dir = env.coredata.optstore.get_option_for_target(target, OptionKey('b_thinlto_cache_dir'), str, default='')
339-
if thinlto_cache_dir == '':
340-
thinlto_cache_dir = os.path.join(build_dir, 'meson-private', 'thinlto-cache')
341-
os.mkdir(thinlto_cache_dir)
342-
num_threads = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto_threads'), int, default=0)
343-
lto_mode = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto_mode'), str, default='default')
344-
args.extend(linker.get_lto_link_args(
345-
target=target,
346-
threads=num_threads,
347-
mode=lto_mode,
348-
thinlto_cache_dir=thinlto_cache_dir))
349-
obj_cache_path = os.path.join('@PRIVATE_DIR@', "lto.o")
350-
args.extend(linker.get_lto_obj_cache_path(obj_cache_path))
351-
except (KeyError, AttributeError):
352-
pass
353-
try:
354-
sanitizer = env.coredata.optstore.get_option_for_target(target, OptionKey('b_sanitize'), list)
323+
324+
if env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto'), bool, default=False):
325+
thinlto_cache_dir = None
326+
cachedir_key = OptionKey('b_thinlto_cache')
327+
if env.coredata.optstore.get_option_for_target(target, cachedir_key, bool, default=False):
328+
thinlto_cache_dir = env.coredata.optstore.get_option_for_target(target, OptionKey('b_thinlto_cache_dir'), str, default='')
329+
if thinlto_cache_dir == '':
330+
thinlto_cache_dir = os.path.join(build_dir, 'meson-private', 'thinlto-cache')
331+
os.mkdir(thinlto_cache_dir)
332+
num_threads = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto_threads'), int, default=0)
333+
lto_mode = env.coredata.optstore.get_option_for_target(target, OptionKey('b_lto_mode'), str, default='default')
334+
args.extend(linker.get_lto_link_args(
335+
target=target,
336+
threads=num_threads,
337+
mode=lto_mode,
338+
thinlto_cache_dir=thinlto_cache_dir))
339+
obj_cache_path = os.path.join('@PRIVATE_DIR@', "lto.o")
340+
args.extend(linker.get_lto_obj_cache_path(obj_cache_path))
341+
342+
sanitizer = env.coredata.optstore.get_option_for_target(target, OptionKey('b_sanitize'), list, default=['sentinel'])
343+
if sanitizer != ['sentinel']:
355344
if sanitizer == ['none']:
356345
sanitizer = []
357346
sanitizer_args = linker.sanitizer_link_args(target, sanitizer)
@@ -361,21 +350,15 @@ def get_base_link_args(target: 'BuildTarget',
361350
if not linker.has_multi_link_arguments(sanitizer_args, False)[0]:
362351
raise MesonException(f'Linker {linker.name_string()} does not support sanitizer arguments {sanitizer_args}')
363352
args.extend(sanitizer_args)
364-
except KeyError:
365-
pass
366-
try:
367-
pgo_val = env.coredata.optstore.get_option_for_target(target, OptionKey('b_pgo'), str)
368-
if pgo_val == 'generate':
369-
args.extend(linker.get_profile_generate_args())
370-
elif pgo_val == 'use':
371-
args.extend(linker.get_profile_use_args())
372-
except (KeyError, AttributeError):
373-
pass
374-
try:
375-
if env.coredata.optstore.get_option_for_target(target, OptionKey('b_coverage'), bool):
376-
args += linker.get_coverage_link_args()
377-
except (KeyError, AttributeError):
378-
pass
353+
354+
pgo_val = env.coredata.optstore.get_option_for_target(target, OptionKey('b_pgo'), str, default='')
355+
if pgo_val == 'generate':
356+
args.extend(linker.get_profile_generate_args())
357+
elif pgo_val == 'use':
358+
args.extend(linker.get_profile_use_args())
359+
360+
if env.coredata.optstore.get_option_for_target(target, OptionKey('b_coverage'), bool, default=False):
361+
args += linker.get_coverage_link_args()
379362

380363
as_needed = env.coredata.optstore.get_option_for_target(target, OptionKey('b_asneeded'), bool, default=False)
381364
bitcode = env.coredata.optstore.get_option_for_target(target, OptionKey('b_bitcode'), bool, default=False)
@@ -398,14 +381,14 @@ def get_base_link_args(target: 'BuildTarget',
398381
else:
399382
args.extend(linker.get_allow_undefined_link_args())
400383

401-
try:
402-
crt_val = env.coredata.optstore.get_option_for_target(target, OptionKey('b_vscrt'), str)
384+
if crt_val := env.coredata.optstore.get_option_for_target(target, OptionKey('b_vscrt'), str, default=''):
385+
# We must try except here because `b_vscrt` is a global option, but
386+
# while b_vscrt can be true a language my not support it.
403387
try:
404388
args += linker.get_crt_link_args(crt_val)
405389
except EnvironmentException:
406390
pass
407-
except KeyError:
408-
pass
391+
409392
return args
410393

411394

0 commit comments

Comments
 (0)