mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
By using a separate variable for this we can easily grep for where the build system depends on its own location, and also change the policy regarding this later. Note that there is no opm-macros module; this is a "psuedo"-module which links to an additional one (currently, the one we're in)
82 lines
3.6 KiB
CMake
82 lines
3.6 KiB
CMake
# - Setup documentation
|
|
#
|
|
# Assumes that a Doxyfile template is located in the project root
|
|
# directory, and that all documentation is going to be generated
|
|
# into its own Documentation/ directory. It will also generate an
|
|
# installation target for the documentation (not built by default)
|
|
#
|
|
# Requires the following variables to be set:
|
|
# ${opm}_NAME Name of the project
|
|
#
|
|
# Output the following variables:
|
|
# ${opm}_STYLESHEET_COPIED Location of stylesheet to be removed in distclean
|
|
|
|
macro (opm_doc opm doxy_dir)
|
|
# combine the template with local customization
|
|
file (READ ${OPM_MACROS_ROOT}/cmake/Templates/Doxyfile _doxy_templ)
|
|
string (REPLACE ";" "\\;" _doxy_templ "${_doxy_templ}")
|
|
if (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/Doxylocal)
|
|
file (READ ${PROJECT_SOURCE_DIR}/${doxy_dir}/Doxylocal _doxy_local)
|
|
string (REPLACE ";" "\\;" _doxy_local "${_doxy_local}")
|
|
else (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/Doxylocal)
|
|
set (_doxy_local)
|
|
endif (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/Doxylocal)
|
|
file (MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${doxy_dir})
|
|
file (WRITE ${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile.in ${_doxy_templ} ${_doxy_local})
|
|
# set this generically named variable so even the custom file can be shared
|
|
set (src_DIR "${${opm}_DIR}")
|
|
# replace variables in this combined file
|
|
configure_file (
|
|
${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile.in
|
|
${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile
|
|
@ONLY
|
|
)
|
|
find_package (Doxygen)
|
|
if (DOXYGEN_FOUND)
|
|
add_custom_target (doc
|
|
COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile
|
|
SOURCES ${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${doxy_dir}
|
|
COMMENT "Generating API documentation with Doxygen"
|
|
VERBATIM
|
|
)
|
|
# distributions have various naming conventions; this enables the packager
|
|
# to direct where the install target should put the documentation. the names
|
|
# here are taken from GNUInstallDirs.cmake
|
|
set (CMAKE_INSTALL_DATAROOTDIR "share" CACHE STRING "Read-only arch.-indep. data root")
|
|
set (CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${${opm}_NAME}" CACHE STRING "Documentation root")
|
|
set (_formats html)
|
|
foreach (format IN LISTS _formats)
|
|
string (TOUPPER ${format} FORMAT)
|
|
install (
|
|
DIRECTORY ${PROJECT_BINARY_DIR}/${doxy_dir}/${format}
|
|
DESTINATION ${CMAKE_INSTALL_DOCDIR}
|
|
COMPONENT ${format}
|
|
OPTIONAL
|
|
)
|
|
# target to install just HTML documentation
|
|
add_custom_target (install-${format}
|
|
COMMAND ${CMAKE_COMMAND} -DCOMPONENT=${format} -P cmake_install.cmake
|
|
COMMENT Installing ${FORMAT} documentation
|
|
VERBATIM
|
|
)
|
|
# since the documentation is optional, it is not automatically built
|
|
add_dependencies (install-${format} doc)
|
|
endforeach (format)
|
|
endif (DOXYGEN_FOUND)
|
|
|
|
# stylesheets must be specified with relative path in Doxyfile, or the
|
|
# full path (to the source directory!) will be put in the output HTML.
|
|
# thus, we'll need to copy the stylesheet to this path relative to where
|
|
# Doxygen will be run (in the output tree)
|
|
if ((NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) AND (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/style.css))
|
|
file (COPY ${PROJECT_SOURCE_DIR}/${doxy_dir}/style.css
|
|
DESTINATION ${PROJECT_BINARY_DIR}/${doxy_dir}
|
|
)
|
|
set (${opm}_STYLESHEET_COPIED "${doxy_dir}/style.css")
|
|
else ((NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) AND (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/style.css))
|
|
set (${opm}_STYLESHEET_COPIED "")
|
|
endif ((NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) AND (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/style.css))
|
|
|
|
endmacro (opm_doc opm)
|