#!/bin/sh -e # Generate HTML documentation # # Copyright (C) 2014 Red Hat, Inc. # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions of # the GNU General Public License v.2, or (at your option) any later version. # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY expressed or implied, including the implied warranties of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. You should have received a copy of the # GNU General Public License along with this program; if not, write to the # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. Any Red Hat trademarks that are incorporated in the # source code or documentation are not subject to the GNU General Public # License and may only be used or replicated with the express permission of # Red Hat, Inc. # # Red Hat Author(s): David Shea # # Using make to run tools with multiple outputs is a recipe for disaster, so # use make to run this instead. It's not like any of it can be parallelized # anyway, and if anything changes we more than likely have to start at the # beginning. This script will run all of the various gtkdoc programs and create # a single output file, $DOC_OUTPUT_DIR/gtkdoc.stamp # ---- ENVIRONMENT VARIABLES ----- # DOC_MODULE: the name of the module # DOC_MAIN_SGML_FILE: the top-level SGML file # DOC_SOURCE_DIR: directories containing the source code # IGNORE_HFILES: header files to ignore while scanning # SCAN_OPTIONS: Extra options to supply to gtkdoc-scan # MKDB_OPTIONS: Extra options to supply to gtkdoc-mkdb # HTML_DIR: The gtk-doc html directory # GTKDOC_CC: compiler to use with gtkdoc-scangobj (e.g., $(LTCOMPILE)) # GTKDOC_LD: linker to use with gtkdoc-scangobj (e.g., $(LINK)) # GTKDOC_RUN: Wrapper to run whatever gtdkco-scangobj made (e.g., $(LIBTOOL) --mode=execute) # GTKDOC_CFLAGS: CFLAGS to pass to gtkdoc-scangobj (e.g., $(GTK_CFLAGS)) # GTKDOC_LIBS: LIBS to pass to gtkdoc-scangobj (e.g., $(GTK_LIB) plus the .la file to scan) # Everything will be output in the current directory because these tools are # awful at communicating paths to each other, and all of the paths in # $DOC_MAIN_SGML_FILE need to be relative to the output directory. Which # also means that $DOC_MAIN_SGML_FILE needs to be copied into $builddir. # This script should be run any time the source files or the main SGML file # change. if [ -n "$V" ]; then set -x fi # Remove the old stamp file rm -f gtkdoc.stamp # Generate --source-dir args for gtkdoc-scan and gtkdoc-mkdb # Use realpath to convert to absolute paths because whoever wrote gtkdoc-mkdb # couldn't imagine a world in which input file aren't in the current directory _source_dir= for d in $DOC_SOURCE_DIR ; do _source_dir="${_source_dir} --source-dir=$(realpath $d)" done # Convert DOC_MAIN_SGML_FILE to an absolute path because gtkdoc-mkhtml can't # specify an output directory DOC_MAIN_SGML_FILE=$(realpath ${DOC_MAIN_SGML_FILE}) # Clean up files from gtkdoc-scan and run rm -f ${DOC_MODULE}-decl-list.txt ${DOC_MODULE}-decl.txt ${DOC_MODULE}-overrides.txt \ ${DOC_MODULE}-sections.txt ${DOC_MODULE}.types gtkdoc-scan \ --module=${DOC_MODULE} \ --ignore-headers="${IGNORE_HFILES}" ${_source_dir} \ --output-dir=. \ ${SCAN_OPTIONS} # Clean up files from gtkdoc-scangobj and run rm -f ${DOC_MODULE}.args ${DOC_MODULE}.hierarchy ${DOC_MODULE}.interfaces \ ${DOC_MODULE}.prerequisites ${DOC_MODULE}.signals gtkdoc-scangobj \ --module=${DOC_MODULE} \ --types=${DOC_MODULE}.types \ --output-dir=. \ --cc="${GTKDOC_CC}" \ --run="${GTKDOC_RUN}" \ --ld="${GTKDOC_LD}" \ --cflags="${GTKDOC_CFLAGS}" \ --ldflags="${GTKDOC_LIBS}" # Clean up files from gtkdoc-mkdb and run rm -rf ${DOC_MODULE}-doc.bottom ${DOC_MODULE}-doc.top \ ${DOC_MODULE}-undeclared.txt ${DOC_MODULE}-undocumented.txt \ ${DOC_MODULE}-unused.txt sgml.stamp xml gtkdoc-mkdb --module=${DOC_MODULE} \ --source-suffixes=c,h \ --ignore-files="${IGNORE_HFILES}" \ --output-dir=xml \ --main-sgml-file=${DOC_MAIN_SGML_FILE} \ --output-format=xml \ ${_source_dir} \ ${MKDB_OPTIONS} # We almost have something useful! gtkdoc-mkhtml is next rm -rf html mkdir html ( cd html && gtkdoc-mkhtml ${DOC_MODULE} ${DOC_MAIN_SGML_FILE} ) gtkdoc-fixxref --module=${DOC_MODULE} --module-dir=html --html-dir=${HTML_DIR} # All done, new stamp file touch gtkdoc.stamp