From nobody Wed Apr 8 02:45:30 2026 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fr6qt3pfBz6YD9j for ; Wed, 08 Apr 2026 02:45:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fr6qt2WFRz3P6V for ; Wed, 08 Apr 2026 02:45:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775616330; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=3EW49gYUoI7VNXlrYVL+TVf0dmze5qdSxZrNO0Xl9D8=; b=OZJBRNPoZtDH5M5DHsE3/8AOFmUFBeNEvW8NfkheMXYyFXOlng2scTmIaCE80ok8lEnnwE f1PJm+fw5lBGeBmlLeHImeyVIWzscgGxaHzAQ6L4BCZKh6I3xurRDk6A4/ogG79MWySzZI YqRX8YiPoP6avQd7gtAQIy5WdC/Lpeu7InKofGmi6qzmsDllD32VYG7ijzRx6ubfWrKNRw J3CSJh3E0iuecBZmq1ZUVYYNQS8umhbIZDaevDwnSNl85jP4Q5HJVlQSmCehWHRsFYRpb+ Ha41HkeI8jfQ4y/XjpP0Wi7Py7bffe1h2mQ1gWPYpKEpGLAXJ31+IvENWNIQtQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775616330; a=rsa-sha256; cv=none; b=ahVrXcO8l4aWrj0WefWcLo8og7jw97mRVMdRQzRuOUO+O4zB0bE7wh2L14pba1Znubh+c8 6u0N/W8eQEllXWHi5xdP1Ud7FZNn61W3t1ylKGWymQNIkm4NmAEErA4NX06XeGXsbqOCVE qn7um/NUOvXr9f3//A1g6+He5t7qRXNr4T3w11dNSU95mEWajyFtU5/z4gOrDdiXpHeb1w wfMPZeiv14mzqYYlhB5ysNfaydSOpqD3ucSIKcScaLp5ZZoOa86HLWkgjKYUxM2UyVk7nX D57TwP11oR39PEDk7sBLRoU3ADGCTuRuKbcQkKYDhqmjtYgBn8i2+psxnJXZsQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775616330; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=3EW49gYUoI7VNXlrYVL+TVf0dmze5qdSxZrNO0Xl9D8=; b=E8Dn+A7BG/7QxucWusufYa1WZe7M8GMDmPP7l+6p348FHTYmRoUazs47GdHKh4aTb1rhb6 gdijLUmZw0mnu/DxdpbefVFmuBGb6zeW3K5V91gt6vZKFWmq7TIZhEXRKNL3YNDP3FIf31 lbtVc164NMcZsXhR+Cu7bXSynHfO7bk2roodcFHQe3YUNZiCBWtMELwvIgdevANiHd0pxO ChvPot67EJZexfUCADZFMj+H++Cg1P3IdQV5iHw5KUEPYFSxcPRzd9VC+uFCxuwC7cK5fJ rKpkCTCXu9mEC2Rlc0XOg53qkptZgKhkGlFtIeREwPYZhyNBNajwjnyxwPsvwg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fr6qt23MTz16F7 for ; Wed, 08 Apr 2026 02:45:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 40fe5 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 08 Apr 2026 02:45:30 +0000 To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Yuri Victorovich Subject: git: 496f1d411453 - main - misc/claude-code: Add FreeBSD native audio-capture NodeJS module List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-ports-main@freebsd.org Sender: owner-dev-commits-ports-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: yuri X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 496f1d411453530fa0c8f0afd9f8dd90a3c5bc93 Auto-Submitted: auto-generated Date: Wed, 08 Apr 2026 02:45:30 +0000 Message-Id: <69d5c14a.40fe5.639d670c@gitrepo.freebsd.org> The branch main has been updated by yuri: URL: https://cgit.FreeBSD.org/ports/commit/?id=496f1d411453530fa0c8f0afd9f8dd90a3c5bc93 commit 496f1d411453530fa0c8f0afd9f8dd90a3c5bc93 Author: Yuri Victorovich AuthorDate: 2026-04-08 02:05:17 +0000 Commit: Yuri Victorovich CommitDate: 2026-04-08 02:45:26 +0000 misc/claude-code: Add FreeBSD native audio-capture NodeJS module ... instead of bundled ones for other systems. --- misc/claude-code/Makefile | 72 +++++++++++++++++++++--- misc/claude-code/distinfo | 2 + misc/claude-code/files/audio-capture-fetch.sh | 80 +++++++++++++++++++++++++++ misc/claude-code/pkg-plist | 7 +-- 4 files changed, 147 insertions(+), 14 deletions(-) diff --git a/misc/claude-code/Makefile b/misc/claude-code/Makefile index 83e12ce4d0b4..c37c62ea81a8 100644 --- a/misc/claude-code/Makefile +++ b/misc/claude-code/Makefile @@ -1,7 +1,8 @@ PORTNAME= claude-code DISTVERSION= 2.1.90 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= misc # machine-learning +DISTFILES= ${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} MAINTAINER= yuri@FreeBSD.org COMMENT= Agentic coding tool from Anthropic that lives in your terminal @@ -14,14 +15,36 @@ RUN_DEPENDS= rg:textproc/ripgrep USES= nodejs:run -NO_BUILD= yes -NO_ARCH= yes +OPTIONS_DEFINE= AUDIO_CAPTURE +OPTIONS_DEFAULT= AUDIO_CAPTURE +OPTIONS_SUB= yes + +AUDIO_CAPTURE_DESC= Build native audio capture module for FreeBSD +AUDIO_CAPTURE_BUILD_DEPENDS= ${LOCALBASE}/bin/cargo:lang/rust \ + pkgconf:devel/pkgconf +AUDIO_CAPTURE_LIB_DEPENDS= libasound.so:audio/alsa-lib + +AUDIO_CAPTURE_COMMIT= bb370f75235254da2c3d34f6168fc4a9902d9090 PACKAGE_NAME= @anthropic-ai/claude-code -FETCH_SCRIPT= ${PORTSDIR}/Tools/scripts/npmjs-fetch-with-dependencies.sh +FETCH_SCRIPT= ${PORTSDIR}/Tools/scripts/npmjs-fetch-with-dependencies.sh +AUDIO_CAPTURE_FETCH_SCRIPT= ${FILESDIR}/audio-capture-fetch.sh + +CLI_JS= ${WRKSRC}/node_modules/${PACKAGE_NAME}/cli.js +AUDIO_CAPTURE_WRKSRC= ${WRKDIR}/audio-capture-${AUDIO_CAPTURE_COMMIT} -CLI_JS= ${WRKSRC}/node_modules/${PACKAGE_NAME}/cli.js +.include + +.if ${PORT_OPTIONS:MAUDIO_CAPTURE} +ONLY_FOR_ARCHS= amd64 +ONLY_FOR_ARCHS_REASON= audio capture module only supports amd64 +DISTFILES+= audio-capture-${AUDIO_CAPTURE_COMMIT}${EXTRACT_SUFX}:audio_capture_src +MASTER_SITES+= https://github.com/kstonekuan/audio-capture/archive/:audio_capture_src +.else +NO_BUILD= yes +NO_ARCH= yes +.endif do-fetch: @if ! [ -f ${DISTDIR}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} ]; then \ @@ -31,6 +54,14 @@ do-fetch: ${DISTDIR}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}; \ fi +do-fetch-AUDIO_CAPTURE-on: + @if ! [ -f ${DISTDIR}/audio-capture-${AUDIO_CAPTURE_COMMIT}${EXTRACT_SUFX} ]; then \ + ${SETENV} TMPDIR=${WRKDIR} LOCALBASE=${LOCALBASE} \ + ${SH} ${AUDIO_CAPTURE_FETCH_SCRIPT} \ + ${AUDIO_CAPTURE_COMMIT} \ + ${DISTDIR}/audio-capture-${AUDIO_CAPTURE_COMMIT}${EXTRACT_SUFX}; \ + fi + # Raise API and MCP transport timeouts to 24 hours for slow (e.g. CPU-based) servers post-extract: ${REINPLACE_CMD} \ @@ -39,11 +70,38 @@ post-extract: -e 's/DEFAULT_TIMEOUT=600000;/DEFAULT_TIMEOUT=86400000;/' \ ${CLI_JS} +post-extract-AUDIO_CAPTURE-on: + # patch cli.js to load audio-capture on FreeBSD + ${REINPLACE_CMD} \ + -e 's|q!=="darwin"&&q!=="linux"&&q!=="win32"|q!=="darwin"\&\&q!=="linux"\&\&q!=="win32"\&\&q!=="freebsd"|' \ + ${CLI_JS} + +do-build: +.if ${PORT_OPTIONS:MAUDIO_CAPTURE} + @${ECHO_MSG} "====> Building audio-capture for FreeBSD amd64..." + @cd ${AUDIO_CAPTURE_WRKSRC} && \ + ${SETENV} HOME=${WRKDIR} cargo build --release +.endif + do-install: - # install files + # install node_modules @${MKDIR} ${STAGEDIR}${PREFIX}/lib @cd ${WRKSRC} && \ ${COPYTREE_SHARE} node_modules ${STAGEDIR}${PREFIX}/lib + # remove *.node binaries for non-FreeBSD platforms + @${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/vendor/audio-capture \ + -name "*.node" -delete +.if ${PORT_OPTIONS:MAUDIO_CAPTURE} + # install FreeBSD amd64 audio-capture module + @${MKDIR} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/vendor/audio-capture/x64-freebsd + ${INSTALL_LIB} ${AUDIO_CAPTURE_WRKSRC}/target/release/libaudio_capture.so \ + ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/vendor/audio-capture/x64-freebsd/audio-capture.node +.endif + # remove bundled ripgrep + @${RM} -r ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/vendor/ripgrep + # remove empty vendor subdirectories (and vendor/ itself when AUDIO_CAPTURE=OFF) + @${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/vendor \ + -depth -type d -empty -delete # update shebang ${REINPLACE_CMD} -i '' \ -e "s|#!/usr/bin/env node|#!${PREFIX}/bin/node|" \ @@ -56,7 +114,5 @@ do-install: @${ECHO_CMD} 'export USE_BUILTIN_RIPGREP=false' >> ${STAGEDIR}${PREFIX}/bin/claude @${ECHO_CMD} 'exec ${PREFIX}/lib/node_modules/${PACKAGE_NAME}/cli.js "$$@"' >> ${STAGEDIR}${PREFIX}/bin/claude @${CHMOD} +x ${STAGEDIR}${PREFIX}/bin/claude - # remove bundled ripgrep - @${RM} -r ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/vendor/ripgrep .include diff --git a/misc/claude-code/distinfo b/misc/claude-code/distinfo index fa90d8cc93c4..da7b2c9116c7 100644 --- a/misc/claude-code/distinfo +++ b/misc/claude-code/distinfo @@ -1,3 +1,5 @@ TIMESTAMP = 1775147894 SHA256 (claude-code-2.1.90.tar.gz) = debb5e196531112978820e5c9b374eca1d6db6dda9098a3c6bae79c9e14320a6 SIZE (claude-code-2.1.90.tar.gz) = 16070380 +SHA256 (audio-capture-bb370f75235254da2c3d34f6168fc4a9902d9090.tar.gz) = d6a4e0ff2666efd60efd4259c0e29d6878975cc6f41a2171ff5a12b75e6ef7c6 +SIZE (audio-capture-bb370f75235254da2c3d34f6168fc4a9902d9090.tar.gz) = 26840618 diff --git a/misc/claude-code/files/audio-capture-fetch.sh b/misc/claude-code/files/audio-capture-fetch.sh new file mode 100644 index 000000000000..532a1b72fac5 --- /dev/null +++ b/misc/claude-code/files/audio-capture-fetch.sh @@ -0,0 +1,80 @@ +#!/bin/sh +# +# MAINTAINER: yuri@FreeBSD.org + +# This script fetches the audio-capture Rust source from GitHub, vendors all +# Cargo dependencies using 'cargo vendor', and packages everything into a +# reproducible tarball suitable for offline builds. +# +# Usage: $0 +# Example: $0 bb370f75235254da2c3d34f6168fc4a9902d9090 /distfiles/audio-capture-bb370f75.tar.gz + +set -eu + +AUDIO_CAPTURE_COMMIT="$1" +PACKAGE_TARBALL_OUTPUT="$2" + +LOCALBASE="${LOCALBASE:-/usr/local}" + +if [ -z "$AUDIO_CAPTURE_COMMIT" ] || [ -z "$PACKAGE_TARBALL_OUTPUT" ]; then + echo "Usage: $0 " + exit 1 +fi + +if [ -z "$TMPDIR" ]; then + TMPDIR="/tmp" +fi + +# to full paths +if ! echo "${PACKAGE_TARBALL_OUTPUT}" | grep -q "^/"; then + PACKAGE_TARBALL_OUTPUT="`pwd`/${PACKAGE_TARBALL_OUTPUT}" +fi +if ! echo "${TMPDIR}" | grep -q "^/"; then + TMPDIR="`pwd`/${TMPDIR}" +fi + +BUILD_DIR="${TMPDIR}/audio-capture-fetch-${AUDIO_CAPTURE_COMMIT}" +rm -rf "${BUILD_DIR}" +mkdir -p "${BUILD_DIR}" +cd "${BUILD_DIR}" + +# Download source from GitHub +echo "===> Downloading audio-capture source (commit ${AUDIO_CAPTURE_COMMIT})" +${LOCALBASE}/bin/curl -sL \ + "https://github.com/kstonekuan/audio-capture/archive/${AUDIO_CAPTURE_COMMIT}.tar.gz" \ + -o source.tar.gz +tar xzf source.tar.gz +rm source.tar.gz +SRC="audio-capture-${AUDIO_CAPTURE_COMMIT}" + +# Vendor all Cargo dependencies into the source tree +echo "===> Vendoring Rust dependencies" +cd "${BUILD_DIR}/${SRC}" +CARGO_HOME="${BUILD_DIR}/cargo-home" cargo vendor cargo-crates 2>&1 | tail -5 + +# Write .cargo/config.toml to use vendored crates +cat > "${BUILD_DIR}/${SRC}/.cargo/config.toml" << 'EOF' +[source.crates-io] +replace-with = "vendored-sources" + +[source.vendored-sources] +directory = "cargo-crates" + +[target.aarch64-apple-darwin] +rustflags = ["-C", "link-args=-undefined dynamic_lookup"] + +[target.x86_64-apple-darwin] +rustflags = ["-C", "link-args=-undefined dynamic_lookup"] +EOF + +# Create a deterministic tarball (normalise timestamps, sort entries) +echo "===> Creating tarball" +cd "${BUILD_DIR}" +find "${SRC}" -and -exec touch -h -d 1970-01-01T00:00:00Z {} \; +find "${SRC}" -print0 | sort -z | \ + tar czf "${PACKAGE_TARBALL_OUTPUT}" \ + --format=bsdtar --no-read-sparse --gid 0 --uid 0 \ + --options gzip:!timestamp --no-recursion --null -T - + +rm -rf "${BUILD_DIR}" +echo "===> Created: ${PACKAGE_TARBALL_OUTPUT}" diff --git a/misc/claude-code/pkg-plist b/misc/claude-code/pkg-plist index e130fd5e898c..89fe5b22a3c6 100644 --- a/misc/claude-code/pkg-plist +++ b/misc/claude-code/pkg-plist @@ -6,9 +6,4 @@ lib/node_modules/@anthropic-ai/claude-code/bun.lock lib/node_modules/@anthropic-ai/claude-code/cli.js lib/node_modules/@anthropic-ai/claude-code/package.json lib/node_modules/@anthropic-ai/claude-code/sdk-tools.d.ts -lib/node_modules/@anthropic-ai/claude-code/vendor/audio-capture/arm64-darwin/audio-capture.node -lib/node_modules/@anthropic-ai/claude-code/vendor/audio-capture/arm64-linux/audio-capture.node -lib/node_modules/@anthropic-ai/claude-code/vendor/audio-capture/arm64-win32/audio-capture.node -lib/node_modules/@anthropic-ai/claude-code/vendor/audio-capture/x64-darwin/audio-capture.node -lib/node_modules/@anthropic-ai/claude-code/vendor/audio-capture/x64-linux/audio-capture.node -lib/node_modules/@anthropic-ai/claude-code/vendor/audio-capture/x64-win32/audio-capture.node +%%AUDIO_CAPTURE%%lib/node_modules/@anthropic-ai/claude-code/vendor/audio-capture/x64-freebsd/audio-capture.node