7 parser
= argparse
.ArgumentParser(
8 description
="Generate a meson crossfile based on environment variables")
9 parser
.add_argument('file', type=argparse
.FileType('w', encoding
='UTF-8'),
11 args
= parser
.parse_args()
13 # Helper to add env variable value to crossfile
14 def _add_environ_val(meson_key
, env_key
):
15 env_value
= os
.environ
.get(env_key
, '')
16 args
.file.write("{} = '{}'\n".format(meson_key
, env_value
))
18 # Helper to add env variable array to crossfile
19 def _add_environ_arr(meson_key
, env_key
):
20 env_values
= shlex
.split(os
.environ
.get(env_key
, ''))
21 arr_string
= (', '.join("'" + item
+ "'" for item
in env_values
))
22 args
.file.write("{} = [{}]\n".format(meson_key
, arr_string
))
24 # Generate meson crossfile
25 args
.file.write("# Automatically generated by contrib makefile\n")
28 args
.file.write("\n[binaries]\n")
29 _add_environ_val('c', 'CC')
30 _add_environ_val('cpp', 'CXX')
31 _add_environ_val('ar', 'AR')
32 _add_environ_val('strip', 'STRIP')
33 _add_environ_val('pkgconfig', 'PKG_CONFIG')
34 _add_environ_val('windres', 'WINDRES')
37 args
.file.write("\n[properties]\n")
38 args
.file.write("needs_exe_wrapper = true\n")
39 _add_environ_arr('c_args', 'CFLAGS')
40 _add_environ_arr('c_link_args', 'LDFLAGS')
41 _add_environ_arr('cpp_args', 'CXXFLAGS')
42 _add_environ_arr('cpp_link_args', 'LDFLAGS')
44 # Host machine section
45 args
.file.write("\n[host_machine]\n")
46 _add_environ_val('system', 'HOST_SYSTEM')
47 _add_environ_val('cpu_family', 'HOST_ARCH')
48 args
.file.write("endian = 'little'\n")
50 # Get first part of triplet
51 cpu
= os
.environ
.get('HOST', '').split('-')[0]
52 args
.file.write("cpu = '{}'\n".format(cpu
))