1*61046927SAndroid Build Coastguard Workerimport os 2*61046927SAndroid Build Coastguard Workerimport warnings 3*61046927SAndroid Build Coastguard Workerimport meson_impl as impl 4*61046927SAndroid Build Coastguard Worker 5*61046927SAndroid Build Coastguard Worker_gArrayOptions = [] 6*61046927SAndroid Build Coastguard Worker_gFeatureOptions = [] 7*61046927SAndroid Build Coastguard Worker_gBooleanOptions = [] 8*61046927SAndroid Build Coastguard Worker_gComboOptions = [] 9*61046927SAndroid Build Coastguard Worker_gSimpleOptions = [] 10*61046927SAndroid Build Coastguard Worker 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Workerdef noop(): 13*61046927SAndroid Build Coastguard Worker return 14*61046927SAndroid Build Coastguard Worker 15*61046927SAndroid Build Coastguard Worker 16*61046927SAndroid Build Coastguard Workerdef message(str): 17*61046927SAndroid Build Coastguard Worker print(str) 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Worker 20*61046927SAndroid Build Coastguard Workerdef error(message): 21*61046927SAndroid Build Coastguard Worker exit(message) 22*61046927SAndroid Build Coastguard Worker 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Workerdef warning(message): 25*61046927SAndroid Build Coastguard Worker warnings.warn(message) 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Workerdef set_relative_dir(dir): 29*61046927SAndroid Build Coastguard Worker impl.set_relative_dir(dir) 30*61046927SAndroid Build Coastguard Worker 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard Workerdef files(*filenames): 33*61046927SAndroid Build Coastguard Worker file_list = [] 34*61046927SAndroid Build Coastguard Worker for file in filenames: 35*61046927SAndroid Build Coastguard Worker file_list.append(impl.File(os.path.join(impl.get_relative_dir(), file))) 36*61046927SAndroid Build Coastguard Worker return file_list 37*61046927SAndroid Build Coastguard Worker 38*61046927SAndroid Build Coastguard Worker 39*61046927SAndroid Build Coastguard Workerdef declare_dependency( 40*61046927SAndroid Build Coastguard Worker compile_args=[], 41*61046927SAndroid Build Coastguard Worker d_import_dirs=[], 42*61046927SAndroid Build Coastguard Worker d_module_versions='', 43*61046927SAndroid Build Coastguard Worker dependencies=[], 44*61046927SAndroid Build Coastguard Worker extra_files=[], 45*61046927SAndroid Build Coastguard Worker include_directories=[], 46*61046927SAndroid Build Coastguard Worker link_args=[], 47*61046927SAndroid Build Coastguard Worker link_whole=[], 48*61046927SAndroid Build Coastguard Worker link_with=[], 49*61046927SAndroid Build Coastguard Worker objects=[], 50*61046927SAndroid Build Coastguard Worker sources=[], 51*61046927SAndroid Build Coastguard Worker variables=[], 52*61046927SAndroid Build Coastguard Worker version='', 53*61046927SAndroid Build Coastguard Worker): 54*61046927SAndroid Build Coastguard Worker link_with = impl.get_linear_list([link_with]) 55*61046927SAndroid Build Coastguard Worker link_whole = impl.get_linear_list([link_whole]) 56*61046927SAndroid Build Coastguard Worker 57*61046927SAndroid Build Coastguard Worker return impl.Dependency( 58*61046927SAndroid Build Coastguard Worker 'declared', 59*61046927SAndroid Build Coastguard Worker version, 60*61046927SAndroid Build Coastguard Worker found=True, 61*61046927SAndroid Build Coastguard Worker compile_args=compile_args, 62*61046927SAndroid Build Coastguard Worker include_directories=include_directories, 63*61046927SAndroid Build Coastguard Worker dependencies=dependencies, 64*61046927SAndroid Build Coastguard Worker sources=sources, 65*61046927SAndroid Build Coastguard Worker link_with=link_with, 66*61046927SAndroid Build Coastguard Worker link_whole=link_whole, 67*61046927SAndroid Build Coastguard Worker ) 68*61046927SAndroid Build Coastguard Worker 69*61046927SAndroid Build Coastguard Worker 70*61046927SAndroid Build Coastguard Workerdef find_program(name: str, required=False, native=False, disabler=False, version=''): 71*61046927SAndroid Build Coastguard Worker if type(required) is impl.FeatureOption: 72*61046927SAndroid Build Coastguard Worker required = required.state == impl.EnableState.ENABLED 73*61046927SAndroid Build Coastguard Worker if type(required) is not bool: 74*61046927SAndroid Build Coastguard Worker exit('Unhandled required type: ' + str(type(required))) 75*61046927SAndroid Build Coastguard Worker 76*61046927SAndroid Build Coastguard Worker maybe_filename = impl.get_relative_dir(name) 77*61046927SAndroid Build Coastguard Worker 78*61046927SAndroid Build Coastguard Worker # may be a script in the current directory 79*61046927SAndroid Build Coastguard Worker if os.path.isfile(maybe_filename): 80*61046927SAndroid Build Coastguard Worker return impl.Program(maybe_filename, found=True) 81*61046927SAndroid Build Coastguard Worker 82*61046927SAndroid Build Coastguard Worker # These are required for building turnip though not tagged as such 83*61046927SAndroid Build Coastguard Worker if name == 'bison' or name == 'flex' or name == 'gzip': 84*61046927SAndroid Build Coastguard Worker return impl.Program(name, found=True) 85*61046927SAndroid Build Coastguard Worker 86*61046927SAndroid Build Coastguard Worker if ( 87*61046927SAndroid Build Coastguard Worker name == 'byacc' 88*61046927SAndroid Build Coastguard Worker or name == 'glslangValidator' 89*61046927SAndroid Build Coastguard Worker or name == 'install_megadrivers.py' 90*61046927SAndroid Build Coastguard Worker or name == 'nm' 91*61046927SAndroid Build Coastguard Worker or name == 'python' 92*61046927SAndroid Build Coastguard Worker or name == 'symbols-check.py' 93*61046927SAndroid Build Coastguard Worker or name == 'sphinx-build' 94*61046927SAndroid Build Coastguard Worker ): 95*61046927SAndroid Build Coastguard Worker return impl.Program(name, found=required) 96*61046927SAndroid Build Coastguard Worker 97*61046927SAndroid Build Coastguard Worker exit('Unhandled program check: ' + name) 98*61046927SAndroid Build Coastguard Worker 99*61046927SAndroid Build Coastguard Worker 100*61046927SAndroid Build Coastguard Workerdef add_project_arguments(args, language=[], native=False): 101*61046927SAndroid Build Coastguard Worker impl.add_project_arguments(args, language, native) 102*61046927SAndroid Build Coastguard Worker 103*61046927SAndroid Build Coastguard Worker 104*61046927SAndroid Build Coastguard Workerdef add_project_link_arguments(args, language=[], native=False): 105*61046927SAndroid Build Coastguard Worker return 106*61046927SAndroid Build Coastguard Worker 107*61046927SAndroid Build Coastguard Worker 108*61046927SAndroid Build Coastguard Worker# Used by meson_options.txt to define an option 109*61046927SAndroid Build Coastguard Workerdef option( 110*61046927SAndroid Build Coastguard Worker name: str, 111*61046927SAndroid Build Coastguard Worker type: str, 112*61046927SAndroid Build Coastguard Worker min: int = 0, 113*61046927SAndroid Build Coastguard Worker max: int = 0, 114*61046927SAndroid Build Coastguard Worker value='', 115*61046927SAndroid Build Coastguard Worker choices=[], 116*61046927SAndroid Build Coastguard Worker description='', 117*61046927SAndroid Build Coastguard Worker deprecated=None, 118*61046927SAndroid Build Coastguard Worker): 119*61046927SAndroid Build Coastguard Worker if type == 'array': 120*61046927SAndroid Build Coastguard Worker global _gArrayOptions 121*61046927SAndroid Build Coastguard Worker _gArrayOptions.append(impl.ArrayOption(name, value)) 122*61046927SAndroid Build Coastguard Worker return 123*61046927SAndroid Build Coastguard Worker if type == 'feature': 124*61046927SAndroid Build Coastguard Worker global _gFeatureOptions 125*61046927SAndroid Build Coastguard Worker if value == '' or value == 'auto': 126*61046927SAndroid Build Coastguard Worker state = impl.EnableState.AUTO 127*61046927SAndroid Build Coastguard Worker elif value == 'disabled': 128*61046927SAndroid Build Coastguard Worker state = impl.EnableState.DISABLED 129*61046927SAndroid Build Coastguard Worker elif value == 'enabled': 130*61046927SAndroid Build Coastguard Worker state = impl.EnableState.ENABLED 131*61046927SAndroid Build Coastguard Worker else: 132*61046927SAndroid Build Coastguard Worker exit('Unhandled feature option value') 133*61046927SAndroid Build Coastguard Worker _gFeatureOptions.append(impl.FeatureOption(name, state)) 134*61046927SAndroid Build Coastguard Worker return 135*61046927SAndroid Build Coastguard Worker if type == 'boolean': 136*61046927SAndroid Build Coastguard Worker global _gBooleanOptions 137*61046927SAndroid Build Coastguard Worker if isinstance(value, str): 138*61046927SAndroid Build Coastguard Worker flag = True if value.lower() == 'true' else False 139*61046927SAndroid Build Coastguard Worker _gBooleanOptions.append(impl.BooleanOption(name, flag)) 140*61046927SAndroid Build Coastguard Worker else: 141*61046927SAndroid Build Coastguard Worker _gBooleanOptions.append(impl.BooleanOption(name, value)) 142*61046927SAndroid Build Coastguard Worker return 143*61046927SAndroid Build Coastguard Worker if type == 'combo': 144*61046927SAndroid Build Coastguard Worker global _gComboOptions 145*61046927SAndroid Build Coastguard Worker _gComboOptions.append(impl.ComboOption(name, value)) 146*61046927SAndroid Build Coastguard Worker return 147*61046927SAndroid Build Coastguard Worker if type == 'string' or type == 'integer': 148*61046927SAndroid Build Coastguard Worker global _gSimpleOptions 149*61046927SAndroid Build Coastguard Worker _gSimpleOptions.append(impl.SimpleOption(name, value)) 150*61046927SAndroid Build Coastguard Worker return 151*61046927SAndroid Build Coastguard Worker 152*61046927SAndroid Build Coastguard Worker 153*61046927SAndroid Build Coastguard Workerdef set_option(name, value: str): 154*61046927SAndroid Build Coastguard Worker print('set_option: %s=%s' % (name, value)) 155*61046927SAndroid Build Coastguard Worker for option in _gArrayOptions: 156*61046927SAndroid Build Coastguard Worker if option.name == name: 157*61046927SAndroid Build Coastguard Worker option.set(value) 158*61046927SAndroid Build Coastguard Worker 159*61046927SAndroid Build Coastguard Worker for option in _gFeatureOptions: 160*61046927SAndroid Build Coastguard Worker if option.name == name: 161*61046927SAndroid Build Coastguard Worker option.set(value) 162*61046927SAndroid Build Coastguard Worker 163*61046927SAndroid Build Coastguard Worker for option in _gBooleanOptions: 164*61046927SAndroid Build Coastguard Worker if option.name == name: 165*61046927SAndroid Build Coastguard Worker option.set(value) 166*61046927SAndroid Build Coastguard Worker 167*61046927SAndroid Build Coastguard Worker for option in _gComboOptions: 168*61046927SAndroid Build Coastguard Worker if option.name == name: 169*61046927SAndroid Build Coastguard Worker option.set(value) 170*61046927SAndroid Build Coastguard Worker 171*61046927SAndroid Build Coastguard Worker for option in _gSimpleOptions: 172*61046927SAndroid Build Coastguard Worker if option.name == name: 173*61046927SAndroid Build Coastguard Worker option.set(value) 174*61046927SAndroid Build Coastguard Worker 175*61046927SAndroid Build Coastguard Worker for option in impl.get_project_options(): 176*61046927SAndroid Build Coastguard Worker if option.name == name: 177*61046927SAndroid Build Coastguard Worker option.set(value) 178*61046927SAndroid Build Coastguard Worker 179*61046927SAndroid Build Coastguard Worker 180*61046927SAndroid Build Coastguard Workerdef get_option(name): 181*61046927SAndroid Build Coastguard Worker for option in _gArrayOptions: 182*61046927SAndroid Build Coastguard Worker if option.name == name: 183*61046927SAndroid Build Coastguard Worker return option.strings 184*61046927SAndroid Build Coastguard Worker 185*61046927SAndroid Build Coastguard Worker for option in _gFeatureOptions: 186*61046927SAndroid Build Coastguard Worker if option.name == name: 187*61046927SAndroid Build Coastguard Worker return option 188*61046927SAndroid Build Coastguard Worker 189*61046927SAndroid Build Coastguard Worker for option in _gBooleanOptions: 190*61046927SAndroid Build Coastguard Worker if option.name == name: 191*61046927SAndroid Build Coastguard Worker return option.value 192*61046927SAndroid Build Coastguard Worker 193*61046927SAndroid Build Coastguard Worker for option in _gComboOptions: 194*61046927SAndroid Build Coastguard Worker if option.name == name: 195*61046927SAndroid Build Coastguard Worker return option.value 196*61046927SAndroid Build Coastguard Worker 197*61046927SAndroid Build Coastguard Worker for option in _gSimpleOptions: 198*61046927SAndroid Build Coastguard Worker if option.name == name: 199*61046927SAndroid Build Coastguard Worker return option.value 200*61046927SAndroid Build Coastguard Worker 201*61046927SAndroid Build Coastguard Worker for option in impl.get_project_options(): 202*61046927SAndroid Build Coastguard Worker if option.name == name: 203*61046927SAndroid Build Coastguard Worker return option.value 204*61046927SAndroid Build Coastguard Worker 205*61046927SAndroid Build Coastguard Worker # built-in options 206*61046927SAndroid Build Coastguard Worker if name == 'layout': 207*61046927SAndroid Build Coastguard Worker return 'mirror' 208*61046927SAndroid Build Coastguard Worker if name == 'prefix': 209*61046927SAndroid Build Coastguard Worker return 'prefix' 210*61046927SAndroid Build Coastguard Worker if name == 'libdir': 211*61046927SAndroid Build Coastguard Worker return 'libdir' 212*61046927SAndroid Build Coastguard Worker if name == 'datadir': 213*61046927SAndroid Build Coastguard Worker return 'datadir' 214*61046927SAndroid Build Coastguard Worker if name == 'sysconfdir': 215*61046927SAndroid Build Coastguard Worker return 'sysconfdir' 216*61046927SAndroid Build Coastguard Worker if name == 'includedir': 217*61046927SAndroid Build Coastguard Worker return 'includedir' 218*61046927SAndroid Build Coastguard Worker if name == 'c_args': 219*61046927SAndroid Build Coastguard Worker return '' 220*61046927SAndroid Build Coastguard Worker if name == 'cpp_rtti': 221*61046927SAndroid Build Coastguard Worker return False 222*61046927SAndroid Build Coastguard Worker if name == 'debug': 223*61046927SAndroid Build Coastguard Worker return True 224*61046927SAndroid Build Coastguard Worker if name == 'b_sanitize': 225*61046927SAndroid Build Coastguard Worker return False 226*61046927SAndroid Build Coastguard Worker if name == 'backend': 227*61046927SAndroid Build Coastguard Worker return 'custom' 228*61046927SAndroid Build Coastguard Worker 229*61046927SAndroid Build Coastguard Worker exit('Unhandled option: ' + name) 230*61046927SAndroid Build Coastguard Worker 231*61046927SAndroid Build Coastguard Worker 232*61046927SAndroid Build Coastguard Workerdef project(name, language_list, version, license, meson_version, default_options=[]): 233*61046927SAndroid Build Coastguard Worker impl.project(name, language_list, version, license, meson_version, default_options) 234*61046927SAndroid Build Coastguard Worker 235*61046927SAndroid Build Coastguard Worker 236*61046927SAndroid Build Coastguard Workerdef run_command(program, *commands, check=False): 237*61046927SAndroid Build Coastguard Worker return program.run_command(commands) 238*61046927SAndroid Build Coastguard Worker 239*61046927SAndroid Build Coastguard Worker 240*61046927SAndroid Build Coastguard Workerdef environment(): 241*61046927SAndroid Build Coastguard Worker return impl.Environment() 242*61046927SAndroid Build Coastguard Worker 243*61046927SAndroid Build Coastguard Worker 244*61046927SAndroid Build Coastguard Workerdef join_paths(*paths): 245*61046927SAndroid Build Coastguard Worker joined_path = '' 246*61046927SAndroid Build Coastguard Worker for path in paths: 247*61046927SAndroid Build Coastguard Worker joined_path = os.path.join(joined_path, path) 248*61046927SAndroid Build Coastguard Worker return joined_path 249*61046927SAndroid Build Coastguard Worker 250*61046927SAndroid Build Coastguard Worker 251*61046927SAndroid Build Coastguard Workerdef executable( 252*61046927SAndroid Build Coastguard Worker target_name, 253*61046927SAndroid Build Coastguard Worker *source, 254*61046927SAndroid Build Coastguard Worker c_args=[], 255*61046927SAndroid Build Coastguard Worker cpp_args=[], 256*61046927SAndroid Build Coastguard Worker c_pch='', 257*61046927SAndroid Build Coastguard Worker build_by_default=False, 258*61046927SAndroid Build Coastguard Worker build_rpath='', 259*61046927SAndroid Build Coastguard Worker d_debug=[], 260*61046927SAndroid Build Coastguard Worker d_import_dirs=[], 261*61046927SAndroid Build Coastguard Worker d_module_versions=[], 262*61046927SAndroid Build Coastguard Worker d_unittest=False, 263*61046927SAndroid Build Coastguard Worker dependencies=[], 264*61046927SAndroid Build Coastguard Worker export_dynamic=False, 265*61046927SAndroid Build Coastguard Worker extra_files='', 266*61046927SAndroid Build Coastguard Worker gnu_symbol_visibility='', 267*61046927SAndroid Build Coastguard Worker gui_app=False, 268*61046927SAndroid Build Coastguard Worker implib=False, 269*61046927SAndroid Build Coastguard Worker implicit_include_directories=False, 270*61046927SAndroid Build Coastguard Worker include_directories=[], 271*61046927SAndroid Build Coastguard Worker install=False, 272*61046927SAndroid Build Coastguard Worker install_dir='', 273*61046927SAndroid Build Coastguard Worker install_mode=[], 274*61046927SAndroid Build Coastguard Worker install_rpath='', 275*61046927SAndroid Build Coastguard Worker install_tag='', 276*61046927SAndroid Build Coastguard Worker link_args=[], 277*61046927SAndroid Build Coastguard Worker link_depends='', 278*61046927SAndroid Build Coastguard Worker link_language='', 279*61046927SAndroid Build Coastguard Worker link_whole=[], 280*61046927SAndroid Build Coastguard Worker link_with=[], 281*61046927SAndroid Build Coastguard Worker name_prefix='', 282*61046927SAndroid Build Coastguard Worker name_suffix='', 283*61046927SAndroid Build Coastguard Worker native=False, 284*61046927SAndroid Build Coastguard Worker objects=[], 285*61046927SAndroid Build Coastguard Worker override_options=[], 286*61046927SAndroid Build Coastguard Worker pie=False, 287*61046927SAndroid Build Coastguard Worker rust_crate_type='', 288*61046927SAndroid Build Coastguard Worker rust_dependency_map={}, 289*61046927SAndroid Build Coastguard Worker sources='', 290*61046927SAndroid Build Coastguard Worker vala_args=[], 291*61046927SAndroid Build Coastguard Worker vs_module_defs='', 292*61046927SAndroid Build Coastguard Worker win_subsystem='', 293*61046927SAndroid Build Coastguard Worker): 294*61046927SAndroid Build Coastguard Worker return impl.Executable(target_name) 295*61046927SAndroid Build Coastguard Worker 296*61046927SAndroid Build Coastguard Worker 297*61046927SAndroid Build Coastguard Workerdef test( 298*61046927SAndroid Build Coastguard Worker name, 299*61046927SAndroid Build Coastguard Worker executable, 300*61046927SAndroid Build Coastguard Worker args=[], 301*61046927SAndroid Build Coastguard Worker depends=[], 302*61046927SAndroid Build Coastguard Worker env=[], 303*61046927SAndroid Build Coastguard Worker is_parallel=False, 304*61046927SAndroid Build Coastguard Worker priority=0, 305*61046927SAndroid Build Coastguard Worker protocol='', 306*61046927SAndroid Build Coastguard Worker should_fail=False, 307*61046927SAndroid Build Coastguard Worker suite='', 308*61046927SAndroid Build Coastguard Worker timeout=0, 309*61046927SAndroid Build Coastguard Worker verbose=False, 310*61046927SAndroid Build Coastguard Worker workdir='', 311*61046927SAndroid Build Coastguard Worker): 312*61046927SAndroid Build Coastguard Worker return 313*61046927SAndroid Build Coastguard Worker 314*61046927SAndroid Build Coastguard Worker 315*61046927SAndroid Build Coastguard Workerdef summary(entry, bool_yn=False, list_sep='', section=''): 316*61046927SAndroid Build Coastguard Worker return 317*61046927SAndroid Build Coastguard Worker 318*61046927SAndroid Build Coastguard Worker 319*61046927SAndroid Build Coastguard Workerdef install_headers(*headers, subdir=''): 320*61046927SAndroid Build Coastguard Worker return 321*61046927SAndroid Build Coastguard Worker 322*61046927SAndroid Build Coastguard Worker 323*61046927SAndroid Build Coastguard Workerdef install_data( 324*61046927SAndroid Build Coastguard Worker *files, 325*61046927SAndroid Build Coastguard Worker follow_symlinks=False, 326*61046927SAndroid Build Coastguard Worker install_dir='', 327*61046927SAndroid Build Coastguard Worker install_mode=[], 328*61046927SAndroid Build Coastguard Worker install_tag='', 329*61046927SAndroid Build Coastguard Worker preserve_path=False, 330*61046927SAndroid Build Coastguard Worker rename=[], 331*61046927SAndroid Build Coastguard Worker sources=[], 332*61046927SAndroid Build Coastguard Worker): 333*61046927SAndroid Build Coastguard Worker return 334*61046927SAndroid Build Coastguard Worker 335*61046927SAndroid Build Coastguard Worker 336*61046927SAndroid Build Coastguard Workerdef subdir(dir_=''): 337*61046927SAndroid Build Coastguard Worker return 338