@@ -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
197198else ()
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)
16521677endfunction ()
16531678
1654-
16551679endif ()
0 commit comments