dev-lang/spidermonkey: add 140.0

Had to drop our custom patch (0007-bgo-821091-dont-depend-on-llvm-objdump.patch)
that got rid of hardcoded llvm-objdump dependency, but that logic is now split
to at least two files (might be more) and I'm not sure if it even works with
the way rust.eclass handles llvm dependency in Gentoo now. Hence needs more
investigation and testing before I'll spend time updating the patch.

Signed-off-by: Joonas Niilola <juippis@gentoo.org>
This commit is contained in:
Joonas Niilola
2025-07-01 19:10:03 +03:00
parent eb40def5b8
commit 7424902bd9
3 changed files with 492 additions and 0 deletions

View File

@@ -7,5 +7,8 @@ DIST firefox-128.12.0esr.source.tar.xz 560934320 BLAKE2B ba87d758e9f0d6803db2090
DIST firefox-128.8.0esr.source.tar.xz 563554116 BLAKE2B 3fdfa2539b42a6a659d05ef9ad60d3dd7a0097abf3c5038150316d775e3eb864056a56edc58ae4e49ca36b3ccf2f05d68a07f8493a7649388e340cd81640e584 SHA512 7c0ef22bc14d4fa248cbae14d629174c9c967f891f4525f609760595f5a108aedf7dd804d1b63b97ec268613fa98378f4742a9b6ab562454351cf21175fdb802
DIST firefox-128esr-patches-09.tar.xz 17976 BLAKE2B 78f64f5086951f7bf2b304c1148154647aef5c4e699257cba5e94a83d8d8c159a591d0b2a7a5f8bc0f8ec28d5eae66a0783b45f94b4ef713282a6f88e46c75be SHA512 159d8c94af0f90c10baf7446e573a37397b3be7103e7001fb6b38845a28a41793c21ad24c23e0b3cfc4daa2c3a6040ef701f612693c9f4dfff8534f82e7b18a1
DIST firefox-128esr-patches-11.tar.xz 18696 BLAKE2B 0f35eaa29f1daf9beb09c7303b3e92676eea84337683b8f7393e8b52e36ec1f37683a050e1e8d7939ebb1bdc190acaac887bebe88812c1b64785e38980f18be3 SHA512 04bf8bbf3c4e7901a6681fec66f179f797615613be838cf35a4b03cd9a347656b1264524ac7355f0c3978a5e740ddc5dc438610e5cae6ffcad73a8988cf0e572
DIST firefox-139-patches-03.tar.xz 11536 BLAKE2B a7610d1348a2a4d02305c8d694a1648997040c69cb1445b901fe456045d0b1a73f28b0102ed03d34f70d8cc1ea9ab0245599a104b0063c7fb0dcb5a8fdd6f60b SHA512 4733d34a842d525824fbcf6ef5d8f33e26b4f37a16aa87043427eaaf1e0665aa257cb8487bd692e4fd095c2a78553ab3f0213208124c3455e534394576fb5614
DIST firefox-140.0esr.source.tar.xz 628567364 BLAKE2B c53de3ef536acbd72813ba4a8087f3cb363e380f16570ad2840db60235d55c7b2706ce9d694d029e8a2304bfb47a50cf8fa7a169a9c0631b9e7533ea4af6ad09 SHA512 12e40b81627ac4b44d43edb94aa1cd2a6c50bb49503e3b1b6f80259eed197ecb5847a0f0520ad204340dfe0ab7b5a4aa1ced2bc21ee0258471e8fdb121f6aaf4
DIST spidermonkey-115-patches-02.tar.xz 4896 BLAKE2B f78d9804c1427b45d6fda496b4991ec6f672dec9ce031ed57a2920fa1968c942a235f46e40166c8ab8d731a1963f322d34bb2f6984133179175e6f7376d27d13 SHA512 11fd01152d1e7b8ca89bf628076e1f4fb4f1ba6c9dc0f9dd544252495c580c04e4d5ffc238d5587f9e993aa91a47828333564ca55f60e008bd370089cd07d2e6
DIST spidermonkey-128-patches-03.tar.xz 3636 BLAKE2B 99517642e255762c57a9e65f4c4c4107b8d6a1630dd2e68dea4527ac0e5d70fc435122e6b4068a8223c9b2a6e06503c242659d1895b9a2ff6d75212e9c917498 SHA512 71e059861318073f09f7892094e6d44ec04385385086b2e126de8e4f80cff99410bbfd352a10f325e950441c398f7ba0ac82c861ce417c10a37ab5ea063c6be2
DIST spidermonkey-140-patches-01.tar.xz 3324 BLAKE2B 551566e4e150dbe5cbe5400e27751a0da878e3cefab2cdb38d72f99b19b2403b3786ea2230b4477fba8d3e6799743a51652de5c0136811b0213134ce506e5534 SHA512 63327436c51b82c307a883a46c147ad8f3b9ea5b2d4c18b8c8cb475fe1c2c25e4d00af1e6c6c83899089df88794962725125c8572dbb31e201c2298bb3ad30c9

View File

@@ -0,0 +1,22 @@
non262/Date/15.9.5.7.js
non262/Intl/Collator/big5han-gb2312han.js
non262/Intl/Collator/implicithan.js
non262/Intl/DateTimeFormat/day-period-hour-cycle.js
non262/Intl/DateTimeFormat/formatRange-timeZone-offset.js
non262/Intl/DateTimeFormat/formatRange-timeZoneName-matches-format.js
non262/Intl/DateTimeFormat/formatRange-timeZoneName.js
non262/Intl/DateTimeFormat/fractional-second-digits-append-item.js
non262/Intl/DateTimeFormat/timeZone_links.js
non262/Intl/DateTimeFormat/timeZone_version.js
non262/Intl/available-locales-resolved.js
non262/Intl/available-locales-supported.js
non262/Intl/supportedValuesOf-timeZones-canonical.js
non262/Temporal/Intl/consistent-dates.js
non262/Temporal/ZonedDateTime/zones-and-links.js
test262/intl402/Temporal/ZonedDateTime/prototype/getTimeZoneTransition/nanoseconds-subtracted-or-added-at-dst-transition.js
test262/intl402/Temporal/ZonedDateTime/prototype/getTimeZoneTransition/result-type.js
test262/intl402/Temporal/ZonedDateTime/prototype/getTimeZoneTransition/specific-tzdb-values.js
test262/intl402/Temporal/ZonedDateTime/prototype/getTimeZoneTransition/transition-at-instant-boundaries.js
test262/intl402/Temporal/ZonedDateTime/prototype/getTimeZoneTransition/transitions-close-together.js
test262/staging/Intl402/Temporal/old/zoneddatetime-dst-corner-cases.js
test262/staging/sm/Temporal/ZonedDateTime/zones-and-links.js

View File

@@ -0,0 +1,467 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI="8"
FIREFOX_PATCHSET="firefox-139-patches-03.tar.xz"
SPIDERMONKEY_PATCHSET="spidermonkey-140-patches-01.tar.xz"
LLVM_COMPAT=( 19 20 )
RUST_NEEDS_LLVM=1
RUST_MIN_VER=1.82.0
PYTHON_COMPAT=( python3_{11..13} )
PYTHON_REQ_USE="ncurses,ssl,xml(+)"
WANT_AUTOCONF="2.1"
inherit check-reqs flag-o-matic llvm-r1 multiprocessing python-any-r1 rust toolchain-funcs
MY_PN="mozjs"
MY_PV="${PV/_pre*}"
MY_MAJOR=$(ver_cut 1)
MOZ_ESR=yes
MOZ_PV=${PV}
MOZ_PV_SUFFIX=
if [[ ${PV} =~ (_(alpha|beta|rc).*)$ ]] ; then
MOZ_PV_SUFFIX=${BASH_REMATCH[1]}
# Convert the ebuild version to the upstream Mozilla version
MOZ_PV="${MOZ_PV/_alpha/a}" # Handle alpha for SRC_URI
MOZ_PV="${MOZ_PV/_beta/b}" # Handle beta for SRC_URI
MOZ_PV="${MOZ_PV%%_rc*}" # Handle rc for SRC_URI
fi
if [[ -n ${MOZ_ESR} ]] ; then
# ESR releases have slightly different version numbers
MOZ_PV="${MOZ_PV}esr"
fi
MOZ_PN="firefox"
MOZ_P="${MOZ_PN}-${MOZ_PV}"
MOZ_PV_DISTFILES="${MOZ_PV}${MOZ_PV_SUFFIX}"
MOZ_P_DISTFILES="${MOZ_PN}-${MOZ_PV_DISTFILES}"
MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}"
if [[ ${PV} == *_rc* ]] ; then
MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/candidates/${MOZ_PV}-candidates/build${PV##*_rc}"
fi
PATCH_URIS=(
https://dev.gentoo.org/~juippis/mozilla/patchsets/${FIREFOX_PATCHSET}
https://dev.gentoo.org/~juippis/mozilla/patchsets/${SPIDERMONKEY_PATCHSET}
)
DESCRIPTION="Mozilla's JavaScript engine written in C and C++"
HOMEPAGE="https://spidermonkey.dev https://firefox-source-docs.mozilla.org/js/index.html"
SRC_URI="${MOZ_SRC_BASE_URI}/source/${MOZ_P}.source.tar.xz -> ${MOZ_P_DISTFILES}.source.tar.xz
${PATCH_URIS[@]}"
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
LICENSE="MPL-2.0"
SLOT="$(ver_cut 1)"
IUSE="clang cpu_flags_arm_neon debug +jit test"
#RESTRICT="test"
RESTRICT="!test? ( test )"
BDEPEND="${PYTHON_DEPS}
$(llvm_gen_dep '
clang? (
llvm-core/clang:${LLVM_SLOT}
llvm-core/lld:${LLVM_SLOT}
llvm-core/llvm:${LLVM_SLOT}
)
')
>=dev-util/cbindgen-0.27.0
virtual/pkgconfig
test? (
$(python_gen_any_dep 'dev-python/six[${PYTHON_USEDEP}]')
)"
DEPEND=">=dev-libs/icu-76.1:=
>=dev-libs/nspr-4.35
sys-libs/readline:0=
sys-libs/zlib"
RDEPEND="${DEPEND}"
S="${WORKDIR}/firefox-${PV%_*}"
llvm_check_deps() {
if use clang ; then
if ! has_version -b "llvm-core/clang:${LLVM_SLOT}" ; then
einfo "llvm-core/clang:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
return 1
fi
if ! has_version -b "llvm-core/llvm:${LLVM_SLOT}" ; then
einfo "llvm-core/llvm:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
return 1
fi
if ! tc-ld-is-mold ; then
if ! has_version -b "llvm-core/lld:${LLVM_SLOT}" ; then
einfo "llvm-core/lld:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
return 1
fi
fi
fi
einfo "Using LLVM slot ${LLVM_SLOT} to build" >&2
}
mozconfig_add_options_ac() {
debug-print-function ${FUNCNAME} "$@"
if [[ ${#} -lt 2 ]] ; then
die "${FUNCNAME} requires at least two arguments"
fi
local reason=${1}
shift
local option
for option in ${@} ; do
echo "ac_add_options ${option} # ${reason}" >>${MOZCONFIG}
done
}
mozconfig_add_options_mk() {
debug-print-function ${FUNCNAME} "$@"
if [[ ${#} -lt 2 ]] ; then
die "${FUNCNAME} requires at least two arguments"
fi
local reason=${1}
shift
local option
for option in ${@} ; do
echo "mk_add_options ${option} # ${reason}" >>${MOZCONFIG}
done
}
mozconfig_use_enable() {
debug-print-function ${FUNCNAME} "$@"
if [[ ${#} -lt 1 ]] ; then
die "${FUNCNAME} requires at least one arguments"
fi
local flag=$(use_enable "${@}")
mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}"
}
python_check_deps() {
if use test ; then
python_has_version "dev-python/six[${PYTHON_USEDEP}]"
fi
}
pkg_pretend() {
if use test ; then
CHECKREQS_DISK_BUILD="4400M"
else
CHECKREQS_DISK_BUILD="4300M"
fi
check-reqs_pkg_pretend
}
pkg_setup() {
# Get LTO from environment; export after this phase for use in src_configure (etc)
use_lto=no
if [[ ${MERGE_TYPE} != binary ]] ; then
if tc-is-lto; then
use_lto=yes
# LTO is handled via configure
filter-lto
fi
if [[ ${use_lto} = yes ]]; then
# -Werror=lto-type-mismatch -Werror=odr are going to fail with GCC,
# bmo#1516758, bgo#942288
filter-flags -Werror=lto-type-mismatch -Werror=odr
fi
if use test ; then
CHECKREQS_DISK_BUILD="4400M"
else
CHECKREQS_DISK_BUILD="4300M"
fi
check-reqs_pkg_setup
llvm-r1_pkg_setup
rust_pkg_setup
python-any-r1_pkg_setup
# Build system is using /proc/self/oom_score_adj, bug #604394
addpredict /proc/self/oom_score_adj
if ! mountpoint -q /dev/shm ; then
# If /dev/shm is not available, configure is known to fail with
# a traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py
ewarn "/dev/shm is not mounted -- expect build failures!"
fi
# Ensure we use C locale when building, bug #746215
export LC_ALL=C
fi
export use_lto
}
src_prepare() {
if [[ ${use_lto} == "yes" ]]; then
rm -v "${WORKDIR}"/firefox-patches/*-LTO-Only-enable-LTO-*.patch || die
fi
# Workaround for bgo #915651,915651,929013 on musl
if use elibc_glibc ; then
rm -v "${WORKDIR}"/firefox-patches/*bgo-748849-RUST_TARGET_override.patch || die
fi
eapply "${WORKDIR}"/firefox-patches
eapply "${WORKDIR}"/spidermonkey-patches
default
# Make cargo respect MAKEOPTS
export CARGO_BUILD_JOBS="$(makeopts_jobs)"
# Workaround for bgo #915651,915651,929013 on musl
if ! use elibc_glibc ; then
if use amd64 ; then
export RUST_TARGET="x86_64-unknown-linux-musl"
elif use x86 ; then
export RUST_TARGET="i686-unknown-linux-musl"
elif use arm64 ; then
export RUST_TARGET="aarch64-unknown-linux-musl"
elif use ppc64 ; then
export RUST_TARGET="powerpc64le-unknown-linux-musl"
else
die "Unknown musl chost, please post your rustc -vV along with emerge --info on Gentoo's bug #915651"
fi
fi
# sed-in toolchain prefix
sed -i \
-e "s/objdump/${CHOST}-objdump/" \
python/mozbuild/mozbuild/configure/check_debug_ranges.py ||
die "sed failed to set toolchain prefix"
einfo "Removing pre-built binaries ..."
find third_party -type f \( -name '*.so' -o -name '*.o' \) -print -delete || die
# Create build dir
BUILD_DIR="${WORKDIR}/${PN}_build"
mkdir -p "${BUILD_DIR}" || die
}
src_configure() {
# Show flags set at the beginning
einfo "Current BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
einfo "Current CFLAGS: ${CFLAGS}"
einfo "Current CXXFLAGS: ${CXXFLAGS}"
einfo "Current LDFLAGS: ${LDFLAGS}"
einfo "Current RUSTFLAGS: ${RUSTFLAGS}"
local have_switched_compiler=
if use clang ; then
# Force clang
einfo "Enforcing the use of clang due to USE=clang ..."
local version_clang=$(clang --version 2>/dev/null | grep -F -- 'clang version' | awk '{ print $3 }')
[[ -n ${version_clang} ]] && version_clang=$(ver_cut 1 "${version_clang}")
[[ -z ${version_clang} ]] && die "Failed to read clang version!"
if tc-is-gcc; then
have_switched_compiler=yes
fi
AR=llvm-ar
CC=${CHOST}-clang-${version_clang}
CXX=${CHOST}-clang++-${version_clang}
NM=llvm-nm
RANLIB=llvm-ranlib
READELF=llvm-readelf
OBJDUMP=llvm-objdump
elif ! use clang && ! tc-is-gcc ; then
# Force gcc
have_switched_compiler=yes
einfo "Enforcing the use of gcc due to USE=-clang ..."
AR=gcc-ar
CC=${CHOST}-gcc
CXX=${CHOST}-g++
NM=gcc-nm
RANLIB=gcc-ranlib
READELF=readelf
OBJDUMP=objdump
fi
if [[ -n "${have_switched_compiler}" ]] ; then
# Because we switched active compiler we have to ensure
# that no unsupported flags are set
strip-unsupported-flags
fi
# Ensure we use correct toolchain,
# AS is used in a non-standard way by upstream, #bmo1654031
export HOST_CC="$(tc-getBUILD_CC)"
export HOST_CXX="$(tc-getBUILD_CXX)"
export AS="$(tc-getCC) -c"
tc-export CC CXX LD AR AS NM OBJDUMP RANLIB READELF PKG_CONFIG
# Pass the correct toolchain paths through cbindgen
if tc-is-cross-compiler ; then
export BINDGEN_CFLAGS="${SYSROOT:+--sysroot=${ESYSROOT}} --target=${CHOST} ${BINDGEN_CFLAGS-}"
fi
# ../python/mach/mach/mixin/process.py fails to detect SHELL
export SHELL="${EPREFIX}/bin/bash"
# Set state path
export MOZBUILD_STATE_PATH="${BUILD_DIR}"
# Set MOZCONFIG
export MOZCONFIG="${S}/.mozconfig"
# Initialize MOZCONFIG
mozconfig_add_options_ac '' --enable-project=js
mozconfig_add_options_ac 'Gentoo default' \
--host="${CBUILD:-${CHOST}}" \
--target="${CHOST}" \
--disable-ctype \
--disable-jemalloc \
--disable-smoosh \
--disable-strip \
--enable-packed-relative-relocs \
--enable-readline \
--enable-release \
--enable-shared-js \
--libdir="${EPREFIX}/usr/$(get_libdir)" \
--prefix="${EPREFIX}/usr" \
--with-intl-api \
--with-system-icu \
--with-system-nspr \
--with-system-zlib \
--with-toolchain-prefix="${CHOST}-"
mozconfig_use_enable debug
mozconfig_use_enable jit
mozconfig_use_enable test tests
if use debug ; then
mozconfig_add_options_ac '+debug' --disable-optimize
mozconfig_add_options_ac '+debug' --enable-debug-symbols
mozconfig_add_options_ac '+debug' --enable-real-time-tracing
else
mozconfig_add_options_ac '-debug' --enable-optimize
mozconfig_add_options_ac '-debug' --disable-debug-symbols
mozconfig_add_options_ac '-debug' --disable-real-time-tracing
fi
# We always end up disabling this at some point due to newer rust versions. bgo#933372
mozconfig_add_options_ac '--disable-rust-simd' --disable-rust-simd
# Modifications to better support ARM, bug 717344
if use cpu_flags_arm_neon ; then
mozconfig_add_options_ac '+cpu_flags_arm_neon' --with-fpu=neon
if ! tc-is-clang ; then
# thumb options aren't supported when using clang, bug 666966
mozconfig_add_options_ac '+cpu_flags_arm_neon' --with-thumb=yes
mozconfig_add_options_ac '+cpu_flags_arm_neon' --with-thumb-interwork=no
fi
fi
# Tell build system that we want to use LTO
if [[ ${use_lto} == "yes" ]] ; then
if use clang ; then
if tc-ld-is-mold ; then
mozconfig_add_options_ac '+lto' --enable-linker=mold
else
mozconfig_add_options_ac '+lto' --enable-linker=lld
fi
mozconfig_add_options_ac '+lto' --enable-lto=cross
else
mozconfig_add_options_ac '+lto' --enable-linker=bfd
mozconfig_add_options_ac '+lto' --enable-lto=full
fi
fi
# LTO flag was handled via configure
filter-lto
# Pass MAKEOPTS to build system
export MOZ_MAKE_FLAGS="${MAKEOPTS}"
# Use system's Python environment
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none"
export PIP_NETWORK_INSTALL_RESTRICTED_VIRTUALENVS=mach
# Disable notification when build system has finished
export MOZ_NOSPAM=1
# Portage sets XARGS environment variable to "xargs -r" by default which
# breaks build system's check_prog() function which doesn't support arguments
mozconfig_add_options_ac 'Gentoo default' "XARGS=${EPREFIX}/usr/bin/xargs"
# Set build dir
mozconfig_add_options_mk 'Gentoo default' "MOZ_OBJDIR=${BUILD_DIR}"
# Show flags we will use
einfo "Build BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
einfo "Build CFLAGS: ${CFLAGS}"
einfo "Build CXXFLAGS: ${CXXFLAGS}"
einfo "Build LDFLAGS: ${LDFLAGS}"
einfo "Build RUSTFLAGS: ${RUSTFLAGS}"
./mach configure || die
}
src_compile() {
./mach build --verbose || die
}
src_test() {
if "${BUILD_DIR}/js/src/js" -e 'print("Hello world!")'; then
einfo "Smoke-test successful, continuing with full test suite"
else
die "Smoke-test failed: did interpreter initialization fail?"
fi
cp "${FILESDIR}"/spidermonkey-${SLOT}-known-test-failures.txt "${T}"/known_test_failures.list || die
./mach jstests --exclude-file="${T}"/known_test_failures.list || die
}
src_install() {
cd "${BUILD_DIR}" || die
default
# fix soname links
pushd "${ED}"/usr/$(get_libdir) &>/dev/null || die
mv lib${MY_PN}-${MY_MAJOR}.so lib${MY_PN}-${MY_MAJOR}.so.0.0.0 || die
ln -s lib${MY_PN}-${MY_MAJOR}.so.0.0.0 lib${MY_PN}-${MY_MAJOR}.so.0 || die
ln -s lib${MY_PN}-${MY_MAJOR}.so.0 lib${MY_PN}-${MY_MAJOR}.so || die
popd &>/dev/null || die
# remove unneeded files
rm \
"${ED}"/usr/bin/js${MY_MAJOR}-config \
"${ED}"/usr/$(get_libdir)/libjs_static.ajs || die
# fix permissions
chmod -x \
"${ED}"/usr/$(get_libdir)/pkgconfig/*.pc \
"${ED}"/usr/include/mozjs-${MY_MAJOR}/js-config.h || die
}