Skip to content

Commit 0533104

Browse files
author
Vano
committed
Sync with 4f8992e
1 parent 65cd7c0 commit 0533104

File tree

3 files changed

+134
-146
lines changed

3 files changed

+134
-146
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,13 @@ Don't worry, you will still be able to add custom code to this files after confi
119119
- SCons
120120
```python
121121
from godot_cppscript import create_cppscript_target
122-
from godot_cppscript import GlobRecursive # Optional
122+
import glob
123123
124124
# ...
125125
126126
# Get list of headers (Prefer *.hpp files)
127-
scripts = GlobRecursive('src', '*.hpp')
128-
127+
scripts = glob.glob('src/**/*.hpp', recursive=True)
128+
129129
# Create target, returns generated .cpp files list
130130
generated = create_cppscript_target(
131131
env, # SCons env, env.Clone() for different projects

godot_cppscript.cmake

Lines changed: 114 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ cmake_minimum_required(VERSION 3.12.4)
55
find_package(Python3 3.10 REQUIRED)
66

77
if(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]
134134
except:
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')
154154
while 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

198198
else()
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

16291629
endif()

godot_cppscript.py

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -132,25 +132,25 @@
132132
h_path = argv[2]
133133
gdext_path = argv[3]
134134
except:
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')
154154
while True:
155155
inp = input('Are you sure? (Y/N) ')
156156
if inp == '':
@@ -481,7 +481,6 @@
481481

482482

483483
# Ran as module from SConstruct
484-
from SCons.Script import Glob
485484
from SCons.Builder import Builder
486485

487486
def create_cppscript_target(env, sources, cppscript_env, *args, **kwargs):
@@ -544,17 +543,6 @@ def generate_header_emitter(target, source, env):
544543
return builder
545544

546545

547-
def GlobRecursive(path, pattern, **kwargs):
548-
found = []
549-
for root, dirs, files in os.walk(path):
550-
if not os.path.basename(root).startswith('.'):
551-
found += Glob(root + '/' + pattern, **kwargs)
552-
else:
553-
dirs[:] = []
554-
555-
return found
556-
557-
558546
from clang.cindex import Index, TranslationUnit, CursorKind, TokenKind, AccessSpecifier
559547
import os, sys, json, hashlib, shutil
560548

0 commit comments

Comments
 (0)