summaryrefslogtreecommitdiff
path: root/doxygen
diff options
context:
space:
mode:
authorJia Tan <jiat0218@gmail.com>2023-03-16 21:35:55 +0800
committerJia Tan <jiat0218@gmail.com>2023-03-17 01:42:28 +0800
commit1321852a3be7196bd7fcfd146221a5669e46407c (patch)
tree07b1c190d73ef3e4650f7f698ec80bed46597229 /doxygen
parentb1216a7772952d2fe7fe9c6acfcbd98d30abbc7b (diff)
downloadxz-1321852a3be7196bd7fcfd146221a5669e46407c.tar.gz
Build: Create doxygen/update-doxygen script.
This is a helper script to generate the Doxygen documentation. It can be run in 'liblzma' or 'internal' mode by setting the first argument. It will default to 'liblzma' mode and only generate documentation for the liblzma API header files. The helper script will be run during the custom mydist hook when we create releases. This hook already alters the source directory, so its fine to do it here too. This way, we can include the Doxygen generated files in the distrubtion and when installing. In 'liblzma' mode, the JavaScript is stripped from the .html files and the .js files are removed. This avoids license hassle from jQuery and other libraries that Doxygen 1.9.6 puts into jquery.js in minified form.
Diffstat (limited to 'doxygen')
-rwxr-xr-xdoxygen/update-doxygen111
1 files changed, 111 insertions, 0 deletions
diff --git a/doxygen/update-doxygen b/doxygen/update-doxygen
new file mode 100755
index 0000000..e5f3ab4
--- /dev/null
+++ b/doxygen/update-doxygen
@@ -0,0 +1,111 @@
+#!/bin/sh
+#
+#############################################################################
+#
+# Updates the Doxygen generated documentation files in the source tree.
+# If the doxygen command is not installed, it will exit with an error.
+# This script can generate Doxygen documentation for all source files or for
+# just liblzma API header files.
+#
+# It is recommended to use this script to update the Doxygen-generated HTML
+# files since this will include the package version in the output and,
+# in case of liblzma API docs, strip JavaScript files from the output.
+#
+#############################################################################
+#
+# Authors: Jia Tan
+# Lasse Collin
+#
+# This file has been put into the public domain.
+# You can do whatever you want with this file.
+#
+#############################################################################
+
+set -e
+
+if type doxygen > /dev/null 2>&1; then
+ :
+else
+ echo "doxygen/update-doxygen: 'doxygen' command not found." >&2
+ echo "doxygen/update-doxygen: Skipping Doxygen docs generation." >&2
+ exit 1
+fi
+
+if test ! -f Doxyfile; then
+ cd `dirname "$0"` || exit 1
+ if test ! -f Doxyfile; then
+ echo "doxygen/update-doxygen: Cannot find Doxyfile" >&2
+ exit 1
+ fi
+fi
+
+# Get the package version so that it can be included in the generated docs.
+PACKAGE_VERSION=`cd .. && sh build-aux/version.sh` || exit 1
+
+# If no arguments are specified, default to generating liblzma API header
+# documentation only.
+case $1 in
+ '' | liblzma)
+ # Remove old documentation before re-generating the new.
+ rm -rf ../doc/liblzma
+
+ # Generate the HTML documentation by preparing the Doxyfile
+ # in stdin and piping the result to the doxygen command.
+ # With Doxygen, the last assignment of a value to a tag will
+ # override any earlier assignment. So, we can use this
+ # feature to override the tags that need to change between
+ # "liblzma" and "internal" modes.
+ (
+ cat Doxyfile
+ echo "PROJECT_NUMBER = $PACKAGE_VERSION"
+ ) | doxygen -
+
+ # As of Doxygen 1.8.0 - 1.9.6 and the Doxyfile options we use,
+ # the output is good without any JavaScript. Unfortunately
+ # Doxygen doesn't have an option to disable JavaScript usage
+ # completely so we strip it away with the hack below.
+ #
+ # Omitting the JavaScript code avoids some license hassle
+ # as jquery.js is fairly big, it contains more than jQuery
+ # itself, and doesn't include the actual license text (it
+ # only refers to the MIT license by name).
+ echo "Stripping JavaScript from Doxygen output..."
+ for F in ../doc/liblzma/*.html
+ do
+ sed 's/<script [^>]*><\/script>//g
+ s/onclick="[^"]*"//g' \
+ "$F" > ../doc/liblzma/tmp
+ mv -f ../doc/liblzma/tmp "$F"
+ done
+ rm -f ../doc/liblzma/*.js
+ ;;
+
+ internal)
+ # The docs from internal aren't for distribution so
+ # the JavaScript files aren't an issue here.
+ rm -rf ../doc/internal
+ (
+ cat Doxyfile
+ echo "PROJECT_NUMBER = $PACKAGE_VERSION"
+ echo 'PROJECT_NAME = "XZ Utils"'
+ echo 'STRIP_FROM_PATH = ../src'
+ echo 'INPUT = ../src'
+ echo 'HTML_OUTPUT = internal'
+ echo 'EXTRACT_PRIVATE = YES'
+ echo 'EXTRACT_STATIC = YES'
+ echo 'EXTRACT_LOCAL_CLASSES = YES'
+ echo 'SEARCHENGINE = YES'
+ ) | doxygen -
+ ;;
+
+ *)
+ echo "doxygen/update-doxygen: Error: mode argument '$1'" \
+ "is not supported." >&2
+ echo "doxygen/update-doxygen: Supported modes:" >&2
+ echo "doxygen/update-doxygen: - 'liblzma' (default):" \
+ "API docs into doc/liblzma" >&2
+ echo "doxygen/update-doxygen: - 'internal':"\
+ "internal docs into doc/internal" >&2
+ exit 1
+ ;;
+esac