Skip to content

Commit 532b7f9

Browse files
committed
CMake: Support for XML documentation
Add new function generate_doc_source to python_callouts.cmake Update Test extension to use generate_doc_source function and include generated file in the build. Cleanup: Fix godotcpp.py imports after rebase Pre-Commit hook sorted python imports in doc_source_generator.py - replace ${CMAKE_CURRENT_SOURCE_DIR} with ${godot-cpp_SOURCE_DIR} when referencing current working directory and script locations when invoking python scripts.
1 parent 4d1237f commit 532b7f9

File tree

4 files changed

+49
-9
lines changed

4 files changed

+49
-9
lines changed

cmake/python_callouts.cmake

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@ Its usage is listed as:
1818
]]
1919
function( build_profile_generate_trimmed_api BUILD_PROFILE INPUT_JSON OUTPUT_JSON )
2020
execute_process(
21-
COMMAND "${Python3_EXECUTABLE}" "build_profile.py" "${BUILD_PROFILE}" "${INPUT_JSON}" "${OUTPUT_JSON}"
22-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
21+
COMMAND "${Python3_EXECUTABLE}"
22+
"${godot-cpp_SOURCE_DIR}/build_profile.py"
23+
"${BUILD_PROFILE}"
24+
"${INPUT_JSON}"
25+
"${OUTPUT_JSON}"
26+
WORKING_DIRECTORY ${godot-cpp_SOURCE_DIR}
2327
)
2428
endfunction( )
2529

@@ -45,7 +49,7 @@ function( binding_generator_get_file_list OUT_VAR_NAME API_FILEPATH OUTPUT_DIR )
4549
string( REGEX REPLACE "\n *" " " PYTHON_SCRIPT "${PYTHON_SCRIPT}" )
4650

4751
execute_process( COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
48-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
52+
WORKING_DIRECTORY "${godot-cpp_SOURCE_DIR}"
4953
OUTPUT_VARIABLE GENERATED_FILES_LIST
5054
OUTPUT_STRIP_TRAILING_WHITESPACE
5155
)
@@ -91,9 +95,33 @@ function( binding_generator_generate_bindings API_FILE USE_TEMPLATE_GET_NODE, BI
9195
add_custom_command(OUTPUT ${GENERATED_FILES_LIST}
9296
COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
9397
VERBATIM
94-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
98+
WORKING_DIRECTORY ${godot-cpp_SOURCE_DIR}
9599
MAIN_DEPENDENCY ${GODOT_GDEXTENSION_API_FILE}
96-
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/binding_generator.py
100+
DEPENDS ${godot-cpp_SOURCE_DIR}/binding_generator.py
97101
COMMENT "Generating bindings"
98102
)
99103
endfunction( )
104+
105+
#[[ Generate doc_data.cpp
106+
The documentation displayed in the Godot editor is compiled into the extension.
107+
It takes a list of XML source files, and transforms them into a cpp file that
108+
is added to the sources list.]]
109+
function( generate_doc_source OUTPUT_PATH XML_SOURCES )
110+
# Transform the CMake list into the content of a python list
111+
# quote and join to form the interior of a python array
112+
list( TRANSFORM XML_SOURCES REPLACE "(.*\.xml)" "'\\1'" )
113+
list( JOIN XML_SOURCES "," XML_SOURCES )
114+
115+
# Python one-liner to run our command
116+
# lists in CMake are just strings delimited by ';', so this works.
117+
set( PYTHON_SCRIPT "from doc_source_generator import generate_doc_source"
118+
"generate_doc_source( '${OUTPUT_PATH}', [${XML_SOURCES}] )" )
119+
120+
add_custom_command( OUTPUT "${OUTPUT_PATH}"
121+
COMMAND "${Python3_EXECUTABLE}" "-c" "${PYTHON_SCRIPT}"
122+
VERBATIM
123+
WORKING_DIRECTORY "${godot-cpp_SOURCE_DIR}"
124+
DEPENDS "${godot-cpp_SOURCE_DIR}/doc_source_generator.py"
125+
COMMENT "Generating Doc Data"
126+
)
127+
endfunction()

doc_source_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

3-
import os
43
import glob
4+
import os
55
import zlib
66

77

test/CMakeLists.txt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,19 @@ Integration Testing
33
-------------------
44
55
The Test target used to validate changes in the GitHub CI.
6-
76
]=======================================================================]
87

98
message( STATUS "Testing Integration targets are enabled.")
109

10+
# Generate Doc Data
11+
file( GLOB_RECURSE DOC_XML
12+
LIST_DIRECTORIES NO
13+
CONFIGURE_DEPENDS
14+
"${CMAKE_CURRENT_SOURCE_DIR}/doc_classes/*.xml" )
15+
16+
set( DOC_DATA_SOURCE "${CMAKE_CURRENT_BINARY_DIR}/src/gen/doc_data.gen.cpp" )
17+
generate_doc_source( "${DOC_DATA_SOURCE}" "${DOC_XML}" )
18+
1119
foreach( TARGET_ALIAS template_debug template_release editor )
1220
set( TARGET_NAME "godot-cpp.test.${TARGET_ALIAS}" )
1321
set( LINK_TARGET "godot-cpp::${TARGET_ALIAS}" )
@@ -23,6 +31,11 @@ foreach( TARGET_ALIAS template_debug template_release editor )
2331
src/tests.h
2432
)
2533

34+
# conditionally add doc data to compile output
35+
if( TARGET_ALIAS MATCHES "editor|template_debug" )
36+
target_sources( ${TARGET_NAME} PRIVATE "${DOC_DATA_SOURCE}" )
37+
endif( )
38+
2639
target_link_libraries( ${TARGET_NAME} PRIVATE ${LINK_TARGET} )
2740

2841
### Get useful properties of the library

tools/godotcpp.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@
1212

1313
from binding_generator import _generate_bindings, _get_file_list, get_file_list
1414
from build_profile import generate_trimmed_api
15-
16-
from binding_generator import scons_generate_bindings, scons_emit_files
1715
from doc_source_generator import scons_generate_doc_source
1816

17+
1918
def add_sources(sources, dir, extension):
2019
for f in os.listdir(dir):
2120
if f.endswith("." + extension):

0 commit comments

Comments
 (0)