summaryrefslogtreecommitdiffhomepage
path: root/cmake/modules/AddDatafile.cmake
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-02-09 01:16:33 +0100
committerAki <please@ignore.pl>2022-02-09 01:17:01 +0100
commit39b36e332725498bcfa0a712b2a880b4abe8a174 (patch)
treec45fd00b88951aea934bd7ab80822d723387cf5e /cmake/modules/AddDatafile.cmake
parent879a5610a552c26cd5a8bbbf689444d89b71b0d8 (diff)
downloadstarshatter-39b36e332725498bcfa0a712b2a880b4abe8a174.zip
starshatter-39b36e332725498bcfa0a712b2a880b4abe8a174.tar.gz
starshatter-39b36e332725498bcfa0a712b2a880b4abe8a174.tar.bz2
Implemented initial downloadable binary resources for building datafiles
Diffstat (limited to 'cmake/modules/AddDatafile.cmake')
-rw-r--r--cmake/modules/AddDatafile.cmake67
1 files changed, 41 insertions, 26 deletions
diff --git a/cmake/modules/AddDatafile.cmake b/cmake/modules/AddDatafile.cmake
index 6e98479..3bf2388 100644
--- a/cmake/modules/AddDatafile.cmake
+++ b/cmake/modules/AddDatafile.cmake
@@ -1,53 +1,68 @@
+# TODO: Update to match new AddDownloadableResource.
# Adds a target that creates a datafile archive containing all files under selected directory tree. For example:
#
# add_datafile(
# shatter
-# DIRECTORY shatter
+# SOURCE 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
+# source directory. SOURCE 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})
+ set(DATAFILE_TARGET ${ARGV0})
cmake_parse_arguments(
PARSE_ARGV 1
- FUNC_DATAFILE
- ""
- "DIRECTORY;OUTPUT"
+ DATAFILE
""
+ "SOURCE;OUTPUT"
+ "RESOURCES"
)
- if(NOT DEFINED FUNC_DATAFILE_DIRECTORY)
- set(FUNC_DATAFILE_DIRECTORY ${FUNC_DATAFILE_TARGET})
+ if(NOT DEFINED DATAFILE_SOURCE)
+ set(DATAFILE_SOURCE ${DATAFILE_TARGET})
endif()
- if(NOT DEFINED FUNC_DATAFILE_OUTPUT)
- set(FUNC_DATAFILE_OUTPUT "${FUNC_DATAFILE_TARGET}.dat")
+ if(NOT DEFINED DATAFILE_OUTPUT)
+ set(DATAFILE_OUTPUT "${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})
+ cmake_path(ABSOLUTE_PATH DATAFILE_SOURCE NORMALIZE BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+ cmake_path(ABSOLUTE_PATH 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>)
+ set(DATAFILE_VAR PATH)
+ set(DATAFILE_PATHS $ENV{PATH})
+ list(PREPEND 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>)
+ set(DATAFILE_VAR WINEPATH)
+ set(DATAFILE_PATHS $ENV{WINEPATH})
+ list(PREPEND DATAFILE_PATHS $<TARGET_FILE_DIR:Zlib::zlib>)
+ list(PREPEND DATAFILE_PATHS $<SHELL_PATH:${CMAKE_FIND_ROOT_PATH}/bin>)
endif()
add_custom_command(
- OUTPUT ${FUNC_DATAFILE_OUTPUT}
- DEPENDS ${FUNC_DATAFILE_DIRECTORY}
+ OUTPUT ${DATAFILE_OUTPUT}
+ DEPENDS ${DATAFILE_SOURCE}
+ COMMAND ${CMAKE_COMMAND} -E rm -f ${DATAFILE_OUTPUT}
COMMAND
- ${CMAKE_COMMAND} -E env "${FUNC_DATAFILE_VAR}='${FUNC_DATAFILE_PATHS}'"
+ ${CMAKE_COMMAND} -E chdir ${DATAFILE_SOURCE}
+ ${CMAKE_COMMAND} -E env "${DATAFILE_VAR}='${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}
+ $<TARGET_FILE:Datafile> $<SHELL_PATH:${DATAFILE_OUTPUT}> -mak
+ COMMENT "Creating datafile ${DATAFILE_TARGET}"
)
- add_custom_target(${FUNC_DATAFILE_TARGET} ALL DEPENDS ${FUNC_DATAFILE_OUTPUT})
+ foreach(RESOURCE IN ITEMS ${DATAFILE_RESOURCES})
+ cmake_path(ABSOLUTE_PATH RESOURCE NORMALIZE BASE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ message(STATUS ${RESOURCE})
+ add_custom_command(
+ OUTPUT ${DATAFILE_OUTPUT} APPEND
+ DEPENDS ${RESOURCE}
+ COMMAND
+ ${CMAKE_COMMAND} -E chdir ${RESOURCE}
+ ${CMAKE_COMMAND} -E env "${DATAFILE_VAR}='${DATAFILE_PATHS}'"
+ ${CMAKE_CORSSCOMPILING_EMULATOR}
+ $<TARGET_FILE:Datafile> $<SHELL_PATH:${DATAFILE_OUTPUT}> -mak
+ )
+ endforeach()
+ add_custom_target(${DATAFILE_TARGET} ALL DEPENDS ${DATAFILE_OUTPUT})
endfunction()