use meson to build
(cfile, outputfilename, compile_extra, link_extra,
include_dirs, libraries, library_dirs)
| 210 | |
| 211 | |
| 212 | def build(cfile, outputfilename, compile_extra, link_extra, |
| 213 | include_dirs, libraries, library_dirs): |
| 214 | "use meson to build" |
| 215 | |
| 216 | build_dir = cfile.parent / "build" |
| 217 | os.makedirs(build_dir, exist_ok=True) |
| 218 | so_name = outputfilename.parts[-1] |
| 219 | with open(cfile.parent / "meson.build", "wt") as fid: |
| 220 | includes = ['-I' + d for d in include_dirs] |
| 221 | link_dirs = ['-L' + d for d in library_dirs] |
| 222 | fid.write(textwrap.dedent(f"""\ |
| 223 | project('foo', 'c') |
| 224 | shared_module('{so_name}', '{cfile.parts[-1]}', |
| 225 | c_args: {includes} + {compile_extra}, |
| 226 | link_args: {link_dirs} + {link_extra}, |
| 227 | link_with: {libraries}, |
| 228 | name_prefix: '', |
| 229 | name_suffix: 'dummy', |
| 230 | ) |
| 231 | """)) |
| 232 | if sys.platform == "win32": |
| 233 | subprocess.check_call(["meson", "setup", |
| 234 | "--buildtype=release", |
| 235 | "--vsenv", ".."], |
| 236 | cwd=build_dir, |
| 237 | ) |
| 238 | else: |
| 239 | subprocess.check_call(["meson", "setup", "--vsenv", ".."], |
| 240 | cwd=build_dir |
| 241 | ) |
| 242 | subprocess.check_call(["meson", "compile"], cwd=build_dir) |
| 243 | os.rename(str(build_dir / so_name) + ".dummy", cfile.parent / so_name) |
| 244 | |
| 245 | def get_so_suffix(): |
| 246 | ret = sysconfig.get_config_var('EXT_SUFFIX') |
no test coverage detected