summaryrefslogtreecommitdiff
path: root/cmake/scripts/CreateGRF.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/scripts/CreateGRF.cmake')
-rw-r--r--cmake/scripts/CreateGRF.cmake44
1 files changed, 44 insertions, 0 deletions
diff --git a/cmake/scripts/CreateGRF.cmake b/cmake/scripts/CreateGRF.cmake
new file mode 100644
index 000000000..f5811daf9
--- /dev/null
+++ b/cmake/scripts/CreateGRF.cmake
@@ -0,0 +1,44 @@
+cmake_minimum_required(VERSION 3.5)
+
+#
+# Create a single GRF file based on sprites/<grfname>.nfo and sprites/*.png
+# files.
+#
+
+if (NOT NFORENUM_EXECUTABLE)
+ message(FATAL_ERROR "Script needs NFORENUM_EXECUTABLE defined")
+endif (NOT NFORENUM_EXECUTABLE)
+if (NOT GRFCODEC_EXECUTABLE)
+ message(FATAL_ERROR "Script needs GRFCODEC_EXECUTABLE defined")
+endif (NOT GRFCODEC_EXECUTABLE)
+if (NOT GRF_SOURCE_FOLDER)
+ message(FATAL_ERROR "Script needs GRF_SOURCE_FOLDER defined")
+endif (NOT GRF_SOURCE_FOLDER)
+if (NOT GRF_BINARY_FILE)
+ message(FATAL_ERROR "Script needs GRF_BINARY_FILE defined")
+endif (NOT GRF_BINARY_FILE)
+
+get_filename_component(GRF_SOURCE_FOLDER_NAME "${GRF_SOURCE_FOLDER}" NAME)
+
+file(WRITE sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "")
+file(READ ${GRF_SOURCE_FOLDER}/${GRF_SOURCE_FOLDER_NAME}.nfo NFO_LINES)
+# Replace ; with \;, and make a list out of this based on \n
+string(REPLACE ";" "\\;" NFO_LINES "${NFO_LINES}")
+string(REPLACE "\n" ";" NFO_LINES "${NFO_LINES}")
+
+foreach(NFO_LINE IN LISTS NFO_LINES)
+ # Recover the ; that was really in the text (and not a newline)
+ string(REPLACE "\\;" ";" NFO_LINE "${NFO_LINE}")
+
+ if (NFO_LINE MATCHES "^#include")
+ string(REGEX REPLACE "^#include \"(.*)\"$" "\\1" INCLUDE_FILE ${NFO_LINE})
+ file(READ ${GRF_SOURCE_FOLDER}/${INCLUDE_FILE} INCLUDE_LINES)
+ file(APPEND sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "${INCLUDE_LINES}")
+ else (NFO_LINE MATCHES "^#include")
+ file(APPEND sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "${NFO_LINE}\n")
+ endif (NFO_LINE MATCHES "^#include")
+endforeach(NFO_LINE)
+
+execute_process(COMMAND ${NFORENUM_EXECUTABLE} -s sprites/${GRF_SOURCE_FOLDER_NAME}.nfo)
+execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf)
+execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${GRF_SOURCE_FOLDER_NAME}.grf ${GRF_BINARY_FILE})