Skip to content

Commit 7055245

Browse files
author
Vano
committed
Sync with d51f6f0
1 parent d4ae03a commit 7055245

File tree

1 file changed

+74
-50
lines changed

1 file changed

+74
-50
lines changed

godot_cppscript.cmake

Lines changed: 74 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -178,21 +178,22 @@ exit(0)
178178
)
179179

180180

181-
# Pass args to python config script
182-
math(EXPR ARGC "${CMAKE_ARGC} - 1")
183-
foreach(i RANGE 3 ${ARGC})
184-
list(APPEND ARGS "${CMAKE_ARGV${i}}")
185-
endforeach()
186-
187-
execute_process(
188-
COMMAND
189-
"${Python3_EXECUTABLE}"
190-
"-c"
191-
"${PY_CONFIGURE_SCRIPT}"
192-
${ARGS}
193-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
194-
)
181+
# Pass args to python config script
182+
math(EXPR ARGC "${CMAKE_ARGC} - 1")
183+
foreach(i RANGE 3 ${ARGC})
184+
list(APPEND ARGS "${CMAKE_ARGV${i}}")
185+
endforeach()
195186

187+
set(SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/.configure_script.py.tmp")
188+
file(WRITE ${SCRIPT_PATH} "${PY_CONFIGURE_SCRIPT}")
189+
execute_process(
190+
COMMAND
191+
"${Python3_EXECUTABLE}"
192+
"${SCRIPT_PATH}"
193+
${ARGS}
194+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
195+
)
196+
file(REMOVE ${SCRIPT_PATH})
196197

197198
else()
198199

@@ -1578,78 +1579,101 @@ if __name__ == \"__main__\":
15781579
'gen_dir' : args.gen_dir[0],
15791580
'compile_defs' : set(args.definitions),
15801581
'include_paths' : set(args.include_paths),
1581-
'auto_methods' : args.auto_methods
1582-
}
1582+
'auto_methods' : args.auto_methods,
1583+
'code_format' : code_format_godot_cpp()
1584+
if os.getenv(\"CPPSCRIPT_NO_CONSTEXPR_CHECKS\", False)
1585+
else code_format_cppscript_constexr_checks()
1586+
}
15831587
15841588
sys.exit(generate_header_cmake(args.sources, env))
15851589
15861590
"
15871591
)
15881592

15891593

1590-
#TODO: script path is changed to generated one
1591-
set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${CMAKE_CURRENT_LIST_DIR})
15921594

15931595
#TODO: make it work in parallel
1594-
function(create_cppscript_target TARGET_NAME HEADERS_LIST HEADER_NAME HEADERS_DIR GEN_DIR AUTO_METHODS COMPILE_DEFS INCLUDE_PATHS)
1595-
#TODO: cmake_parse_args
1596-
# Handle empty/NOTFOUND lists
1597-
if(NOT INCLUDE_PATHS)
1598-
set(INCLUDE_PATHS "")
1596+
function(create_cppscript_target)
1597+
set(options AUTO_METHODS)
1598+
set(oneValueArgs HEADER_NAME HEADERS_DIR GEN_DIR OUTPUT_SOURCES)
1599+
set(multiValueArgs HEADERS_LIST COMPILE_DEFS INCLUDE_PATHS)
1600+
cmake_parse_arguments(CPPS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
1601+
1602+
# Handle required args and empty/NOTFOUND lists
1603+
if(NOT CPPS_HEADER_NAME)
1604+
message(FATAL_ERROR "Header name is required argument (for example: `HEADER_NAME project_name.h`)")
1605+
endif()
1606+
1607+
if(NOT CPPS_HEADERS_DIR)
1608+
message(FATAL_ERROR "Headers directory is required argument (for example: `HEADERS_DIR \${CMAKE_CURRENT_SOURCE_DIR}/include`)")
15991609
endif()
1600-
if(NOT COMPILE_DEFS)
1601-
set(COMPILE_DEFS "")
1610+
1611+
if(NOT CPPS_OUTPUT_SOURCES)
1612+
message(FATAL_ERROR "Output sources is required argument (for example: `OUTPUT_SOURCES GEN_SOURCES`)")
16021613
endif()
16031614

1615+
if(NOT CPPS_GEN_DIR)
1616+
set(CPPS_GEN_DIR "${CMAKE_CURRENT_BINARY_DIR}/.cppscript.gen")
1617+
endif()
1618+
1619+
if(NOT CPPS_HEADERS_LIST)
1620+
set(CPPS_HEADERS_LIST "")
1621+
endif()
1622+
1623+
if(NOT CPPS_COMPILE_DEFS)
1624+
set(CPPS_COMPILE_DEFS "")
1625+
endif()
1626+
1627+
if(NOT CPPS_INCLUDE_PATHS)
1628+
set(CPPS_INCLUDE_PATHS "")
1629+
endif()
16041630

1605-
if(${AUTO_METHODS})
1631+
if(CPPS_AUTO_METHODS)
16061632
set(AUTO_METHODS_STR "True")
16071633
else()
16081634
set(AUTO_METHODS_STR "False")
16091635
endif()
16101636

16111637
# Generate python script and headers
16121638
set(GODOT_CPPSCRIPT_PY_SCRIPT_PATH "${CMAKE_CURRENT_BINARY_DIR}/cppscript.py")
1613-
set(GODOT_CPPSCRIPT_DEFS_H_PATH "${HEADERS_DIR}/cppscript_defs.h")
1614-
set(GODOT_CPPSCRIPT_BINDINGS_H_PATH "${HEADERS_DIR}/cppscript_bindings.h")
1639+
set(GODOT_CPPSCRIPT_DEFS_H_PATH "${CPPS_HEADERS_DIR}/cppscript_defs.h")
1640+
set(GODOT_CPPSCRIPT_BINDINGS_H_PATH "${CPPS_HEADERS_DIR}/cppscript_bindings.h")
16151641

16161642
file(WRITE "${GODOT_CPPSCRIPT_PY_SCRIPT_PATH}" "${CPPSCRIPT_EMBED_PY_SCRIPT}")
16171643
file(WRITE "${GODOT_CPPSCRIPT_DEFS_H_PATH}" "${CPPSCRIPT_DEFS_H}")
16181644
file(WRITE "${GODOT_CPPSCRIPT_BINDINGS_H_PATH}" "${CPPSCRIPT_BINDINGS_H}")
1619-
foreach(PATH ${HEADERS_LIST})
1620-
file(RELATIVE_PATH PATH "${HEADERS_DIR}" "${PATH}")
1645+
1646+
foreach(PATH ${CPPS_HEADERS_LIST})
1647+
file(RELATIVE_PATH PATH "${CPPS_HEADERS_DIR}" "${PATH}")
16211648
string(REGEX REPLACE "\.[^./\\]+$" ".gen.cpp" relative_path "${PATH}")
1622-
list(APPEND SOURCES_LIST "${GEN_DIR}/${relative_path}")
1649+
list(APPEND SOURCES_LIST "${CPPS_GEN_DIR}/${relative_path}")
16231650
endforeach()
16241651

16251652
add_custom_command(
16261653
OUTPUT
1627-
${HEADERS_DIR}/${HEADER_NAME}
1628-
${HEADERS_DIR}/scripts.gen.h
1629-
${HEADERS_DIR}/properties.gen.h
1654+
${CPPS_HEADERS_DIR}/${CPPS_HEADER_NAME}
1655+
${CPPS_HEADERS_DIR}/scripts.gen.h
1656+
${CPPS_HEADERS_DIR}/properties.gen.h
16301657
${SOURCES_LIST}
16311658

16321659
COMMAND
1633-
${Python3_EXECUTABLE} "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/cppscript_bindings.py"
1634-
"--header-name" "${HEADER_NAME}"
1635-
"--header-dir" "${HEADERS_DIR}"
1636-
"--gen-dir" "${GEN_DIR}"
1637-
"--auto-methods" "${AUTO_METHODS_STR}"
1638-
"--definitions" ${COMPILE_DEFS}
1639-
"--include-paths" ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/src ${HEADERS_DIR} ${INCLUDE_PATHS}
1640-
"--"
1641-
${HEADERS_LIST}
1642-
1643-
DEPENDS ${HEADERS_LIST}
1644-
WORKING_DIRECTORY ${CMAKE_CURRENT_FUNCTION_LIST_DIR}
1660+
${Python3_EXECUTABLE} "${GODOT_CPPSCRIPT_PY_SCRIPT_PATH}"
1661+
"--header-name" "${CPPS_HEADER_NAME}"
1662+
"--header-dir" "${CPPS_HEADERS_DIR}"
1663+
"--gen-dir" "${CPPS_GEN_DIR}"
1664+
"--auto-methods" "${AUTO_METHODS_STR}"
1665+
"--definitions" ${CPPS_COMPILE_DEFS}
1666+
"--include-paths" ${CPPS_HEADERS_DIR} ${CPPS_INCLUDE_PATHS}
1667+
"--"
1668+
${CPPS_HEADERS_LIST}
1669+
1670+
DEPENDS ${CPPS_HEADERS_LIST}
1671+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
16451672
VERBATIM
16461673
COMMAND_EXPAND_LISTS
16471674
COMMENT "Parsing header files..."
16481675
)
1649-
1650-
target_sources(${TARGET_NAME} PRIVATE ${SOURCES_LIST})
1651-
target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/src ${HEADERS_DIR})
1676+
set(${CPPS_OUTPUT_SOURCES} "${SOURCES_LIST}" PARENT_SCOPE)
16521677
endfunction()
16531678

1654-
16551679
endif()

0 commit comments

Comments
 (0)