summary refs log tree commit diff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-04-16 23:44:01 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-05-12 12:45:49 -0400
commit2576d9ffc4c5cf84c4c6c1dfee2d2d8655fba4b4 (patch)
treeb02a2d75f95e44173d9aa2fb807bb79471e7c8ac
parent5fdae311a0a5beaff5f048001f56ff0fa7d05e4c (diff)
downloadguix-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.mk2
-rw-r--r--gnu/packages/patches/python-ipython-documentation-chars.patch18
-rw-r--r--gnu/packages/patches/python-ipython-documentation-repro.patch25
-rw-r--r--gnu/packages/python-xyz.scm145
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