Addresses emscripten-core/emscripten#8792
I've found what's the reason of the strange behaviour of last changes (#273).
In order to reproduce this problem it's needed:
To don't have python3 installed in system
To have pyenv with installed at least one version from each family, like:
pyenv install 3.7.0
pyenv install 2.7.15
To activate a version from python2
pyenv local 2.7.15
Then we have a strange situation that python3 is available as a command, but it's just a mock for pyenv:
➜ pyenv versions
system
* 2.7.15 (set by /home/trzeci/Projects/emsdk/.python-version)
3.7.0
➜ which python3
~/.pyenv/shims/python3
➜ python3 --version
pyenv: python3: command not found
The `python3' command exists in these Python versions:
3.7.0
➜ ./emsdk --help
pyenv: python3: command not found
The `python3' command exists in these Python versions:
3.7.0
As you see in an example above I didn't even call emsdk script, just tried to execute python3 --version and I've got exactly the same error. The problem of pyenv is that even if python3 isn't active it's available in the system PATH.
Calling ./emsdk --help get's the same error, as python3 was used.
At the moment this entirely breaks logic in python_selector and in pyenv working command is indistinguishable from stub python command.
@kripken: A couple of ways to go from here:
revert logic of python_selector and advertise mac users to use python3
keep logic and advertise pyenv users to use python3
This PR: extend logic of python_selector by checking if found python command is valid (for the instance by calling python --version), this will filter out false positive matches that coming from pyenv
After patch:
➜ pyenv versions
system
* 2.7.15 (set by /home/trzeci/Projects/emsdk/.python-version)
3.7.0
➜ which python3
~/.pyenv/shims/python3
➜ python3 --version
pyenv: python3: command not found
The `python3' command exists in these Python versions:
3.7.0
➜ ./emsdk --help
emsdk: Available commands:
emsdk list [--old] [--uses] - Lists all available SDKs and tools and their
current installation status. With the --old
....
As you can see python3 --version command fails as it was, but that's expected behaviour. What's important is that ./emsdk --help gets executed as python_selector recognizes a stub.
* 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': <urlopen error [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)>
```
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.