OSDN Git Service

Fix for duplicate names in whole static libs
authorDan Albert <danalbert@google.com>
Fri, 23 May 2014 17:41:29 +0000 (10:41 -0700)
committerDan Albert <danalbert@google.com>
Sat, 24 May 2014 01:23:47 +0000 (18:23 -0700)
_extract-and-include-single-(host|target)-whole-static-lib was written such that
only the first file of a given name would be extracted and included into the new
library. This patch iterates over each identically named archive member,
extracts them individually, and adds them to the new archive.

Bug: 15110069
Change-Id: Ia08c7be6f40bfc8403908a8808898ada479099b1

core/combo/select.mk
core/definitions.mk

index 8234a8f..506ad08 100644 (file)
@@ -53,7 +53,7 @@ $(combo_var_prefix)GLOBAL_CFLAGS := -fno-exceptions -Wno-multichar
 $(combo_var_prefix)RELEASE_CFLAGS := -O2 -g -fno-strict-aliasing
 $(combo_var_prefix)GLOBAL_CPPFLAGS :=
 $(combo_var_prefix)GLOBAL_LDFLAGS :=
-$(combo_var_prefix)GLOBAL_ARFLAGS := crsPD
+$(combo_var_prefix)GLOBAL_ARFLAGS := cqsPD
 $(combo_var_prefix)GLOBAL_LD_DIRS :=
 
 $(combo_var_prefix)EXECUTABLE_SUFFIX :=
index e35d36f..7e69d11 100644 (file)
@@ -1167,16 +1167,16 @@ endef
 # $(1): the full path of the source static library.
 define _extract-and-include-single-target-whole-static-lib
 @echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(1)]"
-$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
-    rm -rf $$ldir; \
-    mkdir -p $$ldir; \
-    filelist=; \
-    for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) t $(1)`; do \
-        $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) p $(1) $$f > $$ldir/$$f; \
-        filelist="$$filelist $$ldir/$$f"; \
-    done ; \
-    $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_ARFLAGS) \
-        $(PRIVATE_ARFLAGS) $@ $$filelist
+$(hide) \
+    for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) t $(1) | sort | uniq`; do \
+        i=0; \
+        for ff in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) t $(1) $$f`; do \
+            i=$$(($$i + 1)); \
+            $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) xN $$i $(1) $$f; \
+            $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) \
+                $(PRIVATE_ARFLAGS) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_ARFLAGS) $@ $$f; \
+        done ; \
+    done ;
 
 endef
 
@@ -1204,16 +1204,16 @@ endef
 # $(1): the full path of the source static library.
 define _extract-and-include-single-host-whole-static-lib
 @echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(1)]"
-$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
-    rm -rf $$ldir; \
-    mkdir -p $$ldir; \
-    filelist=; \
-    for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) t $(1) | \grep '\.o$$'`; do \
-        $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) p $(1) $$f > $$ldir/$$f; \
-        filelist="$$filelist $$ldir/$$f"; \
-    done ; \
-    $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_ARFLAGS) \
-        $(PRIVATE_ARFLAGS) $@ $$filelist
+$(hide) \
+    for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) t $(1) | \grep '\.o$$' | sort | uniq`; do \
+        i=0; \
+        for ff in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) t $(1) $$f`; do \
+            i=$$(($$i + 1)); \
+            $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) xN $$i $(1) $$f; \
+            $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) \
+                $(PRIVATE_ARFLAGS) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_ARFLAGS) $@ $$f; \
+        done ; \
+    done ;
 
 endef