summary refs log tree commit diff
path: root/pkgs/development/interpreters/python/hooks
diff options
context:
space:
mode:
authorDmitry Bogatov <git#v1@kaction.cc>2021-08-28 11:52:28 -0400
committerDmitry Bogatov <git#v1@kaction.cc>2022-04-29 08:45:38 -0400
commit6b8b02cef77a7dcd1192cc47ce60fd2e128617a4 (patch)
treede90bff1c72124a8b90adf92d82451b9d3f32f56 /pkgs/development/interpreters/python/hooks
parented79d5cdb3525974b3af845202eb856a5660926f (diff)
downloadnixpkgs-6b8b02cef77a7dcd1192cc47ce60fd2e128617a4.tar
nixpkgs-6b8b02cef77a7dcd1192cc47ce60fd2e128617a4.tar.gz
nixpkgs-6b8b02cef77a7dcd1192cc47ce60fd2e128617a4.tar.bz2
nixpkgs-6b8b02cef77a7dcd1192cc47ce60fd2e128617a4.tar.lz
nixpkgs-6b8b02cef77a7dcd1192cc47ce60fd2e128617a4.tar.xz
nixpkgs-6b8b02cef77a7dcd1192cc47ce60fd2e128617a4.tar.zst
nixpkgs-6b8b02cef77a7dcd1192cc47ce60fd2e128617a4.zip
python3.pkgs.sphinxHook: new package
This hook takes care of building and installing html documentation from Sphinx
sources.
Diffstat (limited to 'pkgs/development/interpreters/python/hooks')
-rw-r--r--pkgs/development/interpreters/python/hooks/default.nix6
-rw-r--r--pkgs/development/interpreters/python/hooks/sphinx-hook.sh57
2 files changed, 63 insertions, 0 deletions
diff --git a/pkgs/development/interpreters/python/hooks/default.nix b/pkgs/development/interpreters/python/hooks/default.nix
index 1a0618225a3..cb5ef87826a 100644
--- a/pkgs/development/interpreters/python/hooks/default.nix
+++ b/pkgs/development/interpreters/python/hooks/default.nix
@@ -169,4 +169,10 @@ in rec {
       name = "wheel-unpack-hook.sh";
       deps = [ wheel ];
     } ./wheel-unpack-hook.sh) {};
+
+  sphinxHook = callPackage ({ sphinx }:
+    makeSetupHook {
+      name = "python${python.pythonVersion}-sphinx-hook";
+      deps = [ sphinx ];
+    } ./sphinx-hook.sh) {};
 }
diff --git a/pkgs/development/interpreters/python/hooks/sphinx-hook.sh b/pkgs/development/interpreters/python/hooks/sphinx-hook.sh
new file mode 100644
index 00000000000..0140958b231
--- /dev/null
+++ b/pkgs/development/interpreters/python/hooks/sphinx-hook.sh
@@ -0,0 +1,57 @@
+# This hook automatically finds Sphinx documentation, builds it in html format
+# and installs it.
+#
+# This hook knows about several popular locations in which subdirectory
+# documentation may be, but in very unusual cases $sphinxRoot directory can be
+# set explicitly.
+#
+# Name of the directory relative to ${doc:-$out}/share/doc is normally also
+# deduced automatically, but can be overridden with $sphinxOutdir variable.
+#
+# Sphinx build system can depend on arbitrary amount of python modules, client
+# code is responsible for ensuring that all dependencies are present.
+
+buildSphinxPhase() {
+    local __sphinxRoot="" o
+
+    runHook preBuildSphinx
+    if [[ -n "${sphinxRoot:-}" ]] ; then  # explicit root
+        if ! [[ -f "${sphinxRoot}/conf.py" ]] ; then
+            echo 2>&1 "$sphinxRoot/conf.py: no such file"
+            exit 1
+        fi
+        __sphinxRoot=$sphinxRoot
+    else
+        for o in doc docs doc/source docs/source ; do
+            if [[ -f "$o/conf.py" ]] ; then
+                echo "Sphinx documentation found in $o"
+                __sphinxRoot=$o
+                break
+            fi
+        done
+    fi
+
+    if [[ -z "${__sphinxRoot}" ]] ; then
+        echo 2>&1 "Sphinx documentation not found, use 'sphinxRoot' variable"
+        exit 1
+    fi
+    sphinx-build -M html "${__sphinxRoot}" ".sphinx/html" -v
+
+    runHook postBuildSphinx
+}
+
+installSphinxPhase() {
+    local docdir=""
+    runHook preInstallSphinx
+
+    docdir="${doc:-$out}/share/doc/${sphinxOutdir:-$name}"
+    mkdir -p "$docdir"
+
+    cp -r .sphinx/html/html "$docdir/"
+    rm -fr "${docdir}/html/_sources" "${docdir}/html/.buildinfo"
+
+    runHook postInstallSphinx
+}
+
+preBuildPhases+=" buildSphinxPhase"
+postPhases+=" installSphinxPhase"