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}'
+```
+