aboutsummaryrefslogtreecommitdiff
path: root/misc/github-copilot-language-server/Makefile
blob: 5fdc267fabf87996de1be322474ab2969772746b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
PORTNAME=	github-copilot-language-server
DISTVERSION=	1.399.0
CATEGORIES=	misc # machine-learning
DISTFILES=	${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} \
		${NODE_HEADERS}${EXTRACT_SUFX}
DIST_SUBDIR=	${PORTNAME}

MAINTAINER=	yuri@FreeBSD.org
COMMENT=	GitHub Copilot Language Server
WWW=		https://github.com/github/copilot-language-server-release

LICENSE=	MIT
LICENSE_FILE=	${WRKSRC}/node_modules/${PACKAGE_NAME}/LICENSE

ONLY_FOR_ARCHS=		aarch64 amd64
ONLY_FOR_ARCHS_REASON=	binaries are installed in folders with architecture encoded in them, patches are welcome to fix this limitation

FETCH_DEPENDS=	npm:www/npm \
		jq:textproc/jq
BUILD_DEPENDS=	npm:www/npm \
		krb5>0:security/krb5 \
		sqlite3>0:databases/sqlite3
RUN_DEPENDS=	krb5>0:security/krb5 \
		sqlite3>0:databases/sqlite3 \
		ripgrep>0:textproc/ripgrep

USES=		nodejs:run pkgconfig python:build

WRKSRC=		${WRKDIR}/copilot-language-server-${DISTVERSION}

PACKAGE_NAME=	@github/copilot-language-server

NODE_HEADERS=	node-v24.11.0-headers

JS_ARCH=	${ARCH:S/amd64/x64/:S/aarch64/arm64/}
PLIST_SUB=	JS_ARCH=${JS_ARCH}

DD=		${DISTDIR}/${DIST_SUBDIR}

FETCH_SCRIPT=	${PORTSDIR}/Tools/scripts/npmjs-fetch-with-dependencies.sh

DEP_MODULES=			policy_watcher sqlite3 kerberos
dep_policy_watcher_npm_name=	@vscode/policy-watcher
dep_policy_watcher_version=	1.3.5
dep_sqlite3_npm_name=		@vscode/sqlite3
dep_sqlite3_version=		5.1.10-vscode
dep_kerberos_npm_name=		kerberos
dep_kerberos_version=		7.0.0

.for dep in ${DEP_MODULES}
DISTFILES+=	${dep:S/_/-/g}-${dep_${dep}_version}${EXTRACT_SUFX}
.endfor

#NO_CHECKSUM=	yes

do-fetch:
	@if ! [ -f ${DD}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} ] || \
	    ! [ -f ${DD}/${NODE_HEADERS}${EXTRACT_SUFX} ] || \
	    ! [ -f ${DD}/policy-watcher-${dep_policy_watcher_version}${EXTRACT_SUFX} ] || \
	    ! [ -f ${DD}/sqlite3-${dep_sqlite3_version}${EXTRACT_SUFX} ] || \
	    ! [ -f ${DD}/kerberos-${dep_kerberos_version}${EXTRACT_SUFX} ]; then \
		${MKDIR} ${DD} && \
		${ECHO} "====> Fetching ${NODE_HEADERS}${EXTRACT_SUFX}" && \
		${FETCH_CMD} -q https://nodejs.org/download/release/v24.11.0/${NODE_HEADERS}${EXTRACT_SUFX} -o ${DD}/${NODE_HEADERS}${EXTRACT_SUFX} && \
		${ECHO} "====> Fetching dependency policy-watcher" && \
		${SETENV} TMPDIR=${WRKDIR} ${FETCH_SCRIPT} \
			${dep_policy_watcher_npm_name} ${dep_policy_watcher_version} \
			${FILESDIR}/package-lock-policy-watcher.json \
			${DD}/policy-watcher-${dep_policy_watcher_version}${EXTRACT_SUFX} && \
		${ECHO} "====> Fetching dependency sqlite3" && \
		${SETENV} TMPDIR=${WRKDIR} ${FETCH_SCRIPT} \
			${dep_sqlite3_npm_name} ${dep_sqlite3_version} \
			${FILESDIR}/package-lock-sqlite3.json \
			${DD}/sqlite3-${dep_sqlite3_version}${EXTRACT_SUFX} && \
		${ECHO} "====> Fetching dependency kerberos" && \
		${SETENV} TMPDIR=${WRKDIR} ${FETCH_SCRIPT} \
			${dep_kerberos_npm_name} ${dep_kerberos_version} \
			${FILESDIR}/package-lock-kerberos.json \
			${DD}/kerberos-${dep_kerberos_version}${EXTRACT_SUFX} && \
		${ECHO} "====> Fetching ${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}" && \
		${SETENV} TMPDIR=${WRKDIR} ${FETCH_SCRIPT} \
			${PACKAGE_NAME} ${DISTVERSION} \
			${FILESDIR}/package-lock.json \
			${DD}/${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}; \
	fi

do-build:
	# Create directory for FreeBSD native modules
	@${MKDIR} ${WRKSRC}/node_modules/${PACKAGE_NAME}/dist/compiled/freebsd/${JS_ARCH}
	@${ECHO_MSG} "====> Building vscode-policy-watcher..."
	@cd ${WRKDIR}/policy-watcher-${dep_policy_watcher_version}/node_modules/${dep_policy_watcher_npm_name} && \
		${SETENV} HOME=${WRKDIR} PYTHON=${PYTHON_CMD} CXXFLAGS="-I${LOCALBASE}/include" \
			npm rebuild --nodedir=${WRKDIR}/${NODE_HEADERS:S/-headers//} && \
		${CP} build/Release/vscode-policy-watcher.node ${WRKSRC}/node_modules/${PACKAGE_NAME}/dist/compiled/freebsd/${JS_ARCH}/
	@${ECHO_MSG} "====> Building @vscode/sqlite3..."
	@cd ${WRKDIR}/sqlite3-${dep_sqlite3_version}/node_modules/${dep_sqlite3_npm_name} && \
		${SETENV} HOME=${WRKDIR} PYTHON=${PYTHON_CMD} CXXFLAGS="-I${LOCALBASE}/include" \
			npm rebuild --nodedir=${WRKDIR}/${NODE_HEADERS:S/-headers//} && \
		${CP} build/Release/vscode-sqlite3.node ${WRKSRC}/node_modules/${PACKAGE_NAME}/dist/compiled/freebsd/${JS_ARCH}/node_sqlite3.node
	@${ECHO_MSG} "====> Building kerberos..."
	@cd ${WRKDIR}/kerberos-${dep_kerberos_version}/node_modules/${dep_kerberos_npm_name} && \
		${SETENV} HOME=${WRKDIR} PYTHON=${PYTHON_CMD} CFLAGS="-I${LOCALBASE}/include" CXXFLAGS="-I${LOCALBASE}/include" LDFLAGS="-L${LOCALBASE}/lib" \
			npm rebuild --nodedir=${WRKDIR}/${NODE_HEADERS:S/-headers//} && \
		${CP} build/Release/kerberos.node ${WRKSRC}/node_modules/${PACKAGE_NAME}/dist/compiled/freebsd/${JS_ARCH}/

do-install:
	# install files
	cd ${WRKSRC} && \
		${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/lib
	# remove *.node files for other OSes
	@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/dist/compiled -name "*\\.node" | \
		${GREP} -v freebsd | \
		${XARGS} ${RM}
	# remove files for other OSes
	@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/dist -name "*linux*" | ${XARGS} ${RM} -r
	@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/dist -name "*win32*" | ${XARGS} ${RM} -r
	@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/dist -name "*darwin*" | ${XARGS} ${RM} -r
	# remove crypt32.node (Windows only)
	@${RM} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/dist/crypt32*.node
	# update shebang to use system node
	@${REINPLACE_CMD} -i '' \
		-e "s|#!/usr/bin/env node|#!${PREFIX}/bin/node|" \
		${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/dist/language-server.js
	# set exec bit
	@${CHMOD} +x ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/dist/language-server.js
	# create symlink in bin
	@${MKDIR} ${STAGEDIR}${PREFIX}/bin
	@${LN} -s ../lib/node_modules/${PACKAGE_NAME}/dist/language-server.js ${STAGEDIR}${PREFIX}/bin/copilot-language-server
	# strip binaries
	@${FIND} ${STAGEDIR}${PREFIX}/lib/node_modules/${PACKAGE_NAME}/dist/compiled -name "*.node" | ${XARGS} ${STRIP_CMD}

.include <bsd.port.mk>