/
meson.py
64 lines (52 loc) · 2.19 KB
/
meson.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import os
from conan.tools.meson import MesonToolchain
from conan.tools.microsoft.visual import vcvars_command, vcvars_arch
from conans.client.tools.oss import cross_building
def ninja_jobs_cmd_line_arg(conanfile):
njobs = conanfile.conf["tools.ninja"].jobs or \
conanfile.conf["tools.build"].processes
if njobs:
return "-j{}".format(njobs)
class Meson(object):
def __init__(self, conanfile, build_folder='build'):
self._conanfile = conanfile
self._build_folder = build_folder
def _run(self, cmd):
if self._conanfile.settings.get_safe("compiler") == "Visual Studio":
vcvars = vcvars_command(self._conanfile.settings.get_safe("compiler.version"),
vcvars_arch(self._conanfile))
cmd = '%s && %s' % (vcvars, cmd)
self._conanfile.run(cmd)
@property
def _build_dir(self):
build = self._conanfile.build_folder
if self._build_folder:
build = os.path.join(self._conanfile.build_folder, self._build_folder)
return build
def configure(self, source_folder=None):
source = self._conanfile.source_folder
if source_folder:
source = os.path.join(self._conanfile.source_folder, source_folder)
cmd = "meson setup"
if cross_building(self._conanfile):
cmd += ' --cross-file "{}"'.format(MesonToolchain.cross_filename)
else:
cmd += ' --native-file "{}"'.format(MesonToolchain.native_filename)
cmd += ' "{}" "{}"'.format(self._build_dir, source)
if self._conanfile.package_folder:
cmd += ' -Dprefix="{}"'.format(self._conanfile.package_folder)
self._run(cmd)
def build(self, target=None):
cmd = 'meson compile -C "{}"'.format(self._build_dir)
njobs = ninja_jobs_cmd_line_arg(self._conanfile)
if njobs:
cmd += " {}".format(njobs)
if target:
cmd += " {}".format(target)
self._run(cmd)
def install(self):
cmd = 'meson install -C "{}"'.format(self._build_dir)
self._run(cmd)
def test(self):
cmd = 'meson test -v -C "{}"'.format(self._build_dir)
self._run(cmd)