# Copyright 2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 inherit shell-completion DESCRIPTION="Fast all-in-one JavaScript runtime, bundler, test runner, and package manager" HOMEPAGE="https://bun.com/ https://github.com/oven-sh/bun" if [[ ${PV} != *9999* ]]; then MY_BASE_URI="https://github.com/oven-sh/bun/releases/download/bun-v${PV}" SRC_URI=" amd64? ( cpu_flags_x86_avx2? ( elibc_glibc? ( ${MY_BASE_URI}/bun-linux-x64.zip -> ${P}-amd64.zip ) elibc_musl? ( ${MY_BASE_URI}/bun-linux-x64-musl.zip -> ${P}-amd64-musl.zip ) ) !cpu_flags_x86_avx2? ( elibc_glibc? ( ${MY_BASE_URI}/bun-linux-x64-baseline.zip -> ${P}-amd64-baseline.zip ) elibc_musl? ( ${MY_BASE_URI}/bun-linux-x64-musl-baseline.zip -> ${P}-amd64-musl-baseline.zip ) ) ) arm64? ( elibc_glibc? ( ${MY_BASE_URI}/bun-linux-aarch64.zip -> ${P}-arm64.zip ) elibc_musl? ( ${MY_BASE_URI}/bun-linux-aarch64-musl.zip -> ${P}-arm64-musl.zip ) ) " KEYWORDS="~amd64 ~arm64" fi S="${WORKDIR}" LICENSE="MIT" SLOT="0" IUSE="cpu_flags_x86_avx2" BDEPEND="app-arch/unzip" if [[ ${PV} == *9999* ]]; then BDEPEND+=" net-misc/curl" PROPERTIES="live" RESTRICT="mirror network-sandbox strip test" else RESTRICT="strip test" fi QA_PREBUILT="usr/bin/bun" src_unpack() { if [[ ${PV} != *9999* ]]; then default return fi local suffix="" candidates=() case ${ARCH} in amd64) use elibc_musl && suffix="-musl" if use cpu_flags_x86_avx2; then candidates=( "x64${suffix}" "x64${suffix}-baseline" ) else candidates=( "x64${suffix}-baseline" ) fi ;; arm64) use elibc_musl && suffix="-musl" candidates=( "aarch64${suffix}" ) ;; *) die "Unsupported architecture: ${ARCH}" ;; esac local candidate archive="${T}/bun.zip" for candidate in "${candidates[@]}"; do einfo "Trying Bun canary artifact for linux-${candidate}" if curl --fail --location --retry 3 --show-error --silent \ -o "${archive}" \ "https://github.com/oven-sh/bun/releases/download/canary/bun-linux-${candidate}.zip"; then unzip -q "${archive}" -d "${WORKDIR}" || die return fi done die "No Bun canary artifact is currently available for ${ARCH}" } src_prepare() { default local binaries=( "${WORKDIR}"/bun-linux-*/bun ) [[ -x ${binaries[0]} ]] || die "Unable to locate the Bun executable" [[ ${#binaries[@]} -eq 1 ]] || die "Found multiple Bun executables" cp "${binaries[0]}" "${S}/bun" || die local shell for shell in bash fish zsh; do env HOME="${T}" SHELL=${shell} "${S}/bun" completions ${shell} \ > "${T}/bun.${shell}" || die "Failed to generate ${shell} completion" done } src_install() { dobin bun dosym bun /usr/bin/bunx newbashcomp "${T}/bun.bash" bun newfishcomp "${T}/bun.fish" bun.fish newzshcomp "${T}/bun.zsh" _bun }