2020
2121project (doc )
2222
23- file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html)
23+ # Prepare souces in build directory
24+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html/_static)
25+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /edoc)
26+ file (COPY ${CMAKE_CURRENT_SOURCE_DIR} /src DESTINATION ${CMAKE_CURRENT_BINARY_DIR} /)
27+ file (COPY ${CMAKE_CURRENT_SOURCE_DIR} /edoc/edown_dep DESTINATION ${CMAKE_CURRENT_BINARY_DIR} /edoc/)
28+
29+ # Configure libAtomVM restucturedtext skeleton.
30+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /src/apidocs/libatomvm/files )
31+ file (GLOB SOURCE_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR} /src/libAtomVM/ ${CMAKE_SOURCE_DIR} /src/libAtomVM/*.c ${CMAKE_SOURCE_DIR} /src/libAtomVM/*.h)
32+ foreach (SOURCE_TARGET ${SOURCE_FILES} )
33+ set (SOURCE_FILE ${SOURCE_TARGET} )
34+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /src/apidocs/libatomvm/file.rst.in ${CMAKE_CURRENT_BINARY_DIR} /src/apidocs/libatomvm/files /${SOURCE_FILE} .rst @ONLY)
35+ endforeach (SOURCE_TARGET)
36+
37+ # Support for edoc -> markdown.
38+ add_custom_target (edown-escript
39+ COMMAND rebar3 get -deps co edown edoc && rebar3 escriptize edown edoc
40+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /edoc/edown_dep
41+ COMMENT "Preparing edown escript" VERBATIM
42+ )
43+
44+ # Get branch name
45+ execute_process (COMMAND git branch --show-current OUTPUT_VARIABLE BRANCH_NAME OUTPUT_STRIP_TRAILING_WHITESPACE)
2446
2547##
2648## Erlang API documentation
2749##
2850file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html/apidocs/erlang)
51+ file (COPY ${CMAKE_SOURCE_DIR} /libs/include DESTINATION ${CMAKE_CURRENT_BINARY_DIR} /edoc/)
52+
2953foreach (ERLANG_LIB estdlib eavmlib alisp etest)
30- file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html/apidocs/erlang/${ERLANG_LIB} )
54+ set (ERL_LIB ${ERLANG_LIB} ) # to allow passing ERL_LIB to gendoc.erl.in
55+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /edoc/gendoc.erl.in ${CMAKE_CURRENT_BINARY_DIR} /edoc/${ERLANG_LIB} /gendoc.erl @ONLY)
56+ file (COPY ${CMAKE_SOURCE_DIR} /libs/${ERLANG_LIB} DESTINATION ${CMAKE_CURRENT_BINARY_DIR} /edoc/)
3157 add_custom_target (edoc-${ERLANG_LIB}
32- COMMAND escript ${CMAKE_SOURCE_DIR} /tools/ doc / gendoc.erl ${ERLANG_LIB} ${CMAKE_SOURCE_DIR} /libs/ ${ERLANG_LIB} / src ${CMAKE_CURRENT_BINARY_DIR} /html /apidocs/erlang/${ERLANG_LIB}
33- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
34- COMMENT "Generating edoc for ${ERLANG_LIB} "
35- VERBATIM
58+ COMMAND escript gendoc.erl ${ERLANG_LIB} src ${CMAKE_CURRENT_BINARY_DIR} /src /apidocs/erlang/${ERLANG_LIB}
59+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /edoc/ ${ERLANG_LIB}
60+ COMMENT "Generating edoc markdown for ${ERLANG_LIB} " VERBATIM
61+ DEPENDS edown-escript
3662 )
3763 set (ERLANG_EDOC_TARGETS ${ERLANG_EDOC_TARGETS} edoc-${ERLANG_LIB} )
3864endforeach (ERLANG_LIB)
3965
40- ## TODO Uncomment when we incorporate Graphviz DOT files into documentation
4166# ##
4267# ## SVG files (from Graphviz dot files)
4368# ##
44- # set(DOT_FILES
45- # globalcontext-processes
46- # globalcontext-atoms
47- # globalcontext-modules
48- # )
49- # find_package(Graphviz)
50- # if(GRAPHVIZ_FOUND)
51- # message("Graphiz found")
52- # file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/svg)
53- # foreach(DOT_FILE ${DOT_FILES})
54- # add_custom_command(
55- # OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/svg/${DOT_FILE}.svg
56- # COMMAND dot -Tsvg ${CMAKE_CURRENT_SOURCE_DIR}/graphviz/${DOT_FILE}.dot > ${CMAKE_CURRENT_BINARY_DIR}/html/svg/${DOT_FILE}.svg
57- # DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/graphviz/${DOT_FILE}.dot
58- # WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
59- # COMMENT "Generating SVG for ${DOT_FILE}.dot"
60- # VERBATIM
61- # )
62- # set(ERLANG_DOTFILE_TARGETS ${ERLANG_DOTFILE_TARGETS} ${CMAKE_CURRENT_BINARY_DIR}/html/svg/${DOT_FILE}.svg)
63- # endforeach()
64- # else()
65- # message("WARNING: Graphviz not found. Some images may be missing in generated documentation.")
66- # endif()
67-
68- ##
69- ## Doxygen (C) API documentation
70- ##
71- find_package (Doxygen)
72- if (DOXYGEN_FOUND)
73- configure_file (${CMAKE_CURRENT_SOURCE_DIR} /Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile @ONLY)
74- file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html/apidocs/atomvmlib)
75- add_custom_target (doxygen-html # ALL
76- ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile
77- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
78- COMMENT "Generating documentation" VERBATIM
79- DEPENDS ${ERLANG_EDOC_TARGETS} ${ERLANG_DOTFILE_TARGETS}
80- )
69+ set (DOT_FILES
70+ globalcontext-processes
71+ globalcontext-atoms
72+ globalcontext-modules
73+ )
74+ find_package (Graphviz)
75+ if (GRAPHVIZ_FOUND)
76+ message ("Graphiz found" )
77+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /src/_static)
78+ foreach (DOT_FILE ${DOT_FILES} )
79+ add_custom_command (
80+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /src/_static/${DOT_FILE} .svg
81+ COMMAND dot -Tsvg ${CMAKE_CURRENT_SOURCE_DIR} /graphviz/${DOT_FILE} .dot > ${CMAKE_CURRENT_BINARY_DIR} /src/_static/${DOT_FILE} .svg
82+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /graphviz/${DOT_FILE} .dot
83+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
84+ COMMENT "Generating SVG for ${DOT_FILE} .dot" VERBATIM
85+ )
86+ set (ERLANG_DOTFILE_TARGETS ${ERLANG_DOTFILE_TARGETS} ${CMAKE_CURRENT_BINARY_DIR} /src/_static/${DOT_FILE} .svg)
87+ endforeach ()
8188else ()
82- message ("Unable to find doxygen -- no documentation will be generated" )
89+ message ("WARNING: Graphviz not found. Some images may be missing in generated documentation. " )
8390endif ()
8491
8592##
@@ -92,31 +99,86 @@ if(SPHINX_FOUND)
9299
93100 message ("Sphinx found: ${SPHINX_BUILD_EXECUTABLE} " )
94101 configure_file (${CMAKE_CURRENT_SOURCE_DIR} /conf.py.in ${CMAKE_CURRENT_BINARY_DIR} /conf.py @ONLY)
102+ configure_file (${CMAKE_CURRENT_SOURCE_DIR} /Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile @ONLY)
103+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html/apidocs/libatomvm)
95104 add_custom_target (sphinx-html
96- ${SPHINX_BUILD_EXECUTABLE} -b html -c ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR } /src ${CMAKE_CURRENT_BINARY_DIR} /html
105+ ${SPHINX_BUILD_EXECUTABLE} -b html -c ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR } /src/ ${CMAKE_CURRENT_BINARY_DIR} /html/
97106 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
98107 COMMENT "Generating Sphinx HTML documentation" VERBATIM
99- DEPENDS ${ERLANG_DOTFILE_TARGETS}
108+ DEPENDS ${ERLANG_DOTFILE_TARGETS} ${ERLANG_EDOC_TARGETS}
100109 )
101110
102111 add_custom_target (sphinx-pdf
103- ${SPHINX_BUILD_EXECUTABLE} -b rinoh -c ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR } /src ${CMAKE_CURRENT_BINARY_DIR} /html/ pdf
112+ ${SPHINX_BUILD_EXECUTABLE} -D exclude_patterns=**/c_api_docs.rst,**/libatomvm/** - b rinoh -c ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR } /src/ ${CMAKE_CURRENT_BINARY_DIR} /pdf/
104113 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
105114 COMMENT "Generating Sphinx PDF documentation" VERBATIM
106- DEPENDS ${ERLANG_DOTFILE_TARGETS} ${CMAKE_CURRENT_BINARY_DIR} /conf.py
115+ DEPENDS ${ERLANG_DOTFILE_TARGETS} ${ERLANG_EDOC_TARGETS} ${ CMAKE_CURRENT_BINARY_DIR} /conf.py
107116 )
108117
109118 add_custom_target (sphinx-epub
110- ${SPHINX_BUILD_EXECUTABLE} -b epub -c ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR } /src ${CMAKE_CURRENT_BINARY_DIR} /html/ epub
119+ ${SPHINX_BUILD_EXECUTABLE} -D exclude_patterns=**/c_api_docs.rst,**/libatomvm/** - b epub -c ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR } /src/ ${CMAKE_CURRENT_BINARY_DIR} /epub/
111120 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
112121 COMMENT "Generating Sphinx PDF documentation" VERBATIM
113- DEPENDS ${ERLANG_DOTFILE_TARGETS}
122+ DEPENDS ${ERLANG_DOTFILE_TARGETS} ${ERLANG_EDOC_TARGETS} ${CMAKE_CURRENT_BINARY_DIR} /conf.py
114123 )
124+
125+ ## This target is intended for CI `Publish Docs` workflow.
126+ if ($ENV{CI} )
127+ add_custom_target (GitHub_CI_Publish_Docs
128+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR} /html /home/runner/work/AtomVM/AtomVM/www/doc /${BRANCH_NAME}
129+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
130+ COMMENT "Copying html docs to publish location /home/runner/work/AtomVM/AtomVM/www/doc/${BRANCH_NAME} ." VERBATIM
131+ DEPENDS doc /home/runner/work/AtomVM/AtomVM/www/doc $ENV{BRANCH_NAME}
132+ )
133+ endif ()
134+
115135else ()
116136 message ("Unable to find Sphinx -- no Sphinx documentation will be generated" )
117137endif ()
118138
139+ ## Fix URLs and change title to include "library" instead of "application"
140+ foreach (LIBAVM_ERL_LIB estdlib eavmlib alisp etest)
141+ add_custom_command (TARGET edoc-${LIBAVM_ERL_LIB}
142+ POST_BUILD
143+ COMMAND sed -i -e "s/\. md/\. html/g" -e "s/application/library/g" ${CMAKE_CURRENT_BINARY_DIR} /src/apidocs/erlang/${LIBAVM_ERL_LIB} /README.md
144+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
145+ COMMENT "Fixing html link locations for ${LIBAVM_ERL_LIB} ." VERBATIM
146+ )
147+ endforeach (LIBAVM_ERL_LIB)
119148
120149add_custom_target (doc #ALL
121- DEPENDS ${ERLANG_EDOC_TARGETS} doxygen-html sphinx-html sphinx-pdf sphinx-epub
150+ DEPENDS ${ERLANG_EDOC_TARGETS} sphinx-html sphinx-pdf sphinx-epub
122151)
152+
153+ if (TARGET GitHub_CI_Publish_Docs)
154+
155+ add_custom_command (
156+ COMMAND mkdir -p /home/runner/work/AtomVM/AtomVM/www/doc
157+ OUTPUT /home/runner/work/AtomVM/AtomVM/www/doc
158+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
159+ COMMENT "Prepare publish directory structure." VERBATIM
160+ )
161+
162+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html/pdf)
163+ add_custom_command (TARGET sphinx-pdf POST_BUILD
164+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR} /pdf/AtomVM-${BRANCH_NAME} .pdf ${CMAKE_CURRENT_BINARY_DIR} /html/pdf/
165+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /pdf
166+ COMMENT "Copying pdf to download location" VERBATIM
167+ DEPENDS $ENV{BRANCH_NAME}
168+ )
169+
170+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html/epub)
171+ add_custom_command (TARGET sphinx-epub POST_BUILD
172+ COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR} /epub/AtomVM-${BRANCH_NAME} .epub" "${CMAKE_CURRENT_BINARY_DIR} /html/epub/"
173+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /epub
174+ COMMENT "Copying epub to download location." VERBATIM
175+ DEPENDS $ENV{BRANCH_NAME}
176+ )
177+
178+ add_custom_command (TARGET sphinx-html POST_BUILD
179+ COMMAND touch .nojekyll
180+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /html
181+ COMMENT "Creating .nojekyll to allow style content on GitHub Pages." VERBATIM
182+ )
183+
184+ endif ()
0 commit comments