Extract install_sdk and install_tool from install. NFC (#432)
This change simply splits this function into its two logical parts.
This commit is contained in:
158
emsdk.py
158
emsdk.py
@@ -1842,85 +1842,95 @@ class Tool(object):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
if self.id == 'sdk':
|
if self.id == 'sdk':
|
||||||
print("Installing SDK '" + str(self) + "'..")
|
return self.install_sdk()
|
||||||
for tool_name in self.uses:
|
|
||||||
tool = find_tool(tool_name)
|
|
||||||
if tool is None:
|
|
||||||
print("Manifest error: No tool by name '" + tool_name + "' found! This may indicate an internal SDK error!")
|
|
||||||
success = tool.install()
|
|
||||||
if not success:
|
|
||||||
return False
|
|
||||||
if getattr(self, 'custom_install_script', None) == 'emscripten_npm_install':
|
|
||||||
# upstream tools have hardcoded paths that are not stored in emsdk_manifest.json registry
|
|
||||||
install_path = 'upstream' if 'releases-upstream' in self.version else 'fastcomp'
|
|
||||||
success = emscripten_npm_install(self, os.path.join(emsdk_path(), install_path, 'emscripten'))
|
|
||||||
if not success:
|
|
||||||
return False
|
|
||||||
print("Done installing SDK '" + str(self) + "'.")
|
|
||||||
return True
|
|
||||||
else:
|
else:
|
||||||
# We should not force reinstallation of python if it already exists, since that very python
|
return self.install_tool()
|
||||||
# may be interpreting the current emsdk.py script we are executing. On Windows this would
|
|
||||||
# lead to a failure to uncompress the python zip file as the python executable files are in use.
|
|
||||||
# TODO: Refactor codebase to avoid needing this kind of special case check by being more
|
|
||||||
# careful about reinstallation, see https://github.com/emscripten-core/emsdk/pull/394#issuecomment-559386468
|
|
||||||
# for a scheme that would work.
|
|
||||||
if self.id == 'python' and self.is_installed():
|
|
||||||
print("Skipped installing " + self.name + ", already installed.")
|
|
||||||
return True
|
|
||||||
print("Installing tool '" + str(self) + "'..")
|
|
||||||
url = self.download_url()
|
|
||||||
|
|
||||||
if hasattr(self, 'custom_install_script') and self.custom_install_script == 'build_fastcomp':
|
def install_sdk(self):
|
||||||
success = build_llvm_fastcomp(self)
|
print("Installing SDK '" + str(self) + "'..")
|
||||||
elif hasattr(self, 'custom_install_script') and self.custom_install_script == 'build_llvm_monorepo':
|
|
||||||
success = build_llvm_monorepo(self)
|
|
||||||
elif hasattr(self, 'git_branch'):
|
|
||||||
success = git_clone_checkout_and_pull(url, self.installation_path(), self.git_branch)
|
|
||||||
elif url.endswith(ARCHIVE_SUFFIXES):
|
|
||||||
# TODO: explain the vs-tool special-casing
|
|
||||||
download_even_if_exists = (self.id == 'vs-tool')
|
|
||||||
# The 'releases' sdk is doesn't include a verion number in the directory
|
|
||||||
# name and instead only one version can be install at the time and each
|
|
||||||
# one will clobber the other. This means we always need to extract this
|
|
||||||
# archive even when the target directory exists.
|
|
||||||
download_even_if_exists = (self.id == 'releases')
|
|
||||||
filename_prefix = getattr(self, 'zipfile_prefix', '')
|
|
||||||
success = download_and_unzip(url, self.installation_path(), download_even_if_exists=download_even_if_exists, filename_prefix=filename_prefix)
|
|
||||||
else:
|
|
||||||
dst_file = download_file(urljoin(emsdk_packages_url, self.download_url()), self.installation_path())
|
|
||||||
if dst_file:
|
|
||||||
success = True
|
|
||||||
else:
|
|
||||||
success = False
|
|
||||||
|
|
||||||
if success:
|
|
||||||
if hasattr(self, 'custom_install_script'):
|
|
||||||
if self.custom_install_script == 'emscripten_post_install':
|
|
||||||
success = emscripten_post_install(self)
|
|
||||||
elif self.custom_install_script == 'emscripten_npm_install':
|
|
||||||
success = emscripten_npm_install(self, self.installation_path())
|
|
||||||
elif self.custom_install_script in ('build_fastcomp', 'build_llvm_monorepo'):
|
|
||||||
# 'build_fastcomp' is a special one that does the download on its
|
|
||||||
# own, others do the download manually.
|
|
||||||
pass
|
|
||||||
elif self.custom_install_script == 'build_binaryen':
|
|
||||||
success = build_binaryen_tool(self)
|
|
||||||
else:
|
|
||||||
raise Exception('Unknown custom_install_script command "' + self.custom_install_script + '"!')
|
|
||||||
|
|
||||||
# Install an emscripten-version.txt file if told to, and if there is one.
|
|
||||||
# (If this is not an actual release, but some other build, then we do not
|
|
||||||
# write anything.)
|
|
||||||
if hasattr(self, 'emscripten_releases_hash'):
|
|
||||||
emscripten_version_file_path = os.path.join(to_native_path(self.expand_vars(self.activated_path)), 'emscripten-version.txt')
|
|
||||||
version = get_emscripten_release_version(self.emscripten_releases_hash)
|
|
||||||
if version:
|
|
||||||
open(emscripten_version_file_path, 'w').write('"%s"' % version)
|
|
||||||
|
|
||||||
|
for tool_name in self.uses:
|
||||||
|
tool = find_tool(tool_name)
|
||||||
|
if tool is None:
|
||||||
|
print("Manifest error: No tool by name '" + tool_name + "' found! This may indicate an internal SDK error!")
|
||||||
|
success = tool.install()
|
||||||
if not success:
|
if not success:
|
||||||
print("Installation failed!")
|
|
||||||
return False
|
return False
|
||||||
|
if getattr(self, 'custom_install_script', None) == 'emscripten_npm_install':
|
||||||
|
# upstream tools have hardcoded paths that are not stored in emsdk_manifest.json registry
|
||||||
|
install_path = 'upstream' if 'releases-upstream' in self.version else 'fastcomp'
|
||||||
|
success = emscripten_npm_install(self, os.path.join(emsdk_path(), install_path, 'emscripten'))
|
||||||
|
if not success:
|
||||||
|
return False
|
||||||
|
|
||||||
|
print("Done installing SDK '" + str(self) + "'.")
|
||||||
|
return True
|
||||||
|
|
||||||
|
def install_tool(self):
|
||||||
|
# We should not force reinstallation of python if it already exists, since that very python
|
||||||
|
# may be interpreting the current emsdk.py script we are executing. On Windows this would
|
||||||
|
# lead to a failure to uncompress the python zip file as the python executable files are in use.
|
||||||
|
# TODO: Refactor codebase to avoid needing this kind of special case check by being more
|
||||||
|
# careful about reinstallation, see https://github.com/emscripten-core/emsdk/pull/394#issuecomment-559386468
|
||||||
|
# for a scheme that would work.
|
||||||
|
if self.id == 'python' and self.is_installed():
|
||||||
|
print("Skipped installing " + self.name + ", already installed.")
|
||||||
|
return True
|
||||||
|
|
||||||
|
print("Installing tool '" + str(self) + "'..")
|
||||||
|
url = self.download_url()
|
||||||
|
|
||||||
|
if hasattr(self, 'custom_install_script') and self.custom_install_script == 'build_fastcomp':
|
||||||
|
success = build_llvm_fastcomp(self)
|
||||||
|
elif hasattr(self, 'custom_install_script') and self.custom_install_script == 'build_llvm_monorepo':
|
||||||
|
success = build_llvm_monorepo(self)
|
||||||
|
elif hasattr(self, 'git_branch'):
|
||||||
|
success = git_clone_checkout_and_pull(url, self.installation_path(), self.git_branch)
|
||||||
|
elif url.endswith(ARCHIVE_SUFFIXES):
|
||||||
|
# TODO: explain the vs-tool special-casing
|
||||||
|
download_even_if_exists = (self.id == 'vs-tool')
|
||||||
|
# The 'releases' sdk is doesn't include a verion number in the directory
|
||||||
|
# name and instead only one version can be install at the time and each
|
||||||
|
# one will clobber the other. This means we always need to extract this
|
||||||
|
# archive even when the target directory exists.
|
||||||
|
download_even_if_exists = (self.id == 'releases')
|
||||||
|
filename_prefix = getattr(self, 'zipfile_prefix', '')
|
||||||
|
success = download_and_unzip(url, self.installation_path(), download_even_if_exists=download_even_if_exists, filename_prefix=filename_prefix)
|
||||||
|
else:
|
||||||
|
dst_file = download_file(urljoin(emsdk_packages_url, self.download_url()), self.installation_path())
|
||||||
|
if dst_file:
|
||||||
|
success = True
|
||||||
|
else:
|
||||||
|
success = False
|
||||||
|
|
||||||
|
if success:
|
||||||
|
if hasattr(self, 'custom_install_script'):
|
||||||
|
if self.custom_install_script == 'emscripten_post_install':
|
||||||
|
success = emscripten_post_install(self)
|
||||||
|
elif self.custom_install_script == 'emscripten_npm_install':
|
||||||
|
success = emscripten_npm_install(self, self.installation_path())
|
||||||
|
elif self.custom_install_script in ('build_fastcomp', 'build_llvm_monorepo'):
|
||||||
|
# 'build_fastcomp' is a special one that does the download on its
|
||||||
|
# own, others do the download manually.
|
||||||
|
pass
|
||||||
|
elif self.custom_install_script == 'build_binaryen':
|
||||||
|
success = build_binaryen_tool(self)
|
||||||
|
else:
|
||||||
|
raise Exception('Unknown custom_install_script command "' + self.custom_install_script + '"!')
|
||||||
|
|
||||||
|
# Install an emscripten-version.txt file if told to, and if there is one.
|
||||||
|
# (If this is not an actual release, but some other build, then we do not
|
||||||
|
# write anything.)
|
||||||
|
if hasattr(self, 'emscripten_releases_hash'):
|
||||||
|
emscripten_version_file_path = os.path.join(to_native_path(self.expand_vars(self.activated_path)), 'emscripten-version.txt')
|
||||||
|
version = get_emscripten_release_version(self.emscripten_releases_hash)
|
||||||
|
if version:
|
||||||
|
open(emscripten_version_file_path, 'w').write('"%s"' % version)
|
||||||
|
|
||||||
|
if not success:
|
||||||
|
print("Installation failed!")
|
||||||
|
return False
|
||||||
|
|
||||||
print("Done installing tool '" + str(self) + "'.")
|
print("Done installing tool '" + str(self) + "'.")
|
||||||
|
|
||||||
# Sanity check that the installation succeeded, and if so, remove unneeded
|
# Sanity check that the installation succeeded, and if so, remove unneeded
|
||||||
|
|||||||
Reference in New Issue
Block a user