Files
ports/deskutils/qmd/Makefile
T
Yuri Victorovich 9a49b7f5b4 deskutils/qmd: Fix build by adding python to build
Reported by:	fallout
2026-06-08 02:10:29 -07:00

125 lines
6.6 KiB
Makefile

PORTNAME= qmd
DISTVERSION= 2.1.0
CATEGORIES= deskutils
DISTFILES= ${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}
DIST_SUBDIR= ${PORTNAME}
MAINTAINER= yuri@FreeBSD.org
COMMENT= On-device hybrid search for markdown files
WWW= https://github.com/tobi/qmd
LICENSE= MIT
FETCH_DEPENDS= jq:textproc/jq \
npm:www/npm \
${LOCALBASE}/share/certs/ca-root-nss.crt:security/ca_root_nss
USES= gmake nodejs:build,run python:build sqlite
PACKAGE_NAME= @tobilu/qmd
FETCH_SCRIPT= ${PORTSDIR}/Tools/scripts/npmjs-fetch-with-dependencies.sh
NODE_ARCH= ${ARCH:S/amd64/x64/:S/aarch64/arm64/:S/i386/ia32/:S/powerpc64le/ppc64le/:S/powerpc64/ppc64/:C/armv[67]/arm/}
PLIST_SUB= NODE_ARCH=${NODE_ARCH}
# Native modules that require building
DEP_MODULES= better_sqlite3 node_llama_cpp sqlite_vec tree_sitter_go tree_sitter_javascript tree_sitter_python tree_sitter_rust tree_sitter_typescript web_tree_sitter
dep_better_sqlite3_npm_name= better-sqlite3
dep_better_sqlite3_version= 12.8.0
dep_node_llama_cpp_npm_name= node-llama-cpp
dep_node_llama_cpp_version= 3.18.1
dep_sqlite_vec_npm_name= sqlite-vec
dep_sqlite_vec_version= 0.1.9
dep_tree_sitter_go_npm_name= tree-sitter-go
dep_tree_sitter_go_version= 0.23.4
dep_tree_sitter_javascript_npm_name= tree-sitter-javascript
dep_tree_sitter_javascript_version= 0.23.1
dep_tree_sitter_python_npm_name= tree-sitter-python
dep_tree_sitter_python_version= 0.23.4
dep_tree_sitter_rust_npm_name= tree-sitter-rust
dep_tree_sitter_rust_version= 0.24.0
dep_tree_sitter_typescript_npm_name= tree-sitter-typescript
dep_tree_sitter_typescript_version= 0.23.2
dep_web_tree_sitter_npm_name= web-tree-sitter
dep_web_tree_sitter_version= 0.26.7
SQLITE_VEC_VERSION= ${dep_sqlite_vec_version}
.for dep in ${DEP_MODULES}
DISTFILES+= ${dep:S/_/-/g}-${dep_${dep}_version}${EXTRACT_SUFX}
.endfor
DISTFILES+= sqlite-vec-src-${SQLITE_VEC_VERSION}${EXTRACT_SUFX}:sqlite_vec_src
DD= ${DISTDIR}/${DIST_SUBDIR}
do-fetch:
@${MKDIR} ${DD}
@if ! [ -f ${DD}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} ]; then \
${SETENV} TMPDIR=${WRKDIR} LOCALBASE=${LOCALBASE} npm_config_force=true ${FETCH_SCRIPT} \
${PACKAGE_NAME} ${DISTVERSION} \
${FILESDIR}/package-lock.json \
${DD}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}; \
fi
.for dep in ${DEP_MODULES}
@if ! [ -f ${DD}/${dep:S/_/-/g}-${dep_${dep}_version}${EXTRACT_SUFX} ]; then \
${SETENV} TMPDIR=${WRKDIR} LOCALBASE=${LOCALBASE} ${FETCH_SCRIPT} \
${dep_${dep}_npm_name} ${dep_${dep}_version} \
${FILESDIR}/package-lock-${dep:S/_/-/g}.json \
${DD}/${dep:S/_/-/g}-${dep_${dep}_version}${EXTRACT_SUFX}; \
fi
.endfor
@if ! [ -f ${DD}/sqlite-vec-src-${SQLITE_VEC_VERSION}${EXTRACT_SUFX} ]; then \
${FETCH_CMD} -o ${DD}/sqlite-vec-src-${SQLITE_VEC_VERSION}${EXTRACT_SUFX} \
https://github.com/asg017/sqlite-vec/archive/refs/tags/v${SQLITE_VEC_VERSION}.tar.gz; \
fi
do-build:
@${ECHO_MSG} "====> Building sqlite-vec for FreeBSD..."
@${MKDIR} ${WRKDIR}/sqlite-vec-src-${SQLITE_VEC_VERSION} && \
${TAR} -xf ${DD}/sqlite-vec-src-${SQLITE_VEC_VERSION}${EXTRACT_SUFX} -C ${WRKDIR}/sqlite-vec-src-${SQLITE_VEC_VERSION} --strip-components 1
@cd ${WRKDIR}/sqlite-vec-src-${SQLITE_VEC_VERSION} && \
${SETENV} ${MAKE_ENV} ${GMAKE} loadable VERSION=${SQLITE_VEC_VERSION} CFLAGS="${CFLAGS} -I${LOCALBASE}/include -include sys/types.h"
@${CP} ${WRKDIR}/sqlite-vec-src-${SQLITE_VEC_VERSION}/dist/vec0.so ${WRKSRC}/node_modules/${PACKAGE_NAME}/node_modules/sqlite-vec/
@${ECHO_MSG} "====> Building better-sqlite3 for FreeBSD..."
@cd ${WRKDIR}/better-sqlite3-${dep_better_sqlite3_version}/node_modules/${dep_better_sqlite3_npm_name} && \
${SETENV} HOME=${WRKDIR} CFLAGS="-I${LOCALBASE}/include" CXXFLAGS="-I${LOCALBASE}/include" PYTHON=${PYTHON_CMD} \
npm rebuild --nodedir=${LOCALBASE} && \
${MKDIR} ${WRKSRC}/node_modules/${PACKAGE_NAME}/node_modules/better-sqlite3/build/Release && \
${CP} build/Release/better_sqlite3.node ${WRKSRC}/node_modules/${PACKAGE_NAME}/node_modules/better-sqlite3/build/Release/
@${ECHO_MSG} "====> Building node-llama-cpp for FreeBSD..."
@cd ${WRKDIR}/node-llama-cpp-${dep_node_llama_cpp_version}/node_modules/${dep_node_llama_cpp_npm_name} && \
${SETENV} HOME=${WRKDIR} CFLAGS="-I${LOCALBASE}/include" CXXFLAGS="-I${LOCALBASE}/include" \
npm rebuild --nodedir=${LOCALBASE} 2>&1 || true
@${MKDIR} ${WRKSRC}/node_modules/${PACKAGE_NAME}/node_modules/node-llama-cpp/llama/localBuilds/freebsd-x64/Release 2>/dev/null || true
@${CP} ${WRKDIR}/node-llama-cpp-${dep_node_llama_cpp_version}/node_modules/${dep_node_llama_cpp_npm_name}/llama/localBuilds/freebsd-x64/Release/*.so ${WRKSRC}/node_modules/${PACKAGE_NAME}/node_modules/node-llama-cpp/llama/localBuilds/freebsd-x64/Release/ 2>/dev/null || true
@${ECHO_CMD} '{"version":"3.18.1","nodeAbi":99,"platform":"freebsd","arch":"x64"}' > ${WRKSRC}/node_modules/${PACKAGE_NAME}/node_modules/node-llama-cpp/llama/lastBuild.json
@${ECHO_MSG} "====> Building tree-sitter modules for FreeBSD..."
.for dep in tree_sitter_go tree_sitter_javascript tree_sitter_python tree_sitter_rust tree_sitter_typescript web_tree_sitter
@cd ${WRKDIR}/${dep:S/_/-/g}-${dep_${dep}_version}/node_modules/${dep_${dep}_npm_name} && \
${SETENV} HOME=${WRKDIR} CFLAGS="-I${LOCALBASE}/include" CXXFLAGS="-I${LOCALBASE}/include" \
npm rebuild --nodedir=${LOCALBASE} && \
${MKDIR} ${WRKSRC}/node_modules/${PACKAGE_NAME}/node_modules/${dep_${dep}_npm_name}/build/Release && \
${CP} build/Release/*.node ${WRKSRC}/node_modules/${PACKAGE_NAME}/node_modules/${dep_${dep}_npm_name}/build/Release/ 2>/dev/null || true
.endfor
do-install:
@${MKDIR} ${STAGEDIR}${PREFIX}/lib/node_modules/${PORTNAME}
@cd ${WRKSRC}/node_modules/${PACKAGE_NAME} && ${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/lib/node_modules/${PORTNAME}
@${MKDIR} ${STAGEDIR}${PREFIX}/bin
@${ECHO_CMD} '#!/bin/sh' > ${STAGEDIR}${PREFIX}/bin/qmd
@${ECHO_CMD} 'exec ${PREFIX}/bin/node ${PREFIX}/lib/node_modules/${PORTNAME}/dist/cli/qmd.js "$$@"' \
>> ${STAGEDIR}${PREFIX}/bin/qmd
@${CHMOD} +x ${STAGEDIR}${PREFIX}/bin/qmd
@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PORTNAME}/node_modules/node-llama-cpp/llama/localBuilds -type d -exec ${CHMOD} 777 {} \; 2>/dev/null || true
@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PORTNAME}/node_modules/node-llama-cpp/llama/localBuilds -type f -exec ${CHMOD} 666 {} \; 2>/dev/null || true
@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PORTNAME} -name prebuilds -type d -exec ${RM} -rf {} +
@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PORTNAME} \( -name "*.node" -or -name "*.so" \) | ${XARGS} ${STRIP_CMD}
post-install:
@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules -type d -empty -delete
@cd ${STAGEDIR}${PREFIX} && \
${FIND} * -type f -or -type l >> ${TMPPLIST}
.include <bsd.port.mk>