diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2022-04-16 23:44:01 -0400 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2022-05-12 12:45:49 -0400 |
commit | 2576d9ffc4c5cf84c4c6c1dfee2d2d8655fba4b4 (patch) | |
tree | b02a2d75f95e44173d9aa2fb807bb79471e7c8ac | |
parent | 5fdae311a0a5beaff5f048001f56ff0fa7d05e4c (diff) | |
download | guix-2576d9ffc4c5cf84c4c6c1dfee2d2d8655fba4b4.tar guix-2576d9ffc4c5cf84c4c6c1dfee2d2d8655fba4b4.tar.gz |
gnu: python-ipython-documentation: Also build info and pdf targets.
* gnu/packages/patches/python-ipython-documentation-chars.patch: New file.
* gnu/packages/patches/python-ipython-documentation-repro.patch: Likewise.
* gnu/local.mk: Register them.
* gnu/packages/python-xyz.scm (python-ipython-documentation)
[source]: Apply patches.
[arguments]: Use gexps.
[phases]{sanitize-sources}: New phase.
{configure-sphinx-for-xelatex}: Likewise.
{install}: Streamline. Also build and install the PDF and info manual.
Enable parallel processing.
[inputs]: Delete field.
[propagated-inputs]: Remove texlive-updmap.cfg input. Add fontconfig,
font-gnu-freefont, graphviz, python-docrepr, texlive-polyglossia,
texlive-bin and texlive-xindy.
-rw-r--r-- | gnu/local.mk | 2 | ||||
-rw-r--r-- | gnu/packages/patches/python-ipython-documentation-chars.patch | 18 | ||||
-rw-r--r-- | gnu/packages/patches/python-ipython-documentation-repro.patch | 25 | ||||
-rw-r--r-- | gnu/packages/python-xyz.scm | 145 |
4 files changed, 118 insertions, 72 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 06367fac5e..a5cf82ab28 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1686,6 +1686,8 @@ dist_patch_DATA = \ %D%/packages/patches/python-execnet-read-only-fix.patch \ %D%/packages/patches/python-fixtures-remove-monkeypatch-test.patch \ %D%/packages/patches/python-flask-restful-werkzeug-compat.patch \ + %D%/packages/patches/python-ipython-documentation-chars.patch \ + %D%/packages/patches/python-ipython-documentation-repro.patch \ %D%/packages/patches/python-keras-integration-test.patch \ %D%/packages/patches/python-pdoc3-tests.patch \ %D%/packages/patches/python-peachpy-determinism.patch \ diff --git a/gnu/packages/patches/python-ipython-documentation-chars.patch b/gnu/packages/patches/python-ipython-documentation-chars.patch new file mode 100644 index 0000000000..a52c54f513 --- /dev/null +++ b/gnu/packages/patches/python-ipython-documentation-chars.patch @@ -0,0 +1,18 @@ +Avoid LaTeX errors due to non-printable characters. +Submitted upstream: https://github.com/ipython/ipython/pull/13640 + +diff --git a/IPython/utils/coloransi.py b/IPython/utils/coloransi.py +index e33142180..9300b0108 100644 +--- a/IPython/utils/coloransi.py ++++ b/IPython/utils/coloransi.py +@@ -74,8 +74,8 @@ class TermColors: + class InputTermColors: + """Color escape sequences for input prompts. + +- This class is similar to TermColors, but the escapes are wrapped in \001 +- and \002 so that readline can properly know the length of each line and ++ This class is similar to TermColors, but the escapes are wrapped in \\001 ++ and \\002 so that readline can properly know the length of each line and + can wrap lines accordingly. Use this class for any colored text which + needs to be used in input prompts, such as in calls to raw_input(). + diff --git a/gnu/packages/patches/python-ipython-documentation-repro.patch b/gnu/packages/patches/python-ipython-documentation-repro.patch new file mode 100644 index 0000000000..d6a6e9c3fd --- /dev/null +++ b/gnu/packages/patches/python-ipython-documentation-repro.patch @@ -0,0 +1,25 @@ +Fix non-reproducibilities caused by time-dependent procedures. +Submitted upstream: https://github.com/ipython/ipython/pull/13640 + +diff --git a/IPython/sphinxext/ipython_directive.py b/IPython/sphinxext/ipython_directive.py +index 18bdfcae9..2c665ac87 100644 +--- a/IPython/sphinxext/ipython_directive.py ++++ b/IPython/sphinxext/ipython_directive.py +@@ -19,7 +19,7 @@ + In [1]: 1+1 + + In [1]: import datetime +- ...: datetime.datetime.now() ++ ...: datetime.date.fromisoformat('2022-02-22') + + It supports IPython construct that plain + Python does not understand (like magics): +@@ -28,7 +28,7 @@ + + In [0]: import time + +- In [0]: %timeit time.sleep(0.05) ++ In [0]: %pdoc time + + This will also support top-level async when using IPython 7.0+ + diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm index 23bf8add15..78e5334bce 100644 --- a/gnu/packages/python-xyz.scm +++ b/gnu/packages/python-xyz.scm @@ -155,9 +155,11 @@ #:use-module (gnu packages django) #:use-module (gnu packages djvu) #:use-module (gnu packages docker) + #:use-module (gnu packages documentation) #:use-module (gnu packages enchant) #:use-module (gnu packages file) #:use-module (gnu packages fontutils) + #:use-module (gnu packages fonts) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gdb) #:use-module (gnu packages gcc) @@ -9389,79 +9391,78 @@ computing.") (inherit python-ipython) (name "python-ipython-documentation") (version (package-version python-ipython)) + (source + (origin + (inherit (package-source python-ipython)) + (patches (append (search-patches + "python-ipython-documentation-chars.patch" + "python-ipython-documentation-repro.patch") + (origin-patches (package-source python-ipython)))))) (arguments - `(#:phases - (modify-phases %standard-phases - (delete 'build) - (delete 'check) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (let* ((data (string-append (assoc-ref outputs "out") "/share")) - (doc (string-append data "/doc/" ,name "-" ,version)) - (html (string-append doc "/html")) - (man1 (string-append data "/man/man1")) - (info (string-append data "/info")) - (examples (string-append doc "/examples")) - (python-arg (string-append "PYTHON=" (which "python")))) - (setenv "LANG" "en_US.utf8") - (with-directory-excursion "docs" - ;; FIXME: pdf fails to build - ;;(system* "make" "pdf" "PAPER=a4") - (system* "make" python-arg "html") - ;; FIXME: the generated texi file contains ^@^@, which trips - ;; up the parser. - ;; (system* "make" python-arg "info") - ) - (copy-recursively "docs/man" man1) - (copy-recursively "examples" examples) - (copy-recursively "docs/build/html" html) - ;; (copy-file "docs/build/latex/ipython.pdf" - ;; (string-append doc "/ipython.pdf")) - (mkdir-p info) - ;; (copy-file "docs/build/texinfo/ipython.info" - ;; (string-append info "/ipython.info")) - (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))))))) - (inputs - (list python-ipython python-ipykernel)) - (native-inputs - `(("python-sphinx" ,python-sphinx) - ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme) - ;; FIXME: It's possible that a smaller updmap.cfg would work just as - ;; well. - ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts - texlive-capt-of - texlive-fonts-ec - texlive-generic-iftex - texlive-pdftex - texlive-latex-cmap - texlive-latex-environ - texlive-latex-eqparbox - texlive-etoolbox - texlive-latex-expdlist - texlive-latex-fancyhdr - texlive-latex-fancyvrb - texlive-latex-fncychap - texlive-latex-float - texlive-latex-framed - texlive-latex-geometry - texlive-latex-graphics - texlive-hyperref - texlive-latex-mdwtools - texlive-latex-multirow - texlive-latex-needspace - texlive-oberdiek - texlive-latex-parskip - texlive-latex-preview - texlive-latex-tabulary - texlive-latex-threeparttable - texlive-latex-titlesec - texlive-latex-trimspaces - texlive-latex-ucs - texlive-latex-upquote - texlive-url - texlive-latex-varwidth - texlive-wrapfig))) - ("texinfo" ,texinfo))))) + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'set-pythonpath + (lambda _ + ;; Ensure this fixed (via the + ;; "python-ipython-documentation-chars.patch" patch) copy of + ;; IPython gets used. + (setenv "PYTHONPATH" (string-append (getcwd))))) + (add-before 'build 'configure-sphinx-for-xelatex + (lambda _ + ;; Use XeLaTeX instead of PDFLaTeX, as it can + ;; cope with the Unicode characters present in the + ;; contributors page, for example. + (substitute* "docs/source/conf.py" + (("project = 'IPython'.*" all) + (string-append all "latex_engine = 'xelatex'\n"))) + ;; XXX: The Sphinx-generated ipython.tex specifies the GNU + ;; FreeFont font to be searched via its extension, which uses + ;; kpathsea instead of fontconfig and fail (see: + ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a + ;; symlink to GNU FreeFont and add it to the TEXMF tree via + ;; GUIX_TEXMF. + (mkdir-p "texmf-dist/fonts/opentype/public") + (symlink (string-append + #$(this-package-native-input "font-gnu-freefont") + "/share/fonts/opentype") + (string-append + (getcwd) "/" + "texmf-dist/fonts/opentype/public/gnu-freefont")) + (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":" + (getcwd) "/texmf-dist")))) + (delete 'build) + (delete 'check) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((data (string-append #$output "/share")) + (doc (string-append data "/doc/" #$name "-" #$version)) + (html (string-append doc "/html")) + (info (string-append data "/info"))) + (invoke "make" "-C" "docs" "info" "html" "pdf" + (string-append "SPHINXOPTS=-j" + (number->string (parallel-job-count)))) + (install-file "COPYING.rst" doc) + (copy-recursively "examples" (string-append doc "/examples")) + ;; Install HTML documentation. + (copy-recursively "docs/build/html" html) + ;; Likewise for the PDF. + (install-file "docs/build/latex/ipython.pdf" doc) + ;; Likewise for the info manual. + (install-file "docs/build/texinfo/ipython.info" info) + (symlink (string-append html "/_images") + (string-append info "/ipython-figures")))))))) + (native-inputs + (list fontconfig ;for XDG_DATA_DIRS to locate fonts + font-gnu-freefont + graphviz + python-docrepr + python-sphinx + python-sphinx-rtd-theme + texinfo + texlive-bin + texlive-polyglossia + texlive-xindy)))) (define-public python-urwid (package |