diff --git a/CHANGES.txt b/CHANGES.txt index 062dcad0..48b06a18 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -10,3 +10,5 @@ Since 5.0-alpha1: * filter() now accepts field value aliases in the conditions * Fixed _ACTION and _OPTIONS filter prefixes * Main application logic can now be extended by modules +* Action arguments (_ARGS) are now keyed by both index and value +* Configuration baking and validation now skipped for execute only actions diff --git a/src/_premake_main.lua b/src/_premake_main.lua index c7a6c1a3..5c2caca6 100644 --- a/src/_premake_main.lua +++ b/src/_premake_main.lua @@ -217,7 +217,7 @@ os.exit(1) end - if not os.isfile(_MAIN_SCRIPT) then + if p.action.isConfigurable() and not os.isfile(_MAIN_SCRIPT) then print(string.format("No Premake script (%s) found!", path.getname(_MAIN_SCRIPT))) os.exit(1) end @@ -230,7 +230,9 @@ --- function m.preBake() - print("Building configurations...") + if p.action.isConfigurable() then + print("Building configurations...") + end end @@ -239,7 +241,9 @@ --- function m.bake() - premake.oven.bake() + if p.action.isConfigurable() then + premake.oven.bake() + end end @@ -257,7 +261,9 @@ --- function m.validate() - p.container.validate(p.api.rootContainer()) + if p.action.isConfigurable() then + p.container.validate(p.api.rootContainer()) + end end @@ -287,5 +293,7 @@ --- function m.postAction() - print("Done.") + if p.action.isConfigurable() then + print("Done.") + end end diff --git a/src/base/action.lua b/src/base/action.lua index 9ee16819..df5dec27 100644 --- a/src/base/action.lua +++ b/src/base/action.lua @@ -1,7 +1,7 @@ --- -- action.lua -- Work with the list of registered actions. --- Copyright (c) 2002-2014 Jason Perkins and the Premake project +-- Copyright (c) 2002-2015 Jason Perkins and the Premake project --- local p = premake @@ -25,6 +25,7 @@ _ACTION = arg else table.insert(_ARGS, arg) + _ARGS[arg] = arg end end end @@ -39,12 +40,12 @@ action._list = {} --- +--- -- Register a new action. -- -- @param act -- The new action object. --- +--- function action.add(act) -- validate the action object, at least a little bit @@ -60,19 +61,16 @@ error(string.format('action "%s" needs a %s', name, missing), 3) end - -- add it to the master list action._list[act.trigger] = act end --- +--- -- Trigger an action. -- -- @param name -- The name of the action to be triggered. --- @returns --- None. --- +--- function action.call(name) local act = action._list[name] @@ -112,26 +110,26 @@ end --- +--- -- Retrieve the current action, as determined by _ACTION. -- -- @return -- The current action, or nil if _ACTION is nil or does not match any action. --- +--- function action.current() return action.get(_ACTION) end --- +--- -- Retrieve an action by name. -- -- @param name -- The name of the action to retrieve. -- @returns -- The requested action, or nil if the action does not exist. --- +--- function action.get(name) -- "Next-gen" actions are deprecated @@ -142,9 +140,9 @@ end --- +--- -- Iterator for the list of actions. --- +--- function action.each() -- sort the list by trigger @@ -162,12 +160,34 @@ end --- +--- +-- Determines if an action makes use of the configuration information +-- provided by the project scripts (i.e. it is an exporter) or if it +-- simply performs an action irregardless of configuration, in which +-- case the baking and validation phases can be skipped. +--- + + function action.isConfigurable(self) + if not self then + self = action.current() or {} + end + if self.onSolution or self.onsolution then + return true + end + if self.onProject or self.onproject then + return true + end + return false + end + + + +--- -- Activates a particular action. -- -- @param name -- The name of the action to activate. --- +--- function action.set(name) _ACTION = name @@ -180,51 +200,28 @@ end --- +--- -- Determines if an action supports a particular language or target type. -- --- @param act --- The action to test. -- @param feature -- The feature to check, either a programming language or a target type. -- @returns -- True if the feature is supported, false otherwise. --- +--- - function action.supports(act, feature) - if not act then + function action.supports(self, feature) + if not self then return false end - if act.valid_languages then - if table.contains(act.valid_languages, feature) then + if self.valid_languages then + if table.contains(self.valid_languages, feature) then return true end end - if act.valid_kinds then - if table.contains(act.valid_kinds, feature) then + if self.valid_kinds then + if table.contains(self.valid_kinds, feature) then return true end end return false end - - - --- --- Determines if an action supports a particular configuration. --- @return --- True if the configuration is supported, false otherwise. --- - - function action.supportsconfig(act, cfg) - if not act then - return false - end - - if act.supportsconfig then - return act.supportsconfig(cfg) - end - - return true - end - diff --git a/src/base/oven.lua b/src/base/oven.lua index 2e08bdc0..857fbdfd 100644 --- a/src/base/oven.lua +++ b/src/base/oven.lua @@ -177,14 +177,7 @@ local buildcfg = pairing[1] local platform = pairing[2] local cfg = oven.bakeConfig(self, buildcfg, platform) - - -- Check to make sure this configuration is supported by the current - -- action; add it to the project's configuration cache if so. - - if p.action.supportsconfig(cfg) then - self.configs[(buildcfg or "*") .. (platform or "")] = cfg - end - + self.configs[(buildcfg or "*") .. (platform or "")] = cfg end -- Process the sub-objects that are contained by this project. The