From d9a88d585f162c5b99c5c6f995c0400fc616bd26 Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Fri, 26 Oct 2012 09:21:28 -0700 Subject: [PATCH] Split to multiple bash commands. This can fix the error "/bin/bash: Argument list too long", if we get a really long apk list. Bug tracker Link: http://code.google.com/p/android/issues/detail?id=38937 Change-Id: I72258125c4297dfd9f8f502a96dbfa5a08f3cc50 --- core/Makefile | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/core/Makefile b/core/Makefile index 4e547ad978..1a816e5f29 100644 --- a/core/Makefile +++ b/core/Makefile @@ -240,6 +240,12 @@ package-stats: $(PACKAGE_STATS_FILE) # ----------------------------------------------------------------- # Cert-to-package mapping. Used by the post-build signing tools. +# Use a macro to add newline to each echo command +define _apkcerts_echo_with_newline +$(hide) echo $(1) + +endef + name := $(TARGET_PRODUCT) ifeq ($(TARGET_BUILD_TYPE),debug) name := $(name)_debug @@ -254,13 +260,15 @@ $(APKCERTS_FILE): @echo APK certs list: $@ @mkdir -p $(dir $@) @rm -f $@ - $(hide) $(foreach p,$(PACKAGES),\ - $(if $(PACKAGES.$(p).EXTERNAL_KEY),\ - echo 'name="$(p).apk" certificate="EXTERNAL" \ - private_key=""' >> $@;,\ - echo 'name="$(p).apk" certificate="$(PACKAGES.$(p).CERTIFICATE)" \ - private_key="$(PACKAGES.$(p).PRIVATE_KEY)"' >> $@;)) - # In case $(PACKAGES) is empty. + $(foreach p,$(PACKAGES),\ + $(if $(PACKAGES.$(p).EXTERNAL_KEY),\ + $(call _apkcerts_echo_with_newline,\ + 'name="$(p).apk" certificate="EXTERNAL" \ + private_key=""' >> $@),\ + $(call _apkcerts_echo_with_newline,\ + 'name="$(p).apk" certificate="$(PACKAGES.$(p).CERTIFICATE)" \ + private_key="$(PACKAGES.$(p).PRIVATE_KEY)"' >> $@))) + # In case value of PACKAGES is empty. $(hide) touch $@ .PHONY: apkcerts-list