#!/bin/sh # SPDX-License-Identifier: 0BSD ############################################################################# # # While it's possible to use the Doxyfile as is to generate liblzma API # documentation, it is recommended to use this script because this adds # the XZ Utils version number to the generated HTML. # # Other features: # - Generate documentation of the XZ Utils internals. # - Set input and output paths for out-of-tree builds. # ############################################################################# # # Authors: Jia Tan # Lasse Collin # ############################################################################# set -e show_usage() { echo "Usage: $0 <api|internal> [ABS_TOP_SRCDIR ABS_OUTDIR]" echo echo "Supported modes:" echo " - 'api' (default): liblzma API docs into doc/api" echo " - 'internal': internal docs into doc/internal" echo echo "Absolute source and output dirs may be set" \ "to do an out-of-tree build." echo "The output directory must already exist." exit 1 } case $1 in api|internal) ;; *) show_usage ;; esac if type doxygen > /dev/null 2>&1; then : else echo "$0: 'doxygen' command not found" >&2 exit 1 fi case $# in 1) # One argument: Building inside the source tree ABS_TOP_SRCDIR=`dirname "$0"`/.. ABS_OUTDIR=$ABS_TOP_SRCDIR/doc ;; 3) # Three arguments: Possibly an out of tree build ABS_TOP_SRCDIR=$2 ABS_OUTDIR=$3 ;; *) show_usage ;; esac if test ! -f "$ABS_TOP_SRCDIR/doxygen/Doxyfile"; then echo "$0: Source dir '$ABS_TOP_SRCDIR/doxygen/Doxyfile' not found" >&2 exit 1 fi if test ! -d "$ABS_OUTDIR"; then echo "$0: Output dir '$ABS_OUTDIR' not found" >&2 exit 1 fi # Get the package version so that it can be included in the generated docs. PACKAGE_VERSION=`cd "$ABS_TOP_SRCDIR" && sh build-aux/version.sh` case $1 in api) # Remove old documentation before re-generating the new. rm -rf "$ABS_OUTDIR/api" # 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 # "api" and "internal" modes. ABS_SRCDIR=$ABS_TOP_SRCDIR/src/liblzma/api ( cat "$ABS_TOP_SRCDIR/doxygen/Doxyfile" echo "PROJECT_NUMBER = $PACKAGE_VERSION" echo "OUTPUT_DIRECTORY = $ABS_OUTDIR" echo "STRIP_FROM_PATH = $ABS_SRCDIR" echo "INPUT = $ABS_SRCDIR" ) | doxygen -q - ;; internal) rm -rf "$ABS_OUTDIR/internal" ( cat "$ABS_TOP_SRCDIR/doxygen/Doxyfile" echo 'PROJECT_NAME = "XZ Utils"' echo "PROJECT_NUMBER = $PACKAGE_VERSION" echo "OUTPUT_DIRECTORY = $ABS_OUTDIR" echo "STRIP_FROM_PATH = $ABS_TOP_SRCDIR" echo "INPUT = $ABS_TOP_SRCDIR/src" echo 'HTML_OUTPUT = internal' echo 'SEARCHENGINE = YES' ) | doxygen -q - ;; esac