;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix download)
+ #:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
#:use-module (guix build-system perl)
#:use-module (guix build-system trivial)
#:use-module (guix git-download)
#:use-module (guix svn-download)
#:use-module (gnu packages)
+ #:use-module (gnu packages algebra)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bash)
+ #:use-module (gnu packages boost)
#:use-module (gnu packages compression)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gd)
#:use-module (gnu packages gtk)
#:use-module (gnu packages icu4c)
#:use-module (gnu packages image)
+ #:use-module (gnu packages libreoffice)
#:use-module (gnu packages lua)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages pdf)
(string-prefix? "mips64" s))))
#:phases
(modify-phases %standard-phases
+ (add-after 'unpack 'configure-ghostscript-executable
+ ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
+ ;; and the "gs" ghostscript executable on Unix. It detects Unix by
+ ;; checking for the existence of the /usr/bin directory. Since
+ ;; GuixSD does not have /usr/bin, it is also detected as Windows.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
+ (("gswin32c") "gs"))
+ (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
+ (("\"gs\"")
+ (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
+ #t))
(add-after 'install 'postint
(lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
(let* ((out (assoc-ref outputs "out"))
(with-directory-excursion "texlive-extra"
(apply unpack (list #:source texlive-extra))
(apply patch-source-shebangs (list #:source texlive-extra))
- (invoke "mv" "tlpkg" share))))))))
+ (invoke "mv" "tlpkg" share))
+ ;; texlua shebangs are not patched by the patch-source-shebangs
+ ;; phase because the texlua executable does not exist at that
+ ;; time.
+ (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
+ (with-directory-excursion out
+ (patch-source-shebangs))))))))
(synopsis "TeX Live, a package of the TeX typesetting system")
(description
"TeX Live provides a comprehensive TeX document production system.
(lambda* (#:key inputs #:allow-other-keys)
(let ((mf (assoc-ref inputs "texlive-metafont-base"))
(cwd (getcwd)))
+ ;; Make METAFONT reproducible
+ (setenv "SOURCE_DATE_EPOCH" "1")
;; Tell mf where to find mf.base
(setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
;; Tell mf where to look for source files
'("dviluatex" "dvilualatex" "luatex" "lualatex"))
#t))
(replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
+ (lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(target (string-append
out "/share/texmf-dist/tex/latex/base"))
(web2c (string-append
- out "/share/texmf-dist/web2c")))
+ out "/share/texmf-dist/web2c"))
+ (support-files (assoc-ref inputs "texlive-latex-base-support-files")))
(mkdir-p target)
(mkdir-p web2c)
(for-each delete-file (find-files "." "\\.(log|aux)$"))
;; doesn't have its own format file, we need to copy it.
(copy-file "web2c/pdfetex.fmt"
(string-append web2c "/pdftex.fmt"))
+ ;; "source" is missing the support files as per doc/latex/base/manifest.txt.
+ ;; FIXME: We are probably not packaging this right.
+ (for-each (lambda (file)
+ (install-file
+ (string-append support-files "/" file)
+ target))
+ '("ltxguide.cls" "ltnews.cls" "minimal.cls" "idx.tex"
+ "lablst.tex" "testpage.tex" "ltxcheck.tex"))
#t))))))
(native-inputs
`(("texlive-bin" ,texlive-bin)
("texlive-generic-config"
,(texlive-dir "tex/generic/config/"
"19vj088p4kkp6xll0141m4kl6ssgdzhs3g10i232khb07aqiag8s"))
+ ("texlive-latex-base-support-files"
+ ,(origin
+ (method svn-fetch)
+ (uri (svn-reference
+ (url (string-append "svn://www.tug.org/texlive/tags/"
+ %texlive-tag "/Master/texmf-dist/"
+ "/tex/latex/base"))
+ (revision %texlive-revision)))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "16bs9pi3nq407xhg59glklqv43v102cg3yim6k3zcri5d9nkbv3a"))))
("texlive-tex-plain" ,texlive-tex-plain)
("texlive-fonts-cm" ,texlive-fonts-cm)
("texlive-fonts-latex" ,texlive-fonts-latex)
(build-system texlive-build-system)
(arguments
'(#:tex-directory "latex/l3packages"
+ ;; build-targets must be specified manually since they are in
+ ;; sub-directories.
+ #:build-targets '("l3keys2e.ins" "xparse.ins" "xfrac.ins" "xfp.ins" "xtemplate.ins")
#:phases
(modify-phases %standard-phases
;; All package sources are in sub-directories, so we need to add them
cwd "/xparse:"
cwd "/xfrac:"
cwd "/xfp:"
- cwd "/xtemplate")))
- #t)))))
+ cwd "/xtemplate"
+ ;; The terminating ":" is required to include the
+ ;; l3kernel input as well.
+ ":")))
+ #t)))
+ ))
(inputs
`(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)))
(home-page "https://www.ctan.org/pkg/l3packages")
"/share/texmf-dist/"))
(unzip (string-append (assoc-ref %build-inputs "unzip")
"/bin/unzip")))
- (system* unzip (assoc-ref %build-inputs "source"))
+ (invoke unzip (assoc-ref %build-inputs "source"))
(mkdir-p target)
- (copy-recursively "iwona" target)))))
+ (copy-recursively "iwona" target)
+ #t))))
(native-inputs
`(("unzip" ,unzip)))
(home-page "http://jmn.pl/en/kurier-i-iwona/")
(lambda* (#:key outputs #:allow-other-keys)
(let ((share (string-append (assoc-ref outputs "out") "/share")))
(mkdir-p share)
- (system* "mv" "texmf-dist" share))))
+ (invoke "mv" "texmf-dist" share))))
(add-after 'install 'texmf-config
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
;; http://slackbuilds.org/repository/13.37/office/texlive/
(setenv "PATH" (string-append (getenv "PATH") ":" texbin))
(setenv "TEXMFCNF" texmfroot)
- (system* "updmap-sys" "--nohash" "--syncwithtrees")
- (system* "mktexlsr")
- (system* "fmtutil-sys" "--all")))))))
+ (invoke "updmap-sys" "--nohash" "--syncwithtrees")
+ (invoke "mktexlsr")
+ (invoke "fmtutil-sys" "--all")))))))
(properties `((max-silent-time . 9600))) ; don't time out while grafting
(synopsis "TeX Live, a package of the TeX typesetting system")
(description
(for-each
(lambda (name)
(symlink (string-append texmf "/share/" name) name))
- '("texmf-dist" "texmf-var"))))))))
+ '("texmf-dist" "texmf-var"))))
+ #t))))
(synopsis "TeX Live, a package of the TeX typesetting system")
(description
"TeX Live provides a comprehensive TeX document production system.
("perl-config-autoconf" ,perl-config-autoconf)
("perl-extutils-libbuilder" ,perl-extutils-libbuilder)
("perl-module-build" ,perl-module-build)))
- (home-page "http://search.cpan.org/dist/Text-BibTeX")
+ (home-page "https://metacpan.org/release/Text-BibTeX")
(synopsis "Interface to read and parse BibTeX files")
(description "@code{Text::BibTeX} is a Perl library for reading, parsing,
and processing BibTeX files. @code{Text::BibTeX} gives you access to the data
(define-public texmaker
(package
(name "texmaker")
- (version "4.5")
+ (version "5.0.2")
(source (origin
(method url-fetch)
(uri (string-append "http://www.xm1math.net/texmaker/texmaker-"
version ".tar.bz2"))
(sha256
(base32
- "056njk6j8wma23mlp7xa3rgfaxx0q8ynwx8wkmj7iy0b85p9ds9c"))))
+ "0y81mjm89b99pr9svcwpaf4iz2q9pc9hjas5kiwd1pbgl5vqskm9"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(replace 'configure
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
- (zero? (system* "qmake"
- (string-append "PREFIX=" out)
- (string-append "DESKTOPDIR=" out
- "/share/applications")
- (string-append "ICONDIR=" out "/share/pixmaps")
- "texmaker.pro"))))))))
+ (invoke "qmake"
+ (string-append "PREFIX=" out)
+ (string-append "DESKTOPDIR=" out "/share/applications")
+ (string-append "ICONDIR=" out "/share/pixmaps")
+ (string-append "METAINFODIR=" out "/share/metainfo")
+ "texmaker.pro")))))))
(inputs
`(("poppler-qt5" ,poppler-qt5)
("qtbase" ,qtbase)
plain TeX, and Eplain, originally written by Paul Abrahams, Kathryn Hargreaves,
and Karl Berry.")
(license license:fdl1.3+)))
+
+(define-public lyx
+ (package
+ (name "lyx")
+ (version "2.2.3")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://ftp.lyx.org/pub/lyx/stable/2.2.x/"
+ name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0xvaz0i371nn2ndinc0d3ywj76ivb62649a4sdgwbivisiahd2fj"))
+ (patches (search-patches "lyx-2.2.3-fix-test.patch"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ (delete-file-recursively "3rdparty")
+ #t))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:configure-flags `("-DLYX_USE_QT=QT5"
+ "-DLYX_EXTERNAL_BOOST=1"
+ "-DLYX_INSTALL=1"
+ "-DLYX_RELEASE=1"
+ ,(string-append "-DLYX_INSTALL_PREFIX="
+ (assoc-ref %outputs "out")
+ ;; Exact name and level is necessary.
+ "/lyx2.2"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-python
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* '("src/support/os.cpp")
+ (("\"python ")
+ (string-append "\""
+ (assoc-ref inputs "python-2")
+ "/bin/python ")))
+ #t))
+ (add-after 'patch-python 'patch-installer
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "CMakeLists.txt"
+ (("/usr/local/man/man1")
+ (string-append (assoc-ref outputs "out")
+ "/share/man/man1")))
+ #t))
+ (add-after 'patch-python 'patch-desktop-file
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "lib/lyx.desktop.in"
+ (("Exec=")
+ (string-append "Exec="
+ (assoc-ref outputs "out")
+ "/")))
+ #t))
+ (add-before 'check 'setenv-check
+ (lambda _
+ (setenv "LYX_DIR_22x" (string-append (getcwd) "/../lyx-"
+ ,version "/lib"))
+ #t))
+ (add-after 'install 'install-symlinks
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (mkdir-p (string-append out "/bin"))
+ (symlink "../lyx2.2/bin/lyx2.2"
+ (string-append out "/bin/lyx2.2"))
+ #t))))))
+ (inputs
+ `(("boost" ,boost)
+ ("hunspell" ,hunspell) ; Note: Could also use aspell instead.
+ ("libx11" ,libx11)
+ ("python-2" ,python-2)
+ ("qtbase" ,qtbase)
+ ("qtsvg" ,qtsvg)
+ ("zlib" ,zlib)))
+ (propagated-inputs
+ `(("texlive" ,texlive))) ; article.cls is in texmf-dist.
+ (native-inputs
+ `(("python-2" ,python-2)
+ ("pkg-config" ,pkg-config)
+ ("bc" ,bc)))
+ (home-page "https://www.lyx.org/")
+ (synopsis "Document preparation system with GUI")
+ (description "LyX is a document preparation system. It excels at letting
+you create complex technical and scientific articles with mathematics,
+cross-references, bibliographies, indexes, etc. It is very good for working
+with documents of any length in which the usual processing abilities are
+required: automatic sectioning and pagination, spell checking and so forth.")
+ (license license:gpl2+)))
+
+(define-public texlive-latex-media9
+ (package
+ (name "texlive-latex-media9")
+ (version (number->string %texlive-revision))
+ (source (origin
+ (method svn-fetch)
+ (uri (svn-reference
+ (url (string-append "svn://www.tug.org/texlive/tags/"
+ %texlive-tag "/Master/texmf-dist/"
+ "/tex/latex/media9"))
+ (revision %texlive-revision)))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "01ysky8h8s6q12dxfahkzwhbkc9j5wl50xzcczy0cbjx9f6aj9kv"))))
+ (build-system trivial-build-system)
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let ((target (string-append (assoc-ref %outputs "out")
+ "/share/texmf-dist/tex/latex/media9")))
+ (mkdir-p target)
+ (copy-recursively (assoc-ref %build-inputs "source") target)
+ #t))))
+ (home-page "https://www.ctan.org/pkg/media9")
+ (synopsis "Multimedia inclusion package with Adobe Reader-9/X compatibility")
+ (description
+ "The package provides an interface to embed interactive Flash (SWF) and 3D
+objects (Adobe U3D & PRC), as well as video and sound files or streams in the
+popular MP4, FLV and MP3 formats into PDF documents with Acrobat-9/X
+compatibility. Playback of multimedia files uses the built-in Flash Player of
+Adobe Reader and does, therefore, not depend on external plug-ins. Flash Player
+supports the efficient H.264 codec for video compression.
+
+The package is based on the RichMedia Annotation, an Adobe addition to the PDF
+specification. It replaces the now obsolete @code{movie15} package.")
+ (license license:lppl)))
+
+(define-public texlive-latex-ocgx2
+ (package
+ (name "texlive-latex-ocgx2")
+ (version (number->string %texlive-revision))
+ (source (origin
+ (method svn-fetch)
+ (uri (svn-reference
+ (url (string-append "svn://www.tug.org/texlive/tags/"
+ %texlive-tag "/Master/texmf-dist/"
+ "/tex/latex/ocgx2"))
+ (revision %texlive-revision)))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "12kkl7n534j0p4frwyrlw22dc3ik50kxv97cxp4xpmji13m0hxpf"))))
+ (build-system trivial-build-system)
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let ((target (string-append (assoc-ref %outputs "out")
+ "/share/texmf-dist/tex/latex/ogcx2")))
+ (mkdir-p target)
+ (copy-recursively (assoc-ref %build-inputs "source") target)
+ #t))))
+ (home-page "https://www.ctan.org/pkg/ocgx2")
+ (synopsis "Provide OCG (Optional Content Groups) support within a PDF document")
+ (description
+ "This package provides OCG (Optional Content Groups) support within a PDF
+document.
+
+It re-implements the functionality of the @code{ocg}, @code{ocgx}, and
+@code{ocg-p} packages and adds support for all known engines and back-ends
+including:
+
+@itemize
+@item LaTeX → dvips → @code{ps2pdf}/Distiller
+@item (Xe)LaTeX(x) → @code{dvipdfmx}
+@item pdfLaTeX and LuaLaTeX .
+@end itemize
+
+It also ensures compatibility with the @code{media9} and @code{animate} packages.")
+ (license license:lppl)))
+
+(define-public texlive-latex-ms
+ (package
+ (name "texlive-latex-ms")
+ (version (number->string %texlive-revision))
+ (source (origin
+ (method svn-fetch)
+ (uri (texlive-ref "latex" "ms"))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "0m4wx3yjb5al1qsv995z8fii8xxy96mcfihbnlx43lpgayiwz35s"))))
+ (build-system texlive-build-system)
+ (arguments
+ '(#:tex-directory "latex/ms"
+ #:tex-format "latex"))
+ (home-page "https://ctan.org/pkg/ms")
+ (synopsis "Various LATEX packages by Martin Schröder")
+ (description
+ "A bundle of LATEX packages by Martin Schröder; the collection comprises:
+
+@itemize
+@item @command{count1to}, make use of fixed TEX counters;
+@item @command{everysel}, set commands to execute every time a font is selected;
+@item @command{everyshi}, set commands to execute whenever a page is shipped out;
+@item @command{multitoc}, typeset the table of contents in multiple columns;
+@item @command{prelim2e}, mark typeset pages as preliminary; and
+@item @command{ragged2e}, typeset ragged text and allow hyphenation.
+@end itemize\n")
+ (license license:lppl1.3c+)))
+
+(define-public texlive-latex-needspace
+ (package
+ (name "texlive-latex-needspace")
+ (version (number->string %texlive-revision))
+ (source (origin
+ (method svn-fetch)
+ (uri (texlive-ref "latex" "needspace"))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "0kw80f5jh4gdpa2ka815abza3gr5z8b929w0745vrlc59pl0017y"))))
+ (build-system texlive-build-system)
+ (arguments
+ '(#:tex-directory "latex/needspace"
+ #:tex-format "latex"))
+ (inputs
+ `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+ (home-page "https://www.ctan.org/pkg/needspace")
+ (synopsis "Insert pagebreak if not enough space")
+ (description
+ "Provides commands to disable pagebreaking within a given vertical
+space. If there is not enough space between the command and the bottom of the
+page, a new page will be started.")
+ (license license:lppl)))
+
+(define-public texlive-latex-eukdate
+ (package
+ (name "texlive-latex-eukdate")
+ (version (number->string %texlive-revision))
+ (source
+ (origin
+ (method svn-fetch)
+ (uri (svn-reference
+ (url (string-append "svn://www.tug.org/texlive/tags/"
+ %texlive-tag "/Master/texmf-dist/"
+ "/tex/latex/eukdate"))
+ (revision %texlive-revision)))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "18xan116l8w47v560bkw6nbhkrml7g04xrlzk3jrpc7qsyf3n5fz"))))
+ (build-system trivial-build-system)
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let ((target (string-append (assoc-ref %outputs "out")
+ "/share/texmf-dist/tex/latex/eukdate")))
+ (mkdir-p target)
+ (copy-recursively (assoc-ref %build-inputs "source") target)
+ #t))))
+ (home-page "https://www.ctan.org/pkg/eukdate")
+ (synopsis "UK format dates, with weekday")
+ (description
+ "The package is used to change the format of @code{\\today}’s date,
+including the weekday, e.g., \"Saturday, 26 June 2008\", the 'UK format', which
+is preferred in many parts of the world, as distinct from that which is used in
+@code{\\maketitle} of the article class, \"June 26, 2008\", the 'US format'.")
+ (license license:lppl)))
+
+(define-public texlive-generic-ulem
+ (package
+ (name "texlive-generic-ulem")
+ (version (number->string %texlive-revision))
+ (source
+ (origin
+ (method svn-fetch)
+ (uri (svn-reference
+ (url (string-append "svn://www.tug.org/texlive/tags/"
+ %texlive-tag "/Master/texmf-dist/"
+ "/tex/generic/ulem"))
+ (revision %texlive-revision)))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "1rzdniqq9zk39w8ch8ylx3ywh2mj87s4ivchrsk2b8nx06jyn797"))))
+ (build-system trivial-build-system)
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let ((target (string-append (assoc-ref %outputs "out")
+ "/share/texmf-dist/tex/generic/ulem")))
+ (mkdir-p target)
+ (copy-recursively (assoc-ref %build-inputs "source") target)
+ #t))))
+ (home-page "https://www.ctan.org/pkg/ulem")
+ (synopsis "Underline text in TeX")
+ (description
+ "The package provides an @code{\\ul} (underline) command which will break
+over line ends; this technique may be used to replace @code{\\em} (both in that
+form and as the @code{\\emph} command), so as to make output look as if it comes
+from a typewriter. The package also offers double and wavy underlining, and
+striking out (line through words) and crossing out (/// over words).")
+ (license license:lppl1.3c+)))