Improve emscripten-releases-tags.txt to support mutliple aliases (#837)

Also, improve reporting of version resolution. e.g.:

```
$ ./emsdk  install sdk-latest
Resolving SDK alias 'latest' to '2.0.23'
Resolving SDK version '2.0.23' to 'sdk-releases-upstream-77b065ace39e6ab21446e13f92897f956c80476a-64bit'
Installing SDK 'sdk-releases-upstream-77b065ace39e6ab21446e13f92897f956c80476a-64bit'..
...
```
This commit is contained in:
Sam Clegg
2021-06-08 10:08:01 -07:00
committed by GitHub
parent f26ebb74c0
commit 57b8067188
3 changed files with 67 additions and 49 deletions

View File

@@ -1,5 +1,13 @@
{ {
"aliases": {
"latest": "2.0.23", "latest": "2.0.23",
"latest-sdk": "latest",
"latest-64bit": "latest",
"sdk-latest-64bit": "latest",
"latest-upstream": "latest",
"latest-clang-upstream": "latest",
"latest-releases-upstream": "latest"
},
"releases": { "releases": {
"2.0.23": "77b065ace39e6ab21446e13f92897f956c80476a", "2.0.23": "77b065ace39e6ab21446e13f92897f956c80476a",
"2.0.23-lto": "3f6dbb899f61fab52e4574beb4f7c8382658aa20", "2.0.23-lto": "3f6dbb899f61fab52e4574beb4f7c8382658aa20",

View File

@@ -2166,18 +2166,27 @@ def is_os_64bit():
return platform.machine().endswith('64') return platform.machine().endswith('64')
def find_latest_releases_version(): def find_latest_version():
return resolve_sdk_aliases('latest')
def find_latest_hash():
version = find_latest_version()
releases_info = load_releases_info() releases_info = load_releases_info()
return releases_info['latest'] return releases_info['releases'][version]
def find_latest_releases_hash(): def resolve_sdk_aliases(name, verbose=False):
releases_info = load_releases_info() releases_info = load_releases_info()
return releases_info['releases'][find_latest_releases_version()] while name in releases_info['aliases']:
if verbose:
print("Resolving SDK alias '%s' to '%s'" % (name, releases_info['aliases'][name]))
name = releases_info['aliases'][name]
return name
def find_latest_releases_sdk(which): def find_latest_sdk(which):
return 'sdk-releases-%s-%s-64bit' % (which, find_latest_releases_hash()) return 'sdk-releases-%s-%s-64bit' % (which, find_latest_hash())
def find_tot_sdk(): def find_tot_sdk():
@@ -2775,12 +2784,7 @@ def expand_sdk_name(name, activating):
name = name.replace('upstream-master', 'upstream-main') name = name.replace('upstream-master', 'upstream-main')
if name in ('latest-fastcomp', 'latest-releases-fastcomp', 'tot-fastcomp', 'sdk-nightly-latest'): if name in ('latest-fastcomp', 'latest-releases-fastcomp', 'tot-fastcomp', 'sdk-nightly-latest'):
exit_with_fastcomp_error() exit_with_fastcomp_error()
if name in ('latest', 'sdk-latest', 'latest-64bit', 'sdk-latest-64bit'): if name in ('tot', 'sdk-tot', 'tot-upstream'):
# This is effectly the default SDK
return str(find_latest_releases_sdk('upstream'))
elif name in ('latest-upstream', 'latest-clang-upstream', 'latest-releases-upstream'):
return str(find_latest_releases_sdk('upstream'))
elif name in ('tot', 'sdk-tot', 'tot-upstream'):
if activating: if activating:
# When we are activating a tot release, assume that the currently # When we are activating a tot release, assume that the currently
# installed SDK, if any, is the tot release we want to activate. # installed SDK, if any, is the tot release we want to activate.
@@ -2791,7 +2795,9 @@ def expand_sdk_name(name, activating):
debug_print('activating currently installed SDK; not updating tot version') debug_print('activating currently installed SDK; not updating tot version')
return 'sdk-releases-upstream-%s-64bit' % installed return 'sdk-releases-upstream-%s-64bit' % installed
return str(find_tot_sdk()) return str(find_tot_sdk())
else:
name = resolve_sdk_aliases(name, verbose=True)
# check if it's a release handled by an emscripten-releases version, # check if it's a release handled by an emscripten-releases version,
# and if so use that by using the right hash. we support a few notations, # and if so use that by using the right hash. we support a few notations,
# x.y.z[-(upstream|fastcomp_]) # x.y.z[-(upstream|fastcomp_])
@@ -2817,13 +2823,17 @@ def expand_sdk_name(name, activating):
backend = 'upstream' backend = 'upstream'
else: else:
backend = 'fastcomp' backend = 'fastcomp'
return 'sdk-releases-%s-%s-64bit' % (backend, release_hash) full_name = 'sdk-releases-%s-%s-64bit' % (backend, release_hash)
elif len(version) == 40: print("Resolving SDK version '%s' to '%s'" % (version, full_name))
return full_name
if len(version) == 40:
if backend is None: if backend is None:
backend = 'upstream' backend = 'upstream'
global extra_release_tag global extra_release_tag
extra_release_tag = version extra_release_tag = version
return 'sdk-releases-%s-%s-64bit' % (backend, version) return 'sdk-releases-%s-%s-64bit' % (backend, version)
return name return name
@@ -3043,15 +3053,15 @@ def main(args):
return 'INSTALLED' if sdk and sdk.is_installed() else '' return 'INSTALLED' if sdk and sdk.is_installed() else ''
if (LINUX or MACOS or WINDOWS) and (ARCH == 'x86' or ARCH == 'x86_64'): if (LINUX or MACOS or WINDOWS) and (ARCH == 'x86' or ARCH == 'x86_64'):
print('The *recommended* precompiled SDK download is %s (%s).' % (find_latest_releases_version(), find_latest_releases_hash())) print('The *recommended* precompiled SDK download is %s (%s).' % (find_latest_version(), find_latest_hash()))
print() print()
print('To install/activate it, use one of:') print('To install/activate it, use one of:')
print(' latest [default (llvm) backend]') print(' latest [default (llvm) backend]')
print(' latest-fastcomp [legacy (fastcomp) backend]') print(' latest-fastcomp [legacy (fastcomp) backend]')
print('') print('')
print('Those are equivalent to installing/activating the following:') print('Those are equivalent to installing/activating the following:')
print(' %s %s' % (find_latest_releases_version(), installed_sdk_text(find_latest_releases_sdk('upstream')))) print(' %s %s' % (find_latest_version(), installed_sdk_text(find_latest_sdk('upstream'))))
print(' %s-fastcomp %s' % (find_latest_releases_version(), installed_sdk_text(find_latest_releases_sdk('fastcomp')))) print(' %s-fastcomp %s' % (find_latest_version(), installed_sdk_text(find_latest_sdk('fastcomp'))))
print('') print('')
else: else:
print('Warning: your platform does not have precompiled SDKs available.') print('Warning: your platform does not have precompiled SDKs available.')

View File

@@ -140,7 +140,7 @@ int main() {
def test_list(self): def test_list(self):
# Test we report installed tools properly. The latest version should be # Test we report installed tools properly. The latest version should be
# installed, but not some random old one. # installed, but not some random old one.
checked_call_with_output(emsdk + ' list', expected=TAGS['latest'] + ' INSTALLED', unexpected='1.39.15 INSTALLED:') checked_call_with_output(emsdk + ' list', expected=TAGS['aliases']['latest'] + ' INSTALLED', unexpected='1.39.15 INSTALLED:')
def test_config_contents(self): def test_config_contents(self):
print('test .emscripten contents') print('test .emscripten contents')