From a61a528e48dbcf141f9069198a8a6f5f00be208c Mon Sep 17 00:00:00 2001 From: "Piotr Paczkowski (trzeci.eu)" Date: Thu, 13 Jun 2019 00:55:29 +0200 Subject: [PATCH] Default Python 3 for running emsdk (#273) * Default Python 3 for running emsdk On macOS it's pretty common to hit a problem ``` Error downloading URL 'https://github.com/kripken/emscripten/archive/1.38.25.tar.gz': ``` When an installation is started. I.e. `./emsdk install sdk-1.38.25-64bit` - this is caused in majority of cases by some problem of openssl and python2 - (some other https downloads work just fine, not sure why GitHub is special) So this Pull Request will default Python to Python 3, for running `emsdk`. It does so by making ./emsdk executable in python, bash, and sh. In bash and sh it will run a python executor script, which picks the best python it can find, preferring python3 on non-windows. --- emsdk | 5 ++++- python_selector | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100755 python_selector diff --git a/emsdk b/emsdk index ce1bd32..0623dfa 100755 --- a/emsdk +++ b/emsdk @@ -1,4 +1,7 @@ -#!/usr/bin/env python +#!/bin/sh +# Following line is responsible for selecting the best python for current host +# This script can be called directly: `./emsdk` or indirectly: `python ./emsdk` `sh ./emsdk` or `bash ./emsdk` +"exec" "`dirname $0`/python_selector" "$0" "$@" from __future__ import print_function diff --git a/python_selector b/python_selector new file mode 100755 index 0000000..d914b32 --- /dev/null +++ b/python_selector @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +# Copyright 2019 The Emscripten Authors. All rights reserved. +# Emscripten is available under two separate licenses, the MIT license and the +# University of Illinois/NCSA Open Source License. Both these licenses can be +# found in the LICENSE file. + +"""Provides a way to run a script on the preferred Python version""" + +import os +import subprocess +import sys + + +def which(program): + for path in [""] + os.environ.get("PATH", "").split(os.pathsep): + exe_file = os.path.join(path, program) + if os.path.isfile(exe_file) and os.access(exe_file, os.X_OK): + return exe_file + return None + +# Look for the best choice for python, favours Python3 over Python2 +# In case of Windows it uses always python that was used for this script +if sys.platform in ["linux", "linux2", "darwin"]: + python = which("python3") or which("python") or sys.executable +else: + python = sys.executable + +sys.exit(subprocess.call([python] + sys.argv[1:])) \ No newline at end of file