# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.

#[=======================================================================[.rst:
Documentation
-------------

This module provides support for the VTK documentation framework.  It
relies on several tools (Doxygen, Perl, etc).
#]=======================================================================]

cmake_policy(GET CMP0106 _Documentation_policy)

if (_Documentation_policy STREQUAL "NEW")
  message(FATAL_ERROR
    "Documentation.cmake is VTK-specific code and should not be used in "
    "non-VTK projects. This logic in this module is best shipped with the "
    "project using it rather than with CMake. This is now an error according "
    "to policy CMP0106.")
else ()

if (_Documentation_policy STREQUAL "")
  # Ignore the warning if the project is detected as VTK itself.
  if (NOT CMAKE_PROJECT_NAME STREQUAL "VTK" AND
      NOT PROJECT_NAME STREQUAL "VTK")
    cmake_policy(GET_WARNING CMP0106 _Documentation_policy_warning)
    message(AUTHOR_WARNING
      "${_Documentation_policy_warning}\n"
      "Documentation.cmake is VTK-specific code and should not be used in "
      "non-VTK projects. This logic in this module is best shipped with the "
      "project using it rather than with CMake.")
  endif ()
  unset(_Documentation_policy_warning)
endif ()

#
# Build the documentation ?
#
option(BUILD_DOCUMENTATION "Build the documentation (Doxygen)." OFF)
mark_as_advanced(BUILD_DOCUMENTATION)

if (BUILD_DOCUMENTATION)

  #
  # Check for the tools
  #
  find_package(UnixCommands)
  find_package(Doxygen)
  find_package(Gnuplot)
  find_package(HTMLHelp)
  find_package(Perl)
  find_package(Wget)

  option(DOCUMENTATION_HTML_HELP
    "Build the HTML Help file (CHM)." OFF)

  option(DOCUMENTATION_HTML_TARZ
    "Build a compressed tar archive of the HTML doc." OFF)

  mark_as_advanced(
    DOCUMENTATION_HTML_HELP
    DOCUMENTATION_HTML_TARZ
    )

  #
  # The documentation process is controlled by a batch file.
  # We will probably need bash to create the custom target
  #

endif ()

endif ()

unset(_Documentation_policy)
