diff --git a/core/Makefile b/core/Makefile index d020335ccd..f46ab11cd7 100644 --- a/core/Makefile +++ b/core/Makefile @@ -4,15 +4,6 @@ # intermedites-dir-for LOCAL_PATH := $(BUILD_SYSTEM) -# Pick a reasonable string to use to identify files. -ifneq (,$(filter eng.%,$(BUILD_NUMBER))) - # BUILD_NUMBER has a timestamp in it, which means that - # it will change every time. Pick a stable value. - FILE_NAME_TAG := eng.$(USER) -else - FILE_NAME_TAG := $(BUILD_NUMBER) -endif - # ----------------------------------------------------------------- # Define rules to copy PRODUCT_COPY_FILES defined by the product. # PRODUCT_COPY_FILES contains words like :[:]. @@ -238,28 +229,37 @@ $(intermediate_system_build_prop): PRIVATE_BUILD_DESC := $(build_desc) # The string used to uniquely identify the combined build and product; used by the OTA server. ifeq (,$(strip $(BUILD_FINGERPRINT))) - ifneq ($(filter eng.%,$(BUILD_NUMBER)),) - BF_BUILD_NUMBER := $(USER)$(shell $(DATE) +%m%d%H%M) + ifeq ($(strip $(HAS_BUILD_NUMBER)),false) + BF_BUILD_NUMBER := $(USER)$$($(DATE_FROM_FILE) +%m%d%H%M) else - BF_BUILD_NUMBER := $(BUILD_NUMBER) + BF_BUILD_NUMBER := $(file <$(BUILD_NUMBER_FILE)) endif BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS) endif -ifneq ($(words $(BUILD_FINGERPRINT)),1) - $(error BUILD_FINGERPRINT cannot contain spaces: "$(BUILD_FINGERPRINT)") -endif +# unset it for safety. +BF_BUILD_NUMBER := -$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_FINGERPRINT) > $(PRODUCT_OUT)/build_fingerprint.txt) -BUILD_FINGERPRINT_FROM_FILE := $$(cat $(PRODUCT_OUT)/build_fingerprint.txt) +BUILD_FINGERPRINT_FILE := $(PRODUCT_OUT)/build_fingerprint.txt +ifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_FINGERPRINT) >$(BUILD_FINGERPRINT_FILE) && grep " " $(BUILD_FINGERPRINT_FILE))) + $(error BUILD_FINGERPRINT cannot contain spaces: "$(file <$(BUILD_FINGERPRINT_FILE))") +endif +BUILD_FINGERPRINT_FROM_FILE := $$(cat $(BUILD_FINGERPRINT_FILE)) +# unset it for safety. +BUILD_FINGERPRINT := # The string used to uniquely identify the system build; used by the OTA server. # This purposefully excludes any product-specific variables. ifeq (,$(strip $(BUILD_THUMBPRINT))) - BUILD_THUMBPRINT := $(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS) + BUILD_THUMBPRINT := $(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS) endif -ifneq ($(words $(BUILD_THUMBPRINT)),1) - $(error BUILD_THUMBPRINT cannot contain spaces: "$(BUILD_THUMBPRINT)") + +BUILD_THUMBPRINT_FILE := $(PRODUCT_OUT)/build_thumbprint.txt +ifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_THUMBPRINT) >$(BUILD_THUMBPRINT_FILE) && grep " " $(BUILD_THUMBPRINT_FILE))) + $(error BUILD_THUMBPRINT cannot contain spaces: "$(file <$(BUILD_THUMBPRINT_FILE))") endif +BUILD_THUMBPRINT_FROM_FILE := $$(cat $(BUILD_THUMBPRINT_FILE)) +# unset it for safety. +BUILD_THUMBPRINT := KNOWN_OEM_THUMBPRINT_PROPERTIES := \ ro.product.brand \ @@ -347,7 +347,7 @@ endif PLATFORM_VERSION_ALL_CODENAMES="$(PLATFORM_VERSION_ALL_CODENAMES)" \ BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \ BUILD_FINGERPRINT="$(BUILD_FINGERPRINT_FROM_FILE)" \ - $(if $(OEM_THUMBPRINT_PROPERTIES),BUILD_THUMBPRINT="$(BUILD_THUMBPRINT)") \ + $(if $(OEM_THUMBPRINT_PROPERTIES),BUILD_THUMBPRINT="$(BUILD_THUMBPRINT_FROM_FILE)") \ TARGET_CPU_ABI_LIST="$(TARGET_CPU_ABI_LIST)" \ TARGET_CPU_ABI_LIST_32_BIT="$(TARGET_CPU_ABI_LIST_32_BIT)" \ TARGET_CPU_ABI_LIST_64_BIT="$(TARGET_CPU_ABI_LIST_64_BIT)" \ diff --git a/core/main.mk b/core/main.mk index 0c165ca81d..ef55b4eeaa 100644 --- a/core/main.mk +++ b/core/main.mk @@ -61,12 +61,23 @@ include $(BUILD_SYSTEM)/clang/config.mk # when using ninja. $(shell mkdir -p $(OUT_DIR) && \ echo -n $(BUILD_NUMBER) > $(OUT_DIR)/build_number.txt) +BUILD_NUMBER_FILE := $(OUT_DIR)/build_number.txt + ifeq ($(HOST_OS),darwin) DATE_FROM_FILE := date -r $(BUILD_DATETIME_FROM_FILE) else DATE_FROM_FILE := date -d @$(BUILD_DATETIME_FROM_FILE) endif +# Pick a reasonable string to use to identify files. +ifeq ($(strip $(HAS_BUILD_NUMBER)),false) + # BUILD_NUMBER has a timestamp in it, which means that + # it will change every time. Pick a stable value. + FILE_NAME_TAG := eng.$(USER) +else + FILE_NAME_TAG := $(file <$(BUILD_NUMBER_FILE)) +endif + # Make an empty directory, which can be used to make empty jars EMPTY_DIRECTORY := $(OUT_DIR)/empty $(shell mkdir -p $(EMPTY_DIRECTORY) && rm -rf $(EMPTY_DIRECTORY)/*) diff --git a/core/tasks/tools/build_custom_image.mk b/core/tasks/tools/build_custom_image.mk index 4d05237f8f..a1151e908c 100644 --- a/core/tasks/tools/build_custom_image.mk +++ b/core/tasks/tools/build_custom_image.mk @@ -151,7 +151,7 @@ $(my_built_custom_image): $(INTERNAL_USERIMAGES_DEPS) $(my_built_modules) $(my_i cat $(PRIVATE_DICT_FILE) >> $(PRIVATE_INTERMEDIATES)/image_info.txt) # Generate the image. $(if $(filter oem,$(PRIVATE_MOUNT_POINT)), \ - $(hide) echo "oem.buildnumber=$(BUILD_NUMBER)" >> $(PRIVATE_STAGING_DIR)/oem.prop) + $(hide) echo "oem.buildnumber=$(BUILD_NUMBER_FROM_FILE)" >> $(PRIVATE_STAGING_DIR)/oem.prop) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ build/make/tools/releasetools/build_image.py \ $(PRIVATE_STAGING_DIR) $(PRIVATE_INTERMEDIATES)/image_info.txt $@ $(TARGET_OUT) diff --git a/core/version_defaults.mk b/core/version_defaults.mk index 858384b32d..e83d6faa4c 100644 --- a/core/version_defaults.mk +++ b/core/version_defaults.mk @@ -271,6 +271,7 @@ endif # to soong_ui. BUILD_DATETIME := +HAS_BUILD_NUMBER := true ifndef BUILD_NUMBER # BUILD_NUMBER should be set to the source control value that # represents the current state of the source code. E.g., a @@ -282,4 +283,5 @@ ifndef BUILD_NUMBER # from this date/time" value. Make it start with a non-digit so that # anyone trying to parse it as an integer will probably get "0". BUILD_NUMBER := eng.$(shell echo $${USER:0:6}).$(shell $(DATE) +%Y%m%d.%H%M%S) + HAS_BUILD_NUMBER := false endif