@@ -5,9 +5,9 @@ cmake_minimum_required(VERSION 3.12.4)
55find_package (Python3 3.10 REQUIRED)
66
77if (CMAKE_SCRIPT_MODE_FILE )
8- # Ran as configure script
8+ # Ran as configure script
99
10- set (PY_CONFIGURE_SCRIPT "REGISTER_TYPES_CPP_IN = \"\"\"
10+ set (PY_CONFIGURE_SCRIPT "REGISTER_TYPES_CPP_IN = \"\"\"
1111#include <gdextension_interface.h>
1212
1313#include <godot_cpp/core/class_db.hpp>
@@ -132,25 +132,25 @@ try:
132132 h_path = argv[2]
133133 gdext_path = argv[3]
134134except:
135- ABOUT = \\
136- '''
137- ERROR: Not enough arguments.
138- Needed arguments (<argument> - example):
139-
140- <library_name> (`my_library_name`)
141- <cpp_file_path> (`src/register_types.cpp`)
142- <header_file_path> (`include/register_types.h`)
143- <gdextension_file_path> (`project/my_library.gdextension`)
144- '''
145- print(ABOUT , file=sys.stderr)
135+ print(
136+ '',
137+ ' ERROR: Not enough arguments.',
138+ ' Needed arguments (<argument> - example):',
139+ '',
140+ ' <library_name> (`my_library_name`)',
141+ ' <cpp_file_path> (`src/register_types.cpp`)',
142+ ' <header_file_path> (`include/register_types.h`)',
143+ ' <gdextension_file_path> (`project/my_library.gdextension`)',
144+ '',
145+ sep=' \\ n' , file=sys.stderr)
146146 exit(1)
147147
148- prompt = f'''These files will be affected:
149- {'(New) ' if not os.path.exists(gdext_path) else '(Override)'} {gdext_path}
150- {' (New) ' if not os.path.exists(cpp_path ) else ' (Override)' } {cpp_path}
151- {' (New) ' if not os.path.exists(h_path ) else ' (Override)' } {h_path}
152- '''
153- print(prompt )
148+ print(
149+ 'These files will be affected:',
150+ f'{ \" (New) \" if not os.path.exists(gdext_path ) else \" (Override)\" } {gdext_path}',
151+ f'{ \" (New) \" if not os.path.exists(cpp_path ) else \" (Override)\" } {cpp_path}',
152+ f'{ \" (New) \" if not os.path.exists(h_path) else \" (Override) \" } {h_path}',
153+ sep=' \\ n' )
154154while True:
155155 inp = input('Are you sure? (Y/N) ')
156156 if inp == '':
@@ -186,18 +186,18 @@ exit(0)
186186
187187 set (SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR} /.configure_script.py.tmp" )
188188 file (WRITE ${SCRIPT_PATH} "${PY_CONFIGURE_SCRIPT} " )
189- execute_process (
190- COMMAND
191- "${Python3_EXECUTABLE} "
189+ execute_process (
190+ COMMAND
191+ "${Python3_EXECUTABLE} "
192192 "${SCRIPT_PATH} "
193193 ${ARGS}
194- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
195- )
194+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
195+ )
196196 file (REMOVE ${SCRIPT_PATH} )
197197
198198else ()
199199
200- set (CPPSCRIPT_BODY_H "#ifndef @H_GUARD@
200+ set (CPPSCRIPT_BODY_H "#ifndef @H_GUARD@
201201#define @H_GUARD@
202202#include \" cppscript_defs.h\"
203203#include \" properties.gen.h\"
@@ -1536,94 +1536,94 @@ if __name__ == \"__main__\":
15361536)
15371537
15381538
1539- #TODO: make it work in parallel
1540- function (create_cppscript_target)
1541- set (options AUTO_METHODS)
1542- set (oneValueArgs HEADER_NAME HEADERS_DIR GEN_DIR OUTPUT_SOURCES)
1543- set (multiValueArgs HEADERS_LIST COMPILE_DEFS INCLUDE_PATHS)
1544- cmake_parse_arguments (CPPS "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
1545-
1546- # Handle required args and empty/NOTFOUND lists
1547- if (NOT CPPS_HEADER_NAME)
1548- message (FATAL_ERROR "Header name is required argument (for example: `HEADER_NAME project_name.h`)" )
1549- endif ()
1550-
1551- if (NOT CPPS_HEADERS_DIR)
1552- message (FATAL_ERROR "Headers directory is required argument (for example: `HEADERS_DIR \$ {CMAKE_CURRENT_SOURCE_DIR}/include`)" )
1553- endif ()
1554-
1555- if (NOT CPPS_OUTPUT_SOURCES)
1556- message (FATAL_ERROR "Output sources is required argument (for example: `OUTPUT_SOURCES GEN_SOURCES`)" )
1557- endif ()
1558-
1559- if (NOT CPPS_GEN_DIR)
1560- set (CPPS_GEN_DIR "${CMAKE_CURRENT_BINARY_DIR} /.cppscript.gen" )
1561- endif ()
1562-
1563- if (NOT CPPS_HEADERS_LIST)
1564- set (CPPS_HEADERS_LIST "" )
1565- endif ()
1566-
1567- if (NOT CPPS_COMPILE_DEFS)
1568- set (CPPS_COMPILE_DEFS "" )
1569- endif ()
1570-
1571- if (NOT CPPS_INCLUDE_PATHS)
1572- set (CPPS_INCLUDE_PATHS "" )
1573- endif ()
1574-
1575- if (CPPS_AUTO_METHODS)
1576- set (AUTO_METHODS_STR "True" )
1577- else ()
1578- set (AUTO_METHODS_STR "False" )
1579- endif ()
1580-
1581- # Generate python script and headers
1582- set (GODOT_CPPSCRIPT_PY_SCRIPT_PATH "${CMAKE_CURRENT_BINARY_DIR} /cppscript.py" )
1583- set (GODOT_CPPSCRIPT_DEFS_H_PATH "${CPPS_HEADERS_DIR} /cppscript_defs.h" )
1584- set (GODOT_CPPSCRIPT_BINDINGS_H_PATH "${CPPS_HEADERS_DIR} /cppscript_bindings.h" )
1585- set (GODOT_CPPSCRIPT_H_PATH "${CPPS_HEADERS_DIR} /${CPPS_HEADER_NAME} " )
1586-
1587- file (WRITE "${GODOT_CPPSCRIPT_PY_SCRIPT_PATH} " "${CPPSCRIPT_EMBED_PY_SCRIPT} " )
1588- file (WRITE "${GODOT_CPPSCRIPT_DEFS_H_PATH} " "${CPPSCRIPT_DEFS_H} " )
1589- file (WRITE "${GODOT_CPPSCRIPT_BINDINGS_H_PATH} " "${CPPSCRIPT_BINDINGS_H} " )
1590-
1591- string (TOUPPER "${CPPS_HEADER_NAME} " H_GUARD_STR)
1592- string (REPLACE "." "_" H_GUARD_STR "${H_GUARD_STR} " )
1593- string (REPLACE "@H_GUARD@" "${H_GUARD_STR} " CPPSCRIPT_BODY_H_FORMATTED "${CPPSCRIPT_BODY_H} " )
1594- file (WRITE "${GODOT_CPPSCRIPT_H_PATH} " "${CPPSCRIPT_BODY_H_FORMATTED} " )
1595-
1596- foreach (PATH ${CPPS_HEADERS_LIST} )
1597- file (RELATIVE_PATH PATH "${CPPS_HEADERS_DIR} " "${PATH} " )
1598- string (REGEX REPLACE "\. [^./\\ ]+$" ".gen.cpp" relative_path "${PATH} " )
1599- list (APPEND SOURCES_LIST "${CPPS_GEN_DIR} /${relative_path} " )
1600- endforeach ()
1601-
1602- add_custom_command (
1603- OUTPUT
1604- ${CPPS_HEADERS_DIR} /${CPPS_HEADER_NAME}
1605- ${CPPS_HEADERS_DIR} /scripts.gen.h
1606- ${CPPS_HEADERS_DIR} /properties.gen.h
1607- ${SOURCES_LIST}
1608-
1609- COMMAND
1610- ${Python3_EXECUTABLE} " ${GODOT_CPPSCRIPT_PY_SCRIPT_PATH} "
1611- "--header-name" " ${CPPS_HEADER_NAME } "
1612- "--header-dir " "${CPPS_HEADERS_DIR } "
1613- "--gen -dir" "${CPPS_GEN_DIR } "
1614- "--auto-methods " "${AUTO_METHODS_STR } "
1615- "--definitions" ${CPPS_COMPILE_DEFS}
1616- "--include-paths " ${CPPS_HEADERS_DIR} ${CPPS_INCLUDE_PATHS }
1617- "--"
1618- ${CPPS_HEADERS_LIST}
1619-
1620- DEPENDS ${CPPS_HEADERS_LIST}
1621- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
1622- VERBATIM
1623- COMMAND_EXPAND_LISTS
1624- COMMENT "Parsing header files..."
1625- )
1626- set (${CPPS_OUTPUT_SOURCES} "${SOURCES_LIST} " PARENT_SCOPE)
1627- endfunction ()
1539+ #TODO: make it work in parallel
1540+ function (create_cppscript_target)
1541+ set (options AUTO_METHODS)
1542+ set (oneValueArgs HEADER_NAME HEADERS_DIR GEN_DIR OUTPUT_SOURCES)
1543+ set (multiValueArgs HEADERS_LIST COMPILE_DEFS INCLUDE_PATHS)
1544+ cmake_parse_arguments (CPPS "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
1545+
1546+ # Handle required args and empty/NOTFOUND lists
1547+ if (NOT CPPS_HEADER_NAME)
1548+ message (FATAL_ERROR "`HEADER_NAME` is required argument (for example: `HEADER_NAME project_name.h`)" )
1549+ endif ()
1550+
1551+ if (NOT CPPS_HEADERS_DIR)
1552+ message (FATAL_ERROR "`HEADERS_DIR` is required argument (for example: `HEADERS_DIR \$ {CMAKE_CURRENT_SOURCE_DIR}/include`)" )
1553+ endif ()
1554+
1555+ if (NOT CPPS_OUTPUT_SOURCES)
1556+ message (FATAL_ERROR "OUTPUT_SOURCES is required argument (for example: `OUTPUT_SOURCES GEN_SOURCES`)" )
1557+ endif ()
1558+
1559+ if (NOT CPPS_GEN_DIR)
1560+ set (CPPS_GEN_DIR "${CMAKE_CURRENT_BINARY_DIR} /.cppscript.gen" )
1561+ endif ()
1562+
1563+ if (NOT CPPS_HEADERS_LIST)
1564+ set (CPPS_HEADERS_LIST "" )
1565+ endif ()
1566+
1567+ if (NOT CPPS_COMPILE_DEFS)
1568+ set (CPPS_COMPILE_DEFS "" )
1569+ endif ()
1570+
1571+ if (NOT CPPS_INCLUDE_PATHS)
1572+ set (CPPS_INCLUDE_PATHS "" )
1573+ endif ()
1574+
1575+ if (CPPS_AUTO_METHODS)
1576+ set (AUTO_METHODS_STR "True" )
1577+ else ()
1578+ set (AUTO_METHODS_STR "False" )
1579+ endif ()
1580+
1581+ # Generate python script and headers
1582+ set (GODOT_CPPSCRIPT_PY_SCRIPT_PATH "${CMAKE_CURRENT_BINARY_DIR} /cppscript.py" )
1583+ set (GODOT_CPPSCRIPT_DEFS_H_PATH "${CPPS_HEADERS_DIR} /cppscript_defs.h" )
1584+ set (GODOT_CPPSCRIPT_BINDINGS_H_PATH "${CPPS_HEADERS_DIR} /cppscript_bindings.h" )
1585+ set (GODOT_CPPSCRIPT_H_PATH "${CPPS_HEADERS_DIR} /${CPPS_HEADER_NAME} " )
1586+
1587+ file (WRITE "${GODOT_CPPSCRIPT_PY_SCRIPT_PATH} " "${CPPSCRIPT_EMBED_PY_SCRIPT} " )
1588+ file (WRITE "${GODOT_CPPSCRIPT_DEFS_H_PATH} " "${CPPSCRIPT_DEFS_H} " )
1589+ file (WRITE "${GODOT_CPPSCRIPT_BINDINGS_H_PATH} " "${CPPSCRIPT_BINDINGS_H} " )
1590+
1591+ string (TOUPPER "${CPPS_HEADER_NAME} " H_GUARD_STR)
1592+ string (REPLACE "." "_" H_GUARD_STR "${H_GUARD_STR} " )
1593+ string (REPLACE "@H_GUARD@" "${H_GUARD_STR} " CPPSCRIPT_BODY_H_FORMATTED "${CPPSCRIPT_BODY_H} " )
1594+ file (WRITE "${GODOT_CPPSCRIPT_H_PATH} " "${CPPSCRIPT_BODY_H_FORMATTED} " )
1595+
1596+ foreach (PATH ${CPPS_HEADERS_LIST} )
1597+ file (RELATIVE_PATH PATH "${CPPS_HEADERS_DIR} " "${PATH} " )
1598+ string (REGEX REPLACE "\. [^./\\ ]+$" ".gen.cpp" relative_path "${PATH} " )
1599+ list (APPEND SOURCES_LIST "${CPPS_GEN_DIR} /${relative_path} " )
1600+ endforeach ()
1601+
1602+ add_custom_command (
1603+ OUTPUT
1604+ ${CPPS_HEADERS_DIR} /${CPPS_HEADER_NAME}
1605+ ${CPPS_HEADERS_DIR} /scripts.gen.h
1606+ ${CPPS_HEADERS_DIR} /properties.gen.h
1607+ ${SOURCES_LIST}
1608+
1609+ COMMAND
1610+ ${Python3_EXECUTABLE}
1611+ " ${GODOT_CPPSCRIPT_PY_SCRIPT_PATH } "
1612+ "--header-name " "${CPPS_HEADER_NAME } "
1613+ "--header -dir" "${CPPS_HEADERS_DIR } "
1614+ "--gen-dir " "${CPPS_GEN_DIR } "
1615+ "--auto-methods" " ${AUTO_METHODS_STR} "
1616+ "--definitions " ${CPPS_COMPILE_DEFS }
1617+ "--include-paths" ${CPPS_HEADERS_DIR} ${CPPS_INCLUDE_PATHS}
1618+ "--"
1619+ ${CPPS_HEADERS_LIST}
1620+ DEPENDS ${CPPS_HEADERS_LIST}
1621+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
1622+ VERBATIM
1623+ COMMAND_EXPAND_LISTS
1624+ COMMENT "Parsing header files..."
1625+ )
1626+ set (${CPPS_OUTPUT_SOURCES} "${SOURCES_LIST} " PARENT_SCOPE)
1627+ endfunction ()
16281628
16291629endif ()
0 commit comments