--- -- vs2010_rules_props.lua -- Generate a Visual Studio 201x custom rules properties file. -- Copyright (c) 2014 Jason Perkins and the Premake project -- premake.vstudio.vs2010.rules = {} premake.vstudio.vs2010.rules.props = {} local m = premake.vstudio.vs2010.rules.props m.elements = {} local p = premake --- -- Entry point; generate the root element. --- m.elements.project = function(r) return { p.xmlUtf8, p.vstudio.projectElement, m.targetsGroup, m.dependsOnGroup, m.ruleGroup, } end function m.generate(r) p.callArray(m.elements.project, r) p.pop() p.out('') end --- -- Generate the targets property group element. --- m.elements.targetsGroup = function(r) return { m.beforeTargets, m.afterTargets, } end function m.targetsGroup(r) p.w('', r.name, r.name) p.callArray(m.elements.targetsGroup, r) p.pop('') end --- -- Generate the dependencies property group element. --- m.elements.dependsOnGroup = function(r) return { m.dependsOn, } end function m.dependsOnGroup(r) p.push('') p.callArray(m.elements.dependsOnGroup, r) p.pop('') end --- -- Generate the rule itemm group element. --- m.elements.ruleGroup = function(r) return { m.propertyDefaults, m.commandLineTemplates, m.outputs, m.executionDescription, m.additionalDependencies, } end function m.ruleGroup(r) p.push('') p.push('<%s>', r.name) p.callArray(m.elements.ruleGroup, r) p.pop('', r.name) p.pop('') end --- -- Output the default values for all of the property definitions. --- function m.propertyDefaults(r) local defs = r.propertyDefinition for i = 1, #defs do local def = defs[i] local value = def.value if value then if def.kind == "path" then value = path.translate(value) end p.w('<%s>%s', def.name, value, def.name) end end end --- -- Implementations of individual elements. --- function m.additionalDependencies(r) local deps = table.concat(r.buildDependencies, ";") p.x('%s', deps) end function m.afterTargets(r) p.w('<%sAfterTargets>CustomBuild', r.name, r.name) end function m.beforeTargets(r) p.w('<%sBeforeTargets>Midl', r.name, r.name) end function m.commandLineTemplates(r) if #r.buildcommands then local cmds = table.concat(r.buildcommands, p.eol()) p.x('%s', cmds) end end function m.dependsOn(r) p.w('<%sDependsOn', r.name) p.w(' Condition="\'$(ConfigurationType)\' != \'Makefile\'">_SelectedFiles;$(%sDependsOn)', r.name, r.name, r.name) end function m.executionDescription(r) if r.buildmessage then p.x('%s', r.buildmessage) end end function m.outputs(r) if #r.buildoutputs then local outputs = table.concat(r.buildoutputs, ";") p.x('%s', path.translate(outputs)) end end