Upgrade to 3.29

Update V8 to 3.29.88.17 and update makefiles to support building on
all the relevant platforms.

Bug: 17370214

Change-Id: Ia3407c157fd8d72a93e23d8318ccaf6ecf77fa4e
diff --git a/test/cctest/testcfg.py b/test/cctest/testcfg.py
index b2eabc4..bd93450 100644
--- a/test/cctest/testcfg.py
+++ b/test/cctest/testcfg.py
@@ -25,94 +25,66 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import test
 import os
-from os.path import join, dirname, exists
-import platform
-import utils
+import shutil
+
+from testrunner.local import commands
+from testrunner.local import testsuite
+from testrunner.local import utils
+from testrunner.objects import testcase
 
 
-class CcTestCase(test.TestCase):
+class CcTestSuite(testsuite.TestSuite):
 
-  def __init__(self, path, executable, mode, raw_name, dependency, context, variant_flags):
-    super(CcTestCase, self).__init__(context, path, mode)
-    self.executable = executable
-    self.raw_name = raw_name
-    self.dependency = dependency
-    self.variant_flags = variant_flags
-
-  def GetLabel(self):
-    return "%s %s %s" % (self.mode, self.path[-2], self.path[-1])
-
-  def GetName(self):
-    return self.path[-1]
-
-  def BuildCommand(self, name):
-    serialization_file = ''
-    if exists(join(self.context.buildspace, 'obj', 'test', self.mode)):
-      serialization_file = join('obj', 'test', self.mode, 'serdes')
-    else:
-      serialization_file = join('obj', 'serdes')
-    serialization_file += '_' + self.GetName()
-    serialization_file = join(self.context.buildspace, serialization_file)
-    serialization_file += ''.join(self.variant_flags).replace('-', '_')
-    serialization_option = '--testing_serialization_file=' + serialization_file
-    result = [ self.executable, name, serialization_option ]
-    result += self.context.GetVmFlags(self, self.mode)
-    return result
-
-  def GetCommand(self):
-    return self.BuildCommand(self.raw_name)
-
-  def Run(self):
-    if self.dependency != '':
-      dependent_command = self.BuildCommand(self.dependency)
-      output = self.RunCommand(dependent_command)
-      if output.HasFailed():
-        return output
-    return test.TestCase.Run(self)
-
-
-class CcTestConfiguration(test.TestConfiguration):
-
-  def __init__(self, context, root):
-    super(CcTestConfiguration, self).__init__(context, root)
-
-  def GetBuildRequirements(self):
-    return ['cctests']
-
-  def ListTests(self, current_path, path, mode, variant_flags):
-    executable = 'cctest'
+  def __init__(self, name, root):
+    super(CcTestSuite, self).__init__(name, root)
     if utils.IsWindows():
-      executable += '.exe'
-    executable = join(self.context.buildspace, executable)
-    if not exists(executable):
-      executable = join('obj', 'test', mode, 'cctest')
-      if utils.IsWindows():
-        executable += '.exe'
-      executable = join(self.context.buildspace, executable)
-    output = test.Execute([executable, '--list'], self.context)
+      build_dir = "build"
+    else:
+      build_dir = "out"
+    self.serdes_dir = os.path.normpath(
+        os.path.join(root, "..", "..", build_dir, ".serdes"))
+    if os.path.exists(self.serdes_dir):
+      shutil.rmtree(self.serdes_dir, True)
+    os.makedirs(self.serdes_dir)
+
+  def ListTests(self, context):
+    shell = os.path.abspath(os.path.join(context.shell_dir, self.shell()))
+    if utils.IsWindows():
+      shell += ".exe"
+    output = commands.Execute(context.command_prefix +
+                              [shell, "--list"] +
+                              context.extra_flags)
     if output.exit_code != 0:
       print output.stdout
       print output.stderr
       return []
-    result = []
+    tests = []
     for test_desc in output.stdout.strip().split():
+      if test_desc.find('<') < 0:
+        # Native Client output can contain a few non-test arguments
+        # before the tests. Skip these.
+        continue
       raw_test, dependency = test_desc.split('<')
-      relative_path = raw_test.split('/')
-      full_path = current_path + relative_path
       if dependency != '':
-        dependency = relative_path[0] + '/' + dependency
-      if self.Contains(path, full_path):
-        result.append(CcTestCase(full_path, executable, mode, raw_test, dependency, self.context, variant_flags))
-    result.sort()
-    return result
+        dependency = raw_test.split('/')[0] + '/' + dependency
+      else:
+        dependency = None
+      test = testcase.TestCase(self, raw_test, dependency=dependency)
+      tests.append(test)
+    tests.sort()
+    return tests
 
-  def GetTestStatus(self, sections, defs):
-    status_file = join(self.root, 'cctest.status')
-    if exists(status_file):
-      test.ReadConfigurationInto(status_file, sections, defs)
+  def GetFlagsForTestCase(self, testcase, context):
+    testname = testcase.path.split(os.path.sep)[-1]
+    serialization_file = os.path.join(self.serdes_dir, "serdes_" + testname)
+    serialization_file += ''.join(testcase.flags).replace('-', '_')
+    return (testcase.flags + [testcase.path] + context.mode_flags +
+            ["--testing_serialization_file=" + serialization_file])
+
+  def shell(self):
+    return "cctest"
 
 
-def GetConfiguration(context, root):
-  return CcTestConfiguration(context, root)
+def GetSuite(name, root):
+  return CcTestSuite(name, root)