1PORTNAME= gemini-cli 2DISTVERSION= 0.42.0 3CATEGORIES= misc # machine-learning 4 5MAINTAINER= ports@MidnightBSD.org 6COMMENT= Open-source CLI for direct access to Google's Gemini AI model 7WWW= https://geminicli.com/ \ 8 https://google-gemini.github.io/gemini-cli/ \ 9 https://github.com/google-gemini/gemini-cli 10 11LICENSE= Apache-2.0 12 13BUILD_DEPENDS= npm:www/npm 14FETCH_DEPENDS= npm:www/npm 15RUN_DEPENDS= bash:shells/bash 16 17USES= nodejs:build,run python:build 18 19PACKAGE_NAME= @google/gemini-cli 20 21do-fetch: 22 @if ! [ -f ${DISTDIR}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} ]; then ( \ 23 ${RM} -rf ${WRKDIR}/${PORTNAME}-${DISTVERSION} && \ 24 ${MKDIR} -p ${WRKDIR}/${PORTNAME}-${DISTVERSION} && \ 25 cd ${WRKDIR}/${PORTNAME}-${DISTVERSION} && \ 26 if [ -f ${FILESDIR}/package-lock.json ]; then \ 27 ${ECHO} '{"name":"gemini-cli-installer","version":"1.0.0","dependencies":{"${PACKAGE_NAME}":"^${DISTVERSION}"}}' > package.json && \ 28 ${CP} ${FILESDIR}/package-lock.json . ; \ 29 ${SETENV} HOME=${WRKDIR} npm ci --ignore-scripts --global-style --legacy-peer-deps --omit=dev ; \ 30 else \ 31 ${ECHO} '{"name":"gemini-cli-installer","version":"1.0.0"}' > package.json && \ 32 npm install --package-lock-only --global-style --legacy-peer-deps ${PACKAGE_NAME}@${DISTVERSION} && \ 33 ${CP} package-lock.json ${WRKDIR}/package-lock.json.generated && \ 34 ${ECHO} "" && \ 35 ${ECHO} "=====================================================================" && \ 36 ${ECHO} "WARNING: package-lock.json not found in files/ directory" && \ 37 ${ECHO} "Generated one at: ${WRKDIR}/package-lock.json.generated" && \ 38 ${ECHO} "" && \ 39 ${ECHO} "To enable reproducible builds, please:" && \ 40 ${ECHO} " 1. mkdir -p ${.CURDIR}/files" && \ 41 ${ECHO} " 2. cp ${WRKDIR}/package-lock.json.generated ${.CURDIR}/files/package-lock.json" && \ 42 ${ECHO} " 3. Re-run 'make clean distclean && make fetch'" && \ 43 ${ECHO} "=====================================================================" && \ 44 ${ECHO} "" && \ 45 ${SETENV} HOME=${WRKDIR} npm ci --ignore-scripts --global-style --legacy-peer-deps --omit=dev ; \ 46 fi && \ 47 ${MKDIR} -p lib/node_modules/@google && \ 48 ${MKDIR} -p bin && \ 49 ${MV} node_modules/${PACKAGE_NAME} lib/node_modules/@google/ && \ 50 ${LN} -sf ../lib/node_modules/${PACKAGE_NAME}/bundle/gemini.js bin/gemini && \ 51 ${RM} -rf node_modules package.json && \ 52 ${FIND} ${WRKDIR} -and -exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} \; && \ 53 cd ${WRKDIR} && ${FIND} ${PORTNAME}-${DISTVERSION} -print0 | LC_ALL=C ${SORT} -z | \ 54 ${TAR} czf ${DISTDIR}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} --format=bsdtar --gid 0 --uid 0 --options gzip:!timestamp --no-recursion --null -T - \ 55 ); fi 56 57do-build: 58 # Build native modules for node-pty 59 @cd ${WRKSRC}/lib/node_modules/${PACKAGE_NAME}/node_modules/node-pty && \ 60 ${SETENV} HOME=${WRKDIR} CFLAGS="-I${LOCALBASE}/include" CXXFLAGS="-I${LOCALBASE}/include" \ 61 PYTHON=${PYTHON_CMD} npm rebuild --nodedir=${LOCALBASE} 62 63do-install: 64 # install files 65 @cd ${WRKSRC} && \ 66 ${COPYTREE_SHARE} . ${PREFIX} 67 # update 68 ${REINPLACE_CMD} -i '' \ 69 -e "s|#!/usr/bin/env -S node|#!${TRUE_PREFIX}/bin/node|" \ 70 ${PREFIX}/lib/node_modules/${PACKAGE_NAME}/bundle/gemini.js 71 # set exec bit 72 @${CHMOD} +x ${PREFIX}/lib/node_modules/${PACKAGE_NAME}/bundle/gemini.js 73 74.include <bsd.port.mk> 75