summaryrefslogtreecommitdiffhomepage
path: root/cmake
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-02-06 19:14:54 +0100
committerAki <please@ignore.pl>2022-02-06 19:16:34 +0100
commitd289918bfdf7635ec3bb2c94d8255da2b2572aea (patch)
tree6e9143cbfd63fd0e6a674d37a51a58ea85882929 /cmake
parentba64478a1aa1740da47ff0016dff6cc633900b73 (diff)
downloadstarshatter-d289918bfdf7635ec3bb2c94d8255da2b2572aea.zip
starshatter-d289918bfdf7635ec3bb2c94d8255da2b2572aea.tar.gz
starshatter-d289918bfdf7635ec3bb2c94d8255da2b2572aea.tar.bz2
Added datafiles to the repository
This includes only text files from the most common distribution of content.dat and shatter.dat.
Diffstat (limited to 'cmake')
-rw-r--r--cmake/modules/AddDatafile.cmake53
1 files changed, 53 insertions, 0 deletions
diff --git a/cmake/modules/AddDatafile.cmake b/cmake/modules/AddDatafile.cmake
new file mode 100644
index 0000000..6e98479
--- /dev/null
+++ b/cmake/modules/AddDatafile.cmake
@@ -0,0 +1,53 @@
+# Adds a target that creates a datafile archive containing all files under selected directory tree. For example:
+#
+# add_datafile(
+# shatter
+# DIRECTORY shatter
+# OUTPUT shatter.dat
+# )
+#
+# Will create 'shatter.dat' in the respective binary directory containing all files in 'shatter' subdirectory of current
+# source directory. DIRECTORY option's argument defaults to the target name. OUTPUT option's argument defaults to the
+# target name with ".dat" suffix.
+#
+# To create the archive Datafile.exe is used, so for non-Windows platforms an emulator that can run it is needed.
+
+function(add_datafile)
+ set(FUNC_DATAFILE_TARGET ${ARGV0})
+ cmake_parse_arguments(
+ PARSE_ARGV 1
+ FUNC_DATAFILE
+ ""
+ "DIRECTORY;OUTPUT"
+ ""
+ )
+ if(NOT DEFINED FUNC_DATAFILE_DIRECTORY)
+ set(FUNC_DATAFILE_DIRECTORY ${FUNC_DATAFILE_TARGET})
+ endif()
+ if(NOT DEFINED FUNC_DATAFILE_OUTPUT)
+ set(FUNC_DATAFILE_OUTPUT "${FUNC_DATAFILE_TARGET}.dat")
+ endif()
+ cmake_path(ABSOLUTE_PATH FUNC_DATAFILE_DIRECTORY NORMALIZE BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+ cmake_path(ABSOLUTE_PATH FUNC_DATAFILE_OUTPUT NORMALIZE BASE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ if(CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
+ set(FUNC_DATAFILE_VAR PATH)
+ set(FUNC_DATAFILE_PATHS $ENV{PATH})
+ list(PREPEND FUNC_DATAFILE_PATHS $<TARGET_FILE_DIR:Zlib::zlib>)
+ else()
+ set(FUNC_DATAFILE_VAR WINEPATH)
+ set(FUNC_DATAFILE_PATHS $ENV{WINEPATH})
+ list(PREPEND FUNC_DATAFILE_PATHS $<TARGET_FILE_DIR:Zlib::zlib>)
+ list(PREPEND FUNC_DATAFILE_PATHS $<SHELL_PATH:${CMAKE_FIND_ROOT_PATH}/bin>)
+ endif()
+ add_custom_command(
+ OUTPUT ${FUNC_DATAFILE_OUTPUT}
+ DEPENDS ${FUNC_DATAFILE_DIRECTORY}
+ COMMAND
+ ${CMAKE_COMMAND} -E env "${FUNC_DATAFILE_VAR}='${FUNC_DATAFILE_PATHS}'"
+ ${CMAKE_CORSSCOMPILING_EMULATOR}
+ $<TARGET_FILE:Datafile> $<SHELL_PATH:${FUNC_DATAFILE_OUTPUT}> -mak
+ COMMENT "Creating datafile ${FUNC_DATAFILE_TARGET}"
+ WORKING_DIRECTORY ${FUNC_DATAFILE_DIRECTORY}
+ )
+ add_custom_target(${FUNC_DATAFILE_TARGET} ALL DEPENDS ${FUNC_DATAFILE_OUTPUT})
+endfunction()