View Raw Ebuild
# Copyright 2020-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit shell-completion
BUN_PN="${PN//-bin/}"
DESCRIPTION="Incredibly fast JavaScript runtime, bundler, test runner, and package manager"
HOMEPAGE="https://bun.sh"
LICENSE="MIT"
SLOT="0"
KEYWORDS="-* ~amd64 ~arm64"
IUSE="bash-completion cpu_flags_x86_avx2 debug fish-completion zsh-completion"
DEPEND="
bash-completion? ( >=app-shells/bash-completion-2.0 )
fish-completion? ( app-shells/fish )
zsh-completion? ( app-shells/zsh )
"
bun_bin_filename_prefix() {
local -r arch=$1
local -r elibc=$2
local -ir avx2=$3
local -ir debug=$4
local -a specifier
# -- Add CPU architecture.
case "${arch}" in
amd64) specifier+=('x64') ;;
arm64) specifier+=('aarch64') ;;
* ) die "Unsupported arch: '${arch}'" ;;
esac
# -- Add libc type.
case "${elibc}" in
musl ) specifier+=('musl') ;;
glibc) : ;;
* ) die "Unsupported libc: '${elibc}'" ;;
esac
# -- Add CPU features.
(( avx2 == 0 )) &&
specifier+=('baseline')
# -- Add debug type.
(( debug != 0 )) &&
specifier+=('profile')
# -- Construct string.
suffix="$(IFS='-'; echo "${specifier[*]}")"
echo "bun-linux-${suffix}"
}
BASE_URI="https://github.com/oven-sh/${BUN_PN}/releases/download/${BUN_PN}-v${PV}"
SRC_URI="
amd64? (
elibc_musl? (
cpu_flags_x86_avx2? (
debug? (
${BASE_URI}/$(bun_bin_filename_prefix amd64 musl 1 1).zip
-> ${PN}-${PV}-amd64-musl-profile.zip
)
!debug? (
${BASE_URI}/$(bun_bin_filename_prefix amd64 musl 1 0).zip
-> ${PN}-${PV}-amd64-musl.zip
)
)
!cpu_flags_x86_avx2? (
debug? (
${BASE_URI}/$(bun_bin_filename_prefix amd64 musl 0 1).zip
-> ${PN}-${PV}-amd64-musl-baseline-profile.zip
)
!debug? (
${BASE_URI}/$(bun_bin_filename_prefix amd64 musl 0 0).zip
-> ${PN}-${PV}-amd64-musl-baseline.zip
)
)
)
!elibc_musl? (
cpu_flags_x86_avx2? (
debug? (
${BASE_URI}/$(bun_bin_filename_prefix amd64 glibc 1 1).zip
-> ${PN}-${PV}-amd64-profile.zip
)
!debug? (
${BASE_URI}/$(bun_bin_filename_prefix amd64 glibc 1 0).zip
-> ${PN}-${PV}-amd64.zip
)
)
!cpu_flags_x86_avx2? (
debug? (
${BASE_URI}/$(bun_bin_filename_prefix amd64 glibc 0 1).zip
-> ${PN}-${PV}-amd64-baseline-profile.zip
)
!debug? (
${BASE_URI}/$(bun_bin_filename_prefix amd64 glibc 0 0).zip
-> ${PN}-${PV}-amd64-baseline.zip
)
)
)
)
arm64? (
elibc_musl? (
debug? (
${BASE_URI}/$(bun_bin_filename_prefix arm64 musl 1 1).zip
-> ${PN}-${PV}-arm64-musl-profile.zip
)
!debug? (
${BASE_URI}/$(bun_bin_filename_prefix arm64 musl 1 0).zip
-> ${PN}-${PV}-arm64-musl.zip
)
)
!elibc_musl? (
debug? (
${BASE_URI}/$(bun_bin_filename_prefix arm64 glibc 1 1).zip
-> ${PN}-${PV}-arm64-profile.zip
)
!debug? (
${BASE_URI}/$(bun_bin_filename_prefix arm64 glibc 1 0).zip
-> ${PN}-${PV}-arm64.zip
)
)
)
"
BDEPEND="app-arch/unzip"
QA_PREBUILT="*"
bun_bin_dirname() {
local elibc
if use elibc_glibc; then
elibc='glibc'
elif use elibc_musl; then
elibc='musl'
else
die 'Unsupported libc'
fi
local -i avx2=0
if use cpu_flags_x86_avx2 \
|| [[ "${ARCH}" == 'arm64' ]]; then
(( avx2 = 1 ))
fi
local -i debug=0
use debug &&
(( debug = 1 ))
bun_bin_filename_prefix "${ARCH}" "${elibc}" "${avx2}" "${debug}"
}
src_unpack() {
unpack "${A}"
mv "$(bun_bin_dirname)" "${P}"
}
src_compile() {
local bun_bin='bun'
if use debug; then
bun_bin='bun-profile'
fi
if use bash-completion; then
SHELL=bash "./${bun_bin}" completions > bun.bash ||
die 'Unable to generate bash completions'
fi
if use fish-completion; then
SHELL=fish "./${bun_bin}" completions > bun.fish ||
die 'Unable to generate fish completions'
fi
if use zsh-completion; then
SHELL=zsh "./${bun_bin}" completions > bun.zsh ||
die 'Unable to generate zsh completions'
fi
}
src_install() {
exeinto /usr/bin
if use debug; then
doexe bun-profile
dosym /usr/bin/bun-profile /usr/bin/bun
dosym /usr/bin/bun-profile /usr/bin/bunx
else
doexe bun
dosym /usr/bin/bun /usr/bin/bunx
fi
use bash-completion &&
newbashcomp bun.bash "${BUN_PN}"
use fish-completion &&
newfishcomp bun.fish bun.fish
use zsh-completion &&
newzshcomp bun.zsh "_${BUN_PN}"
}