#[===================================================================[ docs target (optional) #]===================================================================] # Early return if the `docs` directory is missing, # e.g. when we are building a Conan package. if(NOT EXISTS docs) return() endif() if (tests) find_package (Doxygen) if (NOT TARGET Doxygen::doxygen) message (STATUS "doxygen executable not found -- skipping docs target") return () endif () set (doxygen_output_directory "${CMAKE_BINARY_DIR}/docs") set (doxygen_include_path "${CMAKE_CURRENT_SOURCE_DIR}/src") set (doxygen_index_file "${doxygen_output_directory}/html/index.html") set (doxyfile "${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile") file (GLOB_RECURSE doxygen_input docs/*.md src/ripple/*.h src/ripple/*.cpp src/ripple/*.md src/test/*.h src/test/*.md Builds/*/README.md) list (APPEND doxygen_input README.md RELEASENOTES.md src/README.md) set (dependencies "${doxygen_input}" "${doxyfile}") function (verbose_find_path variable name) # find_path sets a CACHE variable, so don't try using a "local" variable. find_path (${variable} "${name}" ${ARGN}) if (NOT ${variable}) message (NOTICE "could not find ${name}") else () message (STATUS "found ${name}: ${${variable}}/${name}") endif () endfunction () verbose_find_path (doxygen_plantuml_jar_path plantuml.jar PATH_SUFFIXES share/plantuml) verbose_find_path (doxygen_dot_path dot) # https://en.cppreference.com/w/Cppreference:Archives # https://stackoverflow.com/questions/60822559/how-to-move-a-file-download-from-configure-step-to-build-step set (download_script "${CMAKE_BINARY_DIR}/docs/download-cppreference.cmake") file (WRITE "${download_script}" "file (DOWNLOAD \ http://upload.cppreference.com/mwiki/images/b/b2/html_book_20190607.zip \ ${CMAKE_BINARY_DIR}/docs/cppreference.zip \ EXPECTED_HASH MD5=82b3a612d7d35a83e3cb1195a63689ab \ )\n \ execute_process ( \ COMMAND \"${CMAKE_COMMAND}\" -E tar -xf cppreference.zip \ )\n" ) set (tagfile "${CMAKE_BINARY_DIR}/docs/cppreference-doxygen-web.tag.xml") add_custom_command ( OUTPUT "${tagfile}" COMMAND "${CMAKE_COMMAND}" -P "${download_script}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/docs" ) set (doxygen_tagfiles "${tagfile}=http://en.cppreference.com/w/") add_custom_command ( OUTPUT "${doxygen_index_file}" COMMAND "${CMAKE_COMMAND}" -E env "DOXYGEN_OUTPUT_DIRECTORY=${doxygen_output_directory}" "DOXYGEN_INCLUDE_PATH=${doxygen_include_path}" "DOXYGEN_TAGFILES=${doxygen_tagfiles}" "DOXYGEN_PLANTUML_JAR_PATH=${doxygen_plantuml_jar_path}" "DOXYGEN_DOT_PATH=${doxygen_dot_path}" "${DOXYGEN_EXECUTABLE}" "${doxyfile}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" DEPENDS "${dependencies}" "${tagfile}") add_custom_target (docs DEPENDS "${doxygen_index_file}" SOURCES "${dependencies}") endif ()