-
Notifications
You must be signed in to change notification settings - Fork 20
/
vscode-9999.ebuild
453 lines (378 loc) · 15.7 KB
/
vscode-9999.ebuild
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
# Copyright 2009-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{11..13} )
inherit desktop flag-o-matic multilib ninja-utils pax-utils portability python-any-r1 toolchain-funcs xdg-utils
DESCRIPTION="Visual Studio Code - Open Source"
HOMEPAGE="https://github.com/microsoft/vscode"
LICENSE="MIT"
SLOT="0"
VS_RIPGREP_V="1.15.9"
SRC_URI="
https://registry.yarnpkg.com/@vscode/ripgrep/-/ripgrep-${VS_RIPGREP_V}.tgz -> @vscode-ripgrep-${VS_RIPGREP_V}.tgz
"
REPO="https://github.com/microsoft/vscode"
#CODE_COMMIT_ID="ae245c9b1f06e79cec4829f8cd1555206b0ec8f2"
IUSE="api-proposals badge-providers electron-27 electron-28 electron-29 electron-31 electron-32 openvsx reh reh-web substitute-urls temp-fix"
if [[ ${PV} = *9999* ]]; then
inherit git-r3
EGIT_REPO_URI="${REPO}.git"
DOWNLOAD=""
IUSE+=" +build-online"
ELECTRON_SLOT_DEFAULT="30"
else
IUSE+=" build-online"
ELECTRON_SLOT_DEFAULT="30"
KEYWORDS="amd64 ~arm64 ~ppc64 ~x86"
DOWNLOAD="${REPO}/archive/"
if [ -z "$CODE_COMMIT_ID" ]; then
DOWNLOAD+="${PV}.tar.gz -> ${P}.tar.gz"
else
DOWNLOAD+="${CODE_COMMIT_ID}.tar.gz -> ${PN}-${CODE_COMMIT_ID}.tar.gz"
S="${WORKDIR}/${PN}-${CODE_COMMIT_ID}"
fi
fi
SRC_URI+="${DOWNLOAD}"
RESTRICT="mirror build-online? ( network-sandbox )"
REQUIRED_USE=""
COMMON_DEPEND="
>=app-crypt/libsecret-0.18.8:=
>=x11-libs/libX11-1.6.9:=
>=x11-libs/libxkbfile-1.1.0:=
virtual/krb5
sys-apps/ripgrep
electron-27? ( dev-util/electron:27 )
electron-28? ( dev-util/electron:28 )
electron-29? ( dev-util/electron:29 )
electron-31? ( dev-util/electron:31 )
electron-32? ( dev-util/electron:32 )
!electron-27? (
!electron-28? (
!electron-29? (
!electron-31? (
!electron-32? (
dev-util/electron:${ELECTRON_SLOT_DEFAULT}
) ) ) ) )
"
#TODO: oniguruma?
RDEPEND="${COMMON_DEPEND}
"
DEPEND="${COMMON_DEPEND}
"
BDEPEND="
${PYTHON_DEPS}
$(python_gen_any_dep '
dev-python/setuptools[${PYTHON_USEDEP}]
')
!temp-fix? ( net-libs/nodejs )
sys-apps/yarn
"
python_check_deps() {
python_has_version "dev-python/setuptools[${PYTHON_USEDEP}]"
}
src_unpack() {
if use electron-27; then
export ELECTRON_SLOT=27
elif use electron-28; then
export ELECTRON_SLOT=28
elif use electron-29; then
export ELECTRON_SLOT=29
elif use electron-31; then
export ELECTRON_SLOT=31
elif use electron-32; then
export ELECTRON_SLOT=32
else
export ELECTRON_SLOT=$ELECTRON_SLOT_DEFAULT
fi
if [ -z "$CODE_COMMIT_ID" ]; then
if [ -f "${DISTDIR}/${P}.tar.gz" ]; then
unpack "${P}".tar.gz || die
else
# if use electron-29 || use electron-30; then
# EGIT_BRANCH="electron-29.x.y"
# fi
git-r3_src_unpack
fi
else
unpack "${PN}-${CODE_COMMIT_ID}.tar.gz" || die
fi
}
src_prepare() {
default
# einfo "Restoring electron 12 support"
# patch -Rup1 -i "${DISTDIR}/${PN}-f95b7e935f0edf1b41a2195fbe380078b29ab8f8.patch" || die
einfo "Add PPC target to package build scripts"
patch -p1 -i "${FILESDIR}/ppc64le/add-ppc-target.patch" || die
einfo "Removing vscode-ripgrep and other dependencies"
sed -i '/ripgrep"/d' package.json || die
sed -i '/telemetry-extractor"/d' package.json || die
sed -i '/git-blame-ignore/d' build/npm/postinstall.js || die
einfo "Allowing any nodejs version"
sed -i 's/if (majorNodeVersion < 16.*/if (false){/' build/npm/preinstall.js || die
# ewarn "Removing extensions/npm, see #203"
# ewarn "Please poke Microsoft here: https://github.com/microsoft/vscode/issues/181598"
# rm -r extensions/npm
# sed -i '/extensions\/npm/d' build/npm/dirs.js || die
#TODO: applicationinsights
# sed -i '/applicationinsights/d' package.json || die
# sed -i '/buildWebNodePaths/d' build/gulpfile.compile.js || die
# sed -i '/"electron"/d' package.json || die
# sed -i '/vscode-ripgrep/d' remote/package.json || die
# sed -i '/"playwright"/d' package.json || die
sed -i '/test-web"/d' package.json || die
sed -i '/"typescript-web-server"/d' extensions/typescript-language-features/package.json || die
einfo "Editing postinstall.js"
#sed -i "s/ || arg === '--frozen-lockfile'/ || arg === '--frozen-lockfile' || arg === '--offline' || arg === '--no-progress'/" build/npm/postinstall.js || die
sed -i '/git config pull/d' build/npm/postinstall.js || die
einfo "Editing dirs.js"
if ! ( use reh || use reh-web ); then
sed -i '/remote/d' build/npm/dirs.js || die
fi
sed -i '/test\/automation/d' build/npm/dirs.js || die
sed -i '/test\/integration\/browser/d' build/npm/dirs.js || die
sed -i '/test\/smoke/d' build/npm/dirs.js || die
sed -i '/test\/monaco/d' build/npm/dirs.js || die
sed -i '/vscode-selfhost-test-provider/d' build/npm/dirs.js || die
einfo "Editing build/gulpfile.extensions.js"
sed -i '/bundle-marketplace-extensions-build/d' build/gulpfile.extensions.js || die
einfo "Editing build/gulpfile.vscode.js"
#sed -i 's/ffmpegChromium: true/ffmpegChromium: false/' build/gulpfile.vscode.js || die
sed -i '/ffmpegChromium/d' build/gulpfile.vscode.js || die
sed -i 's$// Build$process.noAsar = true;$' build/gulpfile.vscode.js || die
einfo "Editing build/gulpfile.vscode.linux.js"
sed -i 's/gulp.task(buildDebTask);$/gulp.task(prepareDebTask);gulp.task(buildDebTask);/' build/gulpfile.vscode.linux.js || die
sed -i 's/const sysroot =.*$/const sysroot = false;/' build/gulpfile.vscode.linux.js || die
sed -i 's/const dependencies =.*$/const dependencies = [];/' build/gulpfile.vscode.linux.js || die
einfo "Editing product.json"
mv product.json product.json.bak || die
sed -i '1d' product.json.bak || die
cat "${FILESDIR}/heading.json" > product.json
if use openvsx; then
cat "${FILESDIR}/openvsx.json" >> product.json
else
cat "${FILESDIR}/marketplace.json" >> product.json
fi
if use badge-providers; then
cat "${FILESDIR}/badge_prov.json" >> product.json
fi
if use api-proposals; then
cat "${FILESDIR}/api-proposals.json" >> product.json
fi
cat product.json.bak >> product.json
einfo "Disabling telemetry by default"
perl -0777 -pi -e "s/'default': true,\n\s*'restricted': true,/'default': false,'restricted': true,/m or die" src/vs/platform/telemetry/common/telemetryService.ts || die
perl -0777 -pi -e "s/'default': TelemetryConfiguration.ON,/'default': TelemetryConfiguration.OFF,/m or die" src/vs/platform/telemetry/common/telemetryService.ts || die
perl -0777 -pi -e "s/'default': true,\n\s*'tags': \['usesOnlineServices', 'telemetry'\]/'default': false,'tags': ['usesOnlineServices', 'telemetry']/m or die" src/vs/workbench/electron-sandbox/desktop.contribution.ts || die
einfo "Disabling automatic updates by default"
perl -0777 -pi -e "s/enum: \['none', 'manual', 'start', 'default'\],\n\s*default: 'default',/enum: ['none', 'manual', 'start', 'default'], default: 'none',/m or die" src/vs/platform/update/common/update.config.contribution.ts || die
if use substitute-urls; then
ebegin "Substituting urls"
#Taken from VSCodium
TELEMETRY_URLS="[^/]+\.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
eend $? || die
fi
}
src_configure() {
local myarch="$(tc-arch)"
if [[ $myarch = amd64 ]]; then
VSCODE_ARCH="x64"
elif [[ $myarch = x86 ]]; then
VSCODE_ARCH="ia32"
elif [[ $myarch = arm64 ]]; then
VSCODE_ARCH="arm64"
elif [[ $myarch = arm ]]; then
VSCODE_ARCH="armhf"
elif [[ $myarch = ppc64 ]]; then
VSCODE_ARCH="ppc64"
else
die "Failed to determine target arch, got '$myarch'."
fi
#TODO: exported but unavailable if emerge/ebuild restarted
export VSCODE_ARCH
# #TODO: should work starting with electron-22
# if use electron-20 || use electron-21 || use electron-23 || use electron-24; then
# CPPFLAGS="${CPPFLAGS} -std=c++17";
# use build-online || eerror "build-online should be enabled for nan substitution to work" || die;
# sed -i 's$"resolutions": {$"resolutions": {"nan": "^2.17.0",$' package.json || die;
# fi
#TODO: temp fix
if use electron-32; then
# CPPFLAGS="${CPPFLAGS} -std=c++20";
use build-online || eerror "build-online should be enabled for node-addon-api substitution to work" || die;
sed -i 's$"resolutions": {$"resolutions": {"node-addon-api": "^7.1.0",$' package.json || die;
fi
# if use build-online; then
# sed -i 's$"dependencies":$"resolutions": {"nan": "^2.18.0"},"dependencies":$' package.json || die;
# else
# ewarn "If have enabled electron-28/29 and the build fails, try enabling build-online"
# fi
ebegin "Installing node_modules"
# yarn config set yarn-offline-mirror ${T}/yarn_cache || die
OLD_PATH=$PATH
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/node_modules/npm/bin/node-gyp-bin:$PATH"
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/node_modules/npm/bin:$PATH"
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}:$PATH"
export PATH
export CFLAGS="${CFLAGS} -I/usr/include/electron-${ELECTRON_SLOT}/node"
export CPPFLAGS="${CPPFLAGS} -I/usr/include/electron-${ELECTRON_SLOT}/node"
#! vvvvvv mongodb-js/kerberos fixed in main (> 2.1.0)
export CXXFLAGS="${CXXFLAGS} -DNODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT"
#! ^^^^^^ mongodb-js/kerberos fixed in main (> 2.1.0)
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
# echo "$PATH"
yarn config set disable-self-update-check true || die
yarn config set nodedir /usr/include/electron-${ELECTRON_SLOT}/node || die
if ! use build-online; then
ONLINE_OFFLINE="--offline"
yarn config set yarn-offline-mirror "${DISTDIR}" || die
fi
yarn install --frozen-lockfile ${ONLINE_OFFLINE} \
--arch=${VSCODE_ARCH} --no-progress || die
# --ignore-optional
# --ignore-engines
# --production=true
# --no-progress
# --skip-integrity-check
# --verbose
# Workaround md4 see https://github.com/webpack/webpack/issues/14560
find node_modules/webpack/lib -type f -exec sed -i 's|md4|sha512|g' {} \; || die
# For webpack >= 5.61.0
sed -i 's/case "sha512"/case "md4"/' node_modules/webpack/lib/util/createHash.js || die
export PATH=${OLD_PATH}
einfo "Restoring vscode-ripgrep"
pushd "node_modules/@vscode" > /dev/null || die
tar -xf "${DISTDIR}/@vscode-ripgrep-${VS_RIPGREP_V}.tgz"
mv package ripgrep
sed -i 's$module.exports.rgPath.*$module.exports.rgPath = "/usr/bin/rg";\n$' ripgrep/lib/index.js || die
sed -i '/"postinstall"/d' ripgrep/package.json || die
popd > /dev/null || die
eend $? || die
sed -i "s/\"dependencies\": {/\"dependencies\": {\"@vscode\/ripgrep\": \"^${VS_RIPGREP_V}\",/" package.json || die
#rm extensions/css-language-features/server/test/pathCompletionFixtures/src/data/foo.asar
#rm -rf extensions/css-language-features/server/test > /dev/null || die
einfo "Editing build/lib/getVersion.js"
sed -i '/.*\!version.*/{s++if \(false\)\{+;h};${x;/./{x;q0};x;q1}' \
build/lib/getVersion.js || die
#TODO Although this allows the build to continue, it renders vscode unusable
#TODO Does it really? Investigate later
# einfo "Fixing l10n-dev"
# sed -i 's/return await import_web_tree_sitter/return null; await import_web_tree_sitter/' node_modules/@vscode/l10n-dev/dist/main.js || die
}
src_compile() {
ulimit -n 8192
if [ -d ".git" ]; then
COMMIT_ID="$(git rev-parse HEAD)"
else
if [ -z "$CODE_COMMIT_ID" ]; then
COMMIT_ID="${PV}"
else
COMMIT_ID="${CODE_COMMIT_ID}"
fi
fi
export BUILD_SOURCEVERSION="${COMMIT_ID}"
OLD_PATH=$PATH
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/node_modules/npm/bin/node-gyp-bin:$PATH"
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/node_modules/npm/bin:$PATH"
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}:$PATH"
export PATH
export NODE_OPTIONS="--max-old-space-size=12192 --heapsnapshot-near-heap-limit=5"
if use temp-fix; then
node node_modules/gulp/bin/gulp.js vscode-linux-${VSCODE_ARCH}-min || die
else
# Real nodejs needed (/usr/bin/node). See https://github.com/microsoft/vscode-l10n/issues/104
/usr/bin/node node_modules/gulp/bin/gulp.js vscode-linux-${VSCODE_ARCH}-min || die
fi
#TODO: make reh use the same node at runtime as main vscode
if use reh; then
if use temp-fix; then
node node_modules/gulp/bin/gulp.js vscode-reh-linux-${VSCODE_ARCH}-min || die
else
# Real nodejs needed (/usr/bin/node). See https://github.com/microsoft/vscode-l10n/issues/104
/usr/bin/node node_modules/gulp/bin/gulp.js vscode-reh-linux-${VSCODE_ARCH}-min || die
fi
fi
if use reh-web; then
if use temp-fix; then
node node_modules/gulp/bin/gulp.js vscode-reh-web-linux-${VSCODE_ARCH}-min || die
else
# Real nodejs needed (/usr/bin/node). See https://github.com/microsoft/vscode-l10n/issues/104
/usr/bin/node node_modules/gulp/bin/gulp.js vscode-reh-web-linux-${VSCODE_ARCH}-min || die
fi
fi
export PATH=${OLD_PATH}
}
src_install() {
OLD_PATH=$PATH
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/node_modules/npm/bin/node-gyp-bin:$PATH"
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/node_modules/npm/bin:$PATH"
PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}:$PATH"
export PATH
if use temp-fix; then
YARN_CACHE_FOLDER="${T}/.yarn-cache" node node_modules/gulp/bin/gulp.js vscode-linux-${VSCODE_ARCH}-prepare-deb || die
else
# Real nodejs needed (/usr/bin/node). See https://github.com/microsoft/vscode-l10n/issues/104
YARN_CACHE_FOLDER="${T}/.yarn-cache" /usr/bin/node node_modules/gulp/bin/gulp.js vscode-linux-${VSCODE_ARCH}-prepare-deb || die
fi
local VSCODE_HOME="/usr/$(get_libdir)/vscode"
exeinto "${VSCODE_HOME}"
sed -i '/^ELECTRON/,+3d' "${WORKDIR}"/V*/bin/code-oss || die
awk -i inplace -v text="$(cat ${FILESDIR}/read_flags_file)" '!/^#/ && !p {print text; p=1} 1' "${WORKDIR}"/V*/bin/code-oss
sed -i "s|@ELECTRON@|code-oss|" "${WORKDIR}"/V*/bin/code-oss
echo "VSCODE_PATH=\"/usr/$(get_libdir)/vscode\"
ELECTRON_PATH=\"/usr/$(get_libdir)/electron-${ELECTRON_SLOT}\"
CLI=\"\${VSCODE_PATH}/out/cli.js\"
exec /usr/bin/env ELECTRON_RUN_AS_NODE=1 \
NPM_CONFIG_NODEDIR=\"\${ELECTRON_PATH}/node/\" \
\"\${ELECTRON_PATH}/electron\" \"\${CLI}\" --app=\"\${VSCODE_PATH}\" \"\${flags[@]}\" \"\$@\"" >> "${WORKDIR}"/V*/bin/code-oss
doexe "${WORKDIR}"/VSCode-linux-${VSCODE_ARCH}/bin/code-oss
dosym "${VSCODE_HOME}/code-oss" /usr/bin/code-oss
insinto "${VSCODE_HOME}"
doins -r "${WORKDIR}"/VSCode-linux-${VSCODE_ARCH}/extensions
doins -r "${WORKDIR}"/VSCode-linux-${VSCODE_ARCH}/out
doins -r "${WORKDIR}"/VSCode-linux-${VSCODE_ARCH}/resources
doins "${WORKDIR}"/VSCode-linux-${VSCODE_ARCH}/*.json
doins "${WORKDIR}"/VSCode-linux-${VSCODE_ARCH}/node_modules.asar
doins -r "${WORKDIR}"/VSCode-linux-${VSCODE_ARCH}/node_modules.asar.unpacked
fperms +x ${VSCODE_HOME}/out/vs/base/node/cpuUsage.sh
# fperms +x ${VSCODE_HOME}/node_modules.asar.unpacked/node-pty/build/Release/spawn-helper
if use reh; then
tar cf vscode-server-linux-x64.tar.gz -C "${WORKDIR}/vscode-reh-linux-x64/" .
doins vscode-server-linux-x64.tar.gz
fi
if use reh-web; then
tar cf vscode-server-linux-x64-web.tar.gz -C "${WORKDIR}/vscode-reh-web-linux-x64/" .
doins vscode-server-linux-x64-web.tar.gz
fi
pushd .build/linux/deb/*/code-oss-*/usr/share/ > /dev/null || die
insinto /usr/share/
sed -i 's$x-scheme-handler/code-oss$x-scheme-handler/code-oss;x-scheme-handler/vscode$' \
applications/*handler.desktop || die
sed -i 's$/usr/share/code-oss/code-oss$/usr/bin/code-oss$' applications/*.desktop || die
doins -r applications bash-completion pixmaps zsh
insinto /usr/share/metainfo/
doins appdata/*
popd > /dev/null || die
export PATH=${OLD_PATH}
}
pkg_postrm() {
xdg_icon_cache_update
xdg_desktop_database_update
}
pkg_postinst() {
if use api-proposals; then
ewarn
ewarn "You have enabled insiders API, be warned:"
ewarn "this might be against Microsoft licensing terms."
ewarn
fi
elog
elog "Normally vscode ships some builtin extensions, but they are omitted here"
elog "Consult product.json for a list if you want to install them manually"
elog "ms-vscode.references-view is one of them, for example"
elog
xdg_icon_cache_update
xdg_desktop_database_update
}