aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonmain.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/mesonmain.py')
-rw-r--r--mesonbuild/mesonmain.py34
1 files changed, 27 insertions, 7 deletions
diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py
index 4a977a1..c03ef9b 100644
--- a/mesonbuild/mesonmain.py
+++ b/mesonbuild/mesonmain.py
@@ -73,9 +73,8 @@ def filter_builtin_options(args, original_args):
class MesonApp:
- def __init__(self, dir1, dir2, script_launcher, handshake, options, original_cmd_line_args):
+ def __init__(self, dir1, dir2, handshake, options, original_cmd_line_args):
(self.source_dir, self.build_dir) = self.validate_dirs(dir1, dir2, handshake)
- self.meson_script_launcher = script_launcher
self.options = options
self.original_cmd_line_args = original_cmd_line_args
@@ -129,7 +128,7 @@ class MesonApp:
env.coredata.pkgconf_envvar = curvar
def generate(self):
- env = environment.Environment(self.source_dir, self.build_dir, self.meson_script_launcher, self.options, self.original_cmd_line_args)
+ env = environment.Environment(self.source_dir, self.build_dir, self.options, self.original_cmd_line_args)
mlog.initialize(env.get_log_dir())
with mesonlib.BuildDirLock(self.build_dir):
self._generate(env)
@@ -269,12 +268,27 @@ def run_script_command(args):
raise MesonException('Unknown internal command {}.'.format(cmdname))
return cmdfunc(cmdargs)
-def run(original_args, mainfile=None):
+def set_meson_command(mainfile):
+ if mainfile.endswith('.exe'):
+ mesonlib.meson_command = [mainfile]
+ elif os.path.isabs(mainfile) and mainfile.endswith('mesonmain.py'):
+ # Can't actually run meson with an absolute path to mesonmain.py, it must be run as -m mesonbuild.mesonmain
+ mesonlib.meson_command = mesonlib.python_command + ['-m', 'mesonbuild.mesonmain']
+ else:
+ mesonlib.meson_command = mesonlib.python_command + [mainfile]
+ # This won't go into the log file because it's not initialized yet, and we
+ # need this value for unit tests.
+ if 'MESON_COMMAND_TESTS' in os.environ:
+ mlog.log('meson_command is {!r}'.format(mesonlib.meson_command))
+
+def run(original_args, mainfile):
if sys.version_info < (3, 5):
print('Meson works correctly only with python 3.5+.')
print('You have python %s.' % sys.version)
print('Please update your environment')
return 1
+ # Set the meson command that will be used to run scripts and so on
+ set_meson_command(mainfile)
args = original_args[:]
if len(args) > 0:
# First check if we want to run a subcommand.
@@ -352,9 +366,7 @@ def run(original_args, mainfile=None):
else:
dir2 = '.'
try:
- if mainfile is None:
- raise AssertionError('I iz broken. Sorry.')
- app = MesonApp(dir1, dir2, mainfile, handshake, options, original_args)
+ app = MesonApp(dir1, dir2, handshake, options, original_args)
except Exception as e:
# Log directory does not exist, so just print
# to stdout.
@@ -382,3 +394,11 @@ def run(original_args, mainfile=None):
mlog.shutdown()
return 0
+
+def main():
+ # Always resolve the command path so Ninja can find it for regen, tests, etc.
+ launcher = os.path.realpath(sys.argv[0])
+ return run(sys.argv[1:], launcher)
+
+if __name__ == '__main__':
+ sys.exit(main())