 +    if '_library' in spec['type'] and target[:3] == 'lib':
 +      target = target[3:]
 +
++    if spec['type'] in ('static_library', 'loadable_module', 'shared_library'):
++      prefix = spec.get('product_prefix', 'lib')
++
 +    if spec['type'] == 'static_library':
-+      return 'lib%s.a' % target
++      return '%s%s.a' % (prefix, target)
 +    elif spec['type'] in ('loadable_module', 'shared_library'):
-+      return 'lib%s.so' % target
++      return '%s%s.so' % (prefix, target)
 +    elif spec['type'] == 'none':
 +      return '%s.stamp' % target
 +    elif spec['type'] == 'settings':

+  def ComputeOutput(self, spec):
+    filename = self.ComputeOutputFileName(spec)
+
+    assert 'product_prefix' not in spec
+    if 'product_name' in spec:
+      print 'XXX ignoring product_name', spec['product_name']
+    assert 'product_extension' not in spec

+
+""" % {
+  'cwd': os.getcwd(),
+  'cc': os.environ.get('CC', 'gcc'),
+  'cxx': os.environ.get('CXX', 'g++'),
+}
+
+def QuoteShellArgument(arg):
