blob: bac4a3ec4e06f8d8a010bb39b0aaf0ea51ba026b [file] [log] [blame]
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