# HG changeset patch
# User Ben Henning
# Date 1376509869 25200
#      Wed Aug 14 12:51:09 2013 -0700
# Node ID e8558df4fbdb173a2b9ed0d354d6c3e76b376698
# Parent  a5f8b4f709722222e02fa481873d76ad25255e09
Fixed a bug in Xcode project generation wherein pre/prelink/post-build commands
would not be properly executed if the premake script only had the commands
in configuration blocks, rather than in the project block. According to the
website, these commands can exist in both blocks and the Xcode script does
properly generate the commands, it just doesn't add a single line which allows
Xcode to execute the commands at the correct stage. This patch fixes those
issues.

diff --git a/src/actions/xcode/xcode_common.lua b/src/actions/xcode/xcode_common.lua
--- a/src/actions/xcode/xcode_common.lua
+++ b/src/actions/xcode/xcode_common.lua
@@ -432,20 +432,37 @@
 		for _, node in ipairs(tr.products.children) do
 			local name = tr.project.name
 			
+			-- This function checks whether there are build commands of a specific
+			-- type to be executed; they will be generated correctly, but the project
+			-- commands will not contain any per-configuration commands, so the logic
+			-- has to be extended a bit to account for that.
+			local function hasBuildCommands(which)
+				-- standard check...this is what existed before
+				if #tr.project[which] > 0 then
+					return true
+				end
+				-- what if there are no project-level commands? check configs...
+				for _, cfg in ipairs(tr.configs) do
+					if #cfg[which] > 0 then
+						return true
+					end
+				end
+			end
+			
 			_p(2,'%s /* %s */ = {', node.targetid, name)
 			_p(3,'isa = PBXNativeTarget;')
 			_p(3,'buildConfigurationList = %s /* Build configuration list for PBXNativeTarget "%s" */;', node.cfgsection, name)
 			_p(3,'buildPhases = (')
-			if #tr.project.prebuildcommands > 0 then
+			if hasBuildCommands('prebuildcommands') then
 				_p(4,'9607AE1010C857E500CD1376 /* Prebuild */,')
 			end
 			_p(4,'%s /* Resources */,', node.resstageid)
 			_p(4,'%s /* Sources */,', node.sourcesid)
-			if #tr.project.prelinkcommands > 0 then
+			if hasBuildCommands('prelinkcommands') then
 				_p(4,'9607AE3510C85E7E00CD1376 /* Prelink */,')
 			end
 			_p(4,'%s /* Frameworks */,', node.fxstageid)
-			if #tr.project.postbuildcommands > 0 then
+			if hasBuildCommands('postbuildcommands') then
 				_p(4,'9607AE3710C85E8F00CD1376 /* Postbuild */,')
 			end
 			_p(3,');')
