#!/usr/bin/env python3 # # Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import os import sys from utils import Error IS_WINDOWS = sys.platform == 'win32' SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) REPO_ROOT_DIR = os.path.dirname(SCRIPT_DIR) EXECUTABLES = [ 'wat2wasm', 'wast2json', 'wasm2wat', 'wasm-objdump', 'wasm-interp', 'wasm-opcodecnt', 'wat-desugar', 'spectest-interp', 'wasm-validate', 'wasm2c', 'wasm-strip', 'wasm-decompile' ] def GetDefaultPath(): return os.path.join(REPO_ROOT_DIR, 'bin') def GetDefaultExe(basename): result = os.path.join(GetDefaultPath(), basename) if IS_WINDOWS: result += '.exe' return result def FindExeWithFallback(name, default_exe_list, override_exe=None): result = override_exe if result is not None: if os.path.isdir(result): result = os.path.join(result, name) if IS_WINDOWS and os.path.splitext(result)[1] != '.exe': result += '.exe' if os.path.exists(result): return os.path.abspath(result) raise Error('%s executable not found.\nsearch path: %s\n' % (name, result)) for result in default_exe_list: if os.path.exists(result): return os.path.abspath(result) raise Error('%s executable not found.\n%s\n' % (name, '\n'.join('search path: %s' % path for path in default_exe_list))) def FindExecutable(basename, override=None): return FindExeWithFallback(basename, [GetDefaultExe(basename)], override) def GetWat2WasmExecutable(override=None): return FindExecutable('wat2wasm', override) def GetWast2JsonExecutable(override=None): return FindExecutable('wast2json', override) def GetWasm2WatExecutable(override=None): return FindExecutable('wasm2wat', override) def GetWasmdumpExecutable(override=None): return FindExecutable('wasm-objdump', override) def GetWasmInterpExecutable(override=None): return FindExecutable('wasm-interp', override) def GetSpectestInterpExecutable(override=None): return FindExecutable('spectest-interp', override) def GetWasmOpcodeCntExecutable(override=None): return FindExecutable('wasm-opcodecnt', override) def GetWatDesugarExecutable(override=None): return FindExecutable('wat-desugar', override) def GetWasmValidateExecutable(override=None): return FindExecutable('wasm-validate', override) def GetWasm2CExecutable(override=None): return FindExecutable('wasm2c', override) def GetWasmStripExecutable(override=None): return FindExecutable('wasm-strip', override) def GetWasmDecompileExecutable(override=None): return FindExecutable('wasm-decompile', override)