PORTNAME= vscode DISTVERSION= ${VSCODE_VERSION} CATEGORIES= editors MASTER_SITES= https://github.com/tagattie/FreeBSD-VSCode/releases/download/${DISTVERSION}/:node_modules PKGNAMESUFFIX= -reh DISTFILES= vscode-node-modules-${DISTVERSION}${EXTRACT_SUFX}:node_modules DIST_SUBDIR= ${PORTNAME} MAINTAINER= tagattie@FreeBSD.org COMMENT= Visual Studio Code - Open Source ("Code - OSS") WWW= https://code.visualstudio.com/ LICENSE= MIT LICENSE_FILE= ${WRKSRC}/LICENSE.txt ONLY_FOR_ARCHS= aarch64 amd64 EXTRACT_DEPENDS=jq:textproc/jq \ node${NODEJS_VERSION}>0:www/node${NODEJS_VERSION} BUILD_DEPENDS= typescript-go>=7.0.0.g20260408:lang/typescript-go \ jq:textproc/jq \ rg:textproc/ripgrep LIB_DEPENDS= libbrotlidec.so:archivers/brotli \ libcares.so:dns/c-ares \ libicui18n.so:devel/icu \ libllhttp.so:www/llhttp \ libnghttp2.so:www/libnghttp2 \ libnghttp3.so:www/libnghttp3 \ libngtcp2.so:net/libngtcp2 \ libsimdjson.so:devel/simdjson \ libuv.so:devel/libuv \ libzstd.so:archivers/zstd \ libsqlite3.so:databases/sqlite3 \ libsecret-1.so:security/libsecret USES= cargo electron:env gssapi:mit localbase:ldflags \ nodejs:22,build pkgconfig python:build shebangfix USE_GITHUB= yes GH_ACCOUNT= microsoft # See ${WRKSRC}/node_modules/@github/copilot/clipboard/node_modules/@teddyzhu/clipboard/package.json for node-clipboard-rs version GH_TUPLE= Teddy-Zhu:node-clipboard-rs:v0.0.5:node_clipboard_rs/node-clipboard-rs # See ${WRKSRC}/build/rspack/node_modules/@rspack/binding/package.json for rspack version GH_TUPLE+= web-infra-dev:rspack:v1.7.10:rspack/rspack CARGO_CARGOTOML_CLIPBOARD= ${WRKSRC}/node-clipboard-rs/Cargo.toml CARGO_CARGOLOCK_CLIPBOARD= ${WRKSRC}/node-clipboard-rs/Cargo.lock CARGO_CARGOTOML_RSPACK= ${WRKSRC}/rspack/Cargo.toml CARGO_CARGOLOCK_RSPACK= ${WRKSRC}/rspack/Cargo.lock CARGO_CARGOTOML= ${CARGO_CARGOTOML_CLIPBOARD} CARGO_CARGOLOCK= ${CARGO_CARGOLOCK_CLIPBOARD} CARGO_BUILD= no CARGO_INSTALL= no CARGO_TEST= no USE_ELECTRON= npm:npm SHEBANG_REGEX= ./(extensions|node_modules|resources|scripts|src)/.*(\.(pl|py|sh)|makeBlacker|makeFF)$$ PATHFIX_FILES= src/vs/workbench/contrib/debug/node/terminals.ts MAKE_ENV= BUILD_SOURCEVERSION=${SOURCE_COMMIT_HASH} \ VSCODE_QUALITY=stable BINARY_ALIAS= python=${PYTHON_CMD} .include "Makefile.version" .include NODEJS_ARCH= ${ELECTRON_ARCH} NODEJS_DIR= ${PORTSDIR}/www/node${NODEJS_VERSION} .include "${NODEJS_DIR}/Makefile.version" post-extract: @${CP} ${WRKSRC}/build/.moduleignore.linux \ ${WRKSRC}/build/.moduleignore.freebsd @${ECHO_MSG} "===> Installing node modules in ${WRKSRC}" @${TAR} -xzf ${WRKDIR}/vscode-.-node-modules${EXTRACT_SUFX} -C ${WRKSRC} @for dir in `node --input-type=module -e "console.log(JSON.stringify((await import('${WRKSRC}/build/npm/dirs.ts')).dirs))" | jq -r '.[]'`; do \ if [ -f ${WRKDIR}/vscode-`echo $${dir} | tr _ __ | tr / _`-node-modules${EXTRACT_SUFX} ]; then \ ${ECHO_MSG} "===> Installing node modules in ${WRKSRC}/$${dir}"; \ ${TAR} -xzf ${WRKDIR}/vscode-`echo $${dir} | tr _ __ | tr / _`-node-modules${EXTRACT_SUFX} \ -C ${WRKSRC}/$${dir}; \ fi; \ done post-patch: @${REINPLACE_CMD} -E 's|^(target=").*(")$$|\1${NODEJS_PORTVERSION}\2|' \ ${WRKSRC}/remote/.npmrc @${REINPLACE_CMD} -e 's/%%DISTVERSION%%/${DISTVERSION}/g' \ ${WRKSRC}/build/gulpfile.reh.ts \ ${WRKSRC}/build/gulpfile.vscode.ts @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \ ${WRKSRC}/node_modules/@typescript/native-preview/lib/getExePath.js @(cd ${WRKSRC} && \ ${FIND} -E . -type f -iregex '${SHEBANG_REGEX}' \ -exec ${SED} -i '' -e "s|/usr/bin/pgrep|/bin/pgrep|g" {} ';') @(cd ${WRKSRC} && \ ${FIND} ${PATHFIX_FILES} -type f \ -exec ${SED} -i '' -e "s|/usr/bin/pgrep|/bin/pgrep|g" {} ';') @${SETENV} FILESDIR=${FILESDIR} \ ${SH} ${FILESDIR}/update-product-json.sh ${WRKSRC} pre-build: # rebuild native node modules in subdirectories @for dir in `node --input-type=module -e "console.log(JSON.stringify((await import('${WRKSRC}/build/npm/dirs.ts')).dirs))" | jq -r '.[]'`; do \ for subdir in `${FIND} ${WRKSRC}/$${dir}/node_modules -type f -name binding.gyp -exec ${DIRNAME} {} ';' 2> /dev/null`; do \ ${ECHO_MSG} "===> Rebuilding native modules in $${subdir}"; \ if [ "`${ECHO_CMD} $${subdir} | ${GREP} /build/`" ]; then \ cd $${subdir} && \ ${SETENV} ${MAKE_ENV} \ npm_config_runtime=node \ npm_config_target=${NODEJS_PORTVERSION} \ npm_config_nodedir=${LOCALBASE} \ node-gyp --userconfig=${WRKSRC}/build/.npmrc rebuild; \ elif [ "`${ECHO_CMD} $${subdir} | ${GREP} /remote/`" ]; then \ cd $${subdir} && \ ${SETENV} ${MAKE_ENV} \ npm_config_runtime=node \ npm_config_target=${NODEJS_PORTVERSION} \ npm_config_nodedir=${LOCALBASE} \ node-gyp --userconfig=${WRKSRC}/remote/.npmrc rebuild; \ fi; \ done; \ done # build native node module for @teddyzhu/clipboard @${CARGO_CARGO_RUN} build \ --manifest-path ${CARGO_CARGOTOML_CLIPBOARD} \ --verbose --verbose \ ${CARGO_BUILD_ARGS} ${CP} ${CARGO_TARGET_DIR}/*/libclipboard.so \ ${WRKSRC}/remote/node_modules/@github/copilot/clipboard/node_modules/@teddyzhu/clipboard/clipboard.freebsd-${NODEJS_ARCH}.node # # build native node module for @rspack/binding # @${CARGO_CARGO_RUN} build \ # --manifest-path ${CARGO_CARGOTOML_RSPACK} \ # --verbose --verbose \ # ${CARGO_BUILD_ARGS} # ${CP} ${CARGO_TARGET_DIR}/*/librspack.so \ # ${WRKSRC}/build/rspack/node_modules/@rspack/binding/rspack.freebsd-${ELECTRON_ARCH}.node # copy rg binary file to @vscode/ripgrep node module directory @${MKDIR} ${WRKSRC}/build/node_modules/@vscode/ripgrep/bin \ ${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin ${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/build/node_modules/@vscode/ripgrep/bin ${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin # copy rg binary file to @github/copilot node modules directory @${MKDIR} ${WRKSRC}/remote/node_modules/@github/copilot/ripgrep/bin/freebsd-${NODEJS_ARCH} ${CP} ${LOCALBASE}/bin/rg \ ${WRKSRC}/remote/node_modules/@github/copilot/ripgrep/bin/freebsd-${NODEJS_ARCH} # copy keytar.node binary file to @github/copilot node modules directory @${MKDIR} ${WRKSRC}/remote/node_modules/@github/copilot/prebuilds/freebsd-${NODEJS_ARCH} ${CP} ${WRKSRC}/build/node_modules/keytar/build/Release/keytar.node \ ${WRKSRC}/remote/node_modules/@github/copilot/prebuilds/freebsd-${NODEJS_ARCH} # copy pty.node binary file to @github/copilot node modules directory ${CP} ${WRKSRC}/remote/node_modules/node-pty/build/Release/pty.node \ ${WRKSRC}/remote/node_modules/@github/copilot/prebuilds/freebsd-${NODEJS_ARCH} do-build: # setup download cache for node @${MKDIR} ${WRKSRC}/.build/node/v${NODEJS_PORTVERSION}/linux-${NODEJS_ARCH} @${CP} ${LOCALBASE}/bin/node \ ${WRKSRC}/.build/node/v${NODEJS_PORTVERSION}/linux-${NODEJS_ARCH} # remove backup files so that they are not included in the package @${FIND} ${WRKSRC} -type f \( -name '*.bak' -o -name '*.orig' -o -name '*~' \) -delete # build vscode remote extension host cd ${WRKSRC} && \ ${SETENV} ${MAKE_ENV} \ npm_config_runtime=node \ npm_config_target=${NODEJS_PORTVERSION} \ npm_config_nodedir=${LOCALBASE} \ npm --userconfig=${WRKSRC}/remote/.npmrc run compile && \ ${SETENV} ${MAKE_ENV} \ npm_config_runtime=node \ npm_config_target=${NODEJS_PORTVERSION} \ npm_config_nodedir=${LOCALBASE} \ npm --userconfig=${WRKSRC}/remote/.npmrc run \ gulp vscode-reh-linux-${NODEJS_ARCH}-min # rename linux directory to freebsd @${MV} ${WRKDIR}/vscode-reh-linux-${NODEJS_ARCH}/node_modules/@github/copilot/prebuilds/linux-${NODEJS_ARCH} \ ${WRKDIR}/vscode-reh-linux-${NODEJS_ARCH}/node_modules/@github/copilot/prebuilds/freebsd-${NODEJS_ARCH} # strip native node modules @${FIND} ${WRKDIR}/vscode-reh-linux-${NODEJS_ARCH} -type f -exec ${FILE} {} ';' | \ ${GREP} 'ELF.*FreeBSD' | ${AWK} -F ': ' '{print $$1}' | ${XARGS} ${STRIP_CMD} ${TAR} -czf ${WRKDIR}/vscode-reh-${OPSYS:tl}-${NODEJS_ARCH}-${DISTVERSION}.tar.gz \ -C ${WRKDIR}/vscode-reh-linux-${NODEJS_ARCH} . .include