@@ -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
255256def 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
263265def 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
326316def 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