1# - Copy/parse lua source files as a custom target 2# 3# include(LuaTargets) 4# add_lua_target(<target_name> <directory to copy to> [<luafile> <luafile>]) 5# Relative paths for the destination directory are considered with 6# with respect to CMAKE_CURRENT_BINARY_DIR 7# 8# install_lua_target(<target_name> [arguments to INSTALL(PROGRAMS ...) ]) 9# 10# Set this variable to specify location of luac, if it is not a target: 11# LUA_TARGET_LUAC_EXECUTABLE 12# 13# Requires CMake 2.6 or newer (uses the 'function' command) 14# 15# Original Author: 16# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net> 17# http://academic.cleardefinition.com 18# Iowa State University HCI Graduate Program/VRAC 19# 20# Copyright Iowa State University 2009-2010. 21# Distributed under the Boost Software License, Version 1.0. 22# (See accompanying file LICENSE_1_0.txt or copy at 23# http://www.boost.org/LICENSE_1_0.txt) 24 25if(__add_lua) 26 return() 27endif() 28set(__add_lua YES) 29 30include(FileCopyTargets) 31 32function(add_lua_target _target _dest) 33 34 if(NOT ARGN) 35 message(WARNING 36 "In add_lua_target call for target ${_target}, no source files were specified!") 37 return() 38 endif() 39 40 if(NOT LUA_TARGET_LUAC_EXECUTABLE) 41 if(TARGET luac) 42 set(LUA_TARGET_LUAC_EXECUTABLE luac) 43 mark_as_advanced(LUA_TARGET_LUAC_EXECUTABLE) 44 else() 45 find_program(LUA_TARGET_LUAC_EXECUTABLE NAMES luac) 46 endif() 47 endif() 48 49 if(NOT LUA_TARGET_LUAC_EXECUTABLE) 50 message(FATAL_ERROR 51 "Can't find luac: please give LUA_TARGET_LUAC_EXECUTABLE a useful value - currently ${LUA_TARGET_LUAC_EXECUTABLE}") 52 endif() 53 mark_as_advanced(LUA_TARGET_LUAC_EXECUTABLE) 54 55 set(ALLFILES) 56 set(SOURCES) 57 foreach(fn ${ARGN}) 58 # Produce an absolute path to the input file 59 if(IS_ABSOLUTE "${fn}") 60 get_filename_component(fullpath "${fn}" ABSOLUTE) 61 get_filename_component(fn "${fn}" NAME) 62 else() 63 get_filename_component(fullpath 64 "${CMAKE_CURRENT_SOURCE_DIR}/${fn}" 65 ABSOLUTE) 66 endif() 67 68 # Clean up output file name 69 get_filename_component(absout "${_dest}/${fn}" ABSOLUTE) 70 71 add_custom_command(OUTPUT "${absout}" 72 COMMAND 73 ${CMAKE_COMMAND} 74 ARGS -E make_directory "${_dest}" 75 COMMAND 76 ${CMAKE_COMMAND} 77 ARGS -E copy "${fullpath}" "${_dest}" 78 COMMAND 79 "${LUA_TARGET_LUAC_EXECUTABLE}" 80 ARGS -p "${fullpath}" 81 MAIN_DEPENDENCY "${fullpath}" 82 VERBATIM 83 COMMENT "Copying ${fn} to ${absout} and parsing...") 84 list(APPEND SOURCES "${fullpath}") 85 list(APPEND ALLFILES "${absout}") 86 endforeach() 87 88 # Custom target depending on all the file copy commands 89 add_custom_target(${_target} 90 SOURCES ${SOURCES} 91 DEPENDS ${ALLFILES}) 92 if(TARGET "${LUA_TARGET_LUAC_EXECUTABLE}") 93 get_property(_luac_imported 94 TARGET 95 "${LUA_TARGET_LUAC_EXECUTABLE}" 96 PROPERTY 97 IMPORTED) 98 if(NOT _luac_imported) 99 add_dependencies(${_target} ${LUA_TARGET_LUAC_EXECUTABLE}) 100 endif() 101 endif() 102 103 set_property(TARGET ${_target} PROPERTY FILE_COPY_TARGET YES) 104endfunction() 105 106function(install_lua_target) 107 install_file_copy_target(${ARGN}) 108endfunction() 109