[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#59313] [PATCH v2] gnu: linux-libre: Enable building html and info d
From: |
Maxim Cournoyer |
Subject: |
[bug#59313] [PATCH v2] gnu: linux-libre: Enable building html and info doc. |
Date: |
Sun, 20 Nov 2022 20:03:24 -0500 |
* gnu/packages/patches/linux-libre-infodocs-target.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
(linux-libre-6.0-source, linux-libre-5.15-source)
(linux-libre-5.10-source): Apply above patch.
(doc-supported?):
* gnu/packages/linux.scm (make-linux-libre) [DOC-SUPPORTED?]: Add new patch in
the default patches used. Add a BUILD-DOC? argument.
(make-linux-libre*): Add a BUILD-DOC? argument. Validate BUILD-DOC? for
supported VERSION.
[outputs]: New field.
[phases]: Conditionally add the build-doc and install-doc phases.
[native-inputs]: Conditionally add fontconfig, graphviz, python-wrapper,
python-sphinx, python-sphinx-rtd-theme, texinfo and which.
---
gnu/local.mk | 3 +-
gnu/packages/linux.scm | 281 +++++++++++-------
.../patches/linux-libre-infodocs-target.patch | 88 ++++++
3 files changed, 258 insertions(+), 114 deletions(-)
create mode 100644 gnu/packages/patches/linux-libre-infodocs-target.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index 02cd182f06..5c3908a02a 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1482,7 +1482,8 @@ dist_patch_DATA =
\
%D%/packages/patches/lierolibre-remove-arch-warning.patch \
%D%/packages/patches/lierolibre-try-building-other-arch.patch \
%D%/packages/patches/linbox-fix-pkgconfig.patch \
- %D%/packages/patches/linphone-desktop-without-sdk.patch \
+ %D%/packages/patches/linphone-desktop-without-sdk.patch \
+ %D%/packages/patches/linux-libre-infodocs-target.patch \
%D%/packages/patches/linux-libre-support-for-Pinebook-Pro.patch \
%D%/packages/patches/linux-pam-no-setfsuid.patch \
%D%/packages/patches/linuxdcpp-openssl-1.1.patch \
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 601162b465..288a421fbc 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -33,7 +33,7 @@
;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
;;; Copyright © 2019 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
-;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021, 2022 Maxim Cournoyer
<maxim.cournoyer@gmail.com>
;;; Copyright © 2019 Stefan Stefanović <stefanx2ovic@gmail.com>
;;; Copyright © 2019-2022 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>
@@ -108,8 +108,9 @@ (define-module (gnu packages linux)
#:use-module (gnu packages docbook)
#:use-module (gnu packages documentation)
#:use-module (gnu packages elf)
- #:use-module (gnu packages flex)
#:use-module (gnu packages file)
+ #:use-module (gnu packages flex)
+ #:use-module (gnu packages fontutils)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gcc)
@@ -119,6 +120,7 @@ (define-module (gnu packages linux)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages golang)
#:use-module (gnu packages gperf)
+ #:use-module (gnu packages graphviz)
#:use-module (gnu packages gstreamer)
#:use-module (gnu packages gtk)
#:use-module (gnu packages haskell-apps)
@@ -494,17 +496,20 @@ (define (source-with-patches source patches)
(define-public linux-libre-6.0-source
(source-with-patches linux-libre-6.0-pristine-source
(list %boot-logo-patch
-
%linux-libre-arm-export-__sync_icache_dcache-patch)))
+ %linux-libre-arm-export-__sync_icache_dcache-patch
+ (search-patch
"linux-libre-infodocs-target.patch"))))
(define-public linux-libre-5.15-source
(source-with-patches linux-libre-5.15-pristine-source
(list %boot-logo-patch
-
%linux-libre-arm-export-__sync_icache_dcache-patch)))
+ %linux-libre-arm-export-__sync_icache_dcache-patch
+ (search-patch
"linux-libre-infodocs-target.patch"))))
(define-public linux-libre-5.10-source
(source-with-patches linux-libre-5.10-pristine-source
(list %boot-logo-patch
-
%linux-libre-arm-export-__sync_icache_dcache-patch)))
+ %linux-libre-arm-export-__sync_icache_dcache-patch
+ (search-patch
"linux-libre-infodocs-target.patch"))))
(define-public linux-libre-5.4-source
(source-with-patches linux-libre-5.4-pristine-source
@@ -759,6 +764,11 @@ (define (config->string options)
;;; Kernel package utilities.
;;;
+(define (doc-supported? version)
+ ;; Versions older than 5.10 have different enough build scripts that the
+ ;; infodocs patch doesn't apply.
+ (version>=? version "5.10"))
+
(define* (make-linux-libre version gnu-revision hash-string supported-systems
#:key
(extra-version #f)
@@ -767,7 +777,13 @@ (define* (make-linux-libre version gnu-revision
hash-string supported-systems
(configuration-file #f)
(defconfig "defconfig")
(extra-options %default-extra-linux-options)
- (patches (list %boot-logo-patch)))
+ (build-doc? (doc-supported? version))
+ (patches
+ `(,%boot-logo-patch
+ ,@(if build-doc?
+ (list (search-patch
+
"linux-libre-infodocs-target.patch"))
+ '()))))
(make-linux-libre* version gnu-revision
(origin
(method url-fetch)
@@ -778,7 +794,8 @@ (define* (make-linux-libre version gnu-revision hash-string
supported-systems
#:extra-version extra-version
#:configuration-file configuration-file
#:defconfig defconfig
- #:extra-options extra-options))
+ #:extra-options extra-options
+ #:build-doc? build-doc?))
(define* (make-linux-libre* version gnu-revision source supported-systems
#:key
@@ -787,7 +804,10 @@ (define* (make-linux-libre* version gnu-revision source
supported-systems
;; See kernel-config for an example.
(configuration-file #f)
(defconfig "defconfig")
- (extra-options %default-extra-linux-options))
+ (extra-options %default-extra-linux-options)
+ (build-doc? (doc-supported? version)))
+ (when (and build-doc? (not (doc-supported? version)))
+ (error "unsupported 'build-doc?' for kernels <5.10"))
(package
(name (if extra-version
(string-append "linux-libre-" extra-version)
@@ -795,12 +815,135 @@ (define* (make-linux-libre* version gnu-revision source
supported-systems
(version version)
(source source)
(supported-systems supported-systems)
+ (outputs `("out"
+ ,@(if build-doc? '("doc") '())))
(build-system gnu-build-system)
+ (arguments
+ (list
+ #:modules '((guix build gnu-build-system)
+ (guix build utils)
+ (srfi srfi-1)
+ (srfi srfi-26)
+ (ice-9 ftw)
+ (ice-9 match))
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-/bin/pwd
+ (lambda _
+ (substitute* (find-files
+ "." "^Makefile(\\.include)?$")
+ (("/bin/pwd") "pwd"))))
+ #$@(if build-doc?
+ #~((add-before 'configure 'build-doc
+ (lambda _
+ (substitute* "Documentation/Makefile"
+ ;; Remove problematic environment check script.
+ ((".*scripts/sphinx-pre-install.*") ""))
+ (invoke "make" "infodocs" "htmldocs")))
+ (add-after 'build-doc 'install-doc
+ (lambda _
+ (with-directory-excursion "Documentation/output"
+ (let ((docdir (string-append
+ #$output:doc
+ "/share/doc/linux-libre/html")))
+ (mkdir-p docdir)
+ (copy-recursively "html" docdir))
+ (invoke "make" "-C" "texinfo" "install-info"
+ (string-append "infodir=" #$output
+ "/share/info"))))))
+ #~())
+ (replace 'configure
+ (lambda* (#:key inputs target #:allow-other-keys)
+ ;; Avoid introducing timestamps.
+ (setenv "KCONFIG_NOTIMESTAMP" "1")
+ (setenv "KBUILD_BUILD_TIMESTAMP" (getenv "SOURCE_DATE_EPOCH"))
+
+ ;; Other variables useful for reproducibility.
+ (setenv "KBUILD_BUILD_USER" "guix")
+ (setenv "KBUILD_BUILD_HOST" "guix")
+
+ ;; Set ARCH and CROSS_COMPILE.
+ (let ((arch #$(platform-linux-architecture
+ (lookup-platform-by-target-or-system
+ (or (%current-target-system)
+ (%current-system))))))
+ (setenv "ARCH" arch)
+ (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
+
+ (when target
+ (setenv "CROSS_COMPILE" (string-append target "-"))
+ (format #t "`CROSS_COMPILE' set to `~a'~%"
+ (getenv "CROSS_COMPILE"))))
+
+ (setenv "EXTRAVERSION"
+ #$(and extra-version
+ (string-append "-" extra-version)))
+
+ (let ((config (assoc-ref inputs "kconfig")))
+
+ ;; Use a custom kernel configuration file or a default
+ ;; configuration file.
+ (if config
+ (begin
+ (copy-file config ".config")
+ (chmod ".config" #o666))
+ (invoke "make" #$defconfig))
+
+ ;; Appending works even when the option wasn't in the
+ ;; file. The last one prevails if duplicated.
+ (let ((port (open-file ".config" "a"))
+ (extra-configuration #$(config->string extra-options)))
+ (display extra-configuration port)
+ (close-port port))
+
+ (invoke "make" "oldconfig"))))
+ (replace 'install
+ (lambda* (#:key inputs native-inputs #:allow-other-keys)
+ (let ((moddir (string-append #$output "/lib/modules"))
+ (dtbdir (string-append #$output "/lib/dtbs")))
+ ;; Install kernel image, kernel configuration and link map.
+ (for-each (lambda (file) (install-file file #$output))
+ (find-files "." "^(\\.config|bzImage|zImage|Image\
+|vmlinuz|System\\.map|Module\\.symvers)$"))
+ ;; Install device tree files
+ (unless (null? (find-files "." "\\.dtb$"))
+ (mkdir-p dtbdir)
+ (invoke "make" (string-append "INSTALL_DTBS_PATH=" dtbdir)
+ "dtbs_install"))
+ ;; Install kernel modules
+ (mkdir-p moddir)
+ (invoke "make"
+ ;; Disable depmod because the Guix system's
+ ;; module directory is an union of potentially
+ ;; multiple packages. It is not possible to use
+ ;; depmod to usefully calculate a dependency
+ ;; graph while building only one of them.
+ "DEPMOD=true"
+ (string-append "MODULE_DIR=" moddir)
+ (string-append "INSTALL_PATH=" #$output)
+ (string-append "INSTALL_MOD_PATH=" #$output)
+ "INSTALL_MOD_STRIP=1"
+ "modules_install")
+ (let* ((versions (filter (lambda (name)
+ (not (string-prefix? "." name)))
+ (scandir moddir)))
+ (version (match versions
+ ((x) x))))
+ ;; There are symlinks to the build and source directory.
+ ;; Both will point to target /tmp/guix-build* and thus
+ ;; not be useful in a profile. Delete the symlinks.
+ (false-if-file-not-found
+ (delete-file
+ (string-append moddir "/" version "/build")))
+ (false-if-file-not-found
+ (delete-file
+ (string-append moddir "/" version "/source"))))))))))
(native-inputs
`(("perl" ,perl)
("bc" ,bc)
("openssl" ,openssl)
- ("elfutils" ,elfutils) ; Needed to enable CONFIG_STACK_VALIDATION
+ ("elfutils" ,elfutils) ;needed to enable CONFIG_STACK_VALIDATION
("flex" ,flex)
("bison" ,bison)
@@ -809,6 +952,19 @@ (define* (make-linux-libre* version gnu-revision source
supported-systems
("mpfr" ,mpfr)
("mpc" ,mpc)
+ ;; For generating the documentation.
+ ,@(if build-doc?
+ ;; TODO: remove fontconfig after the 5.10 kernel is dropped.
+ ;; Also replace python-wrapper by python at that time.
+ `(("fontconfig" ,fontconfig)
+ ("graphviz" ,graphviz)
+ ("python" ,python-wrapper)
+ ("python-sphinx" ,python-sphinx)
+ ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
+ ("texinfo" ,texinfo)
+ ("which" ,which))
+ '())
+
,@(match (let ((arch (platform-linux-architecture
(lookup-platform-by-target-or-system
(or (%current-target-system)
@@ -817,115 +973,14 @@ (define* (make-linux-libre* version gnu-revision source
supported-systems
(configuration-file
arch
#:variant (version-major+minor version))))
- (#f ;no config for this platform
+ (#f ;no config for this platform
'())
((? string? config)
`(("kconfig" ,config))))))
- (arguments
- (list #:modules '((guix build gnu-build-system)
- (guix build utils)
- (srfi srfi-1)
- (srfi srfi-26)
- (ice-9 ftw)
- (ice-9 match))
- #:phases
- #~(modify-phases %standard-phases
- (add-after 'unpack 'patch-/bin/pwd
- (lambda _
- (substitute* (find-files "." "^Makefile(\\.include)?$")
- (("/bin/pwd") "pwd"))))
- (replace 'configure
- (lambda* (#:key inputs target #:allow-other-keys)
- ;; Avoid introducing timestamps.
- (setenv "KCONFIG_NOTIMESTAMP" "1")
- (setenv "KBUILD_BUILD_TIMESTAMP"
- (getenv "SOURCE_DATE_EPOCH"))
-
- ;; Other variables useful for reproducibility.
- (setenv "KBUILD_BUILD_USER" "guix")
- (setenv "KBUILD_BUILD_HOST" "guix")
-
- ;; Set ARCH and CROSS_COMPILE.
- (let ((arch #$(platform-linux-architecture
- (lookup-platform-by-target-or-system
- (or (%current-target-system)
- (%current-system))))))
- (setenv "ARCH" arch)
- (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
-
- (when target
- (setenv "CROSS_COMPILE" (string-append target "-"))
- (format #t "`CROSS_COMPILE' set to `~a'~%"
- (getenv "CROSS_COMPILE"))))
-
- (setenv "EXTRAVERSION"
- #$(and extra-version
- (string-append "-" extra-version)))
-
- (let ((config (assoc-ref inputs "kconfig")))
-
- ;; Use a custom kernel configuration file or a default
- ;; configuration file.
- (if config
- (begin
- (copy-file config ".config")
- (chmod ".config" #o666))
- (invoke "make" #$defconfig))
-
- ;; Appending works even when the option wasn't in the
- ;; file. The last one prevails if duplicated.
- (let ((port (open-file ".config" "a"))
- (extra-configuration #$(config->string
extra-options)))
- (display extra-configuration port)
- (close-port port))
-
- (invoke "make" "oldconfig"))))
- (replace 'install
- (lambda* (#:key inputs native-inputs #:allow-other-keys)
- (let ((moddir (string-append #$output "/lib/modules"))
- (dtbdir (string-append #$output "/lib/dtbs")))
- ;; Install kernel image, kernel configuration and link
map.
- (for-each (lambda (file) (install-file file #$output))
- (find-files "."
"^(\\.config|bzImage|zImage|Image|vmlinuz|System\\.map|Module\\.symvers)$"))
- ;; Install device tree files
- (unless (null? (find-files "." "\\.dtb$"))
- (mkdir-p dtbdir)
- (invoke "make" (string-append "INSTALL_DTBS_PATH="
dtbdir)
- "dtbs_install"))
- ;; Install kernel modules
- (mkdir-p moddir)
- (invoke "make"
- ;; Disable depmod because the Guix system's
- ;; module directory is an union of potentially
- ;; multiple packages. It is not possible to use
- ;; depmod to usefully calculate a dependency
- ;; graph while building only one of them.
- "DEPMOD=true"
- (string-append "MODULE_DIR=" moddir)
- (string-append "INSTALL_PATH=" #$output)
- (string-append "INSTALL_MOD_PATH=" #$output)
- "INSTALL_MOD_STRIP=1"
- "modules_install")
- (let* ((versions (filter (lambda (name)
- (not (string-prefix? "."
name)))
- (scandir moddir)))
- (version (match versions
- ((x) x))))
- ;; There are symlinks to the build and source directory.
- ;; Both will point to target /tmp/guix-build* and thus
- ;; not be useful in a profile. Delete the symlinks.
- (false-if-file-not-found
- (delete-file
- (string-append moddir "/" version "/build")))
- (false-if-file-not-found
- (delete-file
- (string-append moddir "/" version "/source"))))))))
- #:tests? #f))
(home-page "https://www.gnu.org/software/linux-libre/")
(synopsis "100% free redistribution of a cleaned Linux kernel")
- (description
- "GNU Linux-Libre is a free (as in freedom) variant of the Linux kernel.
-It has been modified to remove all non-free binary blobs.")
+ (description "GNU Linux-Libre is a free (as in freedom) variant of the
+Linux kernel. It has been modified to remove all non-free binary blobs.")
(license license:gpl2)
(properties '((max-silent-time . 3600))))) ;don't timeout on blob scan.
diff --git a/gnu/packages/patches/linux-libre-infodocs-target.patch
b/gnu/packages/patches/linux-libre-infodocs-target.patch
new file mode 100644
index 0000000000..e9e6495c26
--- /dev/null
+++ b/gnu/packages/patches/linux-libre-infodocs-target.patch
@@ -0,0 +1,88 @@
+Upstream status: https://marc.info/?l=linux-doc&m=166861669723994&w=2
+
+From 7edb5b278ee383ff9bed525329b2cdbe22317bf2 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Mon, 14 Nov 2022 22:51:11 -0500
+Subject: [PATCH] doc: add texinfodocs and infodocs targets
+
+Sphinx supports generating Texinfo sources and Info documentation,
+which can be navigated easily and is convenient to search (via the
+indexed nodes or anchors, for example).
+
+This change also causes the html output to appear under its own output
+sub-directory, which makes it easier to install, since it's clean from
+.doctrees or other output formats.
+
+Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+---
+ Documentation/Makefile | 13 ++++++++++++-
+ Documentation/userspace-api/media/Makefile | 3 ++-
+ Makefile | 2 +-
+ 3 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/Documentation/Makefile b/Documentation/Makefile
+index 64d44c1ecad3..bd8dac560633 100644
+--- a/Documentation/Makefile
++++ b/Documentation/Makefile
+@@ -93,7 +93,16 @@ quiet_cmd_sphinx = SPHINX $@ --> file://$(abspath
$(BUILDDIR)/$3/$4)
+
+ htmldocs:
+ @$(srctree)/scripts/sphinx-pre-install --version-check
+- @+$(foreach var,$(SPHINXDIRS),$(call
loop_cmd,sphinx,html,$(var),,$(var)))
++ @+$(foreach var,$(SPHINXDIRS),$(call
loop_cmd,sphinx,html,$(var),html,$(var)))
++
++texinfodocs:
++ @$(srctree)/scripts/sphinx-pre-install --version-check
++ @+$(foreach var,$(SPHINXDIRS),$(call
loop_cmd,sphinx,texinfo,$(var),texinfo,$(var)))
++
++# Note: the 'info' Make target is generated by sphinx itself when
++# running the texinfodocs target define above.
++infodocs: texinfodocs
++ $(MAKE) -C $(BUILDDIR)/texinfo info
+
+ linkcheckdocs:
+ @$(foreach var,$(SPHINXDIRS),$(call
loop_cmd,sphinx,linkcheck,$(var),,$(var)))
+@@ -143,6 +152,8 @@ cleandocs:
+ dochelp:
+ @echo ' Linux kernel internal documentation in different formats from
ReST:'
+ @echo ' htmldocs - HTML'
++ @echo ' texinfodocs - Texinfo'
++ @echo ' infodocs - Info'
+ @echo ' latexdocs - LaTeX'
+ @echo ' pdfdocs - PDF'
+ @echo ' epubdocs - EPUB'
+diff --git a/Documentation/userspace-api/media/Makefile
b/Documentation/userspace-api/media/Makefile
+index 00922aa7efde..3d8aaf5c253b 100644
+--- a/Documentation/userspace-api/media/Makefile
++++ b/Documentation/userspace-api/media/Makefile
+@@ -47,10 +47,11 @@ $(BUILDDIR)/lirc.h.rst: ${UAPI}/lirc.h ${PARSER}
$(SRC_DIR)/lirc.h.rst.exception
+
+ # Media build rules
+
+-.PHONY: all html epub xml latex
++.PHONY: all html texinfo epub xml latex
+
+ all: $(IMGDOT) $(BUILDDIR) ${TARGETS}
+ html: all
++texinfo: all
+ epub: all
+ xml: all
+ latex: $(IMGPDF) all
+diff --git a/Makefile b/Makefile
+index 58cd4f5e1c3a..b3266c408b6c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1785,7 +1785,7 @@ $(help-board-dirs): help-%:
+ # Documentation targets
+ # ---------------------------------------------------------------------------
+ DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
+- linkcheckdocs dochelp refcheckdocs
++ linkcheckdocs dochelp refcheckdocs texinfodocs infodocs
+ PHONY += $(DOC_TARGETS)
+ $(DOC_TARGETS):
+ $(Q)$(MAKE) $(build)=Documentation $@
+
+base-commit: 81e7cfa3a9eb4ba6993a9c71772fdab21bc5d870
+--
+2.38.1
+
base-commit: 351bada95049f0023aaf2fc7c91ee4b33e94486c
--
2.38.1