# Template file for 'vscode' pkgname=vscode version=1.88.1 revision=1 _electronver=24.3.0 _npmver=8.6.0 hostmakedepends="pkg-config python3 python3-setuptools nodejs yarn tar git ripgrep" makedepends="libxkbfile-devel libsecret-devel libxml2-devel mit-krb5-devel ncurses-devel electron24" depends="libXtst ncurses nss xdg-utils ripgrep electron24" short_desc="Microsoft Code for Linux" maintainer="shizonic , Alex Lohr " license="MIT" homepage="https://code.visualstudio.com/" distfiles="https://github.com/microsoft/vscode/archive/refs/tags/${version}.tar.gz" checksum=c66fc273b9105f400438d236bfdcc3a2d37c4189e60b8b9e9cdedb604668c73b nocross=yes # x64 build does not cut it, it contains native code if [ "$XBPS_TARGET_WORDSIZE" = "32" ]; then broken="FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory" fi # avoid downloading electron binaries for target platform; we use # the system electron, and downloading does not work for all archs export ELECTRON_SKIP_BINARY_DOWNLOAD=1 do_configure() { # Use yarn to install dependencies echo "" > build/npm/preinstall.js # redirect telemetry urls to 0.0.0.0 # src: vscodium/undo_telemetry.sh _TELEMETRY_URLS="(dc\.services\.visualstudio\.com)|(vortex\.data\.microsoft\.com)|(mobile\.events\.data\.microsoft\.com)" _REPLACEMENT="s/$_TELEMETRY_URLS/0\.0\.0\.0/g" grep -rl --exclude-dir=.git -E $_TELEMETRY_URLS | xargs sed -i -E $_REPLACEMENT # set used electron version vsed -e "s/^target .*/target \"${_electronver}\"/" -i .yarnrc # @vscode/ripgrep attempts to install an own version of ripgrep and provides a path # we want to use our own version instead, so all we need is the fixed path (/bin/rg) # remove @vscode/ripgrep from all package.json files it is in: _PACKAGE_PATTERN="\"@vscode.ripgrep\":" grep -rl --exclude-dir=.git -E $_PACKAGE_PATTERN | xargs sed -i -E "/${_PACKAGE_PATTERN}/d" # replace path import with fixed path: _IMPORT_PATTERN="import.*from '@vscode.ripgrep';" _IMPORT_REPLACEMENT="s/${_IMPORT_PATTERN}/const rgPath = '\/bin\/rg';/" grep -rl --exclude-dir=.git -E "$_IMPORT_PATTERN" | xargs sed -i -E "$_IMPORT_REPLACEMENT" } do_build() { # Update to a more recent npm version to fix some issues npm install -g npm@${_npmver} # The default memory limit may be too low for current versions of node # to successfully build vscode. This sets it to 4GB, but # change this number if it still doesn't work for your system. _mem_limit="--max_old_space_size=4095" export NODE_OPTIONS="${_mem_limit}" /usr/lib/node_modules/npm/bin/node-gyp-bin/node-gyp install \ --target=$_electronver \ --tarball=/usr/include/electron${_electronver%%.*}/node_headers.tar.gz # ignore nodejs version checks, we can not pass it as an argument to # yarn install because it doesn't inherit properly echo "ignore-engines true" >> .yarnrc yarn install --frozen-lockfile --arch=x64 # patch node fs with graceful-fs to avoid using too many file descriptors yarn add --dev graceful-fs@4.2.11 echo "require('graceful-fs').gracefulify(require('fs'));" > ${wrksrc}/use-graceful-fs.js export NODE_OPTIONS="${_mem_limit} --require ${wrksrc}/use-graceful-fs.js" # do not checksum electron, since we're using our own build vsed -e "s/validateChecksum: true/validateChecksum: false/g" -i build/lib/electron.*s export CFLAGS="$CFLAGS -I/usr/include/node" yarn run gulp vscode-linux-x64-min } do_install() { vmkdir usr/lib/code-oss vcopy ../VSCode-linux-x64/resources usr/lib/code-oss vcopy ../VSCode-linux-x64/bin usr/lib/code-oss vmkdir usr/bin ln -sf /usr/lib/code-oss/bin/code-oss ${DESTDIR}/usr/bin/ vmkdir usr/share/applications ln -sf /usr/lib/code-oss/resources/app/resources/linux/code.desktop ${DESTDIR}/usr/share/applications/code-oss.desktop vmkdir usr/share/pixmaps ln -sf /usr/lib/code-oss/resources/app/resources/linux/code.png ${DESTDIR}/usr/share/pixmaps/code-oss.png vsed \ -e "s|ELECTRON=.*|ELECTRON=/usr/lib/electron${_electronver%%.*}/electron|g" \ -e 's|"$CLI"|"$CLI" --app="${VSCODE_PATH}/resources/app"|g' \ -i "$DESTDIR"/usr/lib/code-oss/bin/code-oss vlicense LICENSE.txt chmod -R o-w ${DESTDIR}/usr/lib/code-oss/resources/app/ }