android
doc
m4
python
build
autotools.py
boost.py
cmdline.py
dirs.py
download.py
ffmpeg.py
libs.py
makeproject.py
meson.py
project.py
quilt.py
tar.py
verify.py
zlib.py
scripts
src
systemd
test
win32
.gitignore
.travis.yml
AUTHORS
COPYING
Makefile.am
NEWS
README.md
autogen.sh
configure.ac
mpd.svg
valgrind.suppressions
97 lines
2.6 KiB
Python
97 lines
2.6 KiB
Python
import os.path, subprocess, sys
|
|
|
|
from build.project import Project
|
|
|
|
class MesonProject(Project):
|
|
def __init__(self, url, md5, installed, configure_args=[],
|
|
**kwargs):
|
|
Project.__init__(self, url, md5, installed, **kwargs)
|
|
self.configure_args = configure_args
|
|
|
|
def _make_cross_file(self, toolchain):
|
|
if toolchain.is_windows:
|
|
system = 'windows'
|
|
else:
|
|
system = 'linux'
|
|
|
|
if toolchain.is_arm:
|
|
cpu_family = 'arm'
|
|
if toolchain.is_armv7:
|
|
cpu = 'armv7'
|
|
else:
|
|
cpu = 'armv6'
|
|
else:
|
|
cpu_family = 'x86'
|
|
if 'x86_64' in toolchain.arch:
|
|
cpu = 'x86_64'
|
|
else:
|
|
cpu = 'i686'
|
|
|
|
# TODO: support more CPUs
|
|
endian = 'little'
|
|
|
|
# TODO: write pkg-config wrapper
|
|
|
|
path = os.path.join(toolchain.build_path, 'meson.cross')
|
|
os.makedirs(toolchain.build_path, exist_ok=True)
|
|
with open(path, 'w') as f:
|
|
f.write("""
|
|
[binaries]
|
|
c = '%s'
|
|
cpp = '%s'
|
|
ar = '%s'
|
|
strip = '%s'
|
|
|
|
[properties]
|
|
root = '%s'
|
|
|
|
c_args = %s
|
|
c_link_args = %s
|
|
|
|
cpp_args = %s
|
|
cpp_link_args = %s
|
|
|
|
[host_machine]
|
|
system = '%s'
|
|
cpu_family = '%s'
|
|
cpu = '%s'
|
|
endian = '%s'
|
|
""" % (toolchain.cc, toolchain.cxx, toolchain.ar, toolchain.strip,
|
|
toolchain.install_prefix,
|
|
repr((toolchain.cppflags + ' ' + toolchain.cflags).split()),
|
|
repr(toolchain.ldflags.split()),
|
|
repr((toolchain.cppflags + ' ' + toolchain.cxxflags).split()),
|
|
repr(toolchain.ldflags.split()),
|
|
system, cpu_family, cpu, endian))
|
|
return path
|
|
|
|
def configure(self, toolchain):
|
|
src = self.unpack(toolchain)
|
|
cross_file = self._make_cross_file(toolchain)
|
|
build = self.make_build_path(toolchain)
|
|
configure = [
|
|
'meson',
|
|
src, build,
|
|
|
|
'--prefix', toolchain.install_prefix,
|
|
|
|
# this is necessary because Meson uses Debian's build machine
|
|
# MultiArch path (e.g. "lib/x86_64-linux-gnu") for cross
|
|
# builds, which is obviously wrong
|
|
'--libdir', 'lib',
|
|
|
|
'--buildtype', 'plain',
|
|
|
|
'--default-library=static',
|
|
|
|
'--cross-file', cross_file,
|
|
] + self.configure_args
|
|
|
|
subprocess.check_call(configure, env=toolchain.env)
|
|
return build
|
|
|
|
def build(self, toolchain):
|
|
build = self.configure(toolchain)
|
|
subprocess.check_call(['ninja', 'install'],
|
|
cwd=build, env=toolchain.env)
|