SDK: generate repo using latest schemas when available.
This generates a repository in either v5 or v6 and adjusts
the name/vendor attributes accordingly.
This extracts the support extra in a separate 'repo-extras.xml'
which has an addon.xsd type instead of being a repository.xsd.
Requires sdk.git change Ib0363f06 to build properly.
Change-Id: I250fe7a3ec0dfa490778ae747a1a8f4e536bb395
diff --git a/build/tools/mk_sdk_repo_xml.sh b/build/tools/mk_sdk_repo_xml.sh
index b721200..ef2d51b 100755
--- a/build/tools/mk_sdk_repo_xml.sh
+++ b/build/tools/mk_sdk_repo_xml.sh
@@ -21,6 +21,7 @@
cat <<EOFU
Usage: $0 output.xml xml-schema [type [os zip[:dest]]*...]*
where:
+- schema is one of 'repository' or 'addon'
- type is one of ${TYPES// /, } (or their plural).
- os is one of ${OSES// /, }.
There can be more than one zip for the same type
@@ -40,15 +41,20 @@
[[ -z "$OUT" ]] && error "Missing output.xml name."
shift
+# Get the schema type. Must be either "repository" or "addon".
SCHEMA="$1"
[[ ! -f "$SCHEMA" ]] && error "Invalid XML schema name: $SCHEMA."
shift
# Get XML:NS for SDK from the schema
+# This will be something like "http://schemas.android.com/sdk/android/addon/3"
XMLNS=$(sed -n '/xmlns:sdk="/s/.*"\(.*\)".*/\1/p' "$SCHEMA")
[[ -z "$XMLNS" ]] && error "Failed to find xmlns:sdk in $SCHEMA."
echo "## Using xmlns:sdk=$XMLNS"
+# Extract the schema version number from the XMLNS, e.g. it would extract "3"
+VERSION="${XMLNS##*/}"
+
# Get the root element from the schema. This is the first element
# which name starts with "sdk-" (e.g. sdk-repository, sdk-addon)
ROOT=$(sed -n -e '/xsd:element.*name="sdk-/s/.*name="\(sdk-[^"]*\)".*/\1/p' "$SCHEMA")
@@ -80,37 +86,46 @@
# Parse all archives.
ATTRS=(
- # for repository packages
- Pkg.Revision revision
- Pkg.Desc description
- Platform.Version version
- AndroidVersion.ApiLevel api-level
- AndroidVersion.CodeName codename
- Platform.IncludedAbi included-abi
- Platform.MinToolsRev min-tools-rev
- Platform.MinPlatformToolsRev min-platform-tools-rev
- Extra.Vendor vendor
- Extra.VendorId vendor-id
- Extra.VendorDisplay vendor-display
- Extra.NameDisplay name-display
- Extra.Path path
- Extra.OldPaths old-paths
- Extra.MinApiLevel min-api-level
- Sample.MinApiLevel min-api-level
- SystemImage.Abi abi
- Layoutlib.Api layoutlib/api
- Layoutlib.Revision layoutlib/revision
- # for addon packages
- vendor vendor
- vendor-id vendor-id
- vendor-display vendor-display
- name name
- name-id name-id
- name-display name-display
- description description
- api api-level
- version revision
- revision revision
+ # Columns:
+ # --------------------------+------------------------+----------------------
+ # Name read from | XML element written | Min-XSD version
+ # source.properties | to repository.xml | where XML can be used
+ # --------------------------+------------------------+----------------------
+ # from source.properties for repository.xml packages
+ Pkg.Revision revision 1
+ Pkg.Desc description 1
+ Platform.Version version 1
+ AndroidVersion.ApiLevel api-level 1
+ AndroidVersion.CodeName codename 1
+ Platform.IncludedAbi included-abi 5
+ Platform.MinToolsRev min-tools-rev 1
+ Platform.MinPlatformToolsRev min-platform-tools-rev 3
+ Sample.MinApiLevel min-api-level 2
+ SystemImage.Abi abi 5
+ Layoutlib.Api layoutlib/api 4
+ Layoutlib.Revision layoutlib/revision 4
+ # from source.properties for addon.xml packages
+ Extra.Vendor vendor 1
+ Extra.VendorId vendor-id 4
+ Extra.VendorDisplay vendor-display 4
+ Extra.NameDisplay name-display 4
+ Extra.Path path 1
+ Extra.OldPaths old-paths 3
+ Extra.MinApiLevel min-api-level 2
+ # from addon manifest.ini for addon.xml packages
+ # (note that vendor/name are mapped to different XML elements based on the XSD version)
+ vendor-id vendor-id 4
+ vendor-display vendor-display 4
+ vendor vendor-display 4
+ vendor vendor 1
+ name-id name-id 4
+ name-display name-display 4
+ name name-display 4
+ name name 1
+ description description 1
+ api api-level 1
+ version revision 1
+ revision revision 1
)
function parse_attributes() {
@@ -118,15 +133,33 @@
shift
local RESULT=""
local VALUE
+ local REV
+ local USED
+ # $1 here is the ATTRS list above.
while [[ "$1" ]]; do
- # Parse the property, if present. Any space is replaced by @
- VALUE=$( grep "^$1=" "$PROPS" | cut -d = -f 2 | tr ' ' '@' | tr -d '\r' )
- if [[ -n "$VALUE" ]]; then
- RESULT="$RESULT $2 $VALUE"
+ # Check the version in which the attribute was introduced and
+ # ignore things which are too *new* for this schema. This lets
+ # us generate old schemas for backward compatibility purposes.
+ SRC=$1
+ DST=$2
+ REV=$3
+
+ if [[ $VERSION -ge $REV ]]; then
+ # Parse the property, if present. Any space is replaced by @
+ VALUE=$( grep "^$SRC=" "$PROPS" | cut -d = -f 2 | tr ' ' '@' | tr -d '\r' )
+ if [[ -n "$VALUE" ]]; then
+ # In case an XML element would be mapped multiple times,
+ # only use its first definition.
+ if [[ "${USED/$DST/}" == "$USED" ]]; then
+ USED="$USED $DST"
+ RESULT="$RESULT $DST $VALUE"
+ fi
+ fi
fi
shift
shift
+ shift
done
echo "$RESULT"
@@ -136,20 +169,24 @@
local OUT="$1"
shift
local KEY VALUE
- local NODE LAST_NODE
+ local NODE LAST_NODE EXTRA_SPACE
while [[ "$1" ]]; do
KEY="$1"
VALUE="${2//@/ }"
NODE="${KEY%%/*}"
KEY="${KEY##*/}"
- [[ "$NODE" == "$KEY" ]] && NODE=""
- if [[ "$NODE" != "$LAST_NODE" ]]; then
- [[ "$LAST_NODE" ]] && echo " </sdk:$LAST_NODE>" >> "$OUT"
- LAST_NODE="$NODE"
- [[ "$NODE" ]] && echo " <sdk:$NODE>" >> "$OUT"
+ if [[ "$NODE" == "$KEY" ]]; then
+ NODE=""
+ EXTRA_SPACE=""
fi
- echo " <sdk:$KEY>$VALUE</sdk:$KEY>" >> "$OUT"
+ if [[ "$NODE" != "$LAST_NODE" ]]; then
+ EXTRA_SPACE=" "
+ [[ "$LAST_NODE" ]] && echo " </sdk:$LAST_NODE>" >> "$OUT"
+ LAST_NODE="$NODE"
+ [[ "$NODE" ]] && echo " <sdk:$NODE>" >> "$OUT"
+ fi
+ echo "$EXTRA_SPACE <sdk:$KEY>$VALUE</sdk:$KEY>" >> "$OUT"
shift
shift
done
diff --git a/build/tools/sdk_repo.mk b/build/tools/sdk_repo.mk
index a0d93de..137a591 100644
--- a/build/tools/sdk_repo.mk
+++ b/build/tools/sdk_repo.mk
@@ -2,8 +2,10 @@
.PHONY: sdk_repo
-SDK_REPO_DEPS :=
-SDK_REPO_XML_ARGS :=
+SDK_REPO_DEPS :=
+SDK_REPO_XML_ARGS :=
+SDK_EXTRAS_DEPS :=
+SDK_EXTRAS_XML_ARGS :=
# Define the name of a package zip file to generate
# $1=OS (e.g. linux-x86, windows, etc)
@@ -100,6 +102,40 @@
endef
# -----------------------------------------------------------------
+# Rules for main host sdk
+
+ifneq ($(filter sdk win_sdk,$(MAKECMDGOALS)),)
+
+# Note that extras are now located in addon.xml, not in repository.xml,
+# so we capture all extras first.
+$(eval $(call mk-sdk-repo-pkg-3,$(HOST_OS),$(MAIN_SDK_ZIP),support,extras/android))
+SDK_EXTRAS_XML_ARGS := $(SDK_REPO_XML_ARGS)
+SDK_REPO_XML_ARGS :=
+
+SDK_EXTRAS_DEPS += \
+ $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),support)
+
+
+$(eval $(call mk-sdk-repo-pkg-1,$(HOST_OS),$(MAIN_SDK_ZIP),tools))
+$(eval $(call mk-sdk-repo-pkg-1,$(HOST_OS),$(MAIN_SDK_ZIP),platform-tools))
+$(eval $(call mk-sdk-repo-pkg-1,$(HOST_OS),$(MAIN_SDK_ZIP),docs))
+$(eval $(call mk-sdk-repo-pkg-2,$(HOST_OS),$(MAIN_SDK_ZIP),platforms))
+$(eval $(call mk-sdk-repo-pkg-2,$(HOST_OS),$(MAIN_SDK_ZIP),samples))
+$(eval $(call mk-sdk-repo-pkg-3,$(HOST_OS),$(MAIN_SDK_ZIP),system-images,system-images/*))
+$(eval $(call mk-sdk-repo-sources,$(HOST_OS),$(MAIN_SDK_ZIP),sources))
+
+SDK_REPO_DEPS += \
+ $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),tools) \
+ $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),platform-tools) \
+ $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),docs) \
+ $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),platforms) \
+ $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),samples) \
+ $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),system-images) \
+ $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),sources)
+
+endif
+
+# -----------------------------------------------------------------
# Rules for win_sdk
ifneq ($(WIN_SDK_ZIP),)
@@ -115,30 +151,19 @@
endif
# -----------------------------------------------------------------
-# Rules for main host sdk
+# Pickup the most recent xml schema for repository and add-on
-ifneq ($(filter sdk win_sdk,$(MAKECMDGOALS)),)
+SDK_REPO_XSD := \
+ $(lastword \
+ $(wildcard \
+ $(TOPDIR)sdk/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-*.xsd \
+ ))
-$(eval $(call mk-sdk-repo-pkg-1,$(HOST_OS),$(MAIN_SDK_ZIP),tools))
-$(eval $(call mk-sdk-repo-pkg-1,$(HOST_OS),$(MAIN_SDK_ZIP),platform-tools))
-$(eval $(call mk-sdk-repo-pkg-1,$(HOST_OS),$(MAIN_SDK_ZIP),docs))
-$(eval $(call mk-sdk-repo-pkg-2,$(HOST_OS),$(MAIN_SDK_ZIP),platforms))
-$(eval $(call mk-sdk-repo-pkg-2,$(HOST_OS),$(MAIN_SDK_ZIP),samples))
-$(eval $(call mk-sdk-repo-pkg-3,$(HOST_OS),$(MAIN_SDK_ZIP),system-images,system-images/*))
-$(eval $(call mk-sdk-repo-pkg-3,$(HOST_OS),$(MAIN_SDK_ZIP),support,extras/android))
-$(eval $(call mk-sdk-repo-sources,$(HOST_OS),$(MAIN_SDK_ZIP),sources))
-
-SDK_REPO_DEPS += \
- $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),tools) \
- $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),platform-tools) \
- $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),docs) \
- $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),platforms) \
- $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),samples) \
- $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),system-images) \
- $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),support) \
- $(call sdk-repo-pkg-zip,$(HOST_OS),$(MAIN_SDK_ZIP),sources)
-
-endif
+SDK_ADDON_XSD := \
+ $(lastword \
+ $(wildcard \
+ $(TOPDIR)sdk/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-addon-*.xsd \
+ ))
# -----------------------------------------------------------------
# Rules for sdk addon
@@ -157,12 +182,6 @@
SDK_ADDON_XML := $(dir $(ADDON_SDK_ZIP))/addon.xml
-SDK_ADDON_XSD := \
- $(lastword \
- $(wildcard \
- $(TOPDIR)sdk/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-addon-*.xsd \
- ))
-
$(SDK_ADDON_XML): $(ADDON_SDK_ZIP)
$(hide) $(TOPDIR)development/build/tools/mk_sdk_repo_xml.sh \
$(SDK_ADDON_XML) $(SDK_ADDON_XSD) add-on $(HOST_OS) $(RENAMED_ADDON_ZIP)
@@ -174,17 +193,11 @@
# -----------------------------------------------------------------
# Rules for the SDK Repository XML
-SDK_REPO_XML := $(HOST_OUT)/sdk/repository.xml
+SDK_REPO_XML := $(HOST_OUT)/sdk/repository.xml
+SDK_EXTRAS_XML := $(HOST_OUT)/sdk/repo-extras.xml
ifneq ($(SDK_REPO_XML_ARGS),)
-# Pickup the most recent xml schema
-SDK_REPO_XSD := \
- $(lastword \
- $(wildcard \
- $(TOPDIR)sdk/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-*.xsd \
- ))
-
$(SDK_REPO_XML): $(SDK_REPO_DEPS)
$(hide) $(TOPDIR)development/build/tools/mk_sdk_repo_xml.sh \
$(SDK_REPO_XML) $(SDK_REPO_XSD) $(SDK_REPO_XML_ARGS)
@@ -197,8 +210,23 @@
endif
+
+ifneq ($(SDK_EXTRAS_XML_ARGS),)
+
+$(SDK_EXTRAS_XML): $(SDK_EXTRAS_DEPS)
+ $(hide) $(TOPDIR)development/build/tools/mk_sdk_repo_xml.sh \
+ $(SDK_EXTRAS_XML) $(SDK_ADDON_XSD) $(SDK_EXTRAS_XML_ARGS)
+
+$(call dist-for-goals, sdk_repo, $(SDK_EXTRAS_XML))
+
+else
+
+$(SDK_EXTRAS_XML): ;
+
+endif
+
# -----------------------------------------------------------------
-sdk_repo: $(SDK_REPO_DEPS) $(SDK_REPO_XML)
+sdk_repo: $(SDK_REPO_DEPS) $(SDK_REPO_XML) $(SDK_EXTRAS_XML)
@echo "Packing of SDK repository done"
diff --git a/sdk/support_source.properties b/sdk/support_source.properties
index 855afb3..b4e5eb6 100644
--- a/sdk/support_source.properties
+++ b/sdk/support_source.properties
@@ -1,5 +1,8 @@
Pkg.UserSrc=false
Pkg.Revision=8
Extra.Vendor=android
+Extra.VendorId=android
+Extra.VendorDisplay=Android
+Extra.NameDisplay=Android Support Library
Extra.Path=support
Extra.OldPaths=compatibility