diff --git a/modules/codelite/_preload.lua b/modules/codelite/_preload.lua index 902d08562..32e39a3e9 100644 --- a/modules/codelite/_preload.lua +++ b/modules/codelite/_preload.lua @@ -46,6 +46,11 @@ onCleanTarget = function(prj) p.modules.codelite.cleanTarget(prj) end, + + pathVars = { + ["rule.inputs"] = { absolute = false, token = "$<" }, + ["rule.outputs"] = { absolute = false, token = "$@" } + } } diff --git a/modules/gmake2/_preload.lua b/modules/gmake2/_preload.lua index b92151f66..75b06566e 100644 --- a/modules/gmake2/_preload.lua +++ b/modules/gmake2/_preload.lua @@ -62,7 +62,12 @@ onCleanProject = function(prj) p.clean.file(prj, p.modules.gmake2.getmakefilename(prj, true)) - end + end, + + pathVars = { + ["rule.inputs"] = { absolute = false, token = "$<" }, + ["rule.outputs"] = { absolute = false, token = "$@" } + } } -- diff --git a/modules/vstudio/tests/vc2010/test_rule_props.lua b/modules/vstudio/tests/vc2010/test_rule_props.lua index 8b61eec2c..13f58a729 100644 --- a/modules/vstudio/tests/vc2010/test_rule_props.lua +++ b/modules/vstudio/tests/vc2010/test_rule_props.lua @@ -38,6 +38,10 @@ '%{output_path}%{file.basename}.example.cc', '%{output_path}%{file.basename}.example.h' } + builddependencies { + 'dependency_1.lib', + 'dependency_2.lib', + } end @@ -68,3 +72,16 @@ ]] end + +-- +-- additionalDependencies +-- + + function suite.additionalDependencies() + local r = test.getRule("example") + m.additionalDependencies(r) + + test.capture [[ +dependency_1.lib;dependency_2.lib + ]] + end diff --git a/modules/vstudio/tests/vc2010/test_rule_targets.lua b/modules/vstudio/tests/vc2010/test_rule_targets.lua index 21bda828e..f5bb784db 100644 --- a/modules/vstudio/tests/vc2010/test_rule_targets.lua +++ b/modules/vstudio/tests/vc2010/test_rule_targets.lua @@ -95,3 +95,56 @@ ]] end + + + +-- +-- ruleTask +-- + + function suite.ruleTask() + local r = test.getRule("example") + m.rule(r) + + test.capture [[ + + ]] + end + + + +-- +-- targetInputs +-- + + function suite.targetInputs() + local r = test.getRule("example") + m.targetInputs(r) + + test.capture [[ +Inputs="@(example);%(example.AdditionalDependencies);$(MSBuildProjectFile)" + ]] + end + + + +-- +-- targetOutputs +-- + + function suite.targetOutputs() + local r = test.getRule("example") + m.targetOutputs(r) + + test.capture [[ +Outputs="@(example->'%(Outputs)')" + ]] + end diff --git a/modules/vstudio/vs2010.lua b/modules/vstudio/vs2010.lua index ed4fcfe7c..e87b02943 100644 --- a/modules/vstudio/vs2010.lua +++ b/modules/vstudio/vs2010.lua @@ -36,6 +36,8 @@ ["file.reldirectory"] = { absolute = false, token = "%(RelativeDir)" }, ["file.extension"] = { absolute = false, token = "%(Extension)" }, ["file.name"] = { absolute = false, token = "%(Filename)%(Extension)" }, + ["rule.inputs"] = { absolute = false, token = "[Inputs]" }, + ["rule.outputs"] = { absolute = false, token = "[Outputs]" }, } diff --git a/modules/vstudio/vs2010_rules_targets.lua b/modules/vstudio/vs2010_rules_targets.lua index 6079bd5cf..363f3f6a7 100644 --- a/modules/vstudio/vs2010_rules_targets.lua +++ b/modules/vstudio/vs2010_rules_targets.lua @@ -294,7 +294,9 @@ function m.inputs(r) - p.w('Inputs="%%(%s.Identity)"', r.name) + -- inputs and outputs passed to task + p.w('Inputs="@(%s)"', r.name) + p.w('Outputs="@(%s->\'%%(Outputs)\')"', r.name) end @@ -410,7 +412,7 @@ end end extra = table.concat(extra) - p.w('Inputs="%%(%s.Identity);%%(%s.AdditionalDependencies);%s$(MSBuildProjectFile)"', r.name, r.name, extra) + p.w('Inputs="@(%s);%%(%s.AdditionalDependencies);%s$(MSBuildProjectFile)"', r.name, r.name, extra) end @@ -422,7 +424,7 @@ function m.targetOutputs(r) - p.w('Outputs="%%(%s.Outputs)"', r.name) + p.w('Outputs="@(%s->\'%%(Outputs)\')"', r.name) end diff --git a/modules/vstudio/vs2010_rules_xml.lua b/modules/vstudio/vs2010_rules_xml.lua index 491d7710c..228d85d45 100644 --- a/modules/vstudio/vs2010_rules_xml.lua +++ b/modules/vstudio/vs2010_rules_xml.lua @@ -406,8 +406,7 @@ p.push('') + p.w('IncludeInCommandLine="true" />') p.pop() end diff --git a/website/docs/Custom-Rules.md b/website/docs/Custom-Rules.md index 371ae225d..3119092f4 100644 --- a/website/docs/Custom-Rules.md +++ b/website/docs/Custom-Rules.md @@ -72,3 +72,14 @@ project "MyProject" StripDebugInfo = true } ``` + +## Rule Batching + +With msbuild, custom rules can be batched if same properties are used. To enable this, use `rule.inputs` or `rule.outputs` tokens in `buildcommands`. If corresponding output is up-to-date to the input, then the input will be omitted. + +```lua +rule "BatchRule" + fileextension ".xyz" + buildcommands 'MyProcessor.exe %{rule.inputs}' +``` +