First part of capturing the transient state of build configs. Currently adds prototype classes, does not assign any values yet. Test: Run build-<platform>-turnip.sh Bug: 357080225 Change-Id: I3a5e04610041f93c1b2b9079296085386a372c19
337 lines
7.5 KiB
Python
337 lines
7.5 KiB
Python
import os
|
|
import warnings
|
|
import meson_impl as impl
|
|
|
|
_gArrayOptions = []
|
|
_gFeatureOptions = []
|
|
_gBooleanOptions = []
|
|
_gComboOptions = []
|
|
_gSimpleOptions = []
|
|
|
|
|
|
def noop():
|
|
return
|
|
|
|
|
|
def message(str):
|
|
print(str)
|
|
|
|
|
|
def error(message):
|
|
exit(message)
|
|
|
|
|
|
def warning(message):
|
|
warnings.warn(message)
|
|
|
|
|
|
def set_relative_dir(dir):
|
|
impl.set_relative_dir(dir)
|
|
|
|
|
|
def files(*filenames):
|
|
file_list = []
|
|
for file in filenames:
|
|
file_list.append(impl.File(os.path.join(impl.get_relative_dir(), file)))
|
|
return file_list
|
|
|
|
|
|
def declare_dependency(
|
|
compile_args=[],
|
|
d_import_dirs=[],
|
|
d_module_versions='',
|
|
dependencies=[],
|
|
extra_files=[],
|
|
include_directories=[],
|
|
link_args=[],
|
|
link_whole=[],
|
|
link_with=[],
|
|
objects=[],
|
|
sources=[],
|
|
variables=[],
|
|
version='',
|
|
):
|
|
link_with = impl.get_linear_list([link_with])
|
|
link_whole = impl.get_linear_list([link_whole])
|
|
|
|
return impl.Dependency(
|
|
'declared',
|
|
version,
|
|
found=True,
|
|
compile_args=compile_args,
|
|
include_directories=include_directories,
|
|
dependencies=dependencies,
|
|
sources=sources,
|
|
link_with=link_with,
|
|
link_whole=link_whole,
|
|
)
|
|
|
|
|
|
def find_program(name: str, required=False, native=False, disabler=False, version=''):
|
|
if type(required) is impl.FeatureOption:
|
|
required = required.state == impl.EnableState.ENABLED
|
|
if type(required) is not bool:
|
|
exit('Unhandled required type: ' + str(type(required)))
|
|
|
|
maybe_filename = impl.get_relative_dir(name)
|
|
|
|
# may be a script in the current directory
|
|
if os.path.isfile(maybe_filename):
|
|
return impl.Program(maybe_filename, found=True)
|
|
|
|
# These are required for building turnip though not tagged as such
|
|
if name == 'bison' or name == 'flex' or name == 'gzip':
|
|
return impl.Program(name, found=True)
|
|
|
|
if (
|
|
name == 'byacc'
|
|
or name == 'glslangValidator'
|
|
or name == 'install_megadrivers.py'
|
|
or name == 'nm'
|
|
or name == 'python'
|
|
or name == 'symbols-check.py'
|
|
or name == 'sphinx-build'
|
|
):
|
|
return impl.Program(name, found=required)
|
|
|
|
exit('Unhandled program check: ' + name)
|
|
|
|
|
|
def add_project_arguments(args, language=[], native=False):
|
|
impl.add_project_arguments(args, language, native)
|
|
|
|
|
|
def add_project_link_arguments(args, language=[], native=False):
|
|
return
|
|
|
|
|
|
# Used by meson_options.txt to define an option
|
|
def option(
|
|
name: str,
|
|
type: str,
|
|
min: int = 0,
|
|
max: int = 0,
|
|
value='',
|
|
choices=[],
|
|
description='',
|
|
deprecated=None,
|
|
):
|
|
if type == 'array':
|
|
global _gArrayOptions
|
|
_gArrayOptions.append(impl.ArrayOption(name, value))
|
|
return
|
|
if type == 'feature':
|
|
global _gFeatureOptions
|
|
if value == '' or value == 'auto':
|
|
state = impl.EnableState.AUTO
|
|
elif value == 'disabled':
|
|
state = impl.EnableState.DISABLED
|
|
elif value == 'enabled':
|
|
state = impl.EnableState.ENABLED
|
|
else:
|
|
exit('Unhandled feature option value')
|
|
_gFeatureOptions.append(impl.FeatureOption(name, state))
|
|
return
|
|
if type == 'boolean':
|
|
global _gBooleanOptions
|
|
if isinstance(value, str):
|
|
flag = True if value.lower() == 'true' else False
|
|
_gBooleanOptions.append(impl.BooleanOption(name, flag))
|
|
else:
|
|
_gBooleanOptions.append(impl.BooleanOption(name, value))
|
|
return
|
|
if type == 'combo':
|
|
global _gComboOptions
|
|
_gComboOptions.append(impl.ComboOption(name, value))
|
|
return
|
|
if type == 'string' or type == 'integer':
|
|
global _gSimpleOptions
|
|
_gSimpleOptions.append(impl.SimpleOption(name, value))
|
|
return
|
|
|
|
|
|
def set_option(name, value: str):
|
|
print('set_option: %s=%s' % (name, value))
|
|
for option in _gArrayOptions:
|
|
if option.name == name:
|
|
option.set(value)
|
|
|
|
for option in _gFeatureOptions:
|
|
if option.name == name:
|
|
option.set(value)
|
|
|
|
for option in _gBooleanOptions:
|
|
if option.name == name:
|
|
option.set(value)
|
|
|
|
for option in _gComboOptions:
|
|
if option.name == name:
|
|
option.set(value)
|
|
|
|
for option in _gSimpleOptions:
|
|
if option.name == name:
|
|
option.set(value)
|
|
|
|
for option in impl.get_project_options():
|
|
if option.name == name:
|
|
option.set(value)
|
|
|
|
|
|
def get_option(name):
|
|
for option in _gArrayOptions:
|
|
if option.name == name:
|
|
return option.strings
|
|
|
|
for option in _gFeatureOptions:
|
|
if option.name == name:
|
|
return option
|
|
|
|
for option in _gBooleanOptions:
|
|
if option.name == name:
|
|
return option.value
|
|
|
|
for option in _gComboOptions:
|
|
if option.name == name:
|
|
return option.value
|
|
|
|
for option in _gSimpleOptions:
|
|
if option.name == name:
|
|
return option.value
|
|
|
|
for option in impl.get_project_options():
|
|
if option.name == name:
|
|
return option.value
|
|
|
|
# built-in options
|
|
if name == 'layout':
|
|
return 'mirror'
|
|
if name == 'prefix':
|
|
return 'prefix'
|
|
if name == 'libdir':
|
|
return 'libdir'
|
|
if name == 'datadir':
|
|
return 'datadir'
|
|
if name == 'sysconfdir':
|
|
return 'sysconfdir'
|
|
if name == 'includedir':
|
|
return 'includedir'
|
|
if name == 'c_args':
|
|
return ''
|
|
if name == 'cpp_rtti':
|
|
return False
|
|
if name == 'debug':
|
|
return True
|
|
if name == 'b_sanitize':
|
|
return False
|
|
if name == 'backend':
|
|
return 'custom'
|
|
|
|
exit('Unhandled option: ' + name)
|
|
|
|
|
|
def project(name, language_list, version, license, meson_version, default_options=[]):
|
|
impl.project(name, language_list, version, license, meson_version, default_options)
|
|
|
|
|
|
def run_command(program, *commands, check=False):
|
|
return program.run_command(commands)
|
|
|
|
|
|
def environment():
|
|
return impl.Environment()
|
|
|
|
|
|
def join_paths(*paths):
|
|
joined_path = ''
|
|
for path in paths:
|
|
joined_path = os.path.join(joined_path, path)
|
|
return joined_path
|
|
|
|
|
|
def executable(
|
|
target_name,
|
|
*source,
|
|
c_args=[],
|
|
cpp_args=[],
|
|
c_pch='',
|
|
build_by_default=False,
|
|
build_rpath='',
|
|
d_debug=[],
|
|
d_import_dirs=[],
|
|
d_module_versions=[],
|
|
d_unittest=False,
|
|
dependencies=[],
|
|
export_dynamic=False,
|
|
extra_files='',
|
|
gnu_symbol_visibility='',
|
|
gui_app=False,
|
|
implib=False,
|
|
implicit_include_directories=False,
|
|
include_directories=[],
|
|
install=False,
|
|
install_dir='',
|
|
install_mode=[],
|
|
install_rpath='',
|
|
install_tag='',
|
|
link_args=[],
|
|
link_depends='',
|
|
link_language='',
|
|
link_whole=[],
|
|
link_with=[],
|
|
name_prefix='',
|
|
name_suffix='',
|
|
native=False,
|
|
objects=[],
|
|
override_options=[],
|
|
pie=False,
|
|
rust_crate_type='',
|
|
rust_dependency_map={},
|
|
sources='',
|
|
vala_args=[],
|
|
vs_module_defs='',
|
|
win_subsystem='',
|
|
):
|
|
return impl.Executable(target_name)
|
|
|
|
|
|
def test(
|
|
name,
|
|
executable,
|
|
args=[],
|
|
depends=[],
|
|
env=[],
|
|
is_parallel=False,
|
|
priority=0,
|
|
protocol='',
|
|
should_fail=False,
|
|
suite='',
|
|
timeout=0,
|
|
verbose=False,
|
|
workdir='',
|
|
):
|
|
return
|
|
|
|
|
|
def summary(entry, bool_yn=False, list_sep='', section=''):
|
|
return
|
|
|
|
|
|
def install_headers(*headers, subdir=''):
|
|
return
|
|
|
|
|
|
def install_data(
|
|
*files,
|
|
follow_symlinks=False,
|
|
install_dir='',
|
|
install_mode=[],
|
|
install_tag='',
|
|
preserve_path=False,
|
|
rename=[],
|
|
sources=[],
|
|
):
|
|
return
|
|
|
|
|
|
def subdir(dir_=''):
|
|
return
|