Error (don't just warn) on unknown architecture (#935)
Also, add tests for unknown architecture and wrong bitness and add a mechanism (`EMSDK_ARCH`) to override the architecture assumed by emsdk.
This commit is contained in:
21
emsdk.py
21
emsdk.py
@@ -67,6 +67,11 @@ def errlog(msg):
|
|||||||
print(msg, file=sys.stderr)
|
print(msg, file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
def exit_with_error(msg):
|
||||||
|
errlog('error: %s' % msg)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
MINGW = False
|
MINGW = False
|
||||||
MSYS = False
|
MSYS = False
|
||||||
if os.getenv('MSYSTEM'):
|
if os.getenv('MSYSTEM'):
|
||||||
@@ -111,20 +116,18 @@ if WINDOWS:
|
|||||||
else:
|
else:
|
||||||
ENVPATH_SEPARATOR = ':'
|
ENVPATH_SEPARATOR = ':'
|
||||||
|
|
||||||
ARCH = 'unknown'
|
|
||||||
# platform.machine() may return AMD64 on windows, so standardize the case.
|
# platform.machine() may return AMD64 on windows, so standardize the case.
|
||||||
machine = platform.machine().lower()
|
machine = os.getenv('EMSDK_ARCH', platform.machine().lower())
|
||||||
if machine.startswith('x64') or machine.startswith('amd64') or machine.startswith('x86_64'):
|
if machine.startswith('x64') or machine.startswith('amd64') or machine.startswith('x86_64'):
|
||||||
ARCH = 'x86_64'
|
ARCH = 'x86_64'
|
||||||
elif machine.endswith('86'):
|
elif machine.endswith('86'):
|
||||||
ARCH = 'x86'
|
ARCH = 'x86'
|
||||||
elif machine.startswith('aarch64') or machine.lower().startswith('arm64'):
|
elif machine.startswith('aarch64') or machine.lower().startswith('arm64'):
|
||||||
ARCH = 'aarch64'
|
ARCH = 'aarch64'
|
||||||
elif platform.machine().startswith('arm'):
|
elif machine.startswith('arm'):
|
||||||
ARCH = 'arm'
|
ARCH = 'arm'
|
||||||
else:
|
else:
|
||||||
errlog("Warning: unknown machine architecture " + machine)
|
exit_with_error('unknown machine architecture: ' + machine)
|
||||||
errlog()
|
|
||||||
|
|
||||||
# Don't saturate all cores to not steal the whole system, but be aggressive.
|
# Don't saturate all cores to not steal the whole system, but be aggressive.
|
||||||
CPU_CORES = int(os.environ.get('EMSDK_NUM_CORES', max(multiprocessing.cpu_count() - 1, 1)))
|
CPU_CORES = int(os.environ.get('EMSDK_NUM_CORES', max(multiprocessing.cpu_count() - 1, 1)))
|
||||||
@@ -2131,8 +2134,7 @@ def find_sdk(name):
|
|||||||
|
|
||||||
|
|
||||||
def is_os_64bit():
|
def is_os_64bit():
|
||||||
# http://stackoverflow.com/questions/2208828/detect-64bit-os-windows-in-python
|
return ARCH.endswith('64')
|
||||||
return platform.machine().endswith('64')
|
|
||||||
|
|
||||||
|
|
||||||
def find_latest_version():
|
def find_latest_version():
|
||||||
@@ -2269,11 +2271,6 @@ def load_file_index_list(filename):
|
|||||||
return sorted(items, key=version_key)
|
return sorted(items, key=version_key)
|
||||||
|
|
||||||
|
|
||||||
def exit_with_error(msg):
|
|
||||||
errlog('error: %s' % msg)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
# Load the json info for emscripten-releases.
|
# Load the json info for emscripten-releases.
|
||||||
def load_releases_info():
|
def load_releases_info():
|
||||||
if not hasattr(load_releases_info, 'cached_info'):
|
if not hasattr(load_releases_info, 'cached_info'):
|
||||||
|
|||||||
35
test/test.py
35
test/test.py
@@ -52,14 +52,14 @@ def checked_call_with_output(cmd, expected=None, unexpected=None, stderr=None, e
|
|||||||
|
|
||||||
if expected:
|
if expected:
|
||||||
for x in listify(expected):
|
for x in listify(expected):
|
||||||
assert x in stdout, 'call had the right output: ' + stdout + '\n[[[' + x + ']]]'
|
assert x in stdout, 'expected output missing: ' + stdout + '\n[[[' + x + ']]]'
|
||||||
if unexpected:
|
if unexpected:
|
||||||
for x in listify(unexpected):
|
for x in listify(unexpected):
|
||||||
assert x not in stdout, 'call had the wrong output: ' + stdout + '\n[[[' + x + ']]]'
|
assert x not in stdout, 'unexpected output present: ' + stdout + '\n[[[' + x + ']]]'
|
||||||
|
|
||||||
|
|
||||||
def failing_call_with_output(cmd, expected):
|
def failing_call_with_output(cmd, expected, env=None):
|
||||||
proc = subprocess.Popen(cmd.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
|
proc = subprocess.Popen(cmd.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, env=env)
|
||||||
stdout, stderr = proc.communicate()
|
stdout, stderr = proc.communicate()
|
||||||
if WINDOWS:
|
if WINDOWS:
|
||||||
print('warning: skipping part of failing_call_with_output() due to error codes not being propagated (see #592)')
|
print('warning: skipping part of failing_call_with_output() due to error codes not being propagated (see #592)')
|
||||||
@@ -137,6 +137,20 @@ int main() {
|
|||||||
run_emsdk('install latest')
|
run_emsdk('install latest')
|
||||||
run_emsdk('activate latest')
|
run_emsdk('activate latest')
|
||||||
|
|
||||||
|
def test_unknown_arch(self):
|
||||||
|
env = os.environ.copy()
|
||||||
|
env['EMSDK_ARCH'] = 'mips'
|
||||||
|
failing_call_with_output(emsdk + ' install latest',
|
||||||
|
expected='unknown machine architecture: mips',
|
||||||
|
env=env)
|
||||||
|
|
||||||
|
def test_wrong_bitness(self):
|
||||||
|
env = os.environ.copy()
|
||||||
|
env['EMSDK_ARCH'] = 'x86'
|
||||||
|
failing_call_with_output(emsdk + ' install sdk-latest-64bit',
|
||||||
|
expected='is only provided for 64-bit OSe',
|
||||||
|
env=env)
|
||||||
|
|
||||||
def test_already_installed(self):
|
def test_already_installed(self):
|
||||||
# Test we don't re-download unnecessarily
|
# Test we don't re-download unnecessarily
|
||||||
checked_call_with_output(emsdk + ' install latest', expected='already installed', unexpected='Downloading:')
|
checked_call_with_output(emsdk + ' install latest', expected='already installed', unexpected='Downloading:')
|
||||||
@@ -251,11 +265,15 @@ int main() {
|
|||||||
if not filename.startswith('.') and not os.path.isdir(filename):
|
if not filename.startswith('.') and not os.path.isdir(filename):
|
||||||
shutil.copy2(filename, os.path.join(temp_dir, filename))
|
shutil.copy2(filename, os.path.join(temp_dir, filename))
|
||||||
|
|
||||||
os.chdir(temp_dir)
|
olddir = os.getcwd()
|
||||||
run_emsdk('update')
|
try:
|
||||||
|
os.chdir(temp_dir)
|
||||||
|
run_emsdk('update')
|
||||||
|
|
||||||
print('second time')
|
print('second time')
|
||||||
run_emsdk('update')
|
run_emsdk('update')
|
||||||
|
finally:
|
||||||
|
os.chdir(olddir)
|
||||||
|
|
||||||
def test_install_arbitrary(self):
|
def test_install_arbitrary(self):
|
||||||
# Test that its possible to install arbrary emscripten-releases SDKs
|
# Test that its possible to install arbrary emscripten-releases SDKs
|
||||||
@@ -278,6 +296,7 @@ int main() {
|
|||||||
# With EMSDK_KEEP_DOWNLOADS the downloading should happen on the first
|
# With EMSDK_KEEP_DOWNLOADS the downloading should happen on the first
|
||||||
# install of 2.0.28, and again when we install 2.0.29, but not on the
|
# install of 2.0.28, and again when we install 2.0.29, but not on the
|
||||||
# second install of 2.0.28 because the zip should already be local.
|
# second install of 2.0.28 because the zip should already be local.
|
||||||
|
shutil.rmtree('zips')
|
||||||
checked_call_with_output(emsdk + ' install 2.0.28', expected='Downloading:', env=env)
|
checked_call_with_output(emsdk + ' install 2.0.28', expected='Downloading:', env=env)
|
||||||
checked_call_with_output(emsdk + ' install 2.0.29', expected='Downloading:', env=env)
|
checked_call_with_output(emsdk + ' install 2.0.29', expected='Downloading:', env=env)
|
||||||
checked_call_with_output(emsdk + ' install 2.0.28', expected='already downloaded, skipping', unexpected='Downloading:', env=env)
|
checked_call_with_output(emsdk + ' install 2.0.28', expected='already downloaded, skipping', unexpected='Downloading:', env=env)
|
||||||
|
|||||||
Reference in New Issue
Block a user