Skip to content

Commit 8987532

Browse files
committed
Allow emscripten-releases-tags/aliases to work be used without SDK deps
This change means that aliases such as `latest` and `3.10.2` can be used to install jsut the emscipten-releases packages and not the full SDK with all the dependencies. This allows uses who do not want to install dependencies such as node, python or java to still use this package. These packages were already available to install on their own via their full names such as: ``` $ ./emsdk install releases-upstream-48ce0b44015d0182fc8c27aa9fbc0a4474b55982-64bi ``` Now these base packages can also be install via: ``` $ ./emsdk install latest-base ``` Fixes: #1142
1 parent 65716d3 commit 8987532

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

emsdk.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2110,11 +2110,17 @@ def load_file_index_list(filename):
21102110
def load_releases_info():
21112111
if not hasattr(load_releases_info, 'cached_info'):
21122112
try:
2113-
text = open(sdk_path('emscripten-releases-tags.json'), 'r').read()
2114-
load_releases_info.cached_info = json.loads(text)
2113+
with open(sdk_path('emscripten-releases-tags.json')) as f:
2114+
text = f.read()
2115+
info = json.loads(text)
21152116
except Exception as e:
21162117
print('Error parsing emscripten-releases-tags.json!')
21172118
exit_with_error(str(e))
2119+
for key, value in dict(info['aliases']).items():
2120+
info['aliases'][key + '-base'] = value + '-base'
2121+
for key, value in dict(info['releases']).items():
2122+
info['releases'][key + '-base'] = value + '-base'
2123+
load_releases_info.cached_info = info
21182124

21192125
return load_releases_info.cached_info
21202126

@@ -2589,20 +2595,34 @@ def expand_sdk_name(name, activating):
25892595
# sdk-x.y.z-64bit
25902596
# TODO: support short notation for old builds too?
25912597
fullname = name
2592-
version = fullname.replace('sdk-', '').replace('releases-', '').replace('-64bit', '').replace('tag-', '')
2593-
sdk = 'sdk-' if not name.startswith('releases-') else ''
2598+
if name.startswith('releases-') or name.endswith('-base'):
2599+
sdk_prefix = ''
2600+
else:
2601+
sdk_prefix = 'sdk-'
2602+
if '-upstream' in fullname:
2603+
fullname = name.replace('-upstream', '')
2604+
backend = 'upstream'
2605+
elif '-fastcomp' in fullname:
2606+
fullname = fullname.replace('-fastcomp', '')
2607+
backend = 'fastcomp'
2608+
version = fullname
2609+
for pattern in ('sdk-', 'releases-', '-64bit', 'tag-', '-base'):
2610+
version = version.replace(pattern, '')
2611+
sdk_prefix = 'sdk-'
2612+
if name.startswith('releases-') or name.endswith('-base'):
2613+
sdk_prefix = ''
25942614
releases_info = load_releases_info()['releases']
25952615
release_hash = get_release_hash(version, releases_info)
25962616
if release_hash:
25972617
# Known release hash
2598-
full_name = '%sreleases-%s-64bit' % (sdk, release_hash)
2618+
full_name = '%sreleases-%s-64bit' % (sdk_prefix, release_hash)
25992619
print("Resolving SDK version '%s' to '%s'" % (version, full_name))
26002620
return full_name
26012621

26022622
if len(version) == 40:
26032623
global extra_release_tag
26042624
extra_release_tag = version
2605-
return '%sreleases-%s-64bit' % (sdk, version)
2625+
return '%sreleases-%s-64bit' % (sdk_prefix, version)
26062626

26072627
return name
26082628

@@ -2848,7 +2868,8 @@ def installed_sdk_text(name):
28482868
releases_versions = sorted(load_releases_versions(), key=version_key, reverse=True)
28492869
releases_info = load_releases_info()['releases']
28502870
for ver in releases_versions:
2851-
print(' %s %s' % (ver, installed_sdk_text('sdk-releases-%s-64bit' % get_release_hash(ver, releases_info))))
2871+
if not ver.endswith('-base'):
2872+
print(' %s %s' % (ver, installed_sdk_text('sdk-releases-%s-64bit' % get_release_hash(ver, releases_info))))
28522873
print()
28532874

28542875
# Use array to work around the lack of being able to mutate from enclosing

test/test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,12 @@ def test_install_tool(self):
252252
# Test that its possible to install emscripten as tool instead of SDK
253253
checked_call_with_output(emsdk + ' install releases-77b065ace39e6ab21446e13f92897f956c80476a', unexpected='Installing SDK')
254254

255+
def test_install_alias(self):
256+
# 3.1.18 is 49d45744895c7d7e28acd94a385d7ee361653b4a
257+
run_emsdk('install 3.1.18-base')
258+
checked_call_with_output(emsdk + ' install install 3.1.18-base', unexpected='Installing SDK')
259+
checked_call_with_output(emsdk + ' install install releases-upstream-49d45744895c7d7e28acd94a385d7ee361653b4a', unexpected='already downloaded, skipping', unexpected='Downloading:')
260+
255261
def test_activate_missing(self):
256262
run_emsdk('install latest')
257263
failing_call_with_output(emsdk + ' activate 2.0.1', expected="error: tool is not installed and therefore cannot be activated: 'releases-13e29bd55185e3c12802bc090b4507901856b2ba-64bit'")

0 commit comments

Comments
 (0)