aboutsummaryrefslogtreecommitdiff
path: root/tests/texlive.scm
blob: f7e5515c4c2c1aa79f323b7c693c8e6edbed04e9 (about) (plain)
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
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (test-texlive)
  #:use-module (gnu packages tex)
  #:use-module (guix import texlive)
  #:use-module (guix tests)
  #:use-module (guix tests http)
  #:use-module (guix build utils)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-64)
  #:use-module (srfi srfi-26)
  #:use-module (web client)
  #:use-module (ice-9 match))

(test-begin "texlive")

(define xml
  "\
<entry id=\"foo\">
   <name>foo</name>
   <caption>Foomatic frobnication in LuaLaTeX</caption>
   <authorref id=\"rekado\"/>
   <license type=\"lppl1.3\"/>
   <version number=\"2.6a\"/>
   <description>
     <p>
          Foo is a package for LuaLaTeX. It provides an interface to frobnicate gimbals
          in a foomatic way with the LuaTeX engine.
     </p>
     <p>
          The package requires the bar and golly
          bundles for extremely special specialties.
     </p>
   </description>
   <ctan path=\"/macros/latex/contrib/foo\" file=\"true\"/>
   <texlive location=\"foo\"/>
   <keyval key=\"topic\" value=\"tests\"/>
  null
</entry>")

(define sxml
  '(*TOP* (entry (@ (id "foo"))
                 (name "foo")
                 (caption "Foomatic frobnication in LuaLaTeX")
                 (authorref (@ (id "rekado")))
                 (license (@ (type "lppl1.3")))
                 (version (@ (number "2.6a")))
                 (description
                  (p "\n          Foo is a package for LuaLaTeX. It provides an interface to frobnicate gimbals\n          in a foomatic way with the LuaTeX engine.\n     ")
                  (p "\n          The package requires the bar and golly\n          bundles for extremely special specialties.\n     "))
                 (ctan (@ (path "/macros/latex/contrib/foo") (file "true")))
                 (texlive (@ (location "foo")))
                 (keyval (@ (value "tests") (key "topic")))
                 "\n  null\n")))

;; Avoid collisions with other tests.
(%http-server-port 10200)

(test-equal "fetch-sxml: returns SXML for valid XML"
  sxml
  (with-http-server `((200 ,xml))
    (parameterize ((current-http-proxy (%local-url)))
      (fetch-sxml "foo"))))

;; TODO:
(test-assert "sxml->package"
  ;; Replace network resources with sample data.
  (mock ((guix build svn) svn-fetch
         (lambda* (url revision directory
                       #:key (svn-command "svn")
                       (user-name #f)
                       (password #f))
           (mkdir-p directory)
           (with-output-to-file (string-append directory "/foo")
             (lambda ()
               (display "source")))))
        (let ((result (sxml->package sxml)))
          (match result
            (('package
               ('name "texlive-latex-foo")
               ('version "2.6a")
               ('source ('origin
                          ('method 'svn-fetch)
                          ('uri ('texlive-ref "latex" "foo"))
                          ('sha256
                           ('base32
                            (? string? hash)))))
               ('build-system 'texlive-build-system)
               ('arguments ('quote (#:tex-directory "latex/foo")))
               ('home-page "http://www.ctan.org/pkg/foo")
               ('synopsis "Foomatic frobnication in LuaLaTeX")
               ('description
                "Foo is a package for LuaLaTeX.  It provides an interface to \
frobnicate gimbals in a foomatic way with the LuaTeX engine.  The package \
requires the bar and golly bundles for extremely special specialties.")
               ('license 'lppl1.3+))
             #t)
            (_
             (begin
               (format #t "~s\n" result)
               (pk 'fail result #f)))))))

(test-end "texlive")
r used. (string-append "-DCMAKE_CXX_FLAGS=-I" (search-input-directory %build-inputs "/include/libsoup-2.4"))) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file (assoc-ref glib-or-gtk:%standard-phases 'generate-gdk-pixbuf-loaders-cache-file)) #$@(if (or (target-aarch64?) (target-ppc64le?) (target-riscv64?)) '((add-after 'unpack 'disable-more-tests (lambda _ ;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035680690 (substitute* "testfiles/CMakeLists.txt" (("lpe64-test") "#lpe64-test") ((" lpe-test") " #lpe-test") (("add_subdirectory\\(lpe_tests\\)") "")) ;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035539888 ;; According to upstream, this is a false positive. (substitute* "testfiles/rendering_tests/CMakeLists.txt" (("add_rendering_test\\(test-use" all) (string-append "#" all))) ;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035539888 ;; Allegedly a precision error in the gamma. (substitute* "testfiles/cli_tests/CMakeLists.txt" (("add_cli_test\\(export-png-color-mode-gray-8_png" all) (string-append "#" all)) ;; These also seem to be failing due to precision errors. (("add_pdfinput_test\\(font-(spacing|style) 1 draw-all" all) (string-append "#" all)))))) '()) #$@(if (or (target-x86-32?) (target-arm32?)) '((add-after 'unpack 'fix-32bit-size_t-format (lambda _ ;; Fix an error due to format type mismatch with 32-bit size_t. (substitute* "testfiles/src/visual-bounds-test.cpp" (("%lu") "%u"))))) '()) (add-after 'unpack 'set-home ;; Mute Inkscape warnings during tests. (lambda _ (setenv "HOME" (getcwd)))) ;; Move the check phase after the install phase, as when run in the ;; tests, Inkscape relies on files that are not yet installed, such ;; as the "share/inkscape/ui/units.xml" file. (delete 'check) (add-after 'install 'check ;; Use ctest directly so that we can easily exclude problematic ;; tests. (lambda* (#:key parallel-tests? tests? #:allow-other-keys) (when tests? ;; The following tests fails, perhaps due to building without ;; ImageMagick (see: ;; https://gitlab.com/inkscape/inbox/-/issues/10005). (let ((job-count (if parallel-tests? (number->string (parallel-job-count)) "1")) (skipped-tests (list "cli_export-type-caseinsensitive_check_output" "cli_export-type_xaml_check_output" "cli_export-height_export-use-hints_check_output" "cli_export-plain-svg_check_output" "cli_export-use-hints_export-id_check_output" "cli_export-extension_svg_check_output" "cli_export-extension_ps_check_output" "cli_export-extension_eps_check_output" "cli_export-extension_pdf_check_output" "cli_export-plain-extension-svg_check_output" ;; These fail non-deterministically (see: ;; https://gitlab.com/inkscape/inbox/-/issues/10005). "cli_export-ps-level_3_check_output" "cli_export-ps-level_3_content_check_output" "cli_export-ps-level_2_content_check_output" "cli_export-ps-level_2_check_output" ;; These fail on i686 but not x86-64 #$@(if (target-x86-32?) '("cli_pdfinput-font-spacing_check_output" "cli_pdfinput-font-style_check_output" "cli_pdfinput-latex_check_output" "cli_pdfinput-multi-page-sample_check_output" "test_lpe") '())))) (invoke "make" "-j" job-count "tests") (invoke "ctest" "-j" job-count "--output-on-error" "-E" (string-append "(" (string-join skipped-tests "|") ")")))))) (add-after 'install 'glib-or-gtk-compile-schemas (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas)) (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)) (add-after 'install 'wrap-program ;; Ensure Python is available at runtime. (lambda* (#:key inputs #:allow-other-keys) (wrap-program (string-append #$output "/bin/inkscape") `("PATH" prefix (,(dirname (search-input-file inputs "bin/python")))) `("GUIX_PYTHONPATH" prefix (,(getenv "GUIX_PYTHONPATH"))) ;; Wrapping GDK_PIXBUF_MODULE_FILE allows Inkscape to load ;; its own icons in pure environments. `("GDK_PIXBUF_MODULE_FILE" = (,(getenv "GDK_PIXBUF_MODULE_FILE"))) ;; Ensure GObject Introspection typelibs are found. `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))))))) (inputs (list (librsvg-for-system) ;for the pixbuf loader autotrace bash-minimal boost freetype gdl-minimal gsl gspell gtk+ gtkmm-3 lcms lib2geom libcdr libgc libjpeg-turbo libpng libsoup-minimal-2 libvisio libwpd libwpg libxml2 libxslt poppler popt potrace ;; These Python dependencies are used by the Inkscape extension ;; management system. To verify that it is working, visit the ;; Extensions -> Manage Extensions... menu. python-appdirs python-cssselect python-lxml python-numpy python-pygobject python-pyserial python-requests python-scour python-wrapper readline)) (native-inputs (list `(,glib "bin") bc gettext-minimal googletest imagemagick/stable ;for tests perl pkg-config)) (home-page "https://inkscape.org/") (synopsis "Vector graphics editor") (description "Inkscape is a vector graphics editor. What sets Inkscape apart is its use of Scalable Vector Graphics (SVG), an XML-based W3C standard, as the native format.") (license license:gpl3+)))) ;see the file COPYING (define-public inkscape (package (inherit inkscape/stable) (name "inkscape") (version "1.3.2") (source (origin (inherit (package-source inkscape/stable)) (method url-fetch) (uri (string-append "https://media.inkscape.org/dl/" "resources/file/" "inkscape-" version ".tar.xz")) (sha256 (base32 "0sq81smxwypgnp7r3wgza8w25dsz9qa8ga79sc85xzj3qi6q9lfv")))) (build-system cmake-build-system) (arguments (substitute-keyword-arguments (package-arguments inkscape/stable) ((#:configure-flags flags ''()) ;; Enable ImageMagick support. #~(delete "-DWITH_IMAGE_MAGICK=OFF" #$flags)) ((#:phases phases) #~(modify-phases #$phases #$@(if (target-x86-32?) #~() ;XXX: there are remaining failures on i686 #~((replace 'check ;; Re-instate the tests disabled in inkscape/stable, now that ;; their ImageMagick requirement is satisfied. (assoc-ref %standard-phases 'check)))) (replace 'wrap-program ;; Ensure Python is available at runtime. (lambda _ (wrap-program (string-append #$output "/bin/inkscape") `("GUIX_PYTHONPATH" prefix (,(getenv "GUIX_PYTHONPATH"))) ;; Wrapping GDK_PIXBUF_MODULE_FILE allows Inkscape to load ;; its own icons in pure environments. `("GDK_PIXBUF_MODULE_FILE" = (,(getenv "GDK_PIXBUF_MODULE_FILE")))))))))) (inputs (modify-inputs (package-inputs inkscape/stable) (append imagemagick))) ;for libMagickCore and libMagickWand (native-inputs (modify-inputs (package-native-inputs inkscape/stable) ;; Only use 1 imagemagick across the package build. (replace "imagemagick" imagemagick))) (properties (alist-delete 'hidden? (package-properties inkscape/stable)))))