@@ -29,46 +29,44 @@ if("${CMAKE_PROJECT_NAME}" STREQUAL "Project")
2929endif ()
3030
3131if (PIDUINO_WITH_DOXYGEN_DOC)
32-
3332 find_package (Doxygen REQUIRED)
34- set (DOXYGEN_README ${PROJECT_SOURCE_DIR} /README.md )
35- set (DOXYGEN_FILE ${CMAKE_BINARY_DIR} /Doxyfile)
36- set (DOXYGEN_MAINPAGE ${CMAKE_BINARY_DIR} /main_page.dox)
37-
38- set (DOXYGEN_INPUT_LIST
39- ${PROJECT_SOURCE_DIR} /include /piduino/*.h
40- )
41-
42- set (DOXYGEN_INPUT "${CMAKE_BINARY_DIR} /main_page.dox" )
43- foreach (item ${DOXYGEN_INPUT_LIST} )
44- get_filename_component (item_dir ${item} DIRECTORY )
45- string (APPEND DOXYGEN_INPUT " ${item_dir} " )
46- endforeach (item ${DOXYGEN_INPUT_LIST} )
33+ find_program (SED_EXECUTABLE sed)
4734
48- #message("DOXYGEN_INPUT=${DOXYGEN_INPUT}")
35+ if (NOT SED_EXECUTABLE)
36+ message (FATAL_ERROR "sed is required but was not found. Please install sed." )
37+ endif ()
4938
50- configure_file (Doxyfile.in ${CMAKE_BINARY_DIR} /Doxyfile @ONLY)
51- configure_file (build_main_page.sh.in ${CMAKE_BINARY_DIR} /build_main_page.sh @ONLY)
39+ set (DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR} /Doxyfile)
40+ set (DOXYFILE_BUILD ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile)
41+ # You must set the following variables to point to your project's files
42+ set (DOXY_README "${PROJECT_SOURCE_DIR} /README.md" )
43+ set (DOXY_INPUT ${DOXY_README} ${PROJECT_SOURCE_DIR} /include /piduino)
44+ set (DOXY_IMAGE_PATH "${PROJECT_SOURCE_DIR} /doc/images" )
45+ set (DOXY_PROJECT_LOGO "${PROJECT_SOURCE_DIR} /doc/images/PiduinoLogoSmall.png" )
46+ set (DOXY_EXAMPLE_PATH "${PROJECT_SOURCE_DIR} /examples" )
5247
53- add_custom_target (main_page.dox
54- COMMAND ${CMAKE_COMMAND} -E echo_append "Building API Documentation Main Page..."
55- COMMAND sh ${CMAKE_BINARY_DIR} /build_main_page.sh > /dev/null
56- COMMAND ${CMAKE_COMMAND} -E echo "Done."
57- DEPENDS main_page_header.dox main_page_footer.dox ${PROJECT_SOURCE_DIR} /README.md
58- )
48+ # replace placeholders in the Doxyfile for local generation
49+ add_custom_command (
50+ OUTPUT ${DOXYFILE_BUILD}
51+ COMMAND ${CMAKE_COMMAND} -E copy ${DOXYFILE_IN} ${DOXYFILE_BUILD}
52+ COMMAND ${SED_EXECUTABLE} -i 's|^HTML_OUTPUT[[:space:]]*=.*|HTML_OUTPUT = ${CMAKE_CURRENT_BINARY_DIR} /html|' ${DOXYFILE_BUILD}
53+ COMMAND ${SED_EXECUTABLE} -i 's|^INPUT [[:space:]]*=.*|INPUT = ${DOXY_INPUT} |' ${DOXYFILE_BUILD}
54+ COMMAND ${SED_EXECUTABLE} -i 's|^IMAGE_PATH[[:space:]]*=.*|IMAGE_PATH = ${DOXY_IMAGE_PATH} |' ${DOXYFILE_BUILD}
55+ COMMAND ${SED_EXECUTABLE} -i 's|^PROJECT_LOGO[[:space:]]*=.*|PROJECT_LOGO = ${DOXY_PROJECT_LOGO} |' ${DOXYFILE_BUILD}
56+ COMMAND ${SED_EXECUTABLE} -i 's|^EXAMPLE_PATH[[:space:]]*=.*|EXAMPLE_PATH = ${DOXY_EXAMPLE_PATH} |' ${DOXYFILE_BUILD}
57+ COMMAND ${SED_EXECUTABLE} -i 's|^USE_MDFILE_AS_MAINPAGE[[:space:]]*=.*|USE_MDFILE_AS_MAINPAGE = ${DOXY_README} |' ${DOXYFILE_BUILD}
58+ DEPENDS ${DOXYFILE_IN}
59+ COMMENT "Preparing Doxyfile for local documentation generation"
60+ )
5961
60- add_custom_target (html
61- COMMAND ${CMAKE_COMMAND} -E echo_append "Building API HTML Documentation..."
62- COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_FILE} > /dev/null
63- COMMAND ${CMAKE_COMMAND} -E echo "Done."
64- DEPENDS main_page.dox DoxygenLayout.xml Doxyfile.in ${DOXYGEN_INPUT_LIST}
65- )
66-
67- add_custom_target (doc )
68- add_dependencies (doc main_page.dox html)
69-
70- #message("PIDUINO_INSTALL_DOC_DIR=${PIDUINO_INSTALL_DOC_DIR}")
62+ add_custom_target (doc
63+ COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_BUILD}
64+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
65+ DEPENDS ${DOXYFILE_BUILD}
66+ COMMENT "Generating API HTML documentation with Doxygen"
67+ VERBATIM
68+ )
7169
72- install (DIRECTORY ${CMAKE_BINARY_DIR } /html/
70+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR } /html/
7371 DESTINATION ${PIDUINO_INSTALL_DOC_DIR} /api-manual COMPONENT doc )
7472endif (PIDUINO_WITH_DOXYGEN_DOC)
0 commit comments