Skip to content

Commit

Permalink
devenv: support bash under MSYS2 by default
Browse files Browse the repository at this point in the history
Currently it tries to run "cmd" by default in a MSYS2 bash.
Passing "bash" doesn't work since that defaults to WSL and
one has to pass an absolute path to bash instead, and even then
one misses out on the PS1 override.

In case $SHELL is set and the contained path exists prefer it even if
we are on Windows.

To make the PS1 override work we can't use Unix paths in Python since
we might be on Windows, so move the .bashrc check into the temporary
bash script itself.

This makes "meson devenv" work the same under MSYS2 as on Linux.
  • Loading branch information
lazka authored and jpakkane committed Feb 20, 2022
1 parent e8e7fd9 commit 5d64a15
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions mesonbuild/mdevenv.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ def run(options: argparse.Namespace) -> int:
args = options.command
if not args:
prompt_prefix = f'[{b.project_name}]'
if is_windows():
shell_env = os.environ.get("SHELL")
# Prefer $SHELL in a MSYS2 bash despite it being Windows
if shell_env and os.path.exists(shell_env):
args = [shell_env]
elif is_windows():
shell = get_windows_shell()
if shell == 'powershell.exe':
args = ['powershell.exe']
Expand All @@ -62,9 +66,7 @@ def run(options: argparse.Namespace) -> int:
args = [os.environ.get("SHELL", os.path.realpath("/bin/sh"))]
if "bash" in args[0] and not os.environ.get("MESON_DISABLE_PS1_OVERRIDE"):
tmprc = tempfile.NamedTemporaryFile(mode='w')
bashrc = os.path.expanduser('~/.bashrc')
if os.path.exists(bashrc):
tmprc.write(f'. {bashrc}\n')
tmprc.write('[ -e ~/.bashrc ] && . ~/.bashrc\n')
tmprc.write(f'export PS1="{prompt_prefix} $PS1"')
tmprc.flush()
# Let the GC remove the tmp file
Expand Down

0 comments on commit 5d64a15

Please sign in to comment.