| # ------------------------------------------------------------------------------ |
| # MADlib Documentation |
| # ------------------------------------------------------------------------------ |
| |
| set(DOXYGEN_README_FILE "../README.md" CACHE STRING |
| "Path to ReadMe file relative to the doc directory after installation") |
| set(DOXYGEN_LICENSE_DIR "../../licenses" CACHE STRING |
| "Path to license directory relative to the doc directory after installation") |
| configure_file( |
| mainpage.dox.in |
| "${CMAKE_CURRENT_BINARY_DIR}/mainpage.dox" |
| @ONLY |
| ) |
| configure_file( |
| etc/DoxygenLayout.xml |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/DoxygenLayout.xml" |
| @ONLY |
| ) |
| configure_file( |
| etc/header.html |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/header.html" |
| @ONLY |
| ) |
| configure_file( |
| etc/madlib_extra.css |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/madlib_extra.css" |
| @ONLY |
| ) |
| file( |
| COPY |
| imgs/madlib.png |
| DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/imgs" |
| ) |
| |
| file( |
| DOWNLOAD |
| "https://raw.githubusercontent.com/madlib/eigen/branches/3.2/doc/eigen_navtree_hacks.js" |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/eigen_navtree_hacks.js" |
| ) |
| |
| set(_DOXYGEN_INPUT_USER |
| "\"${CMAKE_CURRENT_BINARY_DIR}/mainpage.dox\"" |
| "\"${CMAKE_SOURCE_DIR}/src/dbal\"" |
| "\"${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/ports/postgres/dbconnector/main.cpp\"" |
| ${_DOXYGEN_INPUT_USER} |
| ) |
| join_strings(DOXYGEN_INPUT_DEVELOPER " " "${_DOXYGEN_INPUT_DEVELOPER}") |
| |
| if(NOT DEFINED DOXYGEN_USE_MATHJAX) |
| set(DOXYGEN_USE_MATHJAX YES CACHE BOOL |
| "In user documentation, render LaTeX formulas using MathJax") |
| endif(NOT DEFINED DOXYGEN_USE_MATHJAX) |
| |
| if(DOXYGEN_USE_MATHJAX) |
| if(NOT DEFINED MATHJAX_DIR) |
| find_path(MATHJAX_DIR |
| NAMES MathJax.js |
| PATHS "$ENV{MATHJAX_DIR}" "/usr/share/javascript/mathjax/" |
| DOC "Path to local MathJax.js") |
| endif(NOT DEFINED MATHJAX_DIR) |
| if(MATHJAX_DIR) |
| set(MATHJAX_RELPATH_CONFIG "MATHJAX_RELPATH = ${MATHJAX_DIR}") |
| message(STATUS "Using local MathJax: " ${MATHJAX_DIR}) |
| else(MATHJAX_DIR) |
| set(MATHJAX_RELPATH_CONFIG "") |
| message(STATUS "Using default web-based MathJax") |
| endif(MATHJAX_DIR) |
| endif(DOXYGEN_USE_MATHJAX) |
| |
| # set(MATHJAX_INSTALLATION "${CMAKE_BINARY_DIR}/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 "${CMAKE_BINARY_DIR}/third_party/downloads/mathjax" CACHE STRING |
| # "Path to MathJax installation (used by Doxygen; absolute or relative to \${DOXYGEN_HTML_OUTPUT})" |
| # ) |
| |
| set(DOXYGEN_INCLUDE_PATH "\"${CMAKE_SOURCE_DIR}/src\" \"${CMAKE_SOURCE_DIR}/src/ports/postgres\"") |
| |
| # 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(DOXYGEN_OUTPUT_DEVELOPER "${CMAKE_CURRENT_BINARY_DIR}/developer" CACHE PATH |
| "Base path where the documentation generated by Doxygen will be put (abolsute or relative to \${CMAKE_BINARY_DIR}/doc/etc)" |
| ) |
| set(DOXYGEN_OUTPUT_USER "${CMAKE_CURRENT_BINARY_DIR}/user" CACHE PATH |
| "Base path where the documentation generated by Doxygen will be put (abolsute or relative to \${CMAKE_BINARY_DIR}/doc/etc)" |
| ) |
| set(DOXYGEN_HTML_OUTPUT html CACHE STRING |
| "Path (relative to \${DOXYGEN_OUTPUT_<config>} where HTML docs will be put." |
| ) |
| |
| # -- Set macros for SQL/Python files ------------------------------------------- |
| |
| set(PORT_UC "DOXYGEN") |
| set(DBMS "doxygen") |
| set(DBMS_UC "${PORT_UC}") |
| set(${DBMS_UC}_VERSION_STRING "0.0.0") |
| set(${DBMS_UC}_VERSION_MAJOR "0") |
| set(${DBMS_UC}_VERSION_MINOR "0") |
| set(${DBMS_UC}_VERSION_PATCH "0") |
| set(${DBMS_UC}_ARCHITECTURE "all") |
| set(DBMS_FEATURES "__HAS_ORDERED_AGGREGATES__") |
| define_m4_macros(M4_DEFINES_CMD_LINE M4_DEFINES_CODE ${DBMS_FEATURES}) |
| |
| |
| # -- 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 ------------------------------------------------------------ |
| # NOTE: Below has been disabled since Mathjax CDN is used to obtain the |
| # appropriate files |
| |
| # add_custom_target(update_mathjax |
| # COMMAND bin/update_mathjax.sh |
| # WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" |
| # ) |
| # if(DOXYGEN_USE_MATHJAX) |
| # set(_MATHJAX_DEPENDENCY_USER update_mathjax) |
| # endif(DOXYGEN_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'\$") |
| |
| # Doxygen 1.7.5 does not accept absolute or relative paths for |
| # CITE_BIB_FILES (this is a bug). We therefore need to copy all bib files |
| # into "${CMAKE_BINARY_DIR}/doc/etc". |
| add_custom_command( |
| OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/etc/literature.bib" |
| COMMAND ${CMAKE_COMMAND} -E copy |
| "${CMAKE_SOURCE_DIR}/doc/literature.bib" |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/literature.bib" |
| COMMENT "Copying bibliography into doxygen configuration directory." |
| ) |
| |
| add_custom_target(doc |
| COMMAND ${DOXYGEN_EXECUTABLE} user.doxyfile | ${_DOXYGEN_UNNEEDED_WARNINGS_FILTER} |
| WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/etc" |
| DEPENDS doxysql ${_MATHJAX_DEPENDENCY_USER} |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/literature.bib" |
| COMMENT "Generating user-level documentation..." |
| VERBATIM |
| ) |
| |
| add_custom_target(devdoc |
| COMMAND ${DOXYGEN_EXECUTABLE} developer.doxyfile | ${_DOXYGEN_UNNEEDED_WARNINGS_FILTER} |
| WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/etc" |
| DEPENDS doxysql update_mathjax |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/literature.bib" |
| COMMENT "Generating developer documentation..." |
| VERBATIM |
| ) |
| |
| # Copy any javascript file that is applied to the html files generated by doxygen |
| add_custom_command(TARGET doc POST_BUILD |
| COMMAND ${CMAKE_COMMAND} -E copy |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/eigen_navtree_hacks.js" |
| "${DOXYGEN_OUTPUT_USER}/${DOXYGEN_HTML_OUTPUT}" |
| ) |
| |
| # Copy any javascript file that is applied to the html files generated by doxygen |
| add_custom_command(TARGET devdoc POST_BUILD |
| COMMAND ${CMAKE_COMMAND} -E copy |
| "${CMAKE_CURRENT_BINARY_DIR}/etc/eigen_navtree_hacks.js" |
| "${DOXYGEN_OUTPUT_DEVELOPER}/${DOXYGEN_HTML_OUTPUT}" |
| ) |
| |
| # -- 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) |
| |
| # -- Add subdirectories -------------------------------------------------------- |
| |
| add_subdirectory(design) |