# 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 $) else() set(FUNC_DATAFILE_VAR WINEPATH) set(FUNC_DATAFILE_PATHS $ENV{WINEPATH}) list(PREPEND FUNC_DATAFILE_PATHS $) list(PREPEND FUNC_DATAFILE_PATHS $) 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} $ $ -mak COMMENT "Creating datafile ${FUNC_DATAFILE_TARGET}" WORKING_DIRECTORY ${FUNC_DATAFILE_DIRECTORY} ) add_custom_target(${FUNC_DATAFILE_TARGET} ALL DEPENDS ${FUNC_DATAFILE_OUTPUT}) endfunction()