Merge pull request #1012 from pushkarnk/duplicate-rules

diff --git a/lib/product.py b/lib/product.py
index 925cd78..851b39e 100644
--- a/lib/product.py
+++ b/lib/product.py
@@ -77,11 +77,12 @@
     def __init__(self, name):
         Product.__init__(self, name)
 
-    def generate(self, flags):
-        generated = Product.generate(self)
-        objects = []
-        for phase in self.phases:
-            objects += phase.objects
+    def generate(self, flags, objects = []):
+        generated = ""
+        if len(objects) == 0:
+            generated = Product.generate(self)
+            for phase in self.phases:
+                objects += phase.objects
 
         product_flags = " ".join(flags)
         if self.LDFLAGS is not None:
@@ -106,7 +107,7 @@
 
 """
 
-        return generated
+        return objects, generated
 
 
 class DynamicLibrary(Library):
@@ -114,15 +115,15 @@
         Library.__init__(self, name)
         self.name = name
 
-    def generate(self):
+    def generate(self, objects = []):
         self.rule = "Link"
         self.product_name = Configuration.current.target.dynamic_library_prefix + self.name + Configuration.current.target.dynamic_library_suffix
         if Configuration.current.target.sdk == OSType.Linux or Configuration.current.target.sdk == OSType.FreeBSD:
             self.conformance_begin = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swift_begin.o' 
             self.conformance_end = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swift_end.o' 
-            return Library.generate(self, ["-shared", "-Wl,-soname," + self.product_name, "-Wl,--no-undefined"])
+            return Library.generate(self, ["-shared", "-Wl,-soname," + self.product_name, "-Wl,--no-undefined"], objects)
         else:
-            return Library.generate(self, ["-shared"])
+            return Library.generate(self, ["-shared"], objects)
 
 
 class Framework(Product):
@@ -189,7 +190,9 @@
         DynamicLibrary.__init__(self, name)
 
     def generate(self):
-        return StaticLibrary.generate(self) + DynamicLibrary.generate(self)
+        objects, generatedForStatic = StaticLibrary.generate(self)
+        _, generatedForDynamic = DynamicLibrary.generate(self, objects)
+        return generatedForStatic + generatedForDynamic
 
 class Executable(Product):
     def __init__(self, name):