blob: 3e6812a4d54a7780791270a1191e6653240588fe [file] [log] [blame]
# ------------------------------------------------------------------------------
# MADlib Documentation
# ------------------------------------------------------------------------------
set(_DOXYGEN_INPUT_USER
"\"${CMAKE_SOURCE_DIR}/doc/mainpage.dox\""
"\"${CMAKE_SOURCE_DIR}/src/modules\""
"\"${CMAKE_SOURCE_DIR}/src/ports\""
"\"${CMAKE_SOURCE_DIR}/src/utils\""
"\"${CMAKE_SOURCE_DIR}/methods\""
)
join_strings(DOXYGEN_INPUT_USER " " "${_DOXYGEN_INPUT_USER}")
set(_DOXYGEN_INPUT_DEVELOPER
"\"${CMAKE_SOURCE_DIR}/src/dbal/dbal.hpp\""
${_DOXYGEN_INPUT_USER}
)
join_strings(DOXYGEN_INPUT_DEVELOPER " " "${_DOXYGEN_INPUT_DEVELOPER}")
set(DOXYGEN_USE_MATHJAX NO CACHE BOOL "In user documentation, render LaTeX formulas using MathJax")
set(DOXYGEN_INCLUDE_PATH "\"${CMAKE_SOURCE_DIR}/src\" \"${CMAKE_SOURCE_DIR}/src/ports/linux\"")
# Note: Type PATH implies that the value is either a relative path to
# ${CMAKE_CURRENT_BINARY_DIR} (and CMake generates the full path) or as an
# absolute path. Therefore, paths not relative to ${CMAKE_CURRENT_BINARY_DIR}
# must be of type STRING!
set(MATHJAX_INSTALLATION "../third_party/downloads/mathjax" CACHE PATH
"Path to MathJax installation (used to clone MathJax repository; absolute or relative to \${CMAKE_BINARY_DIR}/doc)"
)
set(DOXYGEN_MATHJAX_RELPATH "../../../third_party/downloads/mathjax" CACHE STRING
"Path to MathJax installation (used by Doxygen; absolute or relative to \${DOXYGEN_HTML_OUTPUT})"
)
set(DOXYGEN_OUTPUT_DEVELOPER developer CACHE PATH
"Base path where the documentation generated by Doxygen will be put (abolsute or relative to \${CMAKE_BINARY_DIR}/doc)"
)
set(DOXYGEN_OUTPUT_USER user CACHE PATH
"Base path where the documentation generated by Doxygen will be put (abolsute or relative to \${CMAKE_BINARY_DIR}/doc)"
)
set(DOXYGEN_HTML_OUTPUT html CACHE STRING
"Path (relative to \${DOXYGEN_OUTPUT_<config>} where HTML docs will be put."
)
# -- Build doxysql (the SQL parser) using flex and bison -----------------------
find_package(FLEX 2.5.33)
find_package(BISON 2.4)
find_package(Doxygen)
if(FLEX_FOUND AND BISON_FOUND AND DOXYGEN_FOUND)
# The FindFLEX module by cmake unfortunately does not cover the
# case when FlexLexer.h is in a non-standard location.
get_dir_name(_FLEX_BASE "${FLEX_EXECUTABLE}")
get_dir_name(_FLEX_BASE "${_FLEX_BASE}")
find_path(_FLEX_INCLUDE_DIR
NAMES "FlexLexer.h"
HINTS "${_FLEX_BASE}/include"
)
if(_FLEX_INCLUDE_DIR)
include_directories(BEFORE "${_FLEX_INCLUDE_DIR}")
endif(_FLEX_INCLUDE_DIR)
BISON_TARGET(doxysqlParser src/sql.yy ${CMAKE_CURRENT_BINARY_DIR}/sql.parser.cc)
FLEX_TARGET(doxysqlScanner src/sql.ll ${CMAKE_CURRENT_BINARY_DIR}/sql.scanner.cc)
ADD_FLEX_BISON_DEPENDENCY(doxysqlScanner doxysqlParser)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_executable(doxysql ${BISON_doxysqlParser_OUTPUTS}
${FLEX_doxysqlScanner_OUTPUTS})
set_target_properties(doxysql PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
# -- Copy executable and configuration files -----------------------------------
add_subdirectory(bin)
add_subdirectory(etc)
# -- Update MathJax ------------------------------------------------------------
add_custom_target(update_mathjax
COMMAND bin/update_mathjax.sh
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
)
if(USE_MATHJAX)
set(_MATHJAX_DEPENDENCY_USER update_mathjax)
endif(USE_MATHJAX)
# -- Run doxygen ---------------------------------------------------------------
set(_DOXYGEN_UNNEEDED_WARNINGS_FILTER egrep -v
"warning:.*\\(@param is not found in the argument list.*kwargs\\)\$|The following parameters.*kwargs\\) are not documented\\)|parameter 'kwargs'\$")
add_custom_target(doc
COMMAND ${DOXYGEN_EXECUTABLE} etc/user.doxyfile | ${_DOXYGEN_UNNEEDED_WARNINGS_FILTER}
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
DEPENDS doxysql doxyBinFiles doxygen_css ${_MATHJAX_DEPENDENCY_USER}
COMMENT "Generating user-level documentation..."
VERBATIM
)
add_custom_target(devdoc
COMMAND ${DOXYGEN_EXECUTABLE} etc/developer.doxyfile | ${_DOXYGEN_UNNEEDED_WARNINGS_FILTER}
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
DEPENDS doxysql doxyBinFiles doxygen_css update_mathjax
COMMENT "Generating developer documentation..."
VERBATIM
)
# -- Install doc/user/html output directory to doc/html ------------------------
# We specify OPTIONAL, which means it will not be an error if the user
# documentation does not exist
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/user/html
DESTINATION doc
OPTIONAL
COMPONENT doc
PATTERN ".DS_Store" EXCLUDE
)
# -- Notify user if we could not run doxygen
else(FLEX_FOUND AND BISON_FOUND AND DOXYGEN_FOUND)
message(STATUS "Could not find recent versions of at least one of flex, "
"bison, doxygen, or dot (part of graphviz, needed for doxygen). "
"Documentation will not be built.")
endif(FLEX_FOUND AND BISON_FOUND AND DOXYGEN_FOUND)