aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-08-15 20:05:56 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2017-08-18 12:08:20 +0300
commit50fb7d37abc02b674b66071b51b1a2862fabb3cd (patch)
treed75a57c8f0726f772219979e00b624832038a01a /mesonbuild/backend
parent62aabb5a8be90467603b1348d8ae4c0847bc5d1e (diff)
downloadmeson-50fb7d37abc02b674b66071b51b1a2862fabb3cd.zip
meson-50fb7d37abc02b674b66071b51b1a2862fabb3cd.tar.gz
meson-50fb7d37abc02b674b66071b51b1a2862fabb3cd.tar.bz2
Make all functionality invokable via the main Meson binary,
which can be a Windows .exe file.
Diffstat (limited to 'mesonbuild/backend')
-rw-r--r--mesonbuild/backend/backends.py6
-rw-r--r--mesonbuild/backend/ninjabackend.py78
-rw-r--r--mesonbuild/backend/vs2010backend.py19
3 files changed, 43 insertions, 60 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index f967de0..4dbf41c 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -20,10 +20,11 @@ from .. import mlog
from .. import compilers
import json
import subprocess
-from ..mesonlib import MesonException, get_meson_script
+from ..mesonlib import MesonException
from ..mesonlib import get_compiler_for_source, classify_unity_sources
from ..compilers import CompilerArgs
from collections import OrderedDict
+import shlex
class CleanTrees:
'''
@@ -771,7 +772,8 @@ class Backend:
def run_postconf_scripts(self):
env = {'MESON_SOURCE_ROOT': self.environment.get_source_dir(),
'MESON_BUILD_ROOT': self.environment.get_build_dir(),
- 'MESONINTROSPECT': get_meson_script(self.environment, 'mesonintrospect')}
+ 'MESONINTROSPECT': ' '.join([shlex.quote(x) for x in self.environment.get_build_command() + ['introspect']]),
+ }
child_env = os.environ.copy()
child_env.update(env)
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 2d2c034..70fa9c1 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -25,7 +25,7 @@ from .. import compilers
from ..compilers import CompilerArgs
from ..linkers import ArLinker
from ..mesonlib import File, MesonException, OrderedSet
-from ..mesonlib import get_meson_script, get_compiler_for_source
+from ..mesonlib import get_compiler_for_source
from .backends import CleanTrees, InstallData
from ..build import InvalidArguments
@@ -520,8 +520,7 @@ int dummy;
# All targets are built from the build dir
self.environment.get_build_dir(),
capture=ofilenames[0] if target.capture else None)
- cmd = [sys.executable, self.environment.get_build_command(),
- '--internal', 'exe', exe_data]
+ cmd = self.environment.get_build_command() + ['--internal', 'exe', exe_data]
cmd_type = 'meson_exe.py custom'
else:
cmd_type = 'custom'
@@ -537,7 +536,7 @@ int dummy;
self.processed_targets[target.name + target.type_suffix()] = True
def generate_run_target(self, target, outfile):
- cmd = [sys.executable, self.environment.get_build_command(), '--internal', 'commandrunner']
+ cmd = self.environment.get_build_command() + ['--internal', 'commandrunner']
deps = self.unwrap_dep_list(target)
arg_strings = []
for i in target.args:
@@ -555,8 +554,7 @@ int dummy;
elem = NinjaBuildElement(self.all_outputs, 'meson-' + target.name, 'CUSTOM_COMMAND', [])
cmd += [self.environment.get_source_dir(),
self.environment.get_build_dir(),
- target.subdir,
- get_meson_script(self.environment, 'mesonintrospect')]
+ target.subdir] + self.environment.get_build_command()
texe = target.command
try:
texe = texe.held_object
@@ -594,12 +592,11 @@ int dummy;
def generate_coverage_rules(self, outfile):
e = NinjaBuildElement(self.all_outputs, 'meson-coverage', 'CUSTOM_COMMAND', 'PHONY')
- e.add_item('COMMAND', [sys.executable,
- self.environment.get_build_command(),
- '--internal', 'coverage',
- self.environment.get_source_dir(),
- self.environment.get_build_dir(),
- self.environment.get_log_dir()])
+ e.add_item('COMMAND', self.environment.get_build_command() +
+ ['--internal', 'coverage',
+ self.environment.get_source_dir(),
+ self.environment.get_build_dir(),
+ self.environment.get_log_dir()])
e.add_item('description', 'Generates coverage reports.')
e.write(outfile)
# Alias that runs the target defined above
@@ -659,12 +656,11 @@ int dummy;
d = InstallData(self.environment.get_source_dir(),
self.environment.get_build_dir(),
self.environment.get_prefix(),
- strip_bin,
- get_meson_script(self.environment, 'mesonintrospect'))
+ strip_bin, self.environment.get_build_command() + ['introspect'])
elem = NinjaBuildElement(self.all_outputs, 'meson-install', 'CUSTOM_COMMAND', 'PHONY')
elem.add_dep('all')
elem.add_item('DESC', 'Installing files.')
- elem.add_item('COMMAND', [sys.executable, self.environment.get_build_command(), '--internal', 'install', install_data_file])
+ elem.add_item('COMMAND', self.environment.get_build_command() + ['--internal', 'install', install_data_file])
elem.add_item('pool', 'console')
self.generate_depmf_install(d)
self.generate_target_install(d)
@@ -844,7 +840,7 @@ int dummy;
def generate_tests(self, outfile):
self.serialize_tests()
- cmd = [sys.executable, '-u', self.environment.get_build_command(), 'test', '--no-rebuild']
+ cmd = self.environment.get_build_command(True) + ['test', '--no-rebuild']
if not self.environment.coredata.get_builtin_option('stdsplit'):
cmd += ['--no-stdsplit']
if self.environment.coredata.get_builtin_option('errorlogs'):
@@ -858,7 +854,7 @@ int dummy;
self.create_target_alias('meson-test', outfile)
# And then benchmarks.
- cmd = [sys.executable, '-u', self.environment.get_build_command(), 'test', '--benchmark', '--logbase',
+ cmd = self.environment.get_build_command(True) + ['test', '--benchmark', '--logbase',
'benchmarklog', '--num-processes=1', '--no-rebuild']
elem = NinjaBuildElement(self.all_outputs, 'meson-benchmark', 'CUSTOM_COMMAND', ['all', 'PHONY'])
elem.add_item('COMMAND', cmd)
@@ -896,13 +892,12 @@ int dummy;
outfile.write(' depfile = $DEPFILE\n')
outfile.write(' restat = 1\n\n')
outfile.write('rule REGENERATE_BUILD\n')
- c = (ninja_quote(quote_func(sys.executable)),
- ninja_quote(quote_func(self.environment.get_build_command())),
- '--internal',
+ c = [ninja_quote(quote_func(x)) for x in self.environment.get_build_command()] + \
+ ['--internal',
'regenerate',
ninja_quote(quote_func(self.environment.get_source_dir())),
- ninja_quote(quote_func(self.environment.get_build_dir())))
- outfile.write(" command = %s %s %s %s %s %s --backend ninja\n" % c)
+ ninja_quote(quote_func(self.environment.get_build_dir()))]
+ outfile.write(" command = " + ' '.join(c) + ' --backend ninja\n')
outfile.write(' description = Regenerating build files.\n')
outfile.write(' generator = 1\n\n')
outfile.write('\n')
@@ -1500,13 +1495,13 @@ int dummy;
outfile.write(description)
outfile.write('\n')
outfile.write('\n')
+ args = [ninja_quote(quote_func(x)) for x in self.environment.get_build_command()] + \
+ ['--internal',
+ 'symbolextractor',
+ '$in',
+ '$out']
symrule = 'rule SHSYM\n'
- symcmd = ' command = "%s" "%s" %s %s %s %s $CROSS\n' % (ninja_quote(sys.executable),
- self.environment.get_build_command(),
- '--internal',
- 'symbolextractor',
- '$in',
- '$out')
+ symcmd = ' command = ' + ' '.join(args) + ' $CROSS\n'
synstat = ' restat = 1\n'
syndesc = ' description = Generating symbol file $out.\n'
outfile.write(symrule)
@@ -1564,8 +1559,7 @@ int dummy;
def generate_swift_compile_rules(self, compiler, outfile):
rule = 'rule %s_COMPILER\n' % compiler.get_language()
- full_exe = [ninja_quote(sys.executable),
- ninja_quote(self.environment.get_build_command()),
+ full_exe = [ninja_quote(x) for x in self.environment.get_build_command()] + [
'--internal',
'dirchanger',
'$RUNDIR']
@@ -2489,9 +2483,7 @@ rule FORTRAN_DEP_HACK
e = NinjaBuildElement(self.all_outputs, 'meson-clean-ctlist', 'CUSTOM_COMMAND', 'PHONY')
d = CleanTrees(self.environment.get_build_dir(), trees)
d_file = os.path.join(self.environment.get_scratch_dir(), 'cleantrees.dat')
- e.add_item('COMMAND', [sys.executable,
- self.environment.get_build_command(),
- '--internal', 'cleantrees', d_file])
+ e.add_item('COMMAND', self.environment.get_build_command() + ['--internal', 'cleantrees', d_file])
e.add_item('description', 'Cleaning custom target directories.')
e.write(outfile)
# Alias that runs the target defined above
@@ -2532,13 +2524,10 @@ rule FORTRAN_DEP_HACK
def generate_dist(self, outfile):
elem = NinjaBuildElement(self.all_outputs, 'meson-dist', 'CUSTOM_COMMAND', 'PHONY')
elem.add_item('DESC', 'Creating source packages')
- elem.add_item('COMMAND', [sys.executable,
- self.environment.get_build_command(),
- '--internal', 'dist',
- self.environment.source_dir,
- self.environment.build_dir,
- sys.executable,
- self.environment.get_build_command()])
+ elem.add_item('COMMAND', self.environment.get_build_command() +
+ ['--internal', 'dist',
+ self.environment.source_dir,
+ self.environment.build_dir] + self.environment.get_build_command())
elem.add_item('pool', 'console')
elem.write(outfile)
# Alias that runs the target defined above
@@ -2546,17 +2535,16 @@ rule FORTRAN_DEP_HACK
# For things like scan-build and other helper tools we might have.
def generate_utils(self, outfile):
- cmd = [sys.executable, self.environment.get_build_command(),
- '--internal', 'scanbuild', self.environment.source_dir, self.environment.build_dir,
- sys.executable, self.environment.get_build_command()] + self.get_user_option_args()
+ cmd = self.environment.get_build_command() + \
+ ['--internal', 'scanbuild', self.environment.source_dir, self.environment.build_dir] + \
+ self.environment.get_build_command() + self.get_user_option_args()
elem = NinjaBuildElement(self.all_outputs, 'meson-scan-build', 'CUSTOM_COMMAND', 'PHONY')
elem.add_item('COMMAND', cmd)
elem.add_item('pool', 'console')
elem.write(outfile)
# Alias that runs the target defined above
self.create_target_alias('meson-scan-build', outfile)
- cmd = [sys.executable, self.environment.get_build_command(),
- '--internal', 'uninstall']
+ cmd = self.environment.get_build_command() + ['--internal', 'uninstall']
elem = NinjaBuildElement(self.all_outputs, 'meson-uninstall', 'CUSTOM_COMMAND', 'PHONY')
elem.add_item('COMMAND', cmd)
elem.add_item('pool', 'console')
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index 4832f7e..00ee34a 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -24,7 +24,7 @@ from .. import mlog
from .. import compilers
from ..build import BuildTarget
from ..compilers import CompilerArgs
-from ..mesonlib import MesonException, File, get_meson_script
+from ..mesonlib import MesonException, File
from ..environment import Environment
def autodetect_vs_version(build):
@@ -413,8 +413,8 @@ class Vs2010Backend(backends.Backend):
cmd = [sys.executable, os.path.join(self.environment.get_script_dir(), 'commandrunner.py'),
self.environment.get_build_dir(),
self.environment.get_source_dir(),
- self.get_target_dir(target),
- get_meson_script(self.environment, 'mesonintrospect')]
+ self.get_target_dir(target)] + \
+ self.environment.get_build_command()
for i in cmd_raw:
if isinstance(i, build.BuildTarget):
cmd.append(os.path.join(self.environment.get_build_dir(), self.get_target_filename(i)))
@@ -447,8 +447,7 @@ class Vs2010Backend(backends.Backend):
# All targets run from the target dir
tdir_abs,
capture=ofilenames[0] if target.capture else None)
- wrapper_cmd = [sys.executable, self.environment.get_build_command(),
- '--internal', 'exe', exe_data]
+ wrapper_cmd = self.environment.get_build_command() + ['--internal', 'exe', exe_data]
ET.SubElement(customstep, 'Command').text = ' '.join(self.quote_arguments(wrapper_cmd))
ET.SubElement(customstep, 'Outputs').text = ';'.join(ofilenames)
ET.SubElement(customstep, 'Inputs').text = ';'.join([exe_data] + srcs + depend_files)
@@ -1093,10 +1092,7 @@ class Vs2010Backend(backends.Backend):
ET.SubElement(midl, 'TypeLibraryName').text = '%(Filename).tlb'
ET.SubElement(midl, 'InterfaceIdentifierFilename').text = '%(Filename)_i.c'
ET.SubElement(midl, 'ProxyFileName').text = '%(Filename)_p.c'
- regen_command = [sys.executable,
- self.environment.get_build_command(),
- '--internal',
- 'regencheck']
+ regen_command = self.environment.get_build_command() + ['--internal', 'regencheck']
private_dir = self.environment.get_scratch_dir()
cmd_templ = '''setlocal
"%s" "%s"
@@ -1176,10 +1172,7 @@ if %%errorlevel%% neq 0 goto :VCEnd'''
postbuild = ET.SubElement(action, 'PostBuildEvent')
ET.SubElement(postbuild, 'Message')
# FIXME: No benchmarks?
- test_command = [sys.executable,
- self.environment.get_build_command(),
- 'test',
- '--no-rebuild']
+ test_command = self.environment.get_build_command() + ['test', '--no-rebuild']
if not self.environment.coredata.get_builtin_option('stdsplit'):
test_command += ['--no-stdsplit']
if self.environment.coredata.get_builtin_option('errorlogs'):