EbuildBuild: handle empty PORTAGE_BINPKG_FORMAT

Also, make TaskSequence._start_next_task() call exit hooks if the
queue happens to be empty.

X-Gentoo-Bug: 506186
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=506186
diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py
index e13b1cf..86a5631 100644
--- a/pym/_emerge/EbuildBuild.py
+++ b/pym/_emerge/EbuildBuild.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2013 Gentoo Foundation
+# Copyright 1999-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from _emerge.EbuildExecuter import EbuildExecuter
@@ -321,7 +321,12 @@
 						pkg=self.pkg, scheduler=self.scheduler,
 						settings=self.settings))
 
-		self._start_task(binpkg_tasks, self._buildpkg_exit)
+		if binpkg_tasks:
+			self._start_task(binpkg_tasks, self._buildpkg_exit)
+			return
+
+		self._final_exit(build)
+		self.wait()
 
 	def _buildpkg_exit(self, packager):
 		"""
diff --git a/pym/_emerge/TaskSequence.py b/pym/_emerge/TaskSequence.py
index b4bfefe..1f2ba94 100644
--- a/pym/_emerge/TaskSequence.py
+++ b/pym/_emerge/TaskSequence.py
@@ -1,10 +1,12 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+import sys
+from collections import deque
+
 from portage import os
 from _emerge.CompositeTask import CompositeTask
 from _emerge.AsynchronousTask import AsynchronousTask
-from collections import deque
 
 class TaskSequence(CompositeTask):
 	"""
@@ -30,9 +32,15 @@
 		CompositeTask._cancel(self)
 
 	def _start_next_task(self):
-		if self._task_queue:
-			self._start_task(self._task_queue.popleft(),
-				self._task_exit_handler)
+		try:
+			task = self._task_queue.popleft()
+		except IndexError:
+			self._current_task = None
+			self.returncode = os.EX_OK
+			self.wait()
+			return
+
+		self._start_task(task, self._task_exit_handler)
 
 	def _task_exit_handler(self, task):
 		if self._default_exit(task) != os.EX_OK:
@@ -43,3 +51,11 @@
 			self._final_exit(task)
 			self.wait()
 
+	def __bool__(self):
+		return bool(self._task_queue)
+
+	if sys.hexversion < 0x3000000:
+		__nonzero__ = __bool__
+
+	def __len__(self):
+		return len(self._task_queue)