Skip to content

Commit

Permalink
Add wasm-bindgen (#383)
Browse files Browse the repository at this point in the history
Co-authored-by: Taiki Endo <te316e89@gmail.com>
  • Loading branch information
Ekleog and taiki-e committed Mar 2, 2024
1 parent 41e81ec commit 70fd2d4
Show file tree
Hide file tree
Showing 6 changed files with 276 additions and 77 deletions.
1 change: 1 addition & 0 deletions .github/.cspell/project-dictionary.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
almalinux
bindgen
binstall
coreutils
distro
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ https://spdx.org/licenses
| [**shfmt**](https://github.com/mvdan/sh) | `/usr/local/bin` | [GitHub Releases](https://github.com/mvdan/sh/releases) | Linux, macOS, Windows | [BSD-3-Clause](https://github.com/mvdan/sh/blob/HEAD/LICENSE) |
| [**syft**](https://github.com/anchore/syft) | `/usr/local/bin` | [Github Releases](https://github.com/anchore/syft/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/anchore/syft/blob/HEAD/LICENSE) |
| [**valgrind**](https://valgrind.org) | `/snap/bin` | [snap](https://snapcraft.io/install/valgrind/ubuntu) | Linux | [GPL-2.0-or-later](https://valgrind.org/docs/manual/license.gpl.html) |
| [**wasm-bindgen**](https://github.com/rustwasm/wasm-bindgen) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rustwasm/wasm-bindgen/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/rustwasm/wasm-bindgen/blob/HEAD/LICENSE-APACHE) OR [MIT](https://github.com/rustwasm/wasm-bindgen/blob/HEAD/LICENSE-MIT) |
| [**wasm-pack**](https://github.com/rustwasm/wasm-pack) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rustwasm/wasm-pack/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/rustwasm/wasm-pack/blob/HEAD/LICENSE-APACHE) OR [MIT](https://github.com/rustwasm/wasm-pack/blob/HEAD/LICENSE-MIT) |
| [**wasmtime**](https://github.com/bytecodealliance/wasmtime) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/bytecodealliance/wasmtime/releases) | Linux, macOS, Windows | [Apache-2.0 WITH LLVM-exception](https://github.com/bytecodealliance/wasmtime/blob/HEAD/LICENSE) |
| [**xbuild**](https://github.com/rust-mobile/xbuild) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rust-mobile/xbuild/releases) | Linux, macOS, Windows | Apache-2.0 OR MIT |
Expand Down
157 changes: 98 additions & 59 deletions main.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,18 +54,26 @@ download_and_checksum() {
}
download_and_extract() {
local url="$1"
local checksum="$2"
local bin_dir="$3"
local bin_in_archive="$4" # path to bin in archive
shift
local checksum="$1"
shift
local bin_dir="$1"
shift
local bin_in_archive=("$@") # path to bin in archive
if [[ "${bin_dir}" == "${install_action_dir}/bin" ]]; then
init_install_action_bin_dir
fi

local installed_bin
# xbuild's binary name is "x", as opposed to the usual crate name
installed_bin=()
local tmp
case "${tool}" in
xbuild) installed_bin="${bin_dir}/x" ;;
*) installed_bin="${bin_dir}/$(basename "${bin_in_archive}")" ;;
# xbuild's binary name is "x", as opposed to the usual crate name
xbuild) installed_bin=("${bin_dir}/x") ;;
*)
for tmp in "${bin_in_archive[@]}"; do
installed_bin+=("${bin_dir}/$(basename "${tmp}")")
done
;;
esac

local tar_args=()
Expand Down Expand Up @@ -119,29 +127,35 @@ download_and_extract() {
download_and_checksum "${url}" "${checksum}"
if [[ ${#tar_args[@]} -gt 0 ]]; then
tar_args+=("tmp")
local components
components=$(tr <<<"${bin_in_archive}" -cd '/' | wc -c)
if [[ "${components}" != "0" ]]; then
tar_args+=(--strip-components "${components}")
fi
tar "${tar_args[@]}" -C "${bin_dir}" "${bin_in_archive}"
tar "${tar_args[@]}"
for tmp in "${bin_in_archive[@]}"; do
mv "${tmp}" "${bin_dir}/"
done
else
case "${url}" in
*.zip)
unzip -q tmp "${bin_in_archive#\./}"
mv "${bin_in_archive}" "${bin_dir}/"
for tmp in "${bin_in_archive[@]}"; do
mv "${tmp}" "${bin_dir}/"
done
;;
*)
for tmp in "${installed_bin[@]}"; do
mv tmp "${tmp}"
done
;;
*) mv tmp "${installed_bin}" ;;
esac
fi
)
rm -rf "${tmp_dir}"

case "${host_os}" in
linux | macos)
if [[ ! -x "${installed_bin}" ]]; then
chmod +x "${installed_bin}"
fi
for tmp in "${installed_bin[@]}"; do
if [[ ! -x "${tmp}" ]]; then
chmod +x "${tmp}"
fi
done
;;
esac
}
Expand Down Expand Up @@ -198,15 +212,31 @@ read_download_info() {
fi
checksum=$(call_jq <<<"${download_info}" -r '.checksum')
url=$(call_jq <<<"${download_info}" -r '.url')
local tmp
bin_in_archive=()
if [[ "${url}" == "null" ]]; then
local template
template=$(call_jq -r ".template.${host_platform}" "${manifest_dir}/${tool}.json")
url=$(call_jq <<<"${template}" -r '.url')
url="${url//\$\{version\}/${exact_version}}"
bin_in_archive=$(call_jq <<<"${template}" -r '.bin')
bin_in_archive="${bin_in_archive//\$\{version\}/${exact_version}}"
tmp=$(call_jq <<<"${template}" -r '.bin' | sed -E "s/\\$\\{version\\}/${exact_version}/g")
if [[ "${tmp}" == *"["* ]]; then
# shellcheck disable=SC2207
bin_in_archive=($(call_jq <<<"${template}" -r '.bin[]' | sed -E "s/\\$\\{version\\}/${exact_version}/g"))
fi
else
bin_in_archive=$(call_jq <<<"${download_info}" -r '.bin')
tmp=$(call_jq <<<"${download_info}" -r '.bin')
if [[ "${tmp}" == *"["* ]]; then
# shellcheck disable=SC2207
bin_in_archive=($(call_jq <<<"${download_info}" -r '.bin[]'))
fi
fi
if [[ ${#bin_in_archive[@]} -eq 0 ]]; then
if [[ "${tmp}" == "null" ]]; then
bin_in_archive=("${tool}${exe}")
else
bin_in_archive=("${tmp}")
fi
fi
if [[ "${rust_crate}" == "null" ]]; then
if [[ "${host_os}" == "windows" ]] || [[ ! -e /usr/local/bin ]]; then
Expand All @@ -217,17 +247,14 @@ read_download_info() {
else
bin_dir="${cargo_bin}"
fi
if [[ "${bin_in_archive}" == "null" ]]; then
bin_in_archive="${tool}${exe}"
fi
}
download_from_manifest() {
read_manifest "$@"
download_from_download_info "$@"
}
download_from_download_info() {
read_download_info "$@"
download_and_extract "${url}" "${checksum}" "${bin_dir}" "${bin_in_archive}"
download_and_extract "${url}" "${checksum}" "${bin_dir}" "${bin_in_archive[@]}"
}
install_cargo_binstall() {
local binstall_version
Expand Down Expand Up @@ -540,6 +567,7 @@ for tool in "${tools[@]}"; do
else
version="latest"
fi
installed_bin=()
case "${tool}" in
protoc)
info "installing ${tool}@${version}"
Expand Down Expand Up @@ -576,6 +604,7 @@ for tool in "${tools[@]}"; do
fi
)
rm -rf "${tmp_dir}"
installed_bin=("${tool}${exe}")
;;
valgrind)
info "installing ${tool}@${version}"
Expand All @@ -593,6 +622,7 @@ for tool in "${tools[@]}"; do
# Use snap to install the latest Valgrind
# https://snapcraft.io/install/valgrind/ubuntu
snap_install valgrind --classic
installed_bin=("${tool}${exe}")
;;
cargo-binstall)
case "${version}" in
Expand Down Expand Up @@ -651,41 +681,50 @@ for tool in "${tools[@]}"; do
;;
esac

case "${tool}" in
xbuild) tool_bin="x" ;;
*) tool_bin="${tool}" ;;
esac
installed_at=$(type -P "${tool_bin}${exe}" || echo "")
if [[ -n "${installed_at}" ]]; then
tool_bin="${tool_bin}${exe}"
else
tool_bin_stems=()
for tool_bin in "${installed_bin[@]}"; do
tool_bin=$(basename "${tool_bin}")
tool_bin_stem="${tool_bin%.exe}"
installed_at=$(type -P "${tool_bin}" || echo "")
fi
if [[ -n "${installed_at}" ]]; then
info "${tool} installed at ${installed_at}"
else
warn "${tool} should be installed at ${bin_dir:+"${bin_dir}/"}${tool_bin}${exe}; but ${tool_bin}${exe} not found in path"
fi
# cargo-udeps 0.1.30 and wasm-pack 0.12.0 do not support --version option.
case "${tool}" in
biome) rx "${tool_bin}" --version || true ;; # biome up to 1.2.2 exits with 1 on --version and --help
cargo-careful | cargo-machete) ;; # cargo-careful 0.3.4 and cargo-machete 0.5.0 do not support neither --version nor --help option.
cargo-*)
case "${tool}" in
cargo-valgrind) rx "${tool_bin}" "${tool#cargo-}" --help ;; # cargo-valgrind 2.1.0's --version option just calls cargo's --version option
*)
if ! rx "${tool_bin}" "${tool#cargo-}" --version; then
rx "${tool_bin}" "${tool#cargo-}" --help
fi
;;
esac
;;
*)
if ! rx "${tool_bin}" --version; then
rx "${tool_bin}" --help
fi
;;
esac
if [[ -z "${installed_at}" ]]; then
tool_bin="${tool_bin_stem}"
installed_at=$(type -P "${tool_bin}" || echo "")
fi
if [[ -n "${installed_at}" ]]; then
info "${tool_bin_stem} installed at ${installed_at}"
else
warn "${tool_bin_stem} should be installed at ${bin_dir:+"${bin_dir}/"}${tool_bin}${exe}; but ${tool_bin}${exe} not found in path"
fi
tool_bin_stems+=("${tool_bin_stem}")
done
for tool_bin_stem in "${tool_bin_stems[@]}"; do
# cargo-udeps 0.1.30 and wasm-pack 0.12.0 do not support --version flag.
case "${tool_bin_stem}" in
# biome up to 1.2.2 exits with 1 on both --version and --help flags.
# cargo-machete up to 0.6.0 does not support --version flag.
biome | cargo-machete) rx "${tool_bin_stem}" --version || true ;;
# these packages support neither --version nor --help flag.
cargo-careful | wasm-bindgen-test-runner) ;;
# wasm2es6js does not support --version flag and --help flag doesn't contains version info.
wasm2es6js) ;;
cargo-*)
case "${tool_bin_stem}" in
# cargo-valgrind 2.1.0's --version flag just calls cargo's --version flag
cargo-valgrind) rx "${tool_bin_stem}" "${tool_bin_stem#cargo-}" --help ;;
*)
if ! rx "${tool_bin_stem}" "${tool_bin_stem#cargo-}" --version; then
rx "${tool_bin_stem}" "${tool_bin_stem#cargo-}" --help
fi
;;
esac
;;
*)
if ! rx "${tool_bin_stem}" --version; then
rx "${tool_bin_stem}" --help
fi
;;
esac
done
echo
done

Expand Down
119 changes: 119 additions & 0 deletions manifests/wasm-bindgen.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions tools/codegen/base/wasm-bindgen.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"repository": "https://github.com/rustwasm/wasm-bindgen",
"tag_prefix": "",
"rust_crate": "wasm-bindgen-cli",
"version_range": ">= 0.2.88",
"asset_name": "wasm-bindgen-${version}-${rust_target}.tar.gz",
"bin": [
"wasm-bindgen-${version}-${rust_target}/wasm-bindgen-test-runner${exe}",
"wasm-bindgen-${version}-${rust_target}/wasm-bindgen${exe}",
"wasm-bindgen-${version}-${rust_target}/wasm2es6js${exe}"
],
"platform": {
"x86_64_linux_musl": {},
"x86_64_macos": {},
"x86_64_windows": {},
"aarch64_linux_gnu": {},
"aarch64_macos": {}
}
}

0 comments on commit 70fd2d4

Please sign in to comment.