projects/guix·blob javascript-team · refs

1148 lines · 49.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2026 Danny Milosavljevic <[email protected]>
3;;;
4;;; This file is part of GNU Guix.
5;;;
6;;; GNU Guix is free software; you can redistribute it and/or modify it
7;;; under the terms of the GNU General Public License as published by
8;;; the Free Software Foundation; either version 3 of the License, or (at
9;;; your option) any later version.
10;;;
11;;; GNU Guix is distributed in the hope that it will be useful, but
12;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14;;; GNU General Public License for more details.
15;;;
16;;; You should have received a copy of the GNU General Public License
17;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
18
19(define-module (gnu packages netbeans)
20 #:use-module ((guix licenses) #:prefix license:)
21 #:use-module (guix packages)
22 #:use-module (guix download)
23 #:use-module (guix git-download)
24 #:use-module (guix gexp)
25 #:use-module (guix utils)
26 #:use-module (guix build-system ant)
27 #:use-module (gnu packages)
28 #:use-module (gnu packages base)
29 #:use-module (gnu packages bash)
30 #:use-module (gnu packages compression)
31 #:use-module (gnu packages gawk)
32 #:use-module (gnu packages glib)
33 #:use-module (gnu packages gnome)
34 #:use-module (gnu packages java)
35 #:use-module (gnu packages java-graphics)
36 #:use-module (gnu packages java-xml)
37 #:use-module (gnu packages web))
38
39(define-public java-jemmy-2.3.1.1
40 (package
41 (name "java-jemmy")
42 (version "2.3.1.1")
43 (source
44 (origin
45 (method url-fetch)
46 ;; This is the exact source payload referenced by NetBeans' own
47 ;; harness/jemmy/external/binaries-list.
48 (uri (string-append
49 "https://netbeans.osuosl.org/binaries/"
50 "49197106637CCA8C337AF16CC01BB5D9DEC7E179-jemmy-"
51 version "-src.zip"))
52 (sha256
53 (base32 "183qppmxlnzdniw2qg92ng9g42hyn2823gbnkjxrps4kdy9blwz1"))))
54 (build-system ant-build-system)
55 (arguments
56 (list
57 #:jdk openjdk17
58 #:tests? #f
59 #:modules
60 '((guix build utils)
61 (guix build ant-build-system)
62 (guix build java-utils)
63 (srfi srfi-13))
64 #:phases
65 #~(modify-phases %standard-phases
66 (replace 'build
67 (lambda _
68 (let ((source-files (find-files "." "\\.java$")))
69 (mkdir-p "build/classes")
70 (for-each
71 (lambda (file)
72 (unless (string-suffix? ".java" file)
73 (let ((destination
74 (string-append "build/classes/" file)))
75 (mkdir-p (dirname destination))
76 (copy-file file destination))))
77 (find-files "." ".*"))
78 (apply invoke "javac" "-d" "build/classes" source-files)
79 (invoke "jar" "-cf" "build/jemmy-2.3.1.1.jar"
80 "-C" "build/classes" ".")
81 (apply invoke "javadoc"
82 "-quiet"
83 "-Xdoclint:none"
84 "-d" "build/doc"
85 source-files)
86 (with-directory-excursion "build/doc"
87 (invoke "zip" "-qrX" "../jemmy-2.3.1.1-doc.zip" "."))
88 (invoke "zip" "-qrX" "build/jemmy-2.3.1.1-src.zip" ".")
89 #t)))
90 (replace 'install
91 (lambda* (#:key outputs #:allow-other-keys)
92 (let ((share-java
93 (string-append (assoc-ref outputs "out")
94 "/share/java")))
95 (mkdir-p share-java)
96 (for-each
97 (lambda (file)
98 (install-file file share-java))
99 '("build/jemmy-2.3.1.1.jar"
100 "build/jemmy-2.3.1.1-doc.zip"
101 "build/jemmy-2.3.1.1-src.zip"))
102 #t))))))
103 (home-page "https://web.archive.org/web/20120822233211/http://java.net/projects/jemmy")
104 (synopsis "Jemmy Swing UI testing library")
105 (description
106 "Jemmy is a Java library for automating and testing Swing and AWT user
107interfaces.")
108 (native-inputs
109 (list unzip))
110 (license license:cddl1.0)))
111
112(define java-apache-xml-commons-resolver-netbeans-1.2
113 (package
114 (inherit java-apache-xml-commons-resolver)
115 (name "java-apache-xml-commons-resolver-netbeans")
116 (source
117 (origin
118 (inherit (package-source java-apache-xml-commons-resolver))
119 (patches
120 (search-patches
121 "java-apache-xml-commons-resolver-1.2-netbeans.patch"))))))
122
123(define-public netbeans
124 (package
125 (name "netbeans")
126 (version "25")
127 (source
128 (origin
129 (method url-fetch)
130 (uri "https://archive.apache.org/dist/netbeans/netbeans/25/netbeans-25-source.zip")
131 (sha256
132 (base32 "10w1jjg722k7y4dqcazi7q07zykqhs8rzbvdrnlm0b1cpf5qr0m1"))
133 (patches
134 (search-patches "netbeans-25-source-only-build.patch"
135 "netbeans-25-nativeexecution-paths.patch"
136 "netbeans-25-terminal-no-login-shell.patch"
137 "netbeans-25-wayland-font-rendering.patch"))
138 (modules '((guix build utils)))
139 (snippet
140 '(begin
141 ;; The official source archive is clean apart from source-adjacent
142 ;; build payloads; remove them and rebuild what NetBeans needs.
143 (for-each delete-file
144 (append (find-files "." "\\.jar$")
145 (find-files "." "\\.class$")
146 (find-files "." "\\.zip$")
147 (find-files "." "\\.exe$")
148 (find-files "." "\\.dll$")
149 (find-files "." "\\.so$")
150 (find-files "." "\\.so\\.")
151 (find-files "." "\\.dylib$")
152 (find-files "." "\\.jnilib$")))
153 #t))))
154 (build-system ant-build-system)
155 (arguments
156 (list
157 #:jdk openjdk17
158 #:ant ant/java8-empty-etc
159 #:tests? #f
160 #:modules
161 '((guix build utils)
162 (guix build ant-build-system)
163 (ice-9 match)
164 (ice-9 rdelim)
165 (srfi srfi-1)
166 (srfi srfi-13))
167 #:phases
168 #~(modify-phases %standard-phases
169 (add-after 'unpack 'prepare-build
170 (lambda* (#:key inputs #:allow-other-keys)
171 (define platform-modules
172 '("api.htmlui"
173 "applemenu"
174 "autoupdate.cli"
175 "autoupdate.services"
176 "autoupdate.ui"
177 "core.nativeaccess"
178 "core.network"
179 "htmlui"
180 "javahelp"
181 "junitlib"
182 "libs.batik.read"
183 "libs.javafx"
184 "libs.javax.inject"
185 "libs.junit4"
186 "libs.junit5"
187 "libs.testng"
188 "masterfs.macosx"
189 "masterfs.windows"
190 "net.java.html"
191 "net.java.html.boot"
192 "net.java.html.boot.fx"
193 "net.java.html.boot.script"
194 "net.java.html.geo"
195 "net.java.html.json"
196 "net.java.html.sound"
197 "netbinox"
198 "o.apache.commons.commons_io"
199 "o.apache.commons.lang3"
200 "o.apache.commons.logging"
201 "o.n.html.ko4j"
202 "o.n.html.presenters.spi"
203 "o.n.html.xhr4j"
204 "templatesui"))
205 (define ide-modules
206 '("bugtracking"
207 "bugtracking.bridge"
208 "bugtracking.commons"
209 "bugzilla"
210 "c.google.gson"
211 "c.google.guava"
212 "c.google.guava.failureaccess"
213 "core.browser.webview"
214 "css.editor"
215 "css.lib"
216 "css.model"
217 "css.prep"
218 "css.visual"
219 "db"
220 "db.core"
221 "db.dataview"
222 "db.drivers"
223 "db.kit"
224 "db.metadata.model"
225 "db.mysql"
226 "db.sql.editor"
227 "db.sql.visualeditor"
228 "dbapi"
229 "derby"
230 "docker.api"
231 "docker.editor"
232 "docker.ui"
233 "go.lang"
234 "html"
235 "html.custom"
236 "html.editor"
237 "html.editor.lib"
238 "html.indexing"
239 "html.lexer"
240 "html.parser"
241 "html.validation"
242 "httpserver"
243 "hudson"
244 "hudson.git"
245 "hudson.mercurial"
246 "hudson.subversion"
247 "hudson.tasklist"
248 "hudson.ui"
249 "javascript2.debug"
250 "javascript2.debug.ui"
251 "languages.go"
252 "languages.hcl"
253 "languages.toml"
254 "languages.yaml"
255 "lexer.antlr4"
256 "libs.antlr3.runtime"
257 "libs.antlr4.runtime"
258 "libs.commons_compress"
259 "libs.commons_net"
260 "libs.flexmark"
261 "libs.freemarker"
262 "libs.graalsdk"
263 "libs.graalsdk.system"
264 "libs.ini4j"
265 "libs.jaxb"
266 "libs.jcodings"
267 "libs.json_simple"
268 "libs.snakeyaml_engine"
269 "libs.svnClientAdapter"
270 "libs.svnClientAdapter.javahl"
271 "libs.tomlj"
272 "libs.tomljava"
273 "libs.truffleapi"
274 "libs.xerces"
275 "localtasks"
276 "lsp.client"
277 "markdown"
278 "mercurial"
279 "mylyn.util"
280 "o.apache.commons.httpclient"
281 "o.apache.commons.lang"
282 "o.apache.ws.commons.util"
283 "o.apache.xmlrpc"
284 "o.eclipse.core.contenttype"
285 "o.eclipse.core.jobs"
286 "o.eclipse.core.net"
287 "o.eclipse.core.runtime"
288 "o.eclipse.core.runtime.compatibility.auth"
289 "o.eclipse.equinox.app"
290 "o.eclipse.equinox.common"
291 "o.eclipse.equinox.preferences"
292 "o.eclipse.equinox.registry"
293 "o.eclipse.equinox.security"
294 "o.eclipse.jgit.lfs"
295 "o.eclipse.mylyn.bugzilla.core"
296 "o.eclipse.mylyn.commons.core"
297 "o.eclipse.mylyn.commons.net"
298 "o.eclipse.mylyn.commons.repositories.core"
299 "o.eclipse.mylyn.commons.xmlrpc"
300 "o.eclipse.mylyn.tasks.core"
301 "o.eclipse.mylyn.wikitext.confluence.core"
302 "o.eclipse.mylyn.wikitext.core"
303 "o.eclipse.mylyn.wikitext.markdown.core"
304 "o.eclipse.mylyn.wikitext.textile.core"
305 "selenium2"
306 "selenium2.server"
307 "servletapi"
308 "spellchecker"
309 "spellchecker.bindings.htmlxml"
310 "spellchecker.bindings.properties"
311 "spellchecker.dictionary_en"
312 "spellchecker.kit"
313 "subversion"
314 "team.ide"
315 "textmate.lexer"
316 "usersguide"
317 "versioning.system.cvss.installer"
318 "web.browser.api"
319 "web.common"
320 "web.common.ui"
321 "web.indent"
322 "web.webkit.debugging"
323 "xml.jaxb.api"
324 "xml.tax"
325 "xml.text.obsolete90"
326 "xml.tools"
327 "xml.wsdl.model"
328 "xsl"))
329 (define extide-modules
330 '("gradle"
331 "gradle.dists"
332 "gradle.editor"
333 "libs.gradle"))
334 (define thirdparty-modules
335 '("libs.javafx.linux"
336 "libs.javafx.linux.aarch64"
337 "libs.javafx.macosx"
338 "libs.javafx.macosx.aarch64"
339 "libs.javafx.win"))
340 (define harness-modules
341 '("jellytools.platform"
342 "jemmy"
343 "libs.nbi.ant"
344 "libs.nbi.engine"
345 "nbjunit"
346 "o.n.insane"))
347 (define nb-modules
348 '("autoupdate.pluginimporter"
349 "bugzilla.exceptionreporter"
350 "updatecenters"))
351 (define cluster-references
352 '("nb.cluster.3rdparty"
353 "nb.cluster.javafx"))
354 (define (read-lines file)
355 (call-with-input-file file
356 (lambda (port)
357 (let loop ((lines '()))
358 (let ((line (read-line port)))
359 (if (eof-object? line)
360 (reverse lines)
361 (loop (cons line lines))))))))
362 (define (write-lines file lines)
363 (call-with-output-file file
364 (lambda (port)
365 (for-each
366 (lambda (line)
367 (display line port)
368 (newline port))
369 lines))))
370 (define (filter-lines file pred)
371 (write-lines file (filter pred (read-lines file))))
372 (define (drop-lines-containing file patterns)
373 (filter-lines
374 file
375 (lambda (line)
376 (not (any (lambda (pattern)
377 (string-contains line pattern))
378 patterns)))))
379 (define (append-string file text)
380 (let ((port (open-file file "a")))
381 (display text port)
382 (close-port port)))
383 (define (module-line? line module)
384 (let ((trimmed (string-trim-both line)))
385 (or (string=? trimmed module)
386 (string=? trimmed (string-append module ",\\")))))
387 (define (drop-module-lines file modules)
388 (filter-lines
389 file
390 (lambda (line)
391 (not (any (lambda (module) (module-line? line module))
392 modules)))))
393 (define (indented-line? line)
394 (and (not (string-null? line))
395 (let ((c (string-ref line 0)))
396 (or (char=? c #\space)
397 (char=? c #\tab)))))
398 (define (strip-list-terminator line)
399 (cond
400 ((string-suffix? ",\\" line)
401 (substring line 0 (- (string-length line) 2)))
402 ((string-suffix? "," line)
403 (substring line 0 (- (string-length line) 1)))
404 (else line)))
405 (define (trim-trailing-list-commas file)
406 (write-lines
407 file
408 (let loop ((rest (read-lines file))
409 (out '()))
410 (if (null? rest)
411 (reverse out)
412 (let* ((line (car rest))
413 (next (and (pair? (cdr rest))
414 (cadr rest)))
415 (fixed
416 (if (and (indented-line? line)
417 (or (string-suffix? ",\\" line)
418 (string-suffix? "," line))
419 (or (not next)
420 (string-null? next)
421 (not (indented-line? next))))
422 (strip-list-terminator line)
423 line)))
424 (loop (cdr rest) (cons fixed out)))))))
425 (define (remove-dependency-blocks file modules)
426 (let loop ((rest (read-lines file))
427 (out '()))
428 (if (null? rest)
429 (write-lines file out)
430 (let ((line (car rest)))
431 (if (string-contains line "<dependency>")
432 (let dep-loop ((rest (cdr rest))
433 (block (list line)))
434 (if (null? rest)
435 (error "unterminated dependency block" file)
436 (let ((next (car rest))
437 (tail (cdr rest)))
438 (if (string-contains next "</dependency>")
439 (let* ((full-block (append block (list next)))
440 (drop?
441 (any (lambda (module)
442 (any (lambda (entry)
443 (string-contains
444 entry
445 (string-append
446 "<code-name-base>"
447 module
448 "</code-name-base>")))
449 full-block))
450 modules)))
451 (loop tail
452 (if drop?
453 out
454 (append out full-block))))
455 (dep-loop tail
456 (append block (list next)))))))
457 (loop (cdr rest) (append out (list line))))))))
458 (define (symlink-input-file input pattern destination)
459 (match (find-files (assoc-ref inputs input) pattern)
460 ((file)
461 (mkdir-p (dirname destination))
462 (symlink file destination))
463 (()
464 (error "symlink-input-file: no match for" pattern
465 "in input" input))
466 (files
467 (error "symlink-input-file: multiple matches for" pattern
468 "in input" input files))))
469 (define (make-ant-binary-zip)
470 (let* ((ant-root (assoc-ref inputs "ant"))
471 (source-root (getcwd))
472 (work-dir (string-append (getcwd) "/build-support"))
473 (dist-dir (string-append work-dir "/apache-ant-1.10.14"))
474 (zip-file (string-append source-root
475 "/extide/o.apache.tools.ant.module/external/apache-ant-1.10.14-bin.zip")))
476 (mkdir-p work-dir)
477 (for-each
478 (lambda (subdir)
479 (let ((source (string-append ant-root "/" subdir)))
480 (when (file-exists? source)
481 (copy-recursively source
482 (string-append dist-dir "/" subdir)))))
483 '("bin" "etc" "lib"))
484 (mkdir-p (dirname zip-file))
485 (with-directory-excursion work-dir
486 (invoke "zip" "-qrX" zip-file
487 "apache-ant-1.10.14"))))
488 (define (make-nativeexecution-binary-zip)
489 (let* ((source-root (getcwd))
490 (tools-root (string-append source-root
491 "/ide/dlight.nativeexecution/tools"))
492 (binary-root (string-append source-root
493 "/ide/dlight.nativeexecution/release/bin/nativeexecution"))
494 (zip-root (string-append source-root
495 "/build-support/nativeexecution"))
496 (platform-root (string-append zip-root "/Linux-x86_64"))
497 (zip-file (string-append source-root
498 "/ide/dlight.nativeexecution/external/exechlp-1.2.zip"))
499 (make (or (which "gmake") (which "make"))))
500 (mkdir-p platform-root)
501 (with-directory-excursion tools-root
502 (for-each
503 (lambda (dir)
504 (with-directory-excursion dir
505 (invoke make "CONF=Linux-x86_64" "clean")
506 (invoke make "CONF=Linux-x86_64" "all")))
507 '("." "pty" "killall" "unbuffer")))
508 (for-each
509 (lambda (spec)
510 (copy-file (car spec) (cdr spec)))
511 `((,(string-append binary-root "/Linux-x86_64/process_start")
512 . ,(string-append platform-root "/process_start"))
513 (,(string-append binary-root "/Linux-x86_64/pty_open")
514 . ,(string-append platform-root "/pty_open"))
515 (,(string-append binary-root "/Linux-x86_64/sigqueue")
516 . ,(string-append platform-root "/sigqueue"))
517 (,(string-append binary-root "/Linux-x86_64/stat")
518 . ,(string-append platform-root "/stat"))
519 (,(string-append tools-root
520 "/pty/dist/Linux-x86_64/pty")
521 . ,(string-append platform-root "/pty"))
522 (,(string-append tools-root
523 "/killall/dist/Linux-x86_64/killall")
524 . ,(string-append platform-root "/killall"))
525 (,(string-append tools-root
526 "/unbuffer/dist/Linux-x86_64/unbuffer.so")
527 . ,(string-append platform-root "/unbuffer.so"))))
528 (mkdir-p (dirname zip-file))
529 (with-directory-excursion zip-root
530 (invoke "zip" "-qrX" zip-file "Linux-x86_64"))))
531 (let* ((cluster-properties
532 (find file-exists?
533 '("nbbuild/cluster.properties"
534 "../nbbuild/cluster.properties"
535 "../../nbbuild/cluster.properties"
536 "source/nbbuild/cluster.properties"
537 "../source/nbbuild/cluster.properties"
538 "source/source/nbbuild/cluster.properties")))
539 (source-root
540 (and cluster-properties
541 (dirname (dirname cluster-properties)))))
542 (unless source-root
543 (error "unable to locate NetBeans source root"))
544 (chdir source-root))
545 (setenv "HOME" (getcwd))
546 (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
547 (setenv "PATH"
548 (string-append (assoc-ref inputs "ant") "/bin:"
549 (assoc-ref inputs "jdk") "/bin:"
550 (assoc-ref inputs "zip") "/bin:"
551 (getenv "PATH")))
552
553 ;; Never download or rely on upstream-prebuilt payloads.
554 (for-each
555 (lambda (file)
556 (call-with-output-file file
557 (lambda (port)
558 (display "" port))))
559 (append (find-files "." "binaries-list$")
560 (find-files "." "binariesembedded-list$")))
561
562 ;; The git module declares a hard requirement on javahelp,
563 ;; which needs an external binary (jhall-2.0_05.jar).
564 ;; Remove the requirement so git loads without help support.
565 (substitute* "ide/git/manifest.mf"
566 (("OpenIDE-Module-Requires: org\\.netbeans\\.api\\.javahelp\\.Help")
567 "OpenIDE-Module-Requires: "))
568
569 ;; The extbrowser module references Windows DDE DLLs from
570 ;; an external zip. Remove those lines so the build does
571 ;; not try to extract the zip.
572 (substitute* "ide/extbrowser/nbproject/project.properties"
573 (("(release\\.external/extbrowser-dlls-[^!]*!/extbrowser\\.dll)=modules/lib/extbrowser\\.dll" _ p)
574 (string-append "#" p))
575 (("(release\\.external/extbrowser-dlls-[^!]*!/extbrowser64\\.dll)=modules/lib/extbrowser64\\.dll" _ p)
576 (string-append "#" p)))
577
578 ;; JNA maps Native.load("c", ...) to dlopen("libc.so"),
579 ;; but on Guix libc.so is a linker script that dlopen
580 ;; cannot handle. Use "libc.so.6" which dlopen finds
581 ;; directly since the JVM is linked against it.
582 (substitute* "platform/masterfs.linux/src/org/netbeans/modules/masterfs/watcher/linux/LinuxNotifier.java"
583 (("Native\\.load\\(\"c\"")
584 "Native.load(\"libc.so.6\"")
585 (("NativeLibrary\\.getInstance\\(\"c\"\\)")
586 "NativeLibrary.getInstance(\"libc.so.6\")"))
587
588 ;; Patch libsecret backend to use absolute library paths
589 ;; so JNA can find them on Guix without ld.so.cache.
590 (let ((libsecret (assoc-ref inputs "libsecret"))
591 (glib (assoc-ref inputs "glib")))
592 (substitute* "platform/keyring.impl/src/org/netbeans/modules/keyring/gnome/libsecret/LibSecret.java"
593 (("Native\\.load\\(\"secret-1\"")
594 (string-append "Native.load(\"" libsecret "/lib/libsecret-1.so\"")))
595 (substitute* "platform/keyring.impl/src/org/netbeans/modules/keyring/gnome/libsecret/Glib.java"
596 (("Native\\.load\\(\"glib-2.0\"")
597 (string-append "Native.load(\"" glib "/lib/libglib-2.0.so\"")))
598 (substitute* "platform/keyring.impl/src/org/netbeans/modules/keyring/gnome/libsecret/Gio.java"
599 (("Native\\.load\\(\"gio-2.0\"")
600 (string-append "Native.load(\"" glib "/lib/libgio-2.0.so\""))))
601
602 (drop-module-lines "nbbuild/cluster.properties" platform-modules)
603 (drop-module-lines "nbbuild/cluster.properties" ide-modules)
604 (drop-module-lines "nbbuild/cluster.properties" extide-modules)
605 (drop-module-lines "nbbuild/cluster.properties" thirdparty-modules)
606 (drop-module-lines "nbbuild/cluster.properties" harness-modules)
607 (drop-module-lines "nbbuild/cluster.properties" nb-modules)
608 (drop-module-lines "nbbuild/cluster.properties" cluster-references)
609 (append-string
610 "nbbuild/cluster.properties"
611 "
612clusters.config.guix.list=\\
613 ${clusters.config.platform.list},\\
614 nb.cluster.ide,\\
615 nb.cluster.extide,\\
616 nb.cluster.nb
617")
618 (trim-trailing-list-commas "nbbuild/cluster.properties")
619 (drop-module-lines "nbbuild/build.properties" platform-modules)
620 (drop-module-lines "nbbuild/build.properties" ide-modules)
621 (drop-module-lines "nbbuild/build.properties" extide-modules)
622 (drop-module-lines "nbbuild/build.properties" thirdparty-modules)
623 (drop-module-lines "nbbuild/build.properties" harness-modules)
624 (drop-module-lines "nbbuild/build.properties" nb-modules)
625 (drop-module-lines "nbbuild/build.properties" cluster-references)
626 (trim-trailing-list-commas "nbbuild/build.properties")
627
628 (remove-dependency-blocks
629 "platform/core.kit/nbproject/project.xml"
630 '("org.netbeans.modules.autoupdate.cli"
631 "org.netbeans.modules.autoupdate.services"
632 "org.netbeans.modules.autoupdate.ui"))
633 (remove-dependency-blocks
634 "ide/ide.kit/nbproject/project.xml"
635 '("org.netbeans.modules.httpserver"
636 "org.netbeans.modules.usersguide"))
637 (remove-dependency-blocks
638 "ide/editor.kit/nbproject/project.xml"
639 '("org.netbeans.modules.css.visual"
640 "org.netbeans.modules.html"
641 "org.netbeans.modules.html.parser"
642 "org.netbeans.modules.html.validation"
643 "org.netbeans.modules.languages.go"
644 "org.netbeans.modules.languages.hcl"
645 "org.netbeans.modules.languages.toml"
646 "org.netbeans.modules.languages.yaml"
647 "org.netbeans.modules.xml.tools"
648 "org.netbeans.modules.xsl"))
649 (remove-dependency-blocks
650 "nb/ide.branding.kit/nbproject/project.xml"
651 '("org.netbeans.modules.autoupdate.pluginimporter"))
652
653 (filter-lines
654 "platform/o.n.bootstrap/nbproject/project.properties"
655 (lambda (line)
656 (not (string-contains line "launcher-external-binaries-2-6c17cc6.zip!/"))))
657 (filter-lines
658 "harness/apisupport.harness/nbproject/project.properties"
659 (lambda (line)
660 (and (not (string-contains line "release.external/bindex-2.2.jar"))
661 (not (string-contains line "release.external/launcher-external-binaries-2-6c17cc6.zip!/"))
662 (not (string-contains line "release.external/harness-launchers-8.2.zip!/")))))
663
664 (filter-lines
665 "nbbuild/build.xml"
666 (lambda (line)
667 (and (not (string-contains line "platform/libs.junit4/external/binaries-list"))
668 (not (string-contains line "platform/javahelp/external/binaries-list"))
669 (not (string-contains line "platform/javahelp/external/jhall")))))
670 (filter-lines
671 "ide/ide.kit/manifest.mf"
672 (lambda (line)
673 (not (string-contains line "OpenIDE-Module-Needs: org.netbeans.Netbinox"))))
674 (drop-lines-containing
675 "platform/libs.jna/nbproject/project.properties"
676 '("darwin-x86-64"
677 "darwin-aarch64"
678 "linux-x86/"
679 "linux-aarch64"
680 "linux-riscv64"
681 "win32-x86-64"
682 "win32-x86/"
683 "win32-aarch64"
684 "modules/lib/amd64/jnidispatch-nb.dll"
685 "modules/lib/x86/jnidispatch-nb.dll"
686 "modules/lib/aarch64/jnidispatch-nb.dll"
687 "modules/lib/i386/linux/libjnidispatch-nb.so"
688 "modules/lib/riscv64/linux/libjnidispatch-nb.so"
689 "modules/lib/aarch64/linux/libjnidispatch-nb.so"
690 "modules/lib/x86_64/libjnidispatch-nb.jnilib"
691 "modules/lib/aarch64/libjnidispatch-nb.jnilib"))
692 (trim-trailing-list-commas
693 "platform/libs.jna/nbproject/project.properties")
694 (drop-lines-containing
695 "ide/dlight.nativeexecution/nbproject/project.properties"
696 '("Linux-aarch64/"
697 "Linux-x86/"
698 "Linux-sparc_64/"
699 "Windows-x86/"
700 "Windows-x86_64/"
701 "MacOSX-x86/"
702 "MacOSX-x86_64/"
703 "MacOSX-arm_64/"
704 "SunOS-sparc_64/"
705 "SunOS-x86/"
706 "SunOS-x86_64/"
707 "nativeexecution-external-binaries-1-24aefa9.zip"))
708 (trim-trailing-list-commas
709 "ide/dlight.nativeexecution/nbproject/project.properties")
710
711 ;; Strip non-Linux junixsocket native library entries.
712 (drop-lines-containing
713 "ide/libs.c.kohlschutter.junixsocket/nbproject/project.properties"
714 '("MacOSX-"
715 "x86_64-MacOSX"
716 "aarch64-MacOSX"
717 "Windows"
718 "SunOS"
719 "FreeBSD"
720 "DragonFly"
721 "NetBSD"
722 "OpenBSD"
723 "AIX"
724 "OS400"
725 "arm-Linux"
726 "aarch64-Linux"
727 "ppc64"
728 "s390x"
729 "riscv64"
730 "nodeps"))
731 (trim-trailing-list-commas
732 "ide/libs.c.kohlschutter.junixsocket/nbproject/project.properties")
733
734 ;; Strip non-Linux FlatLaf native libraries; keep
735 ;; libflatlaf-linux-x86_64.so for custom window decorations.
736 (drop-lines-containing
737 "platform/libs.flatlaf/nbproject/project.properties"
738 '("flatlaf-windows-"
739 "libflatlaf-macos-"))
740
741 (symlink-input-file "java-flatlaf"
742 "flatlaf-[0-9.]*\\.jar$"
743 "platform/libs.flatlaf/external/flatlaf-3.5.2.jar")
744 (symlink-input-file "java-jsvg"
745 "jsvg-[0-9.]*\\.jar$"
746 "platform/libs.jsvg/external/jsvg-1.6.1.jar")
747 (symlink-input-file "java-json-simple"
748 "json-simple-[0-9.]*\\.jar$"
749 "nbbuild/external/json-simple-1.1.1.jar")
750 (symlink-input-file "java-jsoup"
751 "jsoup-[0-9.]*\\.jar$"
752 "nbbuild/external/jsoup-1.15.3.jar")
753 (symlink-input-file "java-junit"
754 "junit-[0-9.]*\\.jar$"
755 "platform/libs.junit4/external/junit-4.13.2.jar")
756 (symlink-input-file "java-hamcrest-core"
757 "hamcrest-core-[0-9.]*\\.jar$"
758 "platform/libs.junit4/external/hamcrest-core-1.3.jar")
759 (symlink-input-file "java-lucene-core"
760 "lucene-core-[0-9.]*\\.jar$"
761 "ide/libs.lucene/external/lucene-core-3.6.2.jar")
762 (symlink-input-file "java-junixsocket-common"
763 "junixsocket-common-[0-9.]*\\.jar$"
764 "ide/libs.c.kohlschutter.junixsocket/external/junixsocket-common-2.5.1.jar")
765 (symlink-input-file "java-junixsocket-native-common"
766 "junixsocket-native-common-[0-9.]*\\.jar$"
767 "ide/libs.c.kohlschutter.junixsocket/external/junixsocket-native-common-2.5.1.jar")
768 (symlink-input-file "java-osgi-core"
769 "osgi\\.core-[0-9.]*\\.jar$"
770 "platform/libs.osgi/external/osgi.core-8.0.0.jar")
771 (symlink-input-file "java-osgi-cmpn"
772 "osgi\\.cmpn-[0-9.]*\\.jar$"
773 "platform/libs.osgi/external/osgi.cmpn-7.0.0.jar")
774 (symlink-input-file "java-bouncycastle"
775 "bcprov-jdk18on-[0-9.]*\\.jar$"
776 "ide/bcprov/external/bcprov-jdk18on-1.77.jar")
777 (symlink-input-file "java-bouncycastle"
778 "bcpg-jdk18on-[0-9.]*\\.jar$"
779 "ide/bcpg/external/bcpg-jdk18on-1.77.jar")
780 (symlink-input-file "java-bouncycastle"
781 "bcpkix-jdk18on-[0-9.]*\\.jar$"
782 "ide/bcpkix/external/bcpkix-jdk18on-1.77.jar")
783 (symlink-input-file "java-bouncycastle"
784 "bcutil-jdk18on-[0-9.]*\\.jar$"
785 "ide/bcutil/external/bcutil-jdk18on-1.77.jar")
786 (symlink-input-file "java-jgit-gpg-bc"
787 "org\\.eclipse\\.jgit\\.gpg\\.bc-[0-9.].*\\.jar$"
788 "ide/o.eclipse.jgit.gpg.bc/external/org.eclipse.jgit.gpg.bc-7.0.0.202409031743-r.jar")
789 (symlink-input-file "java-commons-codec"
790 "commons-codec-[0-9.]*\\.jar$"
791 "platform/o.apache.commons.codec/external/commons-codec-1.17.1.jar")
792 (symlink-input-file "java-felix-main"
793 "org\\.apache\\.felix\\.main-[0-9.]*\\.jar$"
794 "platform/libs.felix/external/org.apache.felix.main-7.0.5.jar")
795 (symlink-input-file "java-jna"
796 "jna-jpms-[0-9.]*\\.jar$"
797 "platform/libs.jna/external/jna-5.14.0.jar")
798 (symlink-input-file "java-jna-platform"
799 "jna-platform-jpms-[0-9.]*\\.jar$"
800 "platform/libs.jna.platform/external/jna-platform-5.14.0.jar")
801 (symlink-input-file "java-jsch"
802 "jsch-[0-9.]*\\.jar$"
803 "ide/c.jcraft.jsch/external/jsch-0.1.72.jar")
804 (symlink-input-file "java-asm"
805 "asm-9\\.7\\.1\\.jar$"
806 "platform/libs.asm/external/asm-9.7.1.jar")
807 (symlink-input-file "java-asm-tree"
808 "asm-tree\\.jar$"
809 "platform/libs.asm/external/asm-tree-9.7.1.jar")
810 (symlink-input-file "java-asm-commons"
811 "asm-commons8\\.jar$"
812 "platform/libs.asm/external/asm-commons-9.7.1.jar")
813 (symlink-input-file "java-jemmy"
814 "jemmy-[0-9.]*.jar$"
815 "harness/jemmy/external/jemmy-2.3.1.1.jar")
816 (symlink-input-file "java-jemmy"
817 "jemmy-[0-9.]*-doc\\.zip$"
818 "harness/jemmy/external/jemmy-2.3.1.1-doc.zip")
819 (symlink-input-file "java-jemmy"
820 "jemmy-.*-src\\.zip$"
821 "harness/jemmy/external/jemmy-2.3.1.1-src.zip")
822 (symlink-input-file "java-apache-xml-commons-resolver-netbeans"
823 "xml-resolver\\.jar$"
824 "ide/o.apache.xml.resolver/external/resolver-1.2.jar")
825 (symlink-input-file "java-simplevalidation"
826 "simplevalidation-[0-9.]*\\.jar$"
827 "ide/swing.validation/external/simplevalidation-1.14.1.jar")
828 (symlink-input-file "java-simplevalidation"
829 "simplevalidation-swing-[0-9.]*\\.jar$"
830 "ide/swing.validation/external/simplevalidation-swing-1.14.1.jar")
831 (symlink-input-file "java-jgit"
832 "org\\.eclipse\\.jgit-[0-9.].*\\.jar$"
833 "ide/o.eclipse.jgit/external/org.eclipse.jgit-7.0.0.202409031743-r.jar")
834 (symlink-input-file "java-jgit-ssh-jsch"
835 "org\\.eclipse\\.jgit\\.ssh\\.jsch-[0-9.].*\\.jar$"
836 "ide/o.eclipse.jgit.ssh.jsch/external/org.eclipse.jgit.ssh.jsch-7.0.0.202409031743-r.jar")
837 (symlink-input-file "java-jzlib"
838 "jzlib-[0-9.]*\\.jar$"
839 "ide/c.jcraft.jzlib/external/jzlib-1.1.3.jar")
840 (symlink-input-file "java-javaewah"
841 "JavaEWAH-[0-9.]*\\.jar$"
842 "ide/c.googlecode.javaewah.JavaEWAH/external/JavaEWAH-1.2.3.jar")
843 (symlink-input-file "java-slf4j-api"
844 "slf4j-api-[0-9.]*\\.jar$"
845 "ide/slf4j.api/external/slf4j-api-1.7.36.jar")
846 (symlink-input-file "java-slf4j-jdk14"
847 "slf4j-jdk14-[0-9.]*\\.jar$"
848 "ide/slf4j.jdk14/external/slf4j-jdk14-1.7.36.jar")
849 (make-nativeexecution-binary-zip)
850 (make-ant-binary-zip)))
851 (replace 'build
852 (lambda _
853 ;; FIXME: Why are tests disabled?
854 (invoke "ant"
855 "-Dcluster.config=guix" ; use our config file
856 "-Ddisable.unit.tests=true"
857 "-Ddisable.qa-functional.tests=true"
858 "-Dext.binaries.downloaded=true" ; so it doesn't download
859 ; "-Dverify.checkout=false" ; FIXME why is this there
860 "-f" "nbbuild/build.xml"
861 "build-nozip")))
862 (replace 'install
863 (lambda* (#:key inputs outputs #:allow-other-keys)
864 (let* ((out (assoc-ref outputs "out"))
865 (jdk (assoc-ref inputs "jdk"))
866 (runtime-path
867 (string-join
868 (map (lambda (input)
869 (string-append (assoc-ref inputs input) "/bin"))
870 '("bash-minimal"
871 "coreutils"
872 "grep"
873 "sed"
874 "gawk"))
875 ":"))
876 (share (string-append out "/share/netbeans"))
877 (bin (string-append out "/bin")))
878 (mkdir-p bin)
879 (copy-recursively "nbbuild/netbeans" share)
880 ;; Set JVM options for proper rendering in etc/netbeans.conf.
881 (let ((conf (string-append share "/etc/netbeans.conf")))
882 (when (file-exists? conf)
883 (substitute* conf
884 (("netbeans_default_options=\"")
885 (string-append
886 "netbeans_default_options=\""
887 "-J-Dawt.toolkit.name=auto "
888 "-J-Dsun.java2d.uiScale.enabled=true "
889 "-J-Dorg.netbeans.editor.aa.text=hbgr "
890 "-J-Dorg.netbeans.editor.aa.contrast=140 "
891 "-J--enable-native-access=ALL-UNNAMED ")))))
892 (call-with-output-file (string-append bin "/netbeans")
893 (lambda (port)
894 (format port "#!/bin/sh~%export PATH=\"~a${PATH:+:$PATH}\"~%exec ~a/share/netbeans/bin/netbeans --jdkhome ~a \"$@\"~%"
895 runtime-path
896 out
897 (assoc-ref inputs "jbr"))))
898 (chmod (string-append bin "/netbeans") #o755)))))))
899 (inputs
900 `(("jbr" ,jbr25 "jdk")
901 ("bash-minimal" ,bash-minimal)
902 ("coreutils" ,coreutils)
903 ("gawk" ,gawk)
904 ("glib" ,glib)
905 ("grep" ,grep)
906 ("libsecret" ,libsecret)
907 ("sed" ,sed)))
908 (native-inputs
909 `(("java-json-simple" ,java-json-simple-1.1.1)
910 ("java-jsoup" ,java-jsoup-1.15.3)
911 ("java-osgi-core" ,java-osgi-core-8.0.0)
912 ("java-osgi-cmpn" ,java-osgi-cmpn-7.0.0)
913 ("java-bouncycastle" ,java-bouncycastle-1.77)
914 ("java-commons-codec" ,java-commons-codec-1.17.1)
915 ("java-felix-main" ,java-felix-main-7.0.5)
916 ("java-junixsocket-common" ,java-junixsocket-common-2)
917 ("java-junixsocket-native-common" ,java-junixsocket-native-common-2.5.1)
918 ("java-jna" ,java-native-access-5.14.0)
919 ("java-jna-platform" ,java-native-access-platform-5.14.0)
920 ("java-jsch" ,java-jsch-0.1.72)
921 ("java-junit" ,java-junit-4.13.2)
922 ("java-hamcrest-core" ,java-hamcrest-core)
923 ("java-lucene-core" ,java-lucene-core-3.6.2)
924 ("java-asm" ,java-asm-9.7.1)
925 ("java-asm-tree" ,java-asm-tree-9.7.1)
926 ("java-asm-commons" ,java-asm-commons-9.7.1)
927 ("java-apache-xml-commons-resolver-netbeans"
928 ,java-apache-xml-commons-resolver-netbeans-1.2)
929 ("java-simplevalidation" ,java-simplevalidation-1.14.1)
930 ("java-jemmy" ,java-jemmy-2.3.1.1)
931 ("java-flatlaf" ,java-flatlaf)
932 ("java-jsvg" ,java-jsvg-1.6.1)
933 ("java-jgit" ,java-jgit-7)
934 ("java-jgit-gpg-bc" ,java-jgit-gpg-bc-7)
935 ("java-jgit-ssh-jsch" ,java-jgit-ssh-jsch-7)
936 ("java-jzlib" ,java-jzlib-1.1.3)
937 ("java-javaewah" ,java-javaewah-1.2.3)
938 ("java-slf4j-api" ,java-slf4j-api)
939 ("java-slf4j-jdk14" ,java-slf4j-jdk14)
940 ("unzip" ,unzip)))
941 (home-page "https://netbeans.apache.org/")
942 (synopsis "Source-only build of Apache NetBeans 25")
943 (description
944 "This package builds Apache NetBeans 25 from source only.
945
946The build disables the following platform modules:
947@itemize
948@item api.htmlui
949@item applemenu
950@item autoupdate.cli
951@item autoupdate.services
952@item autoupdate.ui
953@item core.nativeaccess
954@item core.network
955@item htmlui
956@item javahelp
957@item junitlib
958@item libs.batik.read
959@item libs.javafx
960@item libs.javax.inject
961@item libs.junit4
962@item libs.junit5
963@item libs.testng
964@item masterfs.macosx
965@item masterfs.windows
966@item net.java.html
967@item net.java.html.boot
968@item net.java.html.boot.fx
969@item net.java.html.boot.script
970@item net.java.html.geo
971@item net.java.html.json
972@item net.java.html.sound
973@item netbinox
974@item o.apache.commons.commons_io
975@item o.apache.commons.lang3
976@item o.apache.commons.logging
977@item o.n.html.ko4j
978@item o.n.html.presenters.spi
979@item o.n.html.xhr4j
980@item templatesui
981@end itemize
982
983The build disables the following IDE modules:
984@itemize
985@item bugtracking
986@item bugtracking.bridge
987@item bugtracking.commons
988@item bugzilla
989@item c.google.gson
990@item c.google.guava
991@item c.google.guava.failureaccess
992@item core.browser.webview
993@item css.editor
994@item css.lib
995@item css.model
996@item css.prep
997@item css.visual
998@item db
999@item db.core
1000@item db.dataview
1001@item db.drivers
1002@item db.kit
1003@item db.metadata.model
1004@item db.mysql
1005@item db.sql.editor
1006@item db.sql.visualeditor
1007@item dbapi
1008@item derby
1009@item docker.api
1010@item docker.editor
1011@item docker.ui
1012@item go.lang
1013@item html
1014@item html.custom
1015@item html.editor
1016@item html.editor.lib
1017@item html.indexing
1018@item html.lexer
1019@item html.parser
1020@item html.validation
1021@item httpserver
1022@item hudson
1023@item hudson.git
1024@item hudson.mercurial
1025@item hudson.subversion
1026@item hudson.tasklist
1027@item hudson.ui
1028@item javascript2.debug
1029@item javascript2.debug.ui
1030@item languages.go
1031@item languages.hcl
1032@item languages.toml
1033@item languages.yaml
1034@item lexer.antlr4
1035@item libs.antlr3.runtime
1036@item libs.antlr4.runtime
1037@item libs.commons_compress
1038@item libs.commons_net
1039@item libs.flexmark
1040@item libs.freemarker
1041@item libs.graalsdk
1042@item libs.graalsdk.system
1043@item libs.ini4j
1044@item libs.jaxb
1045@item libs.jcodings
1046@item libs.json_simple
1047@item libs.snakeyaml_engine
1048@item libs.svnClientAdapter
1049@item libs.svnClientAdapter.javahl
1050@item libs.tomlj
1051@item libs.tomljava
1052@item libs.truffleapi
1053@item libs.xerces
1054@item localtasks
1055@item lsp.client
1056@item markdown
1057@item mercurial
1058@item mylyn.util
1059@item o.apache.commons.httpclient
1060@item o.apache.commons.lang
1061@item o.apache.ws.commons.util
1062@item o.apache.xmlrpc
1063@item o.eclipse.core.contenttype
1064@item o.eclipse.core.jobs
1065@item o.eclipse.core.net
1066@item o.eclipse.core.runtime
1067@item o.eclipse.core.runtime.compatibility.auth
1068@item o.eclipse.equinox.app
1069@item o.eclipse.equinox.common
1070@item o.eclipse.equinox.preferences
1071@item o.eclipse.equinox.registry
1072@item o.eclipse.equinox.security
1073@item o.eclipse.jgit.lfs
1074@item o.eclipse.mylyn.bugzilla.core
1075@item o.eclipse.mylyn.commons.core
1076@item o.eclipse.mylyn.commons.net
1077@item o.eclipse.mylyn.commons.repositories.core
1078@item o.eclipse.mylyn.commons.xmlrpc
1079@item o.eclipse.mylyn.tasks.core
1080@item o.eclipse.mylyn.wikitext.confluence.core
1081@item o.eclipse.mylyn.wikitext.core
1082@item o.eclipse.mylyn.wikitext.markdown.core
1083@item o.eclipse.mylyn.wikitext.textile.core
1084@item selenium2
1085@item selenium2.server
1086@item servletapi
1087@item spellchecker
1088@item spellchecker.bindings.htmlxml
1089@item spellchecker.bindings.properties
1090@item spellchecker.dictionary_en
1091@item spellchecker.kit
1092@item subversion
1093@item team.ide
1094@item textmate.lexer
1095@item usersguide
1096@item versioning.system.cvss.installer
1097@item web.browser.api
1098@item web.common
1099@item web.common.ui
1100@item web.indent
1101@item web.webkit.debugging
1102@item xml.jaxb.api
1103@item xml.tax
1104@item xml.text.obsolete90
1105@item xml.tools
1106@item xml.wsdl.model
1107@item xsl
1108@end itemize
1109
1110The build disables the following extide modules:
1111@itemize
1112@item gradle
1113@item gradle.dists
1114@item gradle.editor
1115@item libs.gradle
1116@end itemize
1117
1118The build disables the following third-party modules:
1119@itemize
1120@item libs.javafx.linux
1121@item libs.javafx.linux.aarch64
1122@item libs.javafx.macosx
1123@item libs.javafx.macosx.aarch64
1124@item libs.javafx.win
1125@end itemize
1126
1127The build disables the following NB modules:
1128@itemize
1129@item autoupdate.pluginimporter
1130@item bugzilla.exceptionreporter
1131@item updatecenters
1132@end itemize
1133
1134The build disables the following cluster references:
1135@itemize
1136@item nb.cluster.3rdparty
1137@item nb.cluster.javafx
1138@end itemize
1139
1140The build also disables the JavaHelp bootstrap checks and the Windows
1141launcher download target so the resulting IDE remains fully
1142source-built.
1143
1144This package is built with Wayland support and HiDPI support.")
1145 (license (list license:asl2.0
1146 license:bsd-3
1147 license:cddl1.0
1148 license:expat))))