projects/guix·blob java-team · refs

576 lines · 22.9 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013, 2014, 2015, 2021 Ludovic Courtès <[email protected]>
3;;; Copyright © 2014 Eric Bavier <[email protected]>
4;;; Copyright © 2014, 2015, 2018 Mark H Weaver <[email protected]>
5;;; Copyright © 2016 David Craven <[email protected]>
6;;; Copyright © 2016, 2018, 2020 Efraim Flashner <[email protected]>
7;;; Copyright © 2016, 2023, 2024, 2026 Janneke Nieuwenhuizen <[email protected]>
8;;; Copyright © 2017 Kei Kebreau <[email protected]>
9;;; Copyright © 2018, 2020, 2022 Tobias Geerinckx-Rice <[email protected]>
10;;; Copyright © 2019 Julien Lepiller <[email protected]>
11;;; Copyright © 2019 Mathieu Othacehe <[email protected]>
12;;; Copyright © 2026 Dariqq <[email protected]>
13;;;
14;;; This file is part of GNU Guix.
15;;;
16;;; GNU Guix is free software; you can redistribute it and/or modify it
17;;; under the terms of the GNU General Public License as published by
18;;; the Free Software Foundation; either version 3 of the License, or (at
19;;; your option) any later version.
20;;;
21;;; GNU Guix is distributed in the hope that it will be useful, but
22;;; WITHOUT ANY WARRANTY; without even the implied warranty of
23;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24;;; GNU General Public License for more details.
25;;;
26;;; You should have received a copy of the GNU General Public License
27;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
28
29(define-module (gnu packages tcl)
30 #:use-module (guix gexp)
31 #:use-module (guix packages)
32 #:use-module (guix download)
33 #:use-module (guix git-download)
34 #:use-module (guix utils)
35 #:use-module (guix build-system gnu)
36 #:use-module (guix build-system go)
37 #:use-module (guix build-system perl)
38 #:use-module (gnu packages)
39 #:use-module (gnu packages admin)
40 #:use-module (gnu packages autotools)
41 #:use-module (gnu packages fontutils)
42 #:use-module (gnu packages gcc)
43 #:use-module (gnu packages image)
44 #:use-module (gnu packages perl)
45 #:use-module (gnu packages pkg-config)
46 #:use-module (gnu packages readline)
47 #:use-module (gnu packages tls)
48 #:use-module (gnu packages xml)
49 #:use-module (gnu packages xorg)
50 #:use-module ((guix licenses) #:prefix license:))
51
52(define-public tcl
53 (package
54 (name "tcl")
55 (version "8.6.12")
56 (source (origin
57 (method url-fetch)
58 (uri (string-append "mirror://sourceforge/tcl/Tcl/"
59 version "/tcl" version "-src.tar.gz"))
60 (sha256
61 (base32
62 "19n1wk6ypx19p26gywvibwbhqs2zapp93n3136qlhzhn1zfrbj96"))))
63 (build-system gnu-build-system)
64 (arguments
65 `(#:phases (modify-phases %standard-phases
66 (add-before 'configure 'pre-configure
67 (lambda _ (chdir "unix")))
68 (add-after 'install 'install-private-headers
69 (lambda* (#:key outputs #:allow-other-keys)
70 ;; Private headers are needed by Expect.
71 (invoke "make" "install-private-headers")
72 (let ((bin (string-append (assoc-ref outputs "out")
73 "/bin")))
74 ;; Create a tclsh -> tclsh8.6 symlink.
75 ;; Programs such as Ghostscript rely on it.
76 (with-directory-excursion bin
77 (symlink (car (find-files "." "tclsh"))
78 "tclsh")))))
79 ,@(if (system-hurd?)
80 '((add-after 'unpack 'delete-tests
81 (lambda _
82 (delete-file "tests/chanio.test")
83 (delete-file "tests/socket.test"))))
84 '()))
85
86 ;; By default, man pages are put in PREFIX/man, but we want them in
87 ;; PREFIX/share/man. The 'validate-documentation-location' phase is
88 ;; not able to fix this up because the default install populates both
89 ;; PREFIX/man and PREFIX/share/man.
90 #:configure-flags
91 (list (string-append "--mandir="
92 (assoc-ref %outputs "out")
93 "/share/man")
94 ;; This is needed when cross-compiling, see:
95 ;; https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=719247
96 ,@(if (%current-target-system)
97 '("tcl_cv_strtod_buggy=1"
98 "ac_cv_func_strtod=yes")
99 '()))
100
101 ;; XXX: There are a few test failures (related to HTTP, most
102 ;; likely related to name resolution), but that doesn't cause
103 ;; `make' to fail.
104 #:test-target "test"))
105 (home-page "https://www.tcl.tk/")
106 (synopsis "The Tcl scripting language")
107 (description "The Tcl (Tool Command Language) scripting language.")
108 (license license:tcl/tk)))
109
110(define-public itcl
111 (package
112 (name "itcl")
113 (version "4.2.2")
114 (source
115 (origin
116 (method url-fetch)
117 (uri (string-append
118 "mirror://sourceforge/incrtcl/%5Bincr%20Tcl_Tk%5D-4-source/itcl%20"
119 version "/itcl" version ".tar.gz"))
120 (file-name (string-append "incrtcl-" version ".tar.gz"))
121 (sha256
122 (base32 "0v0m1s3rlsbg7p366i6m5zcvnmixnch87jmczidjanqvmw76fk5c"))))
123 (build-system gnu-build-system)
124 (arguments
125 (list #:configure-flags
126 #~(list
127 (string-append "--exec-prefix=" #$output)
128 (string-append "--with-tclinclude="
129 (assoc-ref %build-inputs "tcl") "/include")
130 (string-append "--with-tcl="
131 (assoc-ref %build-inputs "tcl") "/lib"))
132 #:test-target "test"
133 #:phases
134 #~(modify-phases %standard-phases
135 (add-after 'install 'clean-up-bin-and-lib
136 (lambda _
137 ;; NOTE: (Sharlatan-20210213T204336+0000): libraries appearer in
138 ;; "out/lib/itcl{{version}}" and there are no binaries, some extra
139 ;; rename and remove spells are to be applied.
140 (rmdir (string-append #$output "/bin"))
141 (rename-file (string-append #$output "/lib/itcl" #$version)
142 (string-append #$output "/libtmp"))
143 (rename-file (string-append #$output "/libtmp")
144 (string-append #$output "/lib")))))))
145 (native-inputs
146 (list tcl))
147 (inputs
148 (list tcllib))
149 (home-page "https://incrtcl.sourceforge.net/")
150 (synopsis "Object Oriented programming (OOP) extension for Tcl")
151 (description
152 "[incr Tcl] is a widely used object-oriented system for Tcl. The name is
153a play on C++, and [incr Tcl] provides a similar object model, including
154multiple inheritance and public and private classes and variables.")
155 (license license:public-domain)))
156
157(define-public jimtcl
158 (package
159 (name "jimtcl")
160 (version "0.82")
161 (source (origin
162 (method git-fetch)
163 (uri (git-reference
164 (url "https://github.com/msteveb/jimtcl")
165 (commit version)))
166 (file-name (git-file-name name version))
167 (sha256
168 (base32
169 "01nxqzn41797ypph1vpwjfh3zqgks0l8ihh6932b4kb83apy6f08"))))
170 (build-system gnu-build-system)
171 (arguments
172 (list #:phases
173 #~(modify-phases %standard-phases
174 (replace 'configure
175 ;; This package doesn't use autoconf.
176 (lambda _
177 (invoke "./configure"
178 (string-append "--prefix=" #$output))))
179 (add-before 'check 'delete-failing-tests
180 (lambda _
181 ;; XXX All but 1 SSL tests fail (tries connecting to Google
182 ;; servers).
183 (delete-file "tests/ssl.test")))
184 #$@(if (target-32bit?)
185 #~((add-after 'unpack 'delete-failing-tests/32bit
186 (lambda _
187 (delete-file "tests/file.test"))))
188 #~()))))
189 (inputs (list openssl))
190 (native-inputs
191 ;; For tests.
192 (list inetutils)) ; for hostname
193 (home-page "http://jim.tcl.tk/index.html")
194 (synopsis "Small footprint Tcl implementation")
195 (description "Jim is a small footprint implementation of the Tcl programming
196language.")
197 (license license:bsd-2)))
198
199(define-public expect
200 (package
201 (name "expect")
202 (version "5.45.4")
203 (source
204 (origin
205 (method url-fetch)
206 (uri (string-append "mirror://sourceforge/expect/Expect/"
207 version "/expect" version ".tar.gz"))
208 (sha256
209 (base32
210 "0d1cp5hggjl93xwc8h1y6adbnrvpkk0ywkd00inz9ndxn21xm9s9"))))
211 (build-system gnu-build-system)
212 (inputs
213 (list ;; TODO: Add these optional dependencies.
214 ;; ("libX11" ,libX11)
215 ;; ("xorgproto" ,xorgproto)
216 ;; ("tk" ,tk)
217 tcl))
218 (arguments
219 '(#:configure-flags
220 (let ((out (assoc-ref %outputs "out"))
221 (tcl (assoc-ref %build-inputs "tcl")))
222 (list (string-append "CFLAGS=-g -O2"
223 " -Wno-error=implicit-function-declaration"
224 " -Wno-error=implicit-int"
225 " -Wno-error=incompatible-pointer-types")
226 (string-append "--with-tcl=" tcl "/lib")
227 (string-append "--with-tclinclude=" tcl "/include")
228 (string-append "--exec-prefix=" out)
229 (string-append "--mandir=" out "/share/man")))
230
231 #:phases
232 (modify-phases %standard-phases
233 (add-before 'configure 'set-path-to-stty
234 (lambda _
235 (substitute* "configure"
236 (("STTY_BIN=/bin/stty")
237 (string-append "STTY_BIN=" (which "stty"))))
238 #t)))
239
240 #:test-target "test"))
241 (home-page "https://core.tcl-lang.org/expect/")
242 (synopsis "Tool for automating interactive applications")
243 (description
244 "Expect is a tool for automating interactive applications such as
245telnet, ftp, passwd, fsck, rlogin, tip, etc. Expect really makes this
246stuff trivial. Expect is also useful for testing these same
247applications. And by adding Tk, you can wrap interactive applications in
248X11 GUIs.")
249 (license license:public-domain))) ; as written in `license.terms'
250
251(define-public tk
252 (package
253 (name "tk")
254 (version "8.6.12")
255 (source (origin
256 (method url-fetch)
257 (uri (string-append "mirror://sourceforge/tcl/Tcl/"
258 (version-prefix version 3) "/tk"
259 version "-src.tar.gz"))
260 (sha256
261 (base32
262 "0c0665h9b55cr3p6civcrgaixx6dldz7k7v870lyssyb7wgmqf8j"))
263 (patches (search-patches "tk-find-library.patch"))))
264 (build-system gnu-build-system)
265 (arguments
266 (list
267 ;; The tests require a running X server, so we just skip them.
268 #:tests? #f
269 #:configure-flags
270 #~(list (string-append "--with-tcl="
271 (assoc-ref %build-inputs "tcl") "/lib")
272 ;; This is needed when cross-compiling, see:
273 ;; https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=719247
274 #$@(if (%current-target-system)
275 '("tcl_cv_strtod_buggy=1" "ac_cv_func_strtod=yes")
276 '()))
277 #:phases
278 #~(modify-phases %standard-phases
279 (add-before 'configure 'pre-configure
280 (lambda _
281 (chdir "unix")))
282 (add-after 'install 'create-wish-symlink
283 (lambda _
284 (let ((version #$(version-major+minor (package-version tk)))
285 (dest (string-append #$output "/bin/wish")))
286 (symlink (string-append dest version)
287 dest))))
288 (add-after 'install 'add-fontconfig-flag
289 (lambda* (#:key inputs outputs #:allow-other-keys)
290 ;; Add the missing -L flag for Fontconfig in 'tk.pc' and
291 ;; 'tkConfig.sh'.
292 (let ((fontconfig (search-input-file inputs
293 "lib/libfontconfig.so")))
294 (substitute* (find-files #$output "^(tkConfig\\.sh|tk\\.pc)$")
295 (("-lfontconfig")
296 (string-append "-L" (dirname fontconfig)
297 " -lfontconfig")))))))))
298 (native-inputs (list pkg-config))
299 (inputs (list libxft fontconfig tcl))
300 ;; tk.h refers to X11 headers, hence the propagation.
301 (propagated-inputs (list libx11 libxext))
302
303 (home-page "https://www.tcl.tk/")
304 (synopsis "Graphical user interface toolkit for Tcl")
305 (description
306 "Tk is a graphical toolkit for building graphical user
307interfaces (GUIs) in the Tcl language.")
308 (license (package-license tcl))))
309
310(define-public perl-tk
311 (package
312 (name "perl-tk")
313 (version "804.036")
314 (source (origin
315 (method url-fetch)
316 (uri (string-append
317 "mirror://cpan/authors/id/S/SR/SREZIC/Tk-"
318 version ".tar.gz"))
319 (sha256
320 (base32
321 "0pha40m97fzafjnq8vwkbi5sml6xv8jki6qi60rxrzmxlrqp5aij"))))
322 (build-system perl-build-system)
323 (native-inputs (list pkg-config))
324 (inputs (list gcc-12 libx11 libpng libjpeg-turbo))
325 (arguments
326 (list
327 #:make-maker-flags #~(list (string-append "X11=" #$libx11))
328 ;; Fails to build in parallel: <http://bugs.gnu.org/18262>.
329 #:parallel-build? #f))
330 (synopsis "Graphical user interface toolkit for Perl")
331 (description
332 "Tk is a Graphical User Interface ToolKit.")
333 (home-page "https://metacpan.org/release/Tk")
334 ;; From the package README: "... you can redistribute it and/or modify it
335 ;; under the same terms as Perl itself, with the exception of all the
336 ;; files in the pTk sub-directory which have separate terms derived from
337 ;; those of the original Tix4.1.3 or Tk8.4.* sources. See the files
338 ;; pTk/license.terms, pTk/license.html_lib, and pTk/Tix.license for
339 ;; details of this license."
340 (license license:perl-license)))
341
342(define-public tcllib
343 (package
344 (name "tcllib")
345 (version "1.19")
346 (source (origin
347 (method url-fetch)
348 (uri (string-append "mirror://sourceforge/tcllib/tcllib/"
349 version "/tcllib-" version ".tar.gz"))
350 (sha256
351 (base32
352 "173abxaazdmf210v651708ab6h7xhskvd52krxk6ifam337qgzh1"))))
353 (build-system gnu-build-system)
354 (native-inputs
355 (list tcl))
356 (native-search-paths
357 (list (search-path-specification
358 (variable "TCLLIBPATH")
359 (separator " ")
360 (files (list (string-append "lib/tcllib" version))))))
361 (home-page "https://core.tcl.tk/tcllib/home")
362 (synopsis "Standard Tcl Library")
363 (description "Tcllib, the standard Tcl library, is a collection of common
364utility functions and modules all written in high-level Tcl.")
365 (license (package-license tcl))))
366
367(define-public tclreadline
368 (package
369 (name "tclreadline")
370 (version "2.4.1")
371 (source
372 (origin
373 (method git-fetch)
374 (uri (git-reference
375 (url "https://github.com/flightaware/tclreadline")
376 (commit (string-append "v" version))))
377 (file-name (git-file-name name version))
378 (sha256
379 (base32
380 "0hpqiw6rppihax72n99xpi48jl1jdjygnipk477winr6q0k10lp8"))))
381 (build-system gnu-build-system)
382 (arguments
383 (list
384 #:phases
385 #~(modify-phases %standard-phases
386 ;; See README.Linux.
387 (add-before 'configure 'pre-config
388 (lambda _
389 (invoke "libtoolize" "--force" "--install" "--copy")
390 (invoke "aclocal")
391 (invoke "autoheader")
392 (invoke "automake" "--force-missing" "--add-missing" "--copy")
393 (invoke "autoconf"))))
394 #:configure-flags
395 #~(list (string-append "--with-tcl=" #$(this-package-input "tcl") "/lib")
396 (string-append "--with-tk=" #$(this-package-input "tk") "/lib")
397 (string-append "--with-readline-includes="
398 #$(this-package-input "readline")
399 "/include/readline"))))
400 (native-inputs
401 (list autoconf-2.71 automake libtool))
402 (inputs (list tcl tk readline))
403 (home-page "https://github.com/flightaware/tclreadline")
404 (synopsis "Readline support for Tcl")
405 (description
406 "Tclreadline provides @code{readline} support for interactive Tcl shells,
407including command-line editing, history, and completion.")
408 (license license:bsd-3)))
409
410(define-public tklib
411 (package
412 (name "tklib")
413 (version "0.6")
414 (source
415 (origin
416 (method url-fetch)
417 (uri (string-append "https://core.tcl.tk/tklib/tarball/tklib-"
418 version ".tar.gz?uuid=tklib-0-6"))
419 (file-name (string-append name "-" version ".tar.gz"))
420 (sha256
421 (base32 "03y0bzgwbh7nnyqkh8n00bbkq2fyblq39s3bdb6mawna0bbn0wwg"))))
422 (build-system gnu-build-system)
423 (native-inputs
424 (list tcl))
425 (propagated-inputs
426 (list tcllib tk)) ; for "wish"
427 (native-search-paths
428 (list (search-path-specification
429 (variable "TCLLIBPATH")
430 (separator " ")
431 (files (list (string-append "lib/tklib" version))))))
432 (home-page "https://www.tcl.tk/software/tklib/")
433 (synopsis "Tk utility modules for Tcl")
434 (description "Tklib is a collection of common utility functions and
435modules for Tk, all written in high-level Tcl. Examples of provided widgets:
436@enumerate
437@item @code{chatwidget}
438@item @code{datefield}
439@item @code{tooltip}
440@item @code{cursor}
441@item @code{ipentry}
442@item @code{tablelist}
443@item @code{history}
444@item @code{tkpiechart}
445@item @code{ico}
446@item @code{crosshair}
447@item @code{ntext}
448@item @code{plotchart}
449@item @code{ctext}
450@item @code{autosscroll}
451@item @code{canvas}
452@end enumerate")
453 (license (package-license tcl))))
454
455(define-public tclxml
456 (package
457 (name "tclxml")
458 (version "3.2")
459 (source (origin
460 (method url-fetch)
461 (uri (string-append "mirror://sourceforge/" name "/TclXML/"
462 version "/" name "-" version ".tar.gz"))
463 (sha256
464 (base32
465 "0ffb4aw63inig3aql33g4pk0kjk14dv238anp1scwjdjh1k6n4gl"))
466 (patches (search-patches "tclxml-3.2-install.patch"))))
467 (build-system gnu-build-system)
468 (native-inputs
469 (list tcl libxml2 libxslt))
470 (propagated-inputs
471 (list tcllib)) ; uri
472 (native-search-paths
473 (list (search-path-specification
474 (variable "TCLLIBPATH")
475 (separator " ")
476 (files (list (string-append "lib/Tclxml" version))))))
477 (arguments
478 `(#:configure-flags
479 (list (string-append "CFLAGS=-g -O2"
480 " -Wno-implicit-function-declaration"
481 " -Wno-incompatible-pointer-types")
482 (string-append "--exec-prefix=" (assoc-ref %outputs "out"))
483 (string-append "--with-tclconfig="
484 (assoc-ref %build-inputs "tcl") "/lib")
485 (string-append "--with-xml2-config="
486 (assoc-ref %build-inputs "libxml2")
487 "/bin/xml2-config")
488 (string-append "--with-xslt-config="
489 (assoc-ref %build-inputs "libxslt")
490 "/bin/xslt-config"))
491 #:test-target "test"))
492 (home-page "https://tclxml.sourceforge.net/")
493 (synopsis "Tcl library for XML parsing")
494 (description "TclXML provides event-based parsing of XML documents. The
495application may register callback scripts for certain document features, and
496when the parser encounters those features while parsing the document the
497callback is evaluated.")
498 (license (license:non-copyleft
499 "file://LICENCE"
500 "See LICENCE in the distribution."))))
501
502(define-public tclx
503 (package
504 (name "tclx")
505 (version "8.4.1")
506 (source (origin
507 (method url-fetch)
508 (uri (string-append "mirror://sourceforge/tclx/TclX/"
509 version "/tclx" version ".tar.bz2"))
510 (sha256
511 (base32
512 "1v2qwzzidz0is58fd1p7wfdbscxm3ip2wlbqkj5jdhf6drh1zd59"))))
513 (build-system gnu-build-system)
514 (arguments
515 '(#:tests? #f ; a test named profile.test segfaults
516 #:configure-flags (list (string-append "--with-tcl="
517 (assoc-ref %build-inputs "tcl")
518 "/lib")
519 (string-append "--libdir="
520 (assoc-ref %outputs "out")
521 "/lib"))))
522 (inputs
523 (list tcl tk))
524 (home-page "https://tclx.sourceforge.net/")
525 (synopsis "System programming extensions for Tcl")
526 (description
527 "Extended Tcl is oriented towards system programming tasks and large
528application development. TclX provides additional interfaces to the operating
529system, and adds many new programming constructs, text manipulation tools, and
530debugging tools.")
531 (license license:tcl/tk)))
532
533(define-public tcl-tls
534 (package
535 (name "tcl-tls")
536 (version "1.7.22")
537 (source
538 (origin
539 (method url-fetch)
540 (uri (string-append "https://core.tcl-lang.org/tcltls/uv/tcltls-"
541 version ".tar.gz"))
542 (sha256
543 (base32
544 "1d639gzngxp7zwwpb4ayh663br6vhsbiy6wxm952rj2y4xx2nkp8"))))
545 (build-system gnu-build-system)
546 (inputs (list tcl))
547 (propagated-inputs (list openssl))
548 (arguments
549 (list #:configure-flags
550 #~(let ((tcl #$(this-package-input "tcl")))
551 (list "--with-ssl=libressl"
552 (string-append "-with-ssl-dir="
553 #$(this-package-input "openssl"))
554 (string-append "--with-tcl=" tcl "/lib")
555 (string-append "--with-tclinclude=" tcl "/include")
556 (string-append "--exec-prefix=" #$output)
557 (string-append "--mandir=" #$output "/share/man")))
558
559 #:test-target "test"))
560 (search-paths
561 (list (search-path-specification
562 (variable "TCLLIBPATH")
563 (separator " ")
564 (files (list (string-append "lib/tcltls" version))))))
565 (home-page "https://core.tcl-lang.org/tcltls/index")
566 (synopsis "Tcl binding to OpenSSL toolkit")
567 (description
568 "This extension provides a generic binding to OpenSSL, utilizing the
569@code{Tcl_StackChannel} API for Tcl 8.2 and higher. The sockets behave
570exactly the same as channels created using Tcl's built-in socket command with
571additional options for controlling the SSL session.")
572 (properties
573 '((release-monitoring-url
574 . "https://core.tcl-lang.org/tcltls/wiki/Download")
575 (upstream-name . "tcltls")))
576 (license license:public-domain)))