projects/guix·blob master · refs

990 lines · 40.8 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2017, 2022 Ricardo Wurmus <[email protected]>
3;;; Copyright © 2023, 2024, 2025 Nicolas Goaziou <[email protected]>
4;;;
5;;; This file is part of GNU Guix.
6;;;
7;;; GNU Guix is free software; you can redistribute it and/or modify it
8;;; under the terms of the GNU General Public License as published by
9;;; the Free Software Foundation; either version 3 of the License, or (at
10;;; your option) any later version.
11;;;
12;;; GNU Guix is distributed in the hope that it will be useful, but
13;;; WITHOUT ANY WARRANTY; without even the implied warranty of
14;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;;; GNU General Public License for more details.
16;;;
17;;; You should have received a copy of the GNU General Public License
18;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
19
20(define-module (test-texlive)
21 #:use-module (gnu packages tex)
22 #:use-module (guix import texlive)
23 #:use-module (guix tests)
24 #:use-module (guix tests http)
25 #:use-module (guix build utils)
26 #:use-module (srfi srfi-1)
27 #:use-module (srfi srfi-64)
28 #:use-module (srfi srfi-26)
29 #:use-module (web client)
30 #:use-module (ice-9 match))
31
32(test-begin "texlive")
33
34(define %fake-tlpdb
35 '((database-revision . 12345)
36 ("12many"
37 . ((name
38 . "12many")
39 (catalogue
40 . "one2many")
41 (shortdesc
42 . "Generalising mathematical index sets")
43 (longdesc
44 . "In the discrete branches of mathematics...")
45 (docfiles
46 . ("texmf-dist/doc/latex/12many/12many.pdf"
47 "texmf-dist/doc/latex/12many/README"))
48 (srcfiles
49 . ("texmf-dist/source/latex/12many/12many.dtx"
50 "texmf-dist/source/latex/12many/12many.ins"))
51 (runfiles
52 . ("texmf-dist/tex/latex/12many/12many.sty"))
53 (catalogue-license . "lppl")))
54 ("adforn"
55 (name . "adforn")
56 (shortdesc . "OrnementsADF font with TeX/LaTeX support")
57 (longdesc . "The bundle provides the Ornements ADF font...")
58 (execute "addMap OrnementsADF.map")
59 (docfiles
60 "texmf-dist/doc/fonts/adforn/COPYING"
61 "texmf-dist/doc/fonts/adforn/NOTICE"
62 "texmf-dist/doc/fonts/adforn/README"
63 "texmf-dist/doc/fonts/adforn/adforn.pdf")
64 (runfiles
65 "texmf-dist/fonts/afm/arkandis/adforn/OrnementsADF.afm"
66 "texmf-dist/fonts/enc/dvips/adforn/OrnementsADF.enc"
67 "texmf-dist/fonts/map/dvips/adforn/OrnementsADF.map"
68 "texmf-dist/fonts/tfm/arkandis/adforn/OrnementsADF.tfm"
69 "texmf-dist/fonts/type1/arkandis/adforn/OrnementsADF.pfb"
70 "texmf-dist/tex/latex/adforn/adforn.sty"
71 "texmf-dist/tex/latex/adforn/uornementsadf.fd")
72 (catalogue-license . "lppl gpl2"))
73 ("authorindex"
74 (name . "authorindex")
75 (shortdesc . "Index citations by author names")
76 (longdesc . "This package allows the user to...")
77 (depend "authorindex.ARCH")
78 (docfiles "texmf-dist/doc/latex/authorindex/COPYING")
79 (runfiles
80 "texmf-dist/scripts/authorindex/authorindex"
81 "texmf-dist/tex/latex/authorindex/authorindex.sty")
82 (catalogue-license . "lppl"))
83 ("authorindex.x86_64-linux"
84 (name . "authorindex.x86_64-linux")
85 (binfiles "bin/amd64-netbsd/authorindex"))
86 ("chs-physics-report"
87 . ((name . "ch-physics-report")
88 (shortdesc . "Physics lab reports...")
89 (longdesc . "This package may...")
90 (docfiles
91 .
92 ("texmf-dist/doc/latex/chs-physics-report/README.txt"
93 "texmf-dist/doc/latex/chs-physics-report/chs-physics-report.pdf"))
94 (runfiles
95 .
96 ("texmf-dist/tex/latex/chs-physics-report/chs-physics-report.sty"))
97 (catalogue-license . "pd cc-by-sa-3")))
98 ("collection-basic"
99 (name . "collection-basic")
100 (shortdesc . "Essential programs and files")
101 (longdesc . "These files are regarded as basic...")
102 (depend "amsfonts" "hyph-utf8" "hyphen-base" "texlive-common"
103 "texlive.infra" "tlshell"))
104 ("collection-texworks"
105 (name . "collection-texworks")
106 (shortdesc . "TeXworks editor...")
107 (longdesc . "See http...")
108 (depend "texworks" "collection-basic"))
109 ("cyrillic-bin"
110 (name . "cyrillic-bin")
111 (shortdesc . "Cyrillic bibtex and makeindex")
112 (depend "cyrillic-bin.ARCH")
113 (docfiles
114 "texmf-dist/doc/man/man1/rubibtex.1"
115 "texmf-dist/doc/man/man1/rubibtex.man1.pdf")
116 (runfiles
117 "texmf-dist/scripts/texlive-extra/rumakeindex.sh"
118 "texmf-dist/scripts/texlive-extra/rubibtex.sh"))
119 ("cyrillic-bin.x86_64-linux"
120 (name . "cyrillic-bin.x86_64-linux")
121 (shortdesc . "x86_64-linux files of cyrillic-bin")
122 (binfiles
123 "bin/x86_64-linux/rubibtex"
124 "bin/x86_64-linux/rumakeindex"))
125 ("example"
126 . ((name . "example")
127 (shortdesc . "Typeset examples...")
128 (longdesc . "The package makes it easier...")
129 (runfiles
130 .
131 ("texmf-dist/tex/latex/example/example.sty"))
132 (catalogue-license . "gpl")))
133 ("lollipop"
134 (name . "lollipop")
135 (shortdesc . "TeX made easy")
136 (longdesc . "Lollipop is TeX made easy...")
137 (execute "AddFormat name=lollipop engine=tex options=\"lollipop.ini\"...")
138 (docfiles
139 "texmf-dist/doc/otherformats/lollipop/README"
140 "texmf-dist/doc/otherformats/lollipop/manual/address.tex"
141 "texmf-dist/doc/otherformats/lollipop/manual/appendix.tex"
142 "texmf-dist/doc/otherformats/lollipop/manual/btxmac.tex"
143 "texmf-dist/doc/otherformats/lollipop/manual/comm.tex"
144 "texmf-dist/doc/otherformats/lollipop/manual/comment.tex"
145 "texmf-dist/doc/otherformats/lollipop/manual/example.tex"
146 "texmf-dist/doc/otherformats/lollipop/manual/extern.tex"
147 "texmf-dist/doc/otherformats/lollipop/manual/head.tex"
148 "texmf-dist/doc/otherformats/lollipop/manual/list.tex"
149 "texmf-dist/doc/otherformats/lollipop/manual/lollipop-manual.bib"
150 "texmf-dist/doc/otherformats/lollipop/manual/lollipop-manual.pdf")
151 (runfiles
152 "texmf-dist/tex/lollipop/lollipop-define.tex"
153 "texmf-dist/tex/lollipop/lollipop-document.tex"
154 "texmf-dist/tex/lollipop/lollipop-float.tex"
155 "texmf-dist/tex/lollipop/lollipop-fontdefs.tex"
156 "texmf-dist/tex/lollipop/lollipop-fonts.tex"
157 "texmf-dist/tex/lollipop/lollipop-heading.tex"
158 "texmf-dist/tex/lollipop/lollipop-lists.tex"
159 "texmf-dist/tex/lollipop/lollipop-output.tex"
160 "texmf-dist/tex/lollipop/lollipop-plain.tex"
161 "texmf-dist/tex/lollipop/lollipop-text.tex"
162 "texmf-dist/tex/lollipop/lollipop-tools.tex"
163 "texmf-dist/tex/lollipop/lollipop.ini"
164 "texmf-dist/tex/lollipop/lollipop.tex")
165 (catalogue-license . "gpl3"))
166 ("m-tx"
167 (name . "m-tx")
168 (shortdesc . "A preprocessor for pmx")
169 (longdesc . "M-Tx is a preprocessor to pmx")
170 (depend "m-tx.ARCH")
171 (runfiles "texmf-dist/scripts/m-tx/m-tx.lua"))
172 ("m-tx.x86_64-linux"
173 (name . "m-tx.x86_64-linux")
174 (binfiles "bin/x86_64-linux/m-tx"
175 "bin/x86_64-linux/prepmx"))
176 ("pax"
177 (name . "pax")
178 (shortdesc . "Extract and reinsert PDF...")
179 (longdesc . "If PDF files are...")
180 (depend "pax.ARCH")
181 (docfiles
182 "texmf-dist/doc/latex/pax/README")
183 (srcfiles
184 "texmf-dist/source/latex/pax/Makefile"
185 "texmf-dist/source/latex/pax/build.xml")
186 (runfiles
187 "texmf-dist/scripts/pax/pdfannotextractor.pl")
188 (catalogue-license . "lppl gpl"))
189 ("pax.x86_64-linux"
190 (name . "pax.x86_64-linux")
191 (shortdesc . "x86_64-linux files of pax")
192 (binfiles
193 "bin/x86_64-linux/pdfannotextractor"))
194 ("r_und_s"
195 (name . "r_und_s")
196 (runfiles "texmf-dist/tex/latex/r_und_s/r_und_s.sty"))
197 ("stricttex"
198 . ((name
199 . "stricttex")
200 (shortdesc
201 . "Strictly balanced brackets and numbers in command names")
202 (longdesc
203 . "This is a small, LuaLaTeX-only package providing you with three,
204sometimes useful features: It allows you to make brackets [...] \"strict\",
205meaning that each [ must be balanced by a ]. It allows you to use numbers in
206command names, so that you can do stuff like \\newcommand\\pi12{\\pi_{12}}. It
207allows you to use numbers and primes in command names, so that you can do
208stuff like \\newcommand\\pi'12{\\pi '_{12}}.")
209 (docfiles
210 . ("texmf-dist/doc/lualatex/stricttex/README.md"
211 "texmf-dist/doc/lualatex/stricttex/stricttex.pdf"))
212 (runfiles
213 . ("texmf-dist/tex/lualatex/stricttex/stricttex.lua"
214 "texmf-dist/tex/lualatex/stricttex/stricttex.sty"))
215 (catalogue-license . "lppl1.3c")))
216 ("tex"
217 (name . "tex")
218 (shortdesc . "A sophisticated typesetting engine")
219 (longdesc . "TeX is a typesetting system that incorporates...")
220 (depend "cm" "hyphen-base" "tex.ARCH")
221 (docfiles "texmf-dist/doc/man/man1/tex.1")
222 (catalogue-license . "knuth"))
223 ("texsis"
224 . ((name
225 . "texsis")
226 (shortdesc
227 . "Plain TeX macros for Physicists")
228 (longdesc
229 . "TeXsis is a TeX macro package which provides useful features for
230typesetting research papers and related documents. For example, it includes
231support specifically for: Automatic numbering of equations, figures, tables
232and references; Simplified control of type sizes, line spacing, footnotes,
233running headlines and footlines, and tables of contents, figures and tables;
234Specialized document formats for research papers, preprints and \"e-prints\",
235conference proceedings, theses, books, referee reports, letters, and
236memoranda; Simplified means of constructing an index for a book or thesis;
237Easy to use double column formatting; Specialized environments for lists,
238theorems and proofs, centered or non-justified text, and listing computer
239code; Specialized macros for easily constructing ruled tables. TeXsis was
240originally developed for physicists, but others may also find it useful. It is
241completely compatible with Plain TeX.")
242 (depend . ("tex" "plain" "knuth-lib" "hyphen-base" "cm"))
243 (docfiles
244 . ("texmf-dist/doc/man/man1/texsis.1"
245 "texmf-dist/doc/man/man1/texsis.man1.pdf"
246 "texmf-dist/doc/otherformats/texsis/base/COPYING"
247 "texmf-dist/doc/otherformats/texsis/base/Example.tex"
248 "texmf-dist/doc/otherformats/texsis/base/Fonts.tex"
249 "texmf-dist/doc/otherformats/texsis/base/INSTALL"
250 "texmf-dist/doc/otherformats/texsis/base/Install.tex"
251 "texmf-dist/doc/otherformats/texsis/base/MANIFEST"
252 "texmf-dist/doc/otherformats/texsis/base/Manual.fgl"
253 "texmf-dist/doc/otherformats/texsis/base/Manual.ref"
254 "texmf-dist/doc/otherformats/texsis/base/Manual.tbl"
255 "texmf-dist/doc/otherformats/texsis/base/Manual.tex"
256 "texmf-dist/doc/otherformats/texsis/base/NEWS"
257 "texmf-dist/doc/otherformats/texsis/base/README"
258 "texmf-dist/doc/otherformats/texsis/base/TXSapxF.doc"
259 "texmf-dist/doc/otherformats/texsis/base/TXScover.doc"
260 "texmf-dist/doc/otherformats/texsis/base/TXSdcol.doc"
261 "texmf-dist/doc/otherformats/texsis/base/TXSdoc.doc"
262 "texmf-dist/doc/otherformats/texsis/base/TXSdoc0.doc"
263 "texmf-dist/doc/otherformats/texsis/base/TXSdocM.doc"
264 "texmf-dist/doc/otherformats/texsis/base/TXSend.doc"
265 "texmf-dist/doc/otherformats/texsis/base/TXSenvmt.doc"
266 "texmf-dist/doc/otherformats/texsis/base/TXSeqns.doc"
267 "texmf-dist/doc/otherformats/texsis/base/TXSfigs.doc"
268 "texmf-dist/doc/otherformats/texsis/base/TXSfmts.doc"
269 "texmf-dist/doc/otherformats/texsis/base/TXSfonts.doc"
270 "texmf-dist/doc/otherformats/texsis/base/TXSinstl.doc"
271 "texmf-dist/doc/otherformats/texsis/base/TXSintro.doc"
272 "texmf-dist/doc/otherformats/texsis/base/TXSletr.doc"
273 "texmf-dist/doc/otherformats/texsis/base/TXSmisc.doc"
274 "texmf-dist/doc/otherformats/texsis/base/TXSprns.doc"
275 "texmf-dist/doc/otherformats/texsis/base/TXSrefs.doc"
276 "texmf-dist/doc/otherformats/texsis/base/TXSrevs.doc"
277 "texmf-dist/doc/otherformats/texsis/base/TXSruled.doc"
278 "texmf-dist/doc/otherformats/texsis/base/TXSsects.doc"
279 "texmf-dist/doc/otherformats/texsis/base/TXSsite.000"
280 "texmf-dist/doc/otherformats/texsis/base/TXSsymb.doc"
281 "texmf-dist/doc/otherformats/texsis/base/TXStags.doc"
282 "texmf-dist/doc/otherformats/texsis/base/index.tex"
283 "texmf-dist/doc/otherformats/texsis/base/letr"
284 "texmf-dist/doc/otherformats/texsis/base/penguin.eps"
285 "texmf-dist/doc/otherformats/texsis/base/penguin2.eps"
286 "texmf-dist/doc/otherformats/texsis/base/texsis.el"
287 "texmf-dist/doc/otherformats/texsis/base/texsis.lsm"))
288 (runfiles
289 . ("texmf-dist/bibtex/bst/texsis/texsis.bst"
290 "texmf-dist/tex/texsis/base/AIP.txs"
291 "texmf-dist/tex/texsis/base/CVformat.txs"
292 "texmf-dist/tex/texsis/base/Elsevier.txs"
293 "texmf-dist/tex/texsis/base/Exam.txs"
294 "texmf-dist/tex/texsis/base/Formletr.txs"
295 "texmf-dist/tex/texsis/base/IEEE.txs"
296 "texmf-dist/tex/texsis/base/PhysRev.txs"
297 "texmf-dist/tex/texsis/base/Spanish.txs"
298 "texmf-dist/tex/texsis/base/Swedish.txs"
299 "texmf-dist/tex/texsis/base/TXSconts.tex"
300 "texmf-dist/tex/texsis/base/TXSdcol.tex"
301 "texmf-dist/tex/texsis/base/TXSenvmt.tex"
302 "texmf-dist/tex/texsis/base/TXSeqns.tex"
303 "texmf-dist/tex/texsis/base/TXSfigs.tex"
304 "texmf-dist/tex/texsis/base/TXSfmts.tex"
305 "texmf-dist/tex/texsis/base/TXSfonts.tex"
306 "texmf-dist/tex/texsis/base/TXShead.tex"
307 "texmf-dist/tex/texsis/base/TXSinit.tex"
308 "texmf-dist/tex/texsis/base/TXSletr.tex"
309 "texmf-dist/tex/texsis/base/TXSmacs.tex"
310 "texmf-dist/tex/texsis/base/TXSmemo.tex"
311 "texmf-dist/tex/texsis/base/TXSprns.tex"
312 "texmf-dist/tex/texsis/base/TXSrefs.tex"
313 "texmf-dist/tex/texsis/base/TXSruled.tex"
314 "texmf-dist/tex/texsis/base/TXSsects.tex"
315 "texmf-dist/tex/texsis/base/TXSsite.tex"
316 "texmf-dist/tex/texsis/base/TXSsymb.tex"
317 "texmf-dist/tex/texsis/base/TXStags.tex"
318 "texmf-dist/tex/texsis/base/TXStitle.tex"
319 "texmf-dist/tex/texsis/base/Tablebod.txs"
320 "texmf-dist/tex/texsis/base/WorldSci.txs"
321 "texmf-dist/tex/texsis/base/color.txs"
322 "texmf-dist/tex/texsis/base/nuclproc.txs"
323 "texmf-dist/tex/texsis/base/printfont.txs"
324 "texmf-dist/tex/texsis/base/spine.txs"
325 "texmf-dist/tex/texsis/base/texsis.tex"
326 "texmf-dist/tex/texsis/base/thesis.txs"
327 "texmf-dist/tex/texsis/base/twin.txs"
328 "texmf-dist/tex/texsis/config/texsis.ini"))
329 (catalogue-license . "lppl")))
330 ("trsym"
331 (name . "trsym")
332 (shortdesc . "Symbols for transformations")
333 (longdesc . "The bundle provides Metafont...")
334 (docfiles "texmf-dist/doc/latex/trsym/README"
335 "texmf-dist/doc/latex/trsym/manifest.txt"
336 "texmf-dist/doc/latex/trsym/trsym.pdf")
337 (srcfiles "texmf-dist/source/latex/trsym/trsym.dtx"
338 "texmf-dist/source/latex/trsym/trsym.ins")
339 (runfiles "texmf-dist/fonts/source/public/trsym/trsy.mf"
340 "texmf-dist/fonts/source/public/trsym/trsy10.mf"
341 "texmf-dist/fonts/source/public/trsym/trsy12.mf"
342 "texmf-dist/fonts/tfm/public/trsym/trsy10.tfm"
343 "texmf-dist/fonts/tfm/public/trsym/trsy12.tfm"
344 "texmf-dist/tex/latex/trsym/trsym.sty"
345 "texmf-dist/tex/latex/trsym/utrsy.fd")
346 (catalogue-license . "lppl"))
347 ("vlna"
348 (name . "vlna")
349 (shortdesc . "Add ~ after non-syllabic preposition")
350 (longdesc . "Preprocessor for TeX source")
351 (depend "vlna.ARCH")
352 (docfiles "texmf-dist/doc/man/man1/vlna.1"))
353 ("vlna.x86_64-linux"
354 (shortdesc "x86_64-linux files of vlna")
355 (binfiles "bin/x86_64-linux/vlna"))
356 ("web"
357 (depend "web.ARCH")
358 (docfiles "texmf-dist/doc/man/man1/tangle.1"))
359 ("web.x86_64-linux"
360 (name . "web.x86_64-linux")
361 (binfiles "bin/x86_64-linux/tangle"))))
362
363(test-assert "texlive->guix-package, no docfiles"
364 ;; Replace network resources with sample data.
365 (mock ((guix build svn) svn-fetch
366 (lambda* (url revision directory
367 #:key (svn-command "svn")
368 (user-name #f)
369 (password #f)
370 (recursive? #t))
371 (mkdir-p directory)
372 (with-output-to-file (string-append directory "/foo")
373 (lambda ()
374 (display "source")))))
375 (let ((result (texlive->guix-package "example"
376 #:version "0"
377 #:database %fake-tlpdb)))
378 (match result
379 (('package
380 ('name "texlive-example")
381 ('version _)
382 ('source ('origin
383 ('method 'svn-multi-fetch)
384 ('uri ('svn-multi-reference
385 ('url ('texlive-packages-repository 'version))
386 ('revision 12345)
387 ('locations ('list "tex/latex/example/"))))
388 ('file-name ('git-file-name 'name 'version))
389 ('sha256
390 ('base32 (? string? hash)))))
391 ('build-system 'texlive-build-system)
392 ('home-page (? string?))
393 ('synopsis (? string?))
394 ('description (? string?))
395 ('license _))
396 #true)
397 (_
398 (begin
399 (format #t "~s~%" result)
400 (pk 'fail result #f)))))))
401
402(test-assert "texlive->guix-package"
403 ;; Replace network resources with sample data.
404 (mock ((guix build svn) svn-fetch
405 (lambda* (url revision directory
406 #:key (svn-command "svn")
407 (user-name #f)
408 (password #f)
409 (recursive? #t))
410 (mkdir-p directory)
411 (with-output-to-file (string-append directory "/foo")
412 (lambda ()
413 (display "source")))))
414 (let ((result (texlive->guix-package "texsis"
415 #:version "0"
416 #:database %fake-tlpdb)))
417 (match result
418 (('package
419 ('name "texlive-texsis")
420 ('version _)
421 ('source ('origin
422 ('method 'svn-multi-fetch)
423 ('uri ('svn-multi-reference
424 ('url ('texlive-packages-repository 'version))
425 ('revision 12345)
426 ('locations
427 ('list "bibtex/bst/texsis/"
428 "doc/man/man1/texsis.1"
429 "doc/man/man1/texsis.man1.pdf"
430 "doc/otherformats/texsis/base/"
431 "tex/texsis/base/"
432 "tex/texsis/config/"))))
433 ('file-name ('git-file-name 'name 'version))
434 ('sha256
435 ('base32 (? string? hash)))))
436 ('outputs ''("out" "doc"))
437 ('build-system 'texlive-build-system)
438 ('propagated-inputs
439 ('list 'texlive-cm
440 'texlive-hyphen-base
441 'texlive-knuth-lib
442 'texlive-plain
443 'texlive-tex))
444 ('home-page (? string?))
445 ('synopsis (? string?))
446 ('description (? string?))
447 ('license 'lppl))
448 #true)
449 (_
450 (begin
451 (format #t "~s~%" result)
452 (pk 'fail result #f)))))))
453
454(test-assert "texlive->guix-package, with METAFONT files"
455 ;; Replace network resources with sample data.
456 (mock ((guix build svn) svn-fetch
457 (lambda* (url revision directory
458 #:key (svn-command "svn")
459 (user-name #f)
460 (password #f)
461 (recursive? #t))
462 (mkdir-p directory)
463 (with-output-to-file (string-append directory "/foo")
464 (lambda ()
465 (display "source")))))
466 (let ((result (texlive->guix-package "trsym"
467 #:version "0"
468 #:database %fake-tlpdb)))
469 (match result
470 (('package
471 ('name _)
472 ('version _)
473 ('source _)
474 ('outputs _)
475 ('build-system _)
476 ('native-inputs
477 ('list 'texlive-metafont))
478 ('home-page (? string?))
479 ('synopsis (? string?))
480 ('description (? string?))
481 ('license _))
482 #true)
483 (_
484 (begin
485 (format #t "~s~%" result)
486 (pk 'fail result #f)))))))
487
488(test-assert "texlive->guix-package, with catalogue entry, no inputs"
489 ;; Replace network resources with sample data.
490 (mock ((guix build svn) svn-fetch
491 (lambda* (url revision directory
492 #:key (svn-command "svn")
493 (user-name #f)
494 (password #f)
495 (recursive? #t))
496 (mkdir-p directory)
497 (with-output-to-file (string-append directory "/foo")
498 (lambda ()
499 (display "source")))))
500 (let ((result (texlive->guix-package "12many"
501 #:version "0"
502 #:database %fake-tlpdb)))
503 (match result
504 (('package
505 ('name "texlive-12many")
506 ('version _)
507 ('source ('origin
508 ('method 'svn-multi-fetch)
509 ('uri ('svn-multi-reference
510 ('url ('texlive-packages-repository 'version))
511 ('revision 12345)
512 ('locations ('list "doc/latex/12many/"
513 "source/latex/12many/"
514 "tex/latex/12many/"))))
515 ('file-name ('git-file-name 'name 'version))
516 ('sha256
517 ('base32 (? string? hash)))))
518 ('outputs ''("out" "doc"))
519 ('build-system 'texlive-build-system)
520 ('home-page "https://ctan.org/pkg/one2many")
521 ('synopsis (? string?))
522 ('description (? string?))
523 ('license 'lppl))
524 #true)
525 (_
526 (begin
527 (format #t "~s~%" result)
528 (pk 'fail result #f)))))))
529
530(test-assert "texlive->guix-package, multiple licenses"
531 ;; Replace network resources with sample data.
532 (mock ((guix build svn) svn-fetch
533 (lambda* (url revision directory
534 #:key (svn-command "svn")
535 (user-name #f)
536 (password #f)
537 (recursive? #t))
538 (mkdir-p directory)
539 (with-output-to-file (string-append directory "/foo")
540 (lambda ()
541 (display "source")))))
542 (let ((result (texlive->guix-package "chs-physics-report"
543 #:version "0"
544 #:database %fake-tlpdb)))
545 (match result
546 (('package
547 ('name "texlive-chs-physics-report")
548 ('version _)
549 ('source ('origin
550 ('method 'svn-multi-fetch)
551 ('uri ('svn-multi-reference
552 ('url ('texlive-packages-repository 'version))
553 ('revision 12345)
554 ('locations
555 ('list "doc/latex/chs-physics-report/"
556 "tex/latex/chs-physics-report/"))))
557 ('file-name ('git-file-name 'name 'version))
558 ('sha256
559 ('base32 (? string? hash)))))
560 ('outputs ''("out" "doc"))
561 ('build-system 'texlive-build-system)
562 ('home-page (? string?))
563 ('synopsis (? string?))
564 ('description (? string?))
565 ('license ('list 'public-domain 'cc-by-sa3.0)))
566 #true)
567 (_
568 (begin
569 (format #t "~s~%" result)
570 (pk 'fail result #f)))))))
571
572(test-assert "texlive->guix-package, meta-package"
573 ;; Replace network resources with sample data.
574 (mock ((guix build svn) svn-fetch
575 (lambda* (url revision directory
576 #:key (svn-command "svn")
577 (user-name #f)
578 (password #f)
579 (recursive? #t))
580 (mkdir-p directory)
581 (with-output-to-file (string-append directory "/foo")
582 (lambda ()
583 (display "source")))))
584 (let ((result (texlive->guix-package "collection-texworks"
585 #:version "0"
586 #:database %fake-tlpdb)))
587 (match result
588 (('package
589 ('name "texlive-collection-texworks")
590 ('version '(package-version texlive-source))
591 ('source #f)
592 ('build-system 'trivial-build-system)
593 ('arguments
594 ('list '#:builder ('gexp ('mkdir ('ungexp 'output)))))
595 ('propagated-inputs
596 ('list 'texlive-collection-basic))
597 ('home-page "https://www.tug.org/texlive/")
598 ('synopsis (? string?))
599 ('description (? string?))
600 ('license
601 ('fsf-free "https://www.tug.org/texlive/copying.html")))
602 #true)
603 (_
604 (begin
605 (format #t "~s~%" result)
606 (pk 'fail result #f)))))))
607
608(test-assert "texlive->guix-package, with TeX format"
609 ;; Replace network resources with sample data.
610 (mock ((guix build svn) svn-fetch
611 (lambda* (url revision directory
612 #:key (svn-command "svn")
613 (user-name #f)
614 (password #f)
615 (recursive? #t))
616 (mkdir-p directory)
617 (with-output-to-file (string-append directory "/foo")
618 (lambda ()
619 (display "source")))))
620 (let ((result (texlive->guix-package "lollipop"
621 #:version "0"
622 #:database %fake-tlpdb)))
623 (match result
624 (('package
625 ('name "texlive-lollipop")
626 ('version _)
627 ('source ('origin
628 ('method 'svn-multi-fetch)
629 ('uri ('svn-multi-reference
630 ('url ('texlive-packages-repository 'version))
631 ('revision 12345)
632 ('locations ('list "doc/otherformats/lollipop/"
633 "tex/lollipop/"))))
634 ('file-name ('git-file-name 'name 'version))
635 ('sha256
636 ('base32 (? string? hash)))))
637 ('outputs ''("out" "doc"))
638 ('build-system 'texlive-build-system)
639 ('arguments ('list '#:create-formats ('gexp ('list "lollipop"))))
640 ('home-page (? string?))
641 ('synopsis (? string?))
642 ('description (? string?))
643 ('license 'gpl3))
644 #true)
645 (_
646 (begin
647 (format #t "~s~%" result)
648 (pk 'fail result #f)))))))
649
650(test-assert "texlive->guix-package, execute but no TeX format"
651 ;; Replace network resources with sample data.
652 (mock ((guix build svn) svn-fetch
653 (lambda* (url revision directory
654 #:key (svn-command "svn")
655 (user-name #f)
656 (password #f)
657 (recursive? #t))
658 (mkdir-p directory)
659 (with-output-to-file (string-append directory "/foo")
660 (lambda ()
661 (display "source")))))
662 (let ((result (texlive->guix-package "adforn"
663 #:version "0"
664 #:database %fake-tlpdb)))
665 (match result
666 (('package
667 ('name "texlive-adforn")
668 ('version _)
669 ('source _)
670 ('outputs ''("out" "doc"))
671 ('build-system 'texlive-build-system)
672 ('home-page (? string?))
673 ('synopsis (? string?))
674 ('description (? string?))
675 ('license _))
676 #true)
677 (_
678 (begin
679 (format #t "~s~%" result)
680 (pk 'fail result #f)))))))
681
682(test-assert "texlive->guix-package, translate dependencies"
683 ;; Replace network resources with sample data.
684 (mock ((guix build svn) svn-fetch
685 (lambda* (url revision directory
686 #:key (svn-command "svn")
687 (user-name #f)
688 (password #f)
689 (recursive? #t))
690 (mkdir-p directory)
691 (with-output-to-file (string-append directory "/foo")
692 (lambda ()
693 (display "source")))))
694 (let ((result (texlive->guix-package "collection-basic"
695 #:version "0"
696 #:database %fake-tlpdb)))
697 (match result
698 (('package
699 ('name "texlive-collection-basic")
700 ('version _)
701 ('source _)
702 ('build-system 'trivial-build-system)
703 ('arguments
704 ('list '#:builder ('gexp ('mkdir ('ungexp 'output)))))
705 ('propagated-inputs
706 ('list 'texlive-amsfonts 'texlive-hyphen-complete))
707 ('home-page (? string?))
708 ('synopsis (? string?))
709 ('description (? string?))
710 ('license _))
711 #true)
712 (_
713 (begin
714 (format #t "~s~%" result)
715 (pk 'fail result #f)))))))
716
717(test-assert "texlive->guix-package, lonely `hyphen-base' dependency and ARCH"
718 ;; Replace network resources with sample data.
719 (mock ((guix build svn) svn-fetch
720 (lambda* (url revision directory
721 #:key (svn-command "svn")
722 (user-name #f)
723 (password #f)
724 (recursive? #t))
725 (mkdir-p directory)
726 (with-output-to-file (string-append directory "/foo")
727 (lambda ()
728 (display "source")))))
729 (let ((result (texlive->guix-package "tex"
730 #:version "0"
731 #:database %fake-tlpdb)))
732 (match result
733 (('package
734 ('name "texlive-tex")
735 ('version _)
736 ('source _)
737 ('outputs _)
738 ('build-system 'texlive-build-system)
739 ('arguments ('list '#:texlive-latex-bin? #f))
740 ('propagated-inputs
741 ('list 'texlive-cm 'texlive-hyphen-base))
742 ('home-page (? string?))
743 ('synopsis (? string?))
744 ('description (? string?))
745 ('license _))
746 #true)
747 (_
748 (begin
749 (format #t "~s~%" result)
750 (pk 'fail result #f)))))))
751
752(test-assert "texlive->guix-package, single script, no extension"
753 ;; Replace network resources with sample data.
754 (mock ((guix build svn) svn-fetch
755 (lambda* (url revision directory
756 #:key (svn-command "svn")
757 (user-name #f)
758 (password #f)
759 (recursive? #t))
760 (mkdir-p directory)
761 (with-output-to-file (string-append directory "/foo")
762 (lambda ()
763 (display "source")))))
764 (let ((result (texlive->guix-package "authorindex"
765 #:version "0"
766 #:database %fake-tlpdb)))
767 (match result
768 (('package
769 ('name "texlive-authorindex")
770 ('version _)
771 ('source _)
772 ('outputs _)
773 ('build-system 'texlive-build-system)
774 ('arguments
775 ('list '#:link-scripts ('gexp ('list "authorindex"))))
776 ('home-page (? string?))
777 ('synopsis (? string?))
778 ('description (? string?))
779 ('license _))
780 #true)
781 (_
782 (begin
783 (format #t "~s~%" result)
784 (pk 'fail result #f)))))))
785
786(test-assert "texlive->guix-package, multiple scripts, with extensions"
787 ;; Replace network resources with sample data.
788 (mock ((guix build svn) svn-fetch
789 (lambda* (url revision directory
790 #:key (svn-command "svn")
791 (user-name #f)
792 (password #f)
793 (recursive? #t))
794 (mkdir-p directory)
795 (with-output-to-file (string-append directory "/foo")
796 (lambda ()
797 (display "source")))))
798 (let ((result (texlive->guix-package "cyrillic-bin"
799 #:version "0"
800 #:database %fake-tlpdb)))
801 (match result
802 (('package
803 ('name "texlive-cyrillic-bin")
804 ('version _)
805 ('source _)
806 ('outputs _)
807 ('build-system 'texlive-build-system)
808 ('arguments
809 ('list '#:link-scripts
810 ('gexp ('list "rubibtex.sh" "rumakeindex.sh"))))
811 ('home-page _)
812 ('synopsis _)
813 ('description _)
814 ('license _))
815 #true)
816 (_
817 (begin
818 (format #t "~s~%" result)
819 (pk 'fail result #f)))))))
820
821(test-assert "texlive->guix-package, script with associated input"
822 ;; Replace network resources with sample data.
823 (mock ((guix build svn) svn-fetch
824 (lambda* (url revision directory
825 #:key (svn-command "svn")
826 (user-name #f)
827 (password #f)
828 (recursive? #t))
829 (mkdir-p directory)
830 (with-output-to-file (string-append directory "/foo")
831 (lambda ()
832 (display "source")))))
833 (let ((result (texlive->guix-package "pax"
834 #:version "0"
835 #:database %fake-tlpdb)))
836 (match result
837 (('package
838 ('name "texlive-pax")
839 ('version _)
840 ('source _)
841 ('outputs _)
842 ('build-system 'texlive-build-system)
843 ('arguments
844 ('list '#:link-scripts ('gexp ('list "pdfannotextractor.pl"))))
845 ('inputs
846 ('list 'perl))
847 ('home-page _)
848 ('synopsis _)
849 ('description _)
850 ('license _))
851 #true)
852 (_
853 (begin
854 (format #t "~s~%" result)
855 (pk 'fail result #f)))))))
856
857(test-assert "texlive->guix-package, propagated binaries, no script"
858 ;; Replace network resources with sample data.
859 (mock ((guix build svn) svn-fetch
860 (lambda* (url revision directory
861 #:key (svn-command "svn")
862 (user-name #f)
863 (password #f)
864 (recursive? #t))
865 (mkdir-p directory)
866 (with-output-to-file (string-append directory "/foo")
867 (lambda ()
868 (display "source")))))
869 (let ((result (texlive->guix-package "vlna"
870 #:version "0"
871 #:database %fake-tlpdb)))
872 (match result
873 (('package
874 ('name "texlive-vlna")
875 ('version _)
876 ('source _)
877 ('outputs _)
878 ('build-system 'texlive-build-system)
879 ('propagated-inputs
880 ('list 'texlive-vlna-bin))
881 ('home-page _)
882 ('synopsis _)
883 ('description _)
884 ('license _))
885 #true)
886 (_
887 (begin
888 (format #t "~s~%" result)
889 (pk 'fail result #f)))))))
890
891(test-assert "texlive->guix-package, propagated binaries and scripts"
892 ;; Replace network resources with sample data.
893 (mock ((guix build svn) svn-fetch
894 (lambda* (url revision directory
895 #:key (svn-command "svn")
896 (user-name #f)
897 (password #f)
898 (recursive? #t))
899 (mkdir-p directory)
900 (with-output-to-file (string-append directory "/foo")
901 (lambda ()
902 (display "source")))))
903 (let ((result (texlive->guix-package "m-tx"
904 #:version "0"
905 #:database %fake-tlpdb)))
906 (match result
907 (('package
908 ('name "texlive-m-tx")
909 ('version _)
910 ('source _)
911 ('build-system 'texlive-build-system)
912 ('arguments
913 ('list '#:link-scripts ('gexp ('list "m-tx.lua"))))
914 ('propagated-inputs
915 ('list 'texlive-m-tx-bin))
916 ('home-page _)
917 ('synopsis _)
918 ('description _)
919 ('license _))
920 #true)
921 (_
922 (begin
923 (format #t "~s~%" result)
924 (pk 'fail result #f)))))))
925
926(test-assert "texlive->guix-package, with skipped propagated binaries"
927 ;; Replace network resources with sample data.
928 (mock ((guix build svn) svn-fetch
929 (lambda* (url revision directory
930 #:key (svn-command "svn")
931 (user-name #f)
932 (password #f)
933 (recursive? #t))
934 (mkdir-p directory)
935 (with-output-to-file (string-append directory "/foo")
936 (lambda ()
937 (display "source")))))
938 (let ((result (texlive->guix-package "web"
939 #:version "0"
940 #:database %fake-tlpdb)))
941 (match result
942 (('package
943 ('name "texlive-web")
944 ('version _)
945 ('source _)
946 ('outputs _)
947 ('build-system 'texlive-build-system)
948 ('home-page _)
949 ('synopsis _)
950 ('description _)
951 ('license _))
952 #true)
953 (_
954 (begin
955 (format #t "~s~%" result)
956 (pk 'fail result #f)))))))
957
958(test-assert "texlive->guix-package, with upstream-name property"
959 ;; Replace network resources with sample data.
960 (mock ((guix build svn) svn-fetch
961 (lambda* (url revision directory
962 #:key (svn-command "svn")
963 (user-name #f)
964 (password #f)
965 (recursive? #t))
966 (mkdir-p directory)
967 (with-output-to-file (string-append directory "/foo")
968 (lambda ()
969 (display "source")))))
970 (let ((result (texlive->guix-package "r_und_s"
971 #:version "0"
972 #:database %fake-tlpdb)))
973 (match result
974 (('package
975 ('name "texlive-r-und-s")
976 ('version _)
977 ('source _)
978 ('properties _)
979 ('build-system 'texlive-build-system)
980 ('home-page _)
981 ('synopsis _)
982 ('description _)
983 ('license _))
984 #true)
985 (_
986 (begin
987 (format #t "~s~%" result)
988 (pk 'fail result #f)))))))
989
990(test-end "texlive")