2014-09-14 08:36:58 +02:00

94 lines
3.0 KiB
Lua

-- osx-bundle.lua - Support for Max OS X bundles
module(..., package.seeall)
local nodegen = require "tundra.nodegen"
local files = require "tundra.syntax.files"
local path = require "tundra.path"
local util = require "tundra.util"
local depgraph = require "tundra.depgraph"
_osx_bundle_mt = nodegen.create_eval_subclass { }
_compile_nib_mt = nodegen.create_eval_subclass { }
function _osx_bundle_mt:create_dag(env, data, deps)
local bundle_dir = data.Target
local pass = data.Pass
local contents = bundle_dir .. "/Contents"
local copy_deps = {}
local infoplist = data.InfoPList
copy_deps[#copy_deps+1] = files.hardlink_file(env, data.InfoPList, contents .. "/Info.plist", pass, deps)
if data.PkgInfo then
copy_deps[#copy_deps+1] = files.hardlink_file(env, data.PkgInfo, contents .. "/PkgInfo", pass, deps)
end
if data.Executable then
local basename = select(2, path.split(data.Executable))
copy_deps[#copy_deps+1] = files.hardlink_file(env, data.Executable, contents .. "/MacOS/" .. basename, pass, deps)
end
local dirs = {
{ Tag = "Resources", Dir = contents .. "/Resources/" },
{ Tag = "MacOSFiles", Dir = contents .. "/MacOS/" },
}
for _, params in ipairs(dirs) do
local function do_copy(fn)
local basename = select(2, path.split(fn))
copy_deps[#copy_deps+1] = files.hardlink_file(env, fn, params.Dir .. basename, pass, deps)
end
local items = data[params.Tag]
for _, dep in util.nil_ipairs(nodegen.flatten_list(env:get('BUILD_ID'), items)) do
if type(dep) == "string" then
do_copy(dep)
else
local node = dep:get_dag(env)
print(node)
deps[#deps+1] = node
local files = {}
node:insert_output_files(files)
for _, fn in ipairs(files) do
do_copy(fn)
end
end
end
end
return depgraph.make_node {
Env = env,
Pass = pass,
Label = "OsxBundle " .. data.Target,
Dependencies = util.merge_arrays_2(deps, copy_deps),
}
end
function _compile_nib_mt:create_dag(env, data, deps)
return depgraph.make_node {
Env = env,
Pass = data.Pass,
Label = "CompileNib $(@)",
Action = "$(NIBCC)",
Dependencies = deps,
InputFiles = { data.Source },
OutputFiles = { "$(OBJECTDIR)/" .. data.Target },
}
end
nodegen.add_evaluator("OsxBundle", _osx_bundle_mt, {
Target = { Type = "string", Required = true, Help = "Target .app directory name" },
Executable = { Type = "string", Help = "Executable to embed" },
InfoPList = { Type = "string", Required = true, Help = "Info.plist file" },
PkgInfo = { Type = "string", Help = "PkgInfo file" },
Resources = { Type = "filter_table", Help = "Files to copy to 'Resources'" },
MacOSFiles = { Type = "filter_table", Help = "Files to copy to 'MacOS'" },
})
nodegen.add_evaluator("CompileNib", _compile_nib_mt, {
Source = { Type = "string", Required = true },
Target = { Type = "string", Required = true },
})