xref: /freebsd/contrib/xz/doxygen/update-doxygen (revision e32fecd0c2c3ee37c47ee100f169e7eb0282a873)
1#!/bin/sh
2#
3#############################################################################
4#
5# Updates the Doxygen generated documentation files in the source tree.
6# If the doxygen command is not installed, it will exit with an error.
7# This script can generate Doxygen documentation for all source files or for
8# just liblzma API header files.
9#
10# It is recommended to use this script to update the Doxygen-generated HTML
11# files since this will include the package version in the output and,
12# in case of liblzma API docs, strip JavaScript files from the output.
13#
14#############################################################################
15#
16# Authors: Jia Tan
17#          Lasse Collin
18#
19# This file has been put into the public domain.
20# You can do whatever you want with this file.
21#
22#############################################################################
23
24set -e
25
26if type doxygen > /dev/null 2>&1; then
27	:
28else
29	echo "doxygen/update-doxygen: 'doxygen' command not found." >&2
30	echo "doxygen/update-doxygen: Skipping Doxygen docs generation." >&2
31	exit 1
32fi
33
34if test ! -f Doxyfile; then
35	cd `dirname "$0"` || exit 1
36	if test ! -f Doxyfile; then
37		echo "doxygen/update-doxygen: Cannot find Doxyfile" >&2
38		exit 1
39	fi
40fi
41
42# Get the package version so that it can be included in the generated docs.
43PACKAGE_VERSION=`cd .. && sh build-aux/version.sh` || exit 1
44
45# If no arguments are specified, default to generating liblzma API header
46# documentation only.
47case $1 in
48	'' | api)
49		# Remove old documentation before re-generating the new.
50		rm -rf ../doc/api
51
52		# Generate the HTML documentation by preparing the Doxyfile
53		# in stdin and piping the result to the doxygen command.
54		# With Doxygen, the last assignment of a value to a tag will
55		# override any earlier assignment. So, we can use this
56		# feature to override the tags that need to change between
57		# "api" and "internal" modes.
58		(
59			cat Doxyfile
60			echo "PROJECT_NUMBER         = $PACKAGE_VERSION"
61		) | doxygen -
62
63		# As of Doxygen 1.8.0 - 1.9.6 and the Doxyfile options we use,
64		# the output is good without any JavaScript. Unfortunately
65		# Doxygen doesn't have an option to disable JavaScript usage
66		# completely so we strip it away with the hack below.
67		#
68		# Omitting the JavaScript code avoids some license hassle
69		# as jquery.js is fairly big, it contains more than jQuery
70		# itself, and doesn't include the actual license text (it
71		# only refers to the MIT license by name).
72		echo "Stripping JavaScript from Doxygen output..."
73		for F in ../doc/api/*.html
74		do
75			sed 's/<script [^>]*><\/script>//g
76				s/onclick="[^"]*"//g' \
77				"$F" > ../doc/api/tmp
78			mv -f ../doc/api/tmp "$F"
79		done
80		rm -f ../doc/api/*.js
81		;;
82
83	internal)
84		# The docs from internal aren't for distribution so
85		# the JavaScript files aren't an issue here.
86		rm -rf ../doc/internal
87		(
88			cat Doxyfile
89			echo "PROJECT_NUMBER         = $PACKAGE_VERSION"
90			echo 'PROJECT_NAME           = "XZ Utils"'
91			echo 'STRIP_FROM_PATH        = ../src'
92			echo 'INPUT                  = ../src'
93			echo 'HTML_OUTPUT            = internal'
94			echo 'EXTRACT_PRIVATE        = YES'
95			echo 'EXTRACT_STATIC         = YES'
96			echo 'EXTRACT_LOCAL_CLASSES  = YES'
97			echo 'SEARCHENGINE           = YES'
98		) | doxygen -
99		;;
100
101	*)
102		echo "doxygen/update-doxygen: Error: mode argument '$1'" \
103			"is not supported." >&2
104		echo "doxygen/update-doxygen: Supported modes:" >&2
105		echo "doxygen/update-doxygen: - 'api' (default):" \
106			"liblzma API docs into doc/api" >&2
107		echo "doxygen/update-doxygen: - 'internal':"\
108			"internal docs into doc/internal" >&2
109		exit 1
110		;;
111esac
112