From 534ee8baa8b807b2adf52937a4672897f1a6d8cb Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Sat, 28 Jan 2017 02:02:06 +0530 Subject: [PATCH] find_program: Translate 'python3' to sys.executable on Windows While reading shebangs, when we detect an attempt to run 'python3', use sys.executable instead. For example: #!/usr/bin/python3 #!python3 #!/usr/bin/env python3 --- mesonbuild/dependencies.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py index 6ae91d456..53e10558d 100644 --- a/mesonbuild/dependencies.py +++ b/mesonbuild/dependencies.py @@ -20,6 +20,7 @@ # package before this gets too big. import re +import sys import os, stat, glob, shutil import subprocess import sysconfig @@ -426,10 +427,15 @@ class ExternalProgram: if first_line.startswith('#!'): commands = first_line[2:].split('#')[0].strip().split() if mesonlib.is_windows(): - # Windows does not have /usr/bin. - commands[0] = commands[0].split('/')[-1] - if commands[0] == 'env': + # Windows does not have UNIX paths so remove them, + # but don't remove Windows paths + if commands[0].startswith('/'): + commands[0] = commands[0].split('/')[-1] + if len(commands) > 0 and commands[0] == 'env': commands = commands[1:] + # Windows does not ship python3.exe, but we know the path to it + if len(commands) > 0 and commands[0] == 'python3': + commands[0] = sys.executable return commands + [script] except Exception: pass