summaryrefslogtreecommitdiff
path: root/cmake/scripts/SquirrelIncludes.cmake
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2019-03-12 15:37:57 +0100
committerglx22 <glx22@users.noreply.github.com>2020-07-16 00:53:26 +0200
commit4079c47b6cd5d210bdc31eff2040fb5aeb0f10de (patch)
treed4b685a3709ee7f98bfac6ff352af405da8014ec /cmake/scripts/SquirrelIncludes.cmake
parent8794c61f25dfe055296ed500c54d22613fbcb73f (diff)
downloadopenttd-4079c47b6cd5d210bdc31eff2040fb5aeb0f10de.tar.xz
Change: rewrote squirrel_export in CMake
Diffstat (limited to 'cmake/scripts/SquirrelIncludes.cmake')
-rw-r--r--cmake/scripts/SquirrelIncludes.cmake60
1 files changed, 60 insertions, 0 deletions
diff --git a/cmake/scripts/SquirrelIncludes.cmake b/cmake/scripts/SquirrelIncludes.cmake
new file mode 100644
index 000000000..d6d8b8ec3
--- /dev/null
+++ b/cmake/scripts/SquirrelIncludes.cmake
@@ -0,0 +1,60 @@
+cmake_minimum_required(VERSION 3.5)
+
+if (NOT INCLUDES_SOURCE_FILE)
+ message(FATAL_ERROR "Script needs INCLUDES_SOURCE_FILE defined")
+endif (NOT INCLUDES_SOURCE_FILE)
+if (NOT INCLUDES_BINARY_FILE)
+ message(FATAL_ERROR "Script needs INCLUDES_BINARY_FILE defined")
+endif (NOT INCLUDES_BINARY_FILE)
+if (NOT APILC)
+ message(FATAL_ERROR "Script needs APILC defined")
+endif (NOT APILC)
+if (NOT APIUC)
+ message(FATAL_ERROR "Script needs APIUC defined")
+endif (NOT APIUC)
+
+set(ARGC 1)
+set(ARG_READ NO)
+
+# Read all the arguments given to CMake; we are looking for -- and everything
+# that follows. Those are our api files.
+while(ARGC LESS CMAKE_ARGC)
+ set(ARG ${CMAKE_ARGV${ARGC}})
+
+ if (ARG_READ)
+ list(APPEND SCRIPT_API_BINARY_FILES "${ARG}")
+ endif (ARG_READ)
+
+ if (ARG STREQUAL "--")
+ set(ARG_READ YES)
+ endif (ARG STREQUAL "--")
+
+ math(EXPR ARGC "${ARGC} + 1")
+endwhile()
+
+foreach(FILE IN LISTS SCRIPT_API_BINARY_FILES)
+ file(STRINGS "${FILE}" LINES REGEX "^void SQ${APIUC}.*_Register\\(Squirrel \\*engine\\)$")
+ if (LINES)
+ string(REGEX REPLACE ".*api/${APILC}/(.*)" "#include \"\\1\"" FILE "${FILE}")
+ list(APPEND SQUIRREL_INCLUDES "${FILE}")
+ foreach(LINE IN LISTS LINES)
+ if ("${LINE}" MATCHES "SQ${APIUC}(List|Controller)_Register")
+ continue()
+ endif ("${LINE}" MATCHES "SQ${APIUC}(List|Controller)_Register")
+ string(REGEX REPLACE "^.*void " " " LINE "${LINE}")
+ string(REGEX REPLACE "Squirrel \\*" "" LINE "${LINE}")
+ list(APPEND SQUIRREL_REGISTER "${LINE}")
+ endforeach(LINE)
+ endif (LINES)
+endforeach(FILE)
+
+list(SORT SQUIRREL_INCLUDES)
+string(REPLACE ";" "\n" SQUIRREL_INCLUDES "${SQUIRREL_INCLUDES}")
+
+string(REGEX REPLACE "_Register" "0000Register" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}")
+list(SORT SQUIRREL_REGISTER)
+string(REGEX REPLACE "0000Register" "_Register" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}")
+string(REPLACE ";" ";\n" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}")
+set(SQUIRREL_REGISTER " SQ${APIUC}List_Register(engine);\n${SQUIRREL_REGISTER};")
+
+configure_file(${INCLUDES_SOURCE_FILE} ${INCLUDES_BINARY_FILE})