comparison doc/CMakeLists.txt @ 253:c4da052c0def

core: goodbye doxygen
author David Demelier <markand@malikania.fr>
date Thu, 03 Dec 2020 09:06:52 +0100
parents f4dc208aa1e3
children cd5bdb995052
comparison
equal deleted inserted replaced
252:95c2c4a72410 253:c4da052c0def
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 # 17 #
18 18
19 project(doc) 19 project(doc)
20 20
21 find_package(Doxygen QUIET)
22 find_program(MKDOCS_EXE mkdocs DOC "Path to mkdocs") 21 find_program(MKDOCS_EXE mkdocs DOC "Path to mkdocs")
23 find_program(DOXYBOOK2_EXE doxybook2 DOC "Path to doxybook2")
24 find_program(SH_EXE sh DOC "Path to a POSIX shell") 22 find_program(SH_EXE sh DOC "Path to a POSIX shell")
25 23
26 if (DOXYGEN_FOUND AND MKDOCS_EXE AND DOXYBOOK2_EXE AND SH_EXE) 24 if (MKDOCS_EXE)
27 set(
28 DOXYGEN_SOURCES
29 libmlk-core
30 libmlk-ui
31 libmlk-rpg
32 ${doc_SOURCE_DIR}/doxygen/groups.c
33 )
34
35 set(
36 DOXYGEN_STRIP_FROM_PATH
37 ${CMAKE_SOURCE_DIR}/libmlk-core
38 ${CMAKE_SOURCE_DIR}/libmlk-ui
39 ${CMAKE_SOURCE_DIR}/libmlk-rpg
40 )
41 set( 25 set(
42 DOC_SOURCES 26 DOC_SOURCES
27 ${doc_SOURCE_DIR}/docs/about.md
28 ${doc_SOURCE_DIR}/docs/cmake/MolkoBuildAssets.md
29 ${doc_SOURCE_DIR}/docs/cmake/MolkoBuildMaps.md
30 ${doc_SOURCE_DIR}/docs/cmake/MolkoBuildTilesets.md
31 ${doc_SOURCE_DIR}/docs/cmake/MolkoBuildTranslations.md
32 ${doc_SOURCE_DIR}/docs/cmake/MolkoDefineExecutable.md
33 ${doc_SOURCE_DIR}/docs/cmake/MolkoDefineLibrary.md
34 ${doc_SOURCE_DIR}/docs/cmake/MolkoDefineTest.md
35 ${doc_SOURCE_DIR}/docs/cmake/MolkoSetBuildDirectories.md
36 ${doc_SOURCE_DIR}/docs/cmake/MolkoSetCompilerFlags.md
37 ${doc_SOURCE_DIR}/docs/dev/api/core/action.md
38 ${doc_SOURCE_DIR}/docs/dev/api/core/alloc.md
39 ${doc_SOURCE_DIR}/docs/dev/api/core/animation.md
40 ${doc_SOURCE_DIR}/docs/dev/api/core/clock.md
41 ${doc_SOURCE_DIR}/docs/dev/api/core/color.md
42 ${doc_SOURCE_DIR}/docs/dev/api/core/core.md
43 ${doc_SOURCE_DIR}/docs/dev/api/core/drawable.md
44 ${doc_SOURCE_DIR}/docs/dev/api/core/event.md
45 ${doc_SOURCE_DIR}/docs/dev/api/core/error.md
46 ${doc_SOURCE_DIR}/docs/dev/api/core/font.md
47 ${doc_SOURCE_DIR}/docs/dev/api/core/game.md
48 ${doc_SOURCE_DIR}/docs/dev/api/core/image.md
49 ${doc_SOURCE_DIR}/docs/dev/api/core/inhibit.md
50 ${doc_SOURCE_DIR}/docs/dev/api/core/key.md
51 ${doc_SOURCE_DIR}/docs/dev/api/core/maths.md
52 ${doc_SOURCE_DIR}/docs/dev/api/core/mouse.md
53 ${doc_SOURCE_DIR}/docs/dev/api/core/music.md
54 ${doc_SOURCE_DIR}/docs/dev/api/core/painter.md
55 ${doc_SOURCE_DIR}/docs/dev/api/core/panic.md
56 ${doc_SOURCE_DIR}/docs/dev/api/core/save.md
57 ${doc_SOURCE_DIR}/docs/dev/api/core/script.md
58 ${doc_SOURCE_DIR}/docs/dev/api/core/sound.md
59 ${doc_SOURCE_DIR}/docs/dev/api/core/sprite.md
60 ${doc_SOURCE_DIR}/docs/dev/api/core/state.md
61 ${doc_SOURCE_DIR}/docs/dev/api/core/sys.md
62 ${doc_SOURCE_DIR}/docs/dev/api/core/texture.md
63 ${doc_SOURCE_DIR}/docs/dev/api/core/trace.md
64 ${doc_SOURCE_DIR}/docs/dev/api/core/translate.md
65 ${doc_SOURCE_DIR}/docs/dev/api/core/util.md
66 ${doc_SOURCE_DIR}/docs/dev/api/core/window.md
67 ${doc_SOURCE_DIR}/docs/dev/error.md
68 ${doc_SOURCE_DIR}/docs/dev/faq.md
69 ${doc_SOURCE_DIR}/docs/dev/howto/01-init.md
70 ${doc_SOURCE_DIR}/docs/dev/ownership.md
71 ${doc_SOURCE_DIR}/docs/index.md
72 ${doc_SOURCE_DIR}/docs/install.md
43 ${doc_SOURCE_DIR}/docs/specs/map.md 73 ${doc_SOURCE_DIR}/docs/specs/map.md
44 ${doc_SOURCE_DIR}/docs/specs/tileset.md 74 ${doc_SOURCE_DIR}/docs/specs/tileset.md
45 ${doc_SOURCE_DIR}/docs/tools/bcc.md 75 ${doc_SOURCE_DIR}/docs/tools/bcc.md
46 ${doc_SOURCE_DIR}/docs/tools/map.md 76 ${doc_SOURCE_DIR}/docs/tools/map.md
47 ${doc_SOURCE_DIR}/docs/tools/tileset.md 77 ${doc_SOURCE_DIR}/docs/tools/tileset.md
48 ${doc_SOURCE_DIR}/docs/about.md
49 ${doc_SOURCE_DIR}/docs/index.md
50 ${doc_SOURCE_DIR}/docs/install.md
51 ${doc_SOURCE_DIR}/mkdocs.yml 78 ${doc_SOURCE_DIR}/mkdocs.yml
52 ) 79 )
53 80
54 # 1. Generate XML structure with Doxygen. 81 add_custom_target(
55 set(DOXYGEN_ALLOW_UNICODE_NAMES YES) 82 doc
56 set(DOXYGEN_AUTOLINK_SUPPORT NO) 83 VERBATIM
57 set(DOXYGEN_ENABLE_PREPROCESSING YES) 84 SOURCES ${DOC_SOURCES}
58 set(DOXYGEN_EXAMPLE_PATH examples) 85 WORKING_DIRECTORY ${doc_SOURCE_DIR}
59 set(DOXYGEN_EXCLUDE_PATTERNS *_p.h)
60 set(DOXYGEN_FILE_PATTERNS *.h)
61 set(DOXYGEN_GENERATE_HTML YES)
62 set(DOXYGEN_GENERATE_LATEX NO)
63 set(DOXYGEN_GENERATE_MAN NO)
64 set(DOXYGEN_GENERATE_XML YES)
65 set(DOXYGEN_HIDE_SCOPE_NAMES YES)
66 set(DOXYGEN_INPUT_ENCODING UTF-8)
67 set(DOXYGEN_MAX_INITIALIZER_LINES 0)
68 set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES)
69 set(DOXYGEN_OUTPUT_DIRECTORY doxygen)
70 set(DOXYGEN_PREDEFINED DOXYGEN)
71 set(DOXYGEN_QUIET YES)
72 set(DOXYGEN_RECURSIVE YES)
73 set(DOXYGEN_SHOW_GROUPED_MEMB_INC NO)
74 set(DOXYGEN_SHOW_INCLUDE_FILES NO)
75 set(DOXYGEN_SHOW_USED_FILES NO)
76 set(DOXYGEN_TAB_SIZE 8)
77 set(DOXYGEN_WARNINGS YES)
78
79 set(DOXYGEN_HTML_OUTPUT ${doc_BINARY_DIR}/doxygen/html)
80 set(DOXYGEN_XML_OUTPUT ${doc_BINARY_DIR}/doxygen/xml)
81
82 # 0. Create commands to prepare the output build directory.
83 list(
84 APPEND commands
85 COMMAND 86 COMMAND
86 ${CMAKE_COMMAND} -E make_directory ${doc_BINARY_DIR}/docs/cmake 87 ${MKDOCS_EXE} build -d ${doc_BINARY_DIR}/html
87 COMMAND
88 ${CMAKE_COMMAND} -E copy_directory
89 ${doc_SOURCE_DIR}/docs
90 ${doc_BINARY_DIR}/docs
91 COMMAND
92 ${CMAKE_COMMAND} -E copy
93 ${doc_SOURCE_DIR}/mkdocs.yml
94 ${doc_BINARY_DIR}
95 ) 88 )
96 89
97 # 1. Generate HTML/XML from doxygen. 90 add_custom_target(
98 doxygen_add_docs( 91 doc-serve
99 doc-doxygen 92 VERBATIM
100 ${DOXYGEN_SOURCES} 93 SOURCES ${DOC_SOURCES}
101 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" 94 WORKING_DIRECTORY ${doc_SOURCE_DIR}
95 COMMAND
96 ${MKDOCS_EXE} serve
102 ) 97 )
103 98
104 # 2. Use doxybook2 to convert doxygen XML to markdown files. 99 set_target_properties(doc doc-serve PROPERTIES FOLDER doc)
105 list( 100 source_group(TREE ${doc_SOURCE_DIR} FILES ${DOC_SOURCES})
106 APPEND commands 101 endif ()
107 COMMAND ${DOXYBOOK2_EXE} -q
108 -t ${doc_SOURCE_DIR}/templates
109 -i ${doc_BINARY_DIR}/doxygen/xml
110 -o ${doc_BINARY_DIR}/docs
111 -c ${doc_SOURCE_DIR}/doxybook.json
112 )
113 102
114 # 3. Convert our CMake macros into documentation. 103 if (SH_EXE)
104 # Our CMake macros are extracted from the source code itself.
115 set( 105 set(
116 MACROS 106 DOC_MACROS
117 ${cmake_SOURCE_DIR}/MolkoBuildAssets.cmake 107 ${cmake_SOURCE_DIR}/MolkoBuildAssets.cmake
118 ${cmake_SOURCE_DIR}/MolkoBuildMaps.cmake 108 ${cmake_SOURCE_DIR}/MolkoBuildMaps.cmake
119 ${cmake_SOURCE_DIR}/MolkoBuildTilesets.cmake 109 ${cmake_SOURCE_DIR}/MolkoBuildTilesets.cmake
120 ${cmake_SOURCE_DIR}/MolkoBuildTranslations.cmake 110 ${cmake_SOURCE_DIR}/MolkoBuildTranslations.cmake
121 ${cmake_SOURCE_DIR}/MolkoDefineExecutable.cmake 111 ${cmake_SOURCE_DIR}/MolkoDefineExecutable.cmake
123 ${cmake_SOURCE_DIR}/MolkoDefineTest.cmake 113 ${cmake_SOURCE_DIR}/MolkoDefineTest.cmake
124 ${cmake_SOURCE_DIR}/MolkoSetBuildDirectories.cmake 114 ${cmake_SOURCE_DIR}/MolkoSetBuildDirectories.cmake
125 ${cmake_SOURCE_DIR}/MolkoSetCompilerFlags.cmake 115 ${cmake_SOURCE_DIR}/MolkoSetCompilerFlags.cmake
126 ) 116 )
127 117
128 foreach (m ${MACROS}) 118 foreach (m ${DOC_MACROS})
129 get_filename_component(file ${m} NAME_WE) 119 get_filename_component(file ${m} NAME_WE)
130 set(output ${doc_BINARY_DIR}/docs/cmake/${file}.md) 120 set(output ${doc_SOURCE_DIR}/docs/cmake/${file}.md)
121
131 list( 122 list(
132 APPEND commands 123 APPEND commands
133 COMMAND ${SH_EXE} ${doc_SOURCE_DIR}/cmake-extract.sh ${m} > ${output} 124 COMMAND
125 ${SH_EXE} ${doc_SOURCE_DIR}/scripts/cmake-extract.sh ${m} > ${output}
134 ) 126 )
135 endforeach () 127 endforeach ()
136 128
137 # Create our final targets. 129 # Create a non-ALL target to update CMake documentation in the source
130 # tree.
138 add_custom_target( 131 add_custom_target(
139 doc 132 doc-cmake
140 VERBATIM 133 VERBATIM
141 DEPENDS doc-doxygen 134 DEPENDS ${doc_SOURCE_DIR}/scripts/cmake-extract.sh
142 SOURCES ${DOC_SOURCES} ${cmake_outputs} 135 COMMENT "Updating in-source ${doc_SOURCE_DIR}/docs/cmake"
143 WORKING_DIRECTORY ${doc_BINARY_DIR} 136 COMMAND ${commands}
144 ${commands}
145 COMMAND
146 ${MKDOCS_EXE} build -d ${doc_BINARY_DIR}/html
147 ) 137 )
148 138
149 add_custom_target( 139 set_target_properties(doc-cmake PROPERTIES FOLDER doc)
150 doc-serve
151 VERBATIM
152 DEPENDS doc-doxygen
153 SOURCES ${DOC_SOURCES}
154 WORKING_DIRECTORY ${doc_BINARY_DIR}
155 ${commands}
156 COMMAND
157 ${MKDOCS_EXE} serve
158 )
159
160 set_target_properties(doc doc-doxygen doc-serve PROPERTIES FOLDER doc)
161 source_group(TREE ${doc_SOURCE_DIR} FILES ${DOC_SOURCES})
162 endif () 140 endif ()