# ------------------------------------------------------------------------------ # 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_} 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 "${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 "${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)