diff --git a/lang/bun/Makefile b/lang/bun/Makefile index 5d90e89980f5..7d149bd21b3c 100644 --- a/lang/bun/Makefile +++ b/lang/bun/Makefile @@ -1,246 +1,254 @@ PORTNAME= bun DISTVERSIONPREFIX= bun-v -DISTVERSION= 1.3.13-93 -DISTVERSIONSUFFIX= -g146a674cf6 +DISTVERSION= 1.3.14 CATEGORIES= lang MASTER_SITES= GH \ https://github.com/oven-sh/zig/releases/download/autobuild-04e7f6ac1e009525bc00934f20199c68f04e0a24/:ovenzig \ https://github.com/oven-sh/WebKit/releases/download/autobuild-${WEBKIT_VERSION}/:webkit \ https://nodejs.org/dist/v${NODE_VERSION}/:nodejshdr \ LOCAL/yuri/:bootstrap DISTFILES= bootstrap-x86_64-linux-musl.zip:ovenzig \ bun-webkit-freebsd-amd64.tar.gz:webkit \ node-v${NODE_VERSION}-headers.tar.gz:nodejshdr \ - bun-1.3.13-93-bootstrap:bootstrap + bun-1.3.13-93-bootstrap:bootstrap \ + bun-node-modules-${DISTVERSION}.tar.gz:bootstrap \ + bun-dep-tarballs-${DISTVERSION}.tar.gz:bootstrap \ + bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz:bootstrap DIST_SUBDIR= ${PORTNAME} # Only auto-extract the GitHub source tarball; everything else is handled in post-extract. EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} MAINTAINER= yuri@FreeBSD.org COMMENT= JavaScript runtime, bundler, test runner, and package manager WWW= https://bun.com/ \ https://github.com/oven-sh/bun LICENSE= LGPL20 ONLY_FOR_ARCHS= amd64 ONLY_FOR_ARCHS_REASON= bootstrap binary is only available for amd64 for now # do-fetch requires npm (node_modules build) and cargo (lolhtml vendor) FETCH_DEPENDS= ${LOCALBASE}/bin/npm:www/npm-node24 \ git:devel/git \ cargo:lang/rust \ ${LOCALBASE}/llvm21/bin/clang++:devel/llvm21 \ cmake:devel/cmake-core \ ninja:devel/ninja \ ${LOCALBASE}/bin/node:www/node24 BUILD_DEPENDS= ${LOCALBASE}/llvm21/bin/clang++:devel/llvm21 \ cmake:devel/cmake-core \ git:devel/git \ ninja:devel/ninja \ cargo:lang/rust \ ${LOCALBASE}/bin/node:www/node24 \ ${LOCALBASE}/bin/npm:www/npm-node24 TEST_DEPENDS= bash:shells/bash USES= shebangfix USE_GITHUB= yes GH_ACCOUNT= oven-sh SHEBANG_FILES= test/regression/issue/18239/data-generator.sh # WebKit/JavaScriptCore FreeBSD prebuilt WEBKIT_VERSION= bdf6aab38a9c6f99df3fd1486406ab6b74180fbb WEBKIT_SHORT= bdf6aab38a9c6f99 # Node.js headers (official tarball from nodejs.org; do-fetch trims unused dirs) NODE_VERSION= 24.3.0 # Custom tarballs are built by do-fetch and stored in DD. # They are NOT listed in DISTFILES so checksum phase does not verify them. # Dep tarball cache names and their upstream GitHub URLs. # Names are {depname}-{sha256(url)[0:16]}.tar.gz (computed by bun's fetch-cli.ts). # Used by do-fetch to pre-populate the bun dep tarballs cache. _BUN_DEP_TARBALLS= \ boringssl-5e15ff9594809574.tar.gz:https://github.com/oven-sh/boringssl/archive/0c5fce43b7ed5eb6001487ee48ac65766f5ddcd1.tar.gz \ brotli-723494d4c3a9902a.tar.gz:https://github.com/google/brotli/archive/v1.1.0.tar.gz \ cares-4e43539b43c0f4ae.tar.gz:https://github.com/c-ares/c-ares/archive/3ac47ee46edd8ea40370222f91613fc16c434853.tar.gz \ hdrhistogram-97084f213075a65e.tar.gz:https://github.com/HdrHistogram/HdrHistogram_c/archive/be60a9987ee48d0abf0d7b6a175bad8d6c1585d1.tar.gz \ - highway-a10c8937e1b920ad.tar.gz:https://github.com/google/highway/archive/ac0d5d297b13ab1b89f48484fc7911082d76a93f.tar.gz \ + highway-b2dcc6002e95cc47.tar.gz:https://github.com/google/highway/archive/2607d3b5b0113992fe84d3848859eae13b3b52c1.tar.gz \ libarchive-4296b191210d6b1b.tar.gz:https://github.com/libarchive/libarchive/archive/ded82291ab41d5e355831b96b0e1ff49e24d8939.tar.gz \ libdeflate-ce0e2d9805b30dcc.tar.gz:https://github.com/ebiggers/libdeflate/archive/c8c56a20f8f621e6a966b716b31f1dedab6a41e3.tar.gz \ + libjpeg-turbo-297099166a01f75e.tar.gz:https://github.com/libjpeg-turbo/libjpeg-turbo/archive/e352b02f794f701407b39af08576035ba3360d60.tar.gz \ + libspng-e6aca86c593b51ad.tar.gz:https://github.com/randy408/libspng/archive/fb768002d4288590083a476af628e51c3f1d47cd.tar.gz \ + libwebp-2ced709f169b40bd.tar.gz:https://github.com/webmproject/libwebp/archive/b7e29b9d75bd31422b00c2a446d49d7af06c328d.tar.gz \ lolhtml-929339b1d898e66b.tar.gz:https://github.com/cloudflare/lol-html/archive/77127cd2b8545998756e8d64e36ee2313c4bb312.tar.gz \ lshpack-73e0c55d12ea4fc2.tar.gz:https://github.com/litespeedtech/ls-hpack/archive/8905c024b6d052f083a3d11d0a169b3c2735c8a1.tar.gz \ - mimalloc-9e61bdd994e99463.tar.gz:https://github.com/oven-sh/mimalloc/archive/dbbb9a0819d00d521f9f58ad4d0a336efa4ce53a.tar.gz \ + lsqpack-ceeb8e315778b938.tar.gz:https://github.com/litespeedtech/ls-qpack/archive/1e9c5b8e59f8161c54f168a570c8bfdc59ded0c3.tar.gz \ + lsquic-d3ef6cf1fbedd7f9.tar.gz:https://github.com/litespeedtech/lsquic/archive/3181911301b1aa4f54c1ed690901abc674ee08fb.tar.gz \ + mimalloc-4a1c4f1f45e31b88.tar.gz:https://github.com/oven-sh/mimalloc/archive/f15aecb94fc8096008bf87b90c53ed682026914a.tar.gz \ picohttpparser-fad59b16ad4752cc.tar.gz:https://github.com/h2o/picohttpparser/archive/066d2b1e9ab820703db0837a7255d92d30f0c9f5.tar.gz \ + tinycc-2f1f629056328c7b.tar.gz:https://github.com/oven-sh/tinycc/archive/12882eee073cfe5c7621bcfadf679e1372d4537b.tar.gz \ zlib-655c6ecdb6fc9cd5.tar.gz:https://github.com/zlib-ng/zlib-ng/archive/12731092979c6d07f42da27da673a9f6c7b13586.tar.gz \ zstd-e010993a24072468.tar.gz:https://github.com/facebook/zstd/archive/f8745da6ff1ad1e7bab384bd1f9d742439278e99.tar.gz DD= ${DISTDIR}/${DIST_SUBDIR} BUN_CACHE_DIR= ${WRKDIR}/bun-cache BUN_ZIG_DIR= ${WRKDIR}/oven-zig BUN_BUILD_DIR= ${WRKSRC}/build/release PLIST_FILES= bin/${PORTNAME} # do-fetch: download the standard distfiles, then build the 3 custom archives # (node_modules, dep tarballs, cargo vendor) if they are not already cached. # All files land in ${DD} so make checksum and poudriere can reuse them. do-fetch: @${MKDIR} ${DD} # Fetch directly-downloadable distfiles (GH0 uses DEFAULT master site, no group suffix) @${SETENV} ${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} dp_SITE_FLAVOR=MASTER \ ${SH} ${SCRIPTSDIR}/do-fetch.sh \ ${DISTNAME}${EXTRACT_SUFX} \ ${DISTFILES:M*\:ovenzig} \ ${DISTFILES:M*\:webkit} \ ${DISTFILES:M*\:nodejshdr} \ - ${DISTFILES:M*\:bootstrap} + ${DISTFILES:M*\:bootstrap:N*node-modules-*:N*dep-tarballs-*:N*cargo-vendor-*} # Build bun-node-modules tarball (npm install with workspace: → file: fixes). # Uses deterministic tar so the checksum is reproducible across builds. @if ! [ -f "${DD}/bun-node-modules-${DISTVERSION}.tar.gz" ]; then \ ${ECHO_CMD} "===> Building bun-node-modules-${DISTVERSION}.tar.gz" && \ _NTmp=$$(mktemp -d /tmp/bun-nmod.XXXXXX) && \ bsdtar xzf ${DD}/${DISTNAME}${EXTRACT_SUFX} -C $$_NTmp && \ _NSrc=$$_NTmp/${WRKSRC:T} && \ ${SED} -i '' \ 's|"@types/bun": "workspace:\*"|"@types/bun": "file:packages/@types/bun"|' \ $$_NSrc/package.json && \ ${SED} -i '' \ 's|"bun-types": "workspace:"|"bun-types": "file:../bun-types"|' \ $$_NSrc/packages/@types/bun/package.json && \ (cd $$_NSrc && ${LOCALBASE}/bin/npm install --ignore-scripts) && \ (cd $$_NSrc/packages/bun-error && \ ${LOCALBASE}/bin/npm install --ignore-scripts) && \ (cd $$_NSrc/src/node-fallbacks && \ ${LOCALBASE}/bin/npm install --ignore-scripts) && \ ${FIND} $$_NSrc/node_modules \ $$_NSrc/packages/bun-error/node_modules \ $$_NSrc/src/node-fallbacks/node_modules \ -exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} \; && \ (cd $$_NSrc && \ ${FIND} node_modules packages/bun-error/node_modules \ src/node-fallbacks/node_modules -print0 \ | LC_ALL=C ${SORT} -z \ | ${SETENV} -i ${TAR} czf ${DD}/bun-node-modules-${DISTVERSION}.tar.gz \ --format=cpio --gid 0 --uid 0 --options gzip:!timestamp \ --no-recursion --null -T -) && \ ${RM} -rf $$_NTmp; \ fi # Build bun-dep-tarballs + bun-cargo-vendor-lolhtml tarballs. # Uses deterministic tar so checksums are reproducible across builds. @if ! [ -f "${DD}/bun-dep-tarballs-${DISTVERSION}.tar.gz" ] || \ ! [ -f "${DD}/bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz" ]; then \ ${ECHO_CMD} "===> Downloading bun dep tarballs" && \ _DTmp=$$(mktemp -d /tmp/bun-dtp.XXXXXX) && \ ${MKDIR} $$_DTmp/tarballs && \ for _tu in ${_BUN_DEP_TARBALLS}; do \ _tc=$${_tu%%:*}; _url=$${_tu#*:}; \ if ! [ -f "$$_DTmp/tarballs/$$_tc" ]; then \ ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $$_url ${FETCH_AFTER_ARGS} \ -o $$_DTmp/tarballs/$$_tc || exit 1; \ fi; \ done && \ if ! [ -f "${DD}/bun-dep-tarballs-${DISTVERSION}.tar.gz" ]; then \ ${ECHO_CMD} "===> Packaging bun-dep-tarballs-${DISTVERSION}.tar.gz" && \ ( cd $$_DTmp && \ ${FIND} tarballs -exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} \; && \ ${FIND} tarballs -print0 \ | LC_ALL=C ${SORT} -z \ | ${SETENV} -i ${TAR} czf ${DD}/bun-dep-tarballs-${DISTVERSION}.tar.gz \ --format=cpio --gid 0 --uid 0 --options gzip:!timestamp \ --no-recursion --null -T - ); \ fi && \ if ! [ -f "${DD}/bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz" ]; then \ ${ECHO_CMD} "===> Vendoring lolhtml Rust crates" && \ _LTmp=$$(mktemp -d /tmp/bun-lol.XXXXXX) && \ bsdtar xzf $$_DTmp/tarballs/lolhtml-929339b1d898e66b.tar.gz \ -C $$_LTmp --strip-components 1 && \ (cd $$_LTmp/c-api && \ ${SETENV} HOME=$$_LTmp \ ${LOCALBASE}/bin/cargo vendor vendor) && \ ${FIND} $$_LTmp/c-api/vendor -exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} \; && \ ( cd $$_LTmp/c-api && \ ${FIND} vendor -print0 \ | LC_ALL=C ${SORT} -z \ | ${SETENV} -i ${TAR} czf ${DD}/bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz \ --format=cpio --gid 0 --uid 0 --options gzip:!timestamp \ --no-recursion --null -T - ) && \ ${RM} -rf $$_LTmp; \ fi && \ ${RM} -rf $$_DTmp; \ fi post-extract: # Set up bun cache directory structure @${MKDIR} ${BUN_CACHE_DIR}/tarballs # Extract oven-sh/zig fork (Linux binary, via linux compat) @${MKDIR} ${BUN_ZIG_DIR} @cd ${BUN_ZIG_DIR} && bsdtar -xf ${DD}/bootstrap-x86_64-linux-musl.zip @${CHMOD} +x ${BUN_ZIG_DIR}/bootstrap-x86_64-linux-musl/zig # Install pre-built native FreeBSD bun bootstrap binary @${MKDIR} ${WRKDIR}/bun-bootstrap @${CP} ${DD}/bun-1.3.13-93-bootstrap ${WRKDIR}/bun-bootstrap/bun @${CHMOD} +x ${WRKDIR}/bun-bootstrap/bun # Extract WebKit prebuilt into cache @${MKDIR} ${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd @tar xzf ${DD}/bun-webkit-freebsd-amd64.tar.gz \ -C ${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd \ --strip-components 1 @${ECHO_CMD} "${WEBKIT_VERSION}" > \ ${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd/.identity # Extract dep tarballs into cache @tar xzf ${DD}/bun-dep-tarballs-${DISTVERSION}.tar.gz \ -C ${BUN_CACHE_DIR} # Extract vendored Rust crates for lolhtml @${MKDIR} ${WRKDIR}/cargo-vendor-lolhtml @tar xzf ${DD}/bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz \ -C ${WRKDIR}/cargo-vendor-lolhtml # Configure cargo to use vendored sources (via CARGO_HOME config) @${MKDIR} ${WRKDIR}/.cargo @${PRINTF} '[source.crates-io]\nreplace-with = "vendored-sources"\n\n[source.vendored-sources]\ndirectory = "%s/vendor"\n' \ ${WRKDIR}/cargo-vendor-lolhtml > ${WRKDIR}/.cargo/config.toml # Extract nodejs headers into bun cache and remove dirs bun doesn't need @${MKDIR} ${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION} @tar xzf ${DD}/node-v${NODE_VERSION}-headers.tar.gz \ -C ${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION} \ --strip-components 1 @${RM} -rf \ ${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}/include/node/openssl \ ${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}/include/node/uv \ ${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}/include/node/uv.h @${ECHO_CMD} "${NODE_VERSION}" > \ ${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}/.identity # Extract node_modules into WRKSRC @tar xzf ${DD}/bun-node-modules-${DISTVERSION}.tar.gz \ -C ${WRKSRC} do-build: @cd ${WRKSRC} && \ ${SETENV} PATH=${LOCALBASE}/llvm21/bin:${LOCALBASE}/bin:/usr/bin:/bin \ BUN_ZIG_PATH=${BUN_ZIG_DIR}/bootstrap-x86_64-linux-musl \ BUN_HOST_OS=freebsd \ FREEBSD_SYSROOT=/ \ CARGO_HOME=${WRKDIR}/.cargo \ GIT_SHA=${DISTVERSIONSUFFIX:S/-g//} \ ${WRKDIR}/bun-bootstrap/bun scripts/build.ts \ --os=freebsd \ --cacheDir=${BUN_CACHE_DIR} \ --buildDir=${BUN_BUILD_DIR} \ --profile=release \ -j${MAKE_JOBS_NUMBER} do-install: ${INSTALL_PROGRAM} ${BUN_BUILD_DIR}/bun ${STAGEDIR}${PREFIX}/bin/ do-test: @${ECHO_CMD} "==> Running Bun version check..." ${STAGEDIR}${PREFIX}/bin/bun --version @${ECHO_CMD} "==> Installing test dependencies..." cd ${WRKSRC}/test && ${STAGEDIR}${PREFIX}/bin/bun install \ --frozen-lockfile --ignore-scripts @${ECHO_CMD} "==> Running Bun regression tests..." cd ${WRKSRC} && ${STAGEDIR}${PREFIX}/bin/bun test --timeout 120000 --parallel 1 .include diff --git a/lang/bun/distinfo b/lang/bun/distinfo index 3a7d3a4aafe4..ff295730c80f 100644 --- a/lang/bun/distinfo +++ b/lang/bun/distinfo @@ -1,11 +1,17 @@ -TIMESTAMP = 1777332350 +TIMESTAMP = 1778719307 SHA256 (bun/bootstrap-x86_64-linux-musl.zip) = 0c09b44c0b2432d7ad8a759b685ba8ae1f883902851ac52e282ad60a89bebe42 SIZE (bun/bootstrap-x86_64-linux-musl.zip) = 100112252 SHA256 (bun/bun-webkit-freebsd-amd64.tar.gz) = 2bbab3f44e3b3d7961408c703271285ca3cc4d128d7ff9fc54dc5ab112e89fbf SIZE (bun/bun-webkit-freebsd-amd64.tar.gz) = 37660405 SHA256 (bun/node-v24.3.0-headers.tar.gz) = 045e9bf477cd5db0ec67f8c1a63ba7f784dedfe2c581e3d0ed09b88e9115dd07 SIZE (bun/node-v24.3.0-headers.tar.gz) = 8747815 SHA256 (bun/bun-1.3.13-93-bootstrap) = aea7f1c221f812d726aad220ecc879914bbe49b05e5bd4e76c3155ec0a133f54 SIZE (bun/bun-1.3.13-93-bootstrap) = 105685712 -SHA256 (bun/oven-sh-bun-bun-v1.3.13-93-g146a674cf6_GH0.tar.gz) = 12bec710dd6717f83ccaaec7fb7970828177f173639018042ca3031b851b24ff -SIZE (bun/oven-sh-bun-bun-v1.3.13-93-g146a674cf6_GH0.tar.gz) = 54226399 +SHA256 (bun/bun-node-modules-1.3.14.tar.gz) = d185dddcbaa2bee0298694ae7cf712634f8a2c2f36ec5650c66fded5d352b660 +SIZE (bun/bun-node-modules-1.3.14.tar.gz) = 31878291 +SHA256 (bun/bun-dep-tarballs-1.3.14.tar.gz) = 8cf5f1aaae1f3494bde36d358fd5d8046e62a4aea48431f99b1317e33dc603ac +SIZE (bun/bun-dep-tarballs-1.3.14.tar.gz) = 98808662 +SHA256 (bun/bun-cargo-vendor-lolhtml-1.3.14.tar.gz) = 55bd5cbcd4c430c8f8fe8ef3f2bb097da7bfd017a76472d17fb973bb3b49edbb +SIZE (bun/bun-cargo-vendor-lolhtml-1.3.14.tar.gz) = 4020543 +SHA256 (bun/oven-sh-bun-bun-v1.3.14_GH0.tar.gz) = 112a5915992807f04b183854d360c2bf87ac7c1587fb5da3c560bdbb75b8c92e +SIZE (bun/oven-sh-bun-bun-v1.3.14_GH0.tar.gz) = 54898395 diff --git a/lang/bun/files/patch-build.zig b/lang/bun/files/patch-build.zig index e9da8d2ea74a..d6c6879a493e 100644 --- a/lang/bun/files/patch-build.zig +++ b/lang/bun/files/patch-build.zig @@ -1,42 +1,42 @@ -- Fix Zig 0.15.x API compatibility issues when building bun for FreeBSD: -- 1. FreeBSD sysroot string literal: use @as([]const u8, "/") instead of bare "/" -- because *const [1:0]u8 cannot coerce to ?[]const u8 in oven-sh/zig fork -- 2. SemanticVersion format: use {d}.{d}.{d} instead of {f} for compatibility -- 3. validateGeneratedPath: skip panic when generated files are not yet present ---- build.zig.orig 2026-04-27 07:25:40 UTC +--- build.zig.orig 2026-05-12 22:12:49 UTC +++ build.zig @@ -90,7 +90,7 @@ const BunBuildOptions = struct { opts.addOption(bool, "enable_valgrind", this.enable_valgrind); opts.addOption(bool, "enable_tinycc", this.enable_tinycc); opts.addOption(bool, "use_mimalloc", this.use_mimalloc); - opts.addOption([]const u8, "reported_nodejs_version", b.fmt("{f}", .{this.reported_nodejs_version})); + opts.addOption([]const u8, "reported_nodejs_version", b.fmt("{d}.{d}.{d}", .{this.reported_nodejs_version.major, this.reported_nodejs_version.minor, this.reported_nodejs_version.patch})); opts.addOption(bool, "zig_self_hosted_backend", this.no_llvm); opts.addOption(bool, "override_no_export_cpp_apis", this.override_no_export_cpp_apis); @@ -226,7 +226,7 @@ pub fn build(b: *Build) !void { // linkLibC() gets FreeBSD libc via `zig build --libc `. On a // native FreeBSD host the system root is the sysroot. const freebsd_sysroot = b.option([]const u8, "freebsd_sysroot", "FreeBSD sysroot (extracted base.txz) for translate-c headers") orelse - if (os == .freebsd and builtin.os.tag == .freebsd) "/" else null; + if (os == .freebsd and builtin.os.tag == .freebsd) @as([]const u8, "/") else null; if (os == .freebsd and freebsd_sysroot == null) { std.debug.panic("-Dfreebsd_sysroot is required when cross-compiling to FreeBSD (zig does not bundle FreeBSD libc headers)", .{}); } -@@ -1086,13 +1086,8 @@ fn validateGeneratedPath(path: []const u8) void { +@@ -1106,13 +1106,8 @@ fn validateGeneratedPath(path: []const u8) void { } fn validateGeneratedPath(path: []const u8) void { - if (!exists(path)) { - std.debug.panic( - \\Generated file '{s}' is missing! - \\ - \\Make sure to use CMake and Ninja, or pass a manual codegen folder with '-Dgenerated-code=...' - , .{path}); - } + // Skip validation - generated files may not exist before codegen runs + _ = path; } const WindowsShim = struct { diff --git a/lang/bun/files/patch-scripts_build_depVersionsHeader.ts b/lang/bun/files/patch-scripts_build_depVersionsHeader.ts new file mode 100644 index 000000000000..1316c7b7fe5a --- /dev/null +++ b/lang/bun/files/patch-scripts_build_depVersionsHeader.ts @@ -0,0 +1,13 @@ +-- Do not filter out "unknown" versions to avoid compilation errors when git revision is unavailable. + +--- scripts/build/depVersionsHeader.ts.orig 2026-05-14 00:45:08 UTC ++++ scripts/build/depVersionsHeader.ts +@@ -91,7 +91,7 @@ export function generateDepVersionsHeader(cfg: Config) + */ + export function generateDepVersionsHeader(cfg: Config): string { + const outPath = resolve(cfg.buildDir, "bun_dependency_versions.h"); +- const versions = computeVersions(cfg).filter(([, v]) => v !== "" && v !== "unknown"); ++ const versions = computeVersions(cfg).filter(([, v]) => v !== ""); + + const lines: string[] = [ + "// Auto-generated by scripts/build/depVersionsHeader.ts. Do not edit.", diff --git a/lang/bun/files/patch-scripts_build_deps_lolhtml.ts b/lang/bun/files/patch-scripts_build_deps_lolhtml.ts new file mode 100644 index 000000000000..1767459d07b2 --- /dev/null +++ b/lang/bun/files/patch-scripts_build_deps_lolhtml.ts @@ -0,0 +1,22 @@ +-- Disable nightly features and -Zbuild-std for lolhtml as FreeBSD ports use stable Rust. + +--- scripts/build/deps/lolhtml.ts.orig 2026-05-14 00:17:32 UTC ++++ scripts/build/deps/lolhtml.ts +@@ -67,7 +67,7 @@ export const lolhtml: Dependency = { + + // FreeBSD aarch64 is Tier 3 — no prebuilt std, so -Zbuild-std is + // required regardless of release/debug. +- if (cfg.freebsd && cfg.arm64) { ++ if (false && cfg.freebsd && cfg.arm64) { + spec.buildStd = true; + } + +@@ -80,7 +80,7 @@ export const lolhtml: Dependency = { + // (linux-gnu, darwin, freebsd). musl/android keep the prebuilt-std + // -Cpanic=abort path. + const canBuildStdImmediateAbort = +- cfg.darwin || cfg.freebsd || (cfg.linux && cfg.abi !== "musl" && cfg.abi !== "android"); ++ cfg.darwin || (false && cfg.freebsd) || (cfg.linux && cfg.abi !== "musl" && cfg.abi !== "android"); + if (cfg.release && canBuildStdImmediateAbort) { + spec.buildStd = true; + spec.rustflags = [ diff --git a/lang/bun/files/patch-src_jsc_bindings_BunAnalyzeTranspiledModule.cpp b/lang/bun/files/patch-src_jsc_bindings_BunAnalyzeTranspiledModule.cpp new file mode 100644 index 000000000000..f4b53e623d65 --- /dev/null +++ b/lang/bun/files/patch-src_jsc_bindings_BunAnalyzeTranspiledModule.cpp @@ -0,0 +1,13 @@ +-- Fix build with older JavaScriptCore: setHasTLA -> hasTLA. + +--- src/jsc/bindings/BunAnalyzeTranspiledModule.cpp.orig 2026-05-14 00:23:23 UTC ++++ src/jsc/bindings/BunAnalyzeTranspiledModule.cpp +@@ -73,7 +73,7 @@ extern "C" JSModuleRecord* JSC_JSModuleRecord__create( + { + JSModuleRecord* result = JSModuleRecord::create(globalObject, vm, globalObject->moduleRecordStructure(), *moduleKey, sourceCode, declaredVariables, lexicalVariables, hasImportMeta ? ImportMetaFeature : 0); + result->m_isTypeScript = isTypescript; +- result->setHasTLA(hasTLA); ++ result->hasTLA(hasTLA); + return result; + } + diff --git a/lang/bun/files/patch-src_jsc_bindings_BunCPUProfiler.cpp b/lang/bun/files/patch-src_jsc_bindings_BunCPUProfiler.cpp new file mode 100644 index 000000000000..fd035ae25b05 --- /dev/null +++ b/lang/bun/files/patch-src_jsc_bindings_BunCPUProfiler.cpp @@ -0,0 +1,40 @@ +-- Fix build with older JavaScriptCore: approximate() -> approximateWallTime(). + +--- src/jsc/bindings/BunCPUProfiler.cpp.orig 2026-05-14 00:23:23 UTC ++++ src/jsc/bindings/BunCPUProfiler.cpp +@@ -49,7 +49,7 @@ void startCPUProfiler(JSC::VM& vm) + { + // Capture the wall clock time when profiling starts (before creating stopwatch) + // This will be used as the profile's startTime +- s_profilingStartTime = MonotonicTime::now().approximate().secondsSinceEpoch().value() * 1000000.0; ++ s_profilingStartTime = MonotonicTime::now().approximateWallTime().secondsSinceEpoch().value() * 1000000.0; + + // Create a stopwatch and start it + auto stopwatch = WTF::Stopwatch::create(); +@@ -364,7 +364,7 @@ void stopCPUProfiler(JSC::VM& vm, WTF::String* outJSON + auto& stackTrace = stackTraces[idx]; + if (stackTrace.frames.isEmpty()) { + samples.append(1); +- double currentTime = stackTrace.timestamp.approximate().secondsSinceEpoch().value() * 1000000.0; ++ double currentTime = stackTrace.timestamp.approximateWallTime().secondsSinceEpoch().value() * 1000000.0; + double delta = std::max(0.0, currentTime - lastTime); + timeDeltas.append(static_cast(delta)); + lastTime = currentTime; +@@ -538,7 +538,7 @@ void stopCPUProfiler(JSC::VM& vm, WTF::String* outJSON + + samples.append(currentParentId); + +- double currentTime = stackTrace.timestamp.approximate().secondsSinceEpoch().value() * 1000000.0; ++ double currentTime = stackTrace.timestamp.approximateWallTime().secondsSinceEpoch().value() * 1000000.0; + double delta = std::max(0.0, currentTime - lastTime); + timeDeltas.append(static_cast(delta)); + lastTime = currentTime; +@@ -629,7 +629,7 @@ void stopCPUProfiler(JSC::VM& vm, WTF::String* outJSON + for (size_t idx : sortedIndices) { + auto& stackTrace = stackTraces[idx]; + +- double currentTime = stackTrace.timestamp.approximate().secondsSinceEpoch().value() * 1000000.0; ++ double currentTime = stackTrace.timestamp.approximateWallTime().secondsSinceEpoch().value() * 1000000.0; + long long deltaUs = static_cast(std::max(0.0, currentTime - lastTime)); + totalTimeUs += deltaUs; + lastTime = currentTime; diff --git a/lang/bun/files/patch-src_jsc_bindings_BunObject.cpp b/lang/bun/files/patch-src_jsc_bindings_BunObject.cpp new file mode 100644 index 000000000000..a502a23628cc --- /dev/null +++ b/lang/bun/files/patch-src_jsc_bindings_BunObject.cpp @@ -0,0 +1,13 @@ +-- Fix build with older JavaScriptCore: approximate() -> approximateWallTime(). + +--- src/jsc/bindings/BunObject.cpp.orig 2026-05-14 00:25:32 UTC ++++ src/jsc/bindings/BunObject.cpp +@@ -665,7 +665,7 @@ JSC_DEFINE_HOST_FUNCTION(functionBunSleep, + + if (millisecondsValue.inherits()) { + auto now = MonotonicTime::now(); +- double milliseconds = uncheckedDowncast(millisecondsValue)->internalNumber() - now.approximate().secondsSinceEpoch().milliseconds(); ++ double milliseconds = uncheckedDowncast(millisecondsValue)->internalNumber() - now.approximateWallTime().secondsSinceEpoch().milliseconds(); + millisecondsValue = JSC::jsNumber(milliseconds > 0 ? std::ceil(milliseconds) : 0); + } + diff --git a/lang/bun/files/patch-src_jsc_bindings_NodeVMSourceTextModule.cpp b/lang/bun/files/patch-src_jsc_bindings_NodeVMSourceTextModule.cpp new file mode 100644 index 000000000000..5ede304d6846 --- /dev/null +++ b/lang/bun/files/patch-src_jsc_bindings_NodeVMSourceTextModule.cpp @@ -0,0 +1,22 @@ +-- Fix build with older JavaScriptCore: setStatus -> status. + +--- src/jsc/bindings/NodeVMSourceTextModule.cpp.orig 2026-05-14 00:23:23 UTC ++++ src/jsc/bindings/NodeVMSourceTextModule.cpp +@@ -352,7 +352,7 @@ JSValue NodeVMSourceTextModule::link(JSGlobalObject* g + // Unlinked for the whole graph), so do it for each dependency as + // we wire it in. + if (auto* cyclic = dynamicDowncast(resolvedRecord); cyclic && cyclic->status() == JSC::CyclicModuleRecord::Status::New) +- cyclic->setStatus(JSC::CyclicModuleRecord::Status::Unlinked); ++ cyclic->status(JSC::CyclicModuleRecord::Status::Unlinked); + + // specifiers/moduleNatives were built from requestedModules() in + // [kLink], so the indices line up — pass the original ModuleRequest +@@ -384,7 +384,7 @@ JSValue NodeVMSourceTextModule::link(JSGlobalObject* g + // innerModuleLinking now would walk into a record whose loadedModules() + // are still empty (cyclic case). + if (record->status() == JSC::CyclicModuleRecord::Status::New) +- record->setStatus(JSC::CyclicModuleRecord::Status::Unlinked); ++ record->status(JSC::CyclicModuleRecord::Status::Unlinked); + + UNUSED_PARAM(scriptFetcher); + status(Status::Linked); diff --git a/lang/bun/files/patch-src_jsc_bindings_bindings.cpp b/lang/bun/files/patch-src_jsc_bindings_bindings.cpp new file mode 100644 index 000000000000..a2583cc9877c --- /dev/null +++ b/lang/bun/files/patch-src_jsc_bindings_bindings.cpp @@ -0,0 +1,13 @@ +-- Fix build with older JavaScriptCore: JSPromiseReaction::tryGetContext -> reaction->context(). + +--- src/jsc/bindings/bindings.cpp.orig 2026-05-14 00:25:32 UTC ++++ src/jsc/bindings/bindings.cpp +@@ -2276,7 +2276,7 @@ static void collectAsyncStackFramesFromPromise(JSC::VM + JSC::JSPromiseReaction* reaction = nullptr; + if (!dynamicCastValue(reactionsValue, &reaction)) + return nullptr; +- JSC::JSValue context = JSC::JSPromiseReaction::tryGetContext(reactionsValue); ++ JSC::JSValue context = reaction->context(); + JSC::InternalFieldTuple* tuple = nullptr; + if (dynamicCastValue(context, &tuple)) + context = tuple->getInternalField(0);