PORTNAME= qwen-code DISTVERSION= 0.23.0 CATEGORIES= misc DISTFILES= ${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} MAINTAINER= olivier@FreeBSD.org COMMENT= Agentic coding tool from Alibaba WWW= https://github.com/QwenLM/qwen-code LICENSE= APACHE20 FETCH_DEPENDS= jq:textproc/jq \ npm:www/npm \ ${LOCALBASE}/share/certs/ca-root-nss.crt:security/ca_root_nss RUN_DEPENDS= rg:textproc/ripgrep USES= nodejs:run NO_BUILD= yes NO_ARCH= yes PLIST_FILES= bin/qwen PACKAGE_NAME= @qwen-code/qwen-code FETCH_SCRIPT= ${PORTSDIR}/Tools/scripts/npmjs-fetch-with-dependencies.sh do-fetch: @if ! [ -f ${DISTDIR}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} ]; then \ ${SETENV} TMPDIR=${WRKDIR} LOCALBASE=${LOCALBASE} ${FETCH_SCRIPT} \ ${PACKAGE_NAME} ${DISTVERSION} \ ${FILESDIR}/package-lock.json \ ${DISTDIR}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}; \ fi do-install: @${MKDIR} ${STAGEDIR}${PREFIX}/lib @cd ${WRKSRC} && \ ${COPYTREE_SHARE} node_modules ${STAGEDIR}${PREFIX}/lib # remove bundled ripgrep (we use textproc/ripgrep via RUN_DEPENDS); # cli.js falls back to system rg when the builtin path is absent @${RM} -r ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/vendor/ripgrep @${RM} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/sandbox-macos-*.sb # audio-capture ships linux/darwin/win32 prebuilds only; its platform # check throws on freebsd before loading one, so drop the dead binaries @${RM} -r ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/node_modules/@qwen-code/audio-capture/prebuilds ${REINPLACE_CMD} -i '' \ -e "s|#!/usr/bin/env node|#!${PREFIX}/bin/node|" \ ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/cli-entry.js @${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/chunks \ -name '*.js' -exec ${REINPLACE_CMD} -i '' \ -e 's|settings.merged.general?.enableAutoUpdate !== false|false|g' \ {} + @${CHMOD} +x ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/cli-entry.js # create wrapper script @${MKDIR} ${STAGEDIR}${PREFIX}/bin @${ECHO_CMD} '#!/bin/sh' > ${STAGEDIR}${PREFIX}/bin/qwen @${ECHO_CMD} 'exec ${PREFIX}/lib/node_modules/${PACKAGE_NAME}/cli-entry.js "$$@"' >> ${STAGEDIR}${PREFIX}/bin/qwen @${CHMOD} +x ${STAGEDIR}${PREFIX}/bin/qwen # The bundled node_modules tree contains hundreds of hash-named files that # churn every release; generate the plist for it instead of hand-listing. post-install: @cd ${STAGEDIR}${PREFIX} && \ ${FIND} lib/node_modules \( -type f -o -type l \) | ${SORT} >> ${TMPPLIST} .include