fltk/documentation/CMakeLists.txt
Albrecht Schlosser 5646522985 CMake: Fix some special cases regarding generation of docs
Ignore error if docs are not generated using a git working tree, for
  instance from a downloaded tarball or zip file. This is only a
  temporary solution for issue #499 (see "FIXME" comment).

Execute doxygen only if it is available. i.e. found by CMake.
2022-10-03 10:49:43 +02:00

241 lines
6.4 KiB
CMake

#
# CMakeLists.txt to build docs for the FLTK project using CMake (www.cmake.org)
#
# Copyright 1998-2022 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# https://www.fltk.org/COPYING.php
#
# Please see the following page on how to report bugs and issues:
#
# https://www.fltk.org/bugs.php
#
set (DOCS)
set (GENERATE_DOCS FALSE)
set (GIT_REVISION "")
set (YEAR "")
set (CURRENT_DATE "")
if (OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
set (GENERATE_DOCS TRUE)
endif ()
if (OPTION_INCLUDE_DRIVER_DOCUMENTATION)
set (DRIVER_DOCS "DriverDev")
else ()
set (DRIVER_DOCS "")
endif ()
#------------------------------------------------
# generate files used for both HTML and PDF docs
#------------------------------------------------
if (GENERATE_DOCS)
# create required variables
execute_process (COMMAND date "+%Y"
OUTPUT_VARIABLE YEAR
)
# note: current locale is used for abbreviated month
execute_process (COMMAND date "+%b %d, %Y"
OUTPUT_VARIABLE CURRENT_DATE
)
# find git revision
# FIXME: This must also work with tarballs where git is not available.
# For now we just ignore errors and set GIT_REVISION = "unkown".
# In the future tarball/zip generation should create a file
# that contains the git revision.
execute_process (COMMAND
git --git-dir=${CMAKE_SOURCE_DIR}/.git rev-parse --short=10 HEAD
OUTPUT_VARIABLE GIT_REVISION
ERROR_QUIET
)
# strip trailing newline from git revision
string (REPLACE "\n" "" GIT_REVISION "${GIT_REVISION}")
# set to "'unkown'" if git is not available
if (GIT_REVISION STREQUAL "")
set (GIT_REVISION "'unkown'")
endif()
# find doxygen version
if (DOXYGEN_FOUND)
# strip trailing git revision if doxygen was built from source
string (REGEX REPLACE " .*$" "" DOXYGEN_VERSION_SHORT ${DOXYGEN_VERSION})
# strip trailing newline
string (REPLACE "\n" "" DOXYGEN_VERSION_SHORT "${DOXYGEN_VERSION_SHORT}")
endif (DOXYGEN_FOUND)
# configure copyright.dox (includes current year)
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/copyright.dox.in
${CMAKE_CURRENT_BINARY_DIR}/copyright.dox
@ONLY
)
# configure generated.dox (includes date and versions)
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/generated.dox.in
${CMAKE_CURRENT_BINARY_DIR}/generated.dox
@ONLY
)
if (0) # debug
fl_debug_var (GIT_REVISION)
fl_debug_var (DOXYGEN_FOUND)
fl_debug_var (DOXYGEN_EXECUTABLE)
fl_debug_var (DOXYGEN_VERSION)
fl_debug_var (DOXYGEN_VERSION_SHORT)
endif ()
endif (GENERATE_DOCS)
#--------------------------
# build html documentation
#--------------------------
if (OPTION_BUILD_HTML_DOCUMENTATION)
list (APPEND DOCS html)
# generate Doxygen file "Doxyfile"
set (GENERATE_HTML YES)
set (GENERATE_LATEX NO)
set (LATEX_HEADER "")
# configure Doxygen input file for HTML docs (Doxyfile.in)
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.in
@ONLY
)
# convert Doxyfile to current doxygen version
add_custom_command (
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
COMMAND ${DOXYGEN_EXECUTABLE} -u -s - < Doxyfile.in > Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Converting Doxyfile to current doxygen version" VERBATIM
)
# generate HTML documentation
add_custom_target (html
COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating HTML documentation" VERBATIM
)
endif (OPTION_BUILD_HTML_DOCUMENTATION)
#--------------------------
# build pdf documentation
#--------------------------
if (OPTION_BUILD_PDF_DOCUMENTATION)
list (APPEND DOCS pdf)
# generate Doxygen input file "Doxybook"
set (GENERATE_HTML NO)
set (GENERATE_LATEX YES)
set (LATEX_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex")
# strip potential " (Git-hash)" from the original version
string (REGEX REPLACE " .*$" "" DOXY_VERSION ${DOXYGEN_VERSION})
# configure Doxygen input file for PDF docs (Doxybook.in)
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxybook.in
@ONLY
)
# convert Doxybook to current doxygen version
add_custom_command (
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Doxybook
COMMAND ${DOXYGEN_EXECUTABLE} -u -s - < Doxybook.in > Doxybook
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Converting Doxybook to current doxygen version" VERBATIM
)
# generate LaTeX title fltk-title.tex
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-title.tex.in
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex
@ONLY
)
# generate fltk.pdf
add_custom_command (
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_header
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex
${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex
COMMAND ${DOXYGEN_EXECUTABLE} Doxybook
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_pdf
COMMAND cp -f latex/refman.pdf fltk.pdf
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Doxybook
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating PDF documentation" VERBATIM
)
# add target 'pdf'
add_custom_target (pdf
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
)
endif (OPTION_BUILD_PDF_DOCUMENTATION)
#----------------------------------
# add target 'docs' for all docs
#----------------------------------
if (DOCS)
add_custom_target (docs
DEPENDS ${DOCS}
)
endif (DOCS)
#----------------------------------
# install html + pdf documentation
#----------------------------------
if (OPTION_INSTALL_HTML_DOCUMENTATION AND OPTION_BUILD_HTML_DOCUMENTATION)
install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
DESTINATION ${FLTK_DATADIR}/doc/fltk
)
endif (OPTION_INSTALL_HTML_DOCUMENTATION AND OPTION_BUILD_HTML_DOCUMENTATION)
if (OPTION_INSTALL_PDF_DOCUMENTATION AND OPTION_BUILD_PDF_DOCUMENTATION)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
DESTINATION ${FLTK_DATADIR}/doc/fltk/
)
endif (OPTION_INSTALL_PDF_DOCUMENTATION AND OPTION_BUILD_PDF_DOCUMENTATION)