Turn hidden API lists into a single CSV

Maintaining multiple text files has become too cumbersome as adding
each new category of API requires changes across many projects.
This patch changes generate_hiddenapi_lists.py to produce a single
CSV file in the format:

  <api_signature>,<flag1>,...,<flagN>

It can accept legacy API list files as input (for existing
frameworks/base/config/hiddenapi-*.txt files) as well as per-package
CSVs produced by class2greylist.

Test: m, check lists have not changed
Test: phone boots
Test: tools/hiddenapi/generate_hiddenapi_lists_test.py
Change-Id: Iebcef426ec93ea1d72b662bbff91d4e068fa0a70
diff --git a/Android.mk b/Android.mk
index 770ec20..b7dda9a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -73,55 +73,37 @@
 	( unzip -qo $< -d $(OUT_DOCS)/offline-sdk && touch -f $@ ) || exit 1
 
 # ==== hiddenapi lists =======================================
-.KATI_RESTAT: \
-	$(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST) \
-	$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
-	$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \
-	$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
-$(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST): \
-    .KATI_IMPLICIT_OUTPUTS := \
-        $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
-        $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \
-        $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
-$(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST): \
+.KATI_RESTAT: $(INTERNAL_PLATFORM_HIDDENAPI_FLAGS)
+$(INTERNAL_PLATFORM_HIDDENAPI_FLAGS): \
     frameworks/base/tools/hiddenapi/generate_hiddenapi_lists.py \
     frameworks/base/config/hiddenapi-light-greylist.txt \
     frameworks/base/config/hiddenapi-vendor-list.txt \
+    frameworks/base/config/hiddenapi-greylist-max-o.txt \
     frameworks/base/config/hiddenapi-max-sdk-p-blacklist.txt \
     frameworks/base/config/hiddenapi-force-blacklist.txt \
     $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) \
     $(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST) \
     $(INTERNAL_PLATFORM_REMOVED_DEX_API_FILE)
 	frameworks/base/tools/hiddenapi/generate_hiddenapi_lists.py \
-	    --input-public $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) \
-	    --input-private $(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST) \
-	    --input-whitelists $(PRIVATE_WHITELIST_INPUTS) \
-	    --input-greylists \
+	    --public $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) \
+	    --private $(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST) \
+	    --csv $(PRIVATE_FLAGS_INPUTS) \
+	    --greylist \
 	        frameworks/base/config/hiddenapi-light-greylist.txt \
 	        frameworks/base/config/hiddenapi-vendor-list.txt \
-	        frameworks/base/config/hiddenapi-max-sdk-p-blacklist.txt \
-	        <(comm -12 <(sort $(INTERNAL_PLATFORM_REMOVED_DEX_API_FILE)) \
-	                   $(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST)) \
-	        $(PRIVATE_GREYLIST_INPUTS) \
-	    --input-blacklists frameworks/base/config/hiddenapi-force-blacklist.txt \
-	    --output-whitelist $(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST).tmp \
-	    --output-light-greylist $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST).tmp \
-	    --output-dark-greylist $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST).tmp \
-	    --output-blacklist $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST).tmp
-	$(call commit-change-for-toc,$(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST))
-	$(call commit-change-for-toc,$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST))
-	$(call commit-change-for-toc,$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST))
-	$(call commit-change-for-toc,$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST))
+	    --greylist-ignore-conflicts $(INTERNAL_PLATFORM_REMOVED_DEX_API_FILE) \
+	    --greylist-max-o-ignore-conflicts \
+	        frameworks/base/config/hiddenapi-greylist-max-o.txt \
+	    --blacklist frameworks/base/config/hiddenapi-force-blacklist.txt \
+	    --output $@.tmp
+	$(call commit-change-for-toc,$@)
 
 $(INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA): \
     frameworks/base/tools/hiddenapi/merge_csv.py \
     $(PRIVATE_METADATA_INPUTS)
 	frameworks/base/tools/hiddenapi/merge_csv.py $(PRIVATE_METADATA_INPUTS) > $@
 
-$(call dist-for-goals,droidcore,$(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST))
-$(call dist-for-goals,droidcore,$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST))
-$(call dist-for-goals,droidcore,$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST))
-$(call dist-for-goals,droidcore,$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST))
+$(call dist-for-goals,droidcore,$(INTERNAL_PLATFORM_HIDDENAPI_FLAGS))
 $(call dist-for-goals,droidcore,$(INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA))
 
 # Include subdirectory makefiles