Skip to content

Add wasm-bindgen #383

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Mar 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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": {}
}
}
Loading