# Versioning System For Bliss
# Bliss RELEASE VERSION
BLISS_VERSION_MAJOR = 6
BLISS_VERSION_MINOR = 1
BLISS_VERSION_MAINTENANCE =

VERSION := $(BLISS_VERSION_MAJOR).$(BLISS_VERSION_MINOR)$(BLISS_VERSION_MAINTENANCE)

# Set BLISS_BUILDTYPE
ifdef BLISS_NIGHTLY
    BLISS_BUILDTYPE := NIGHTLY
endif
ifdef BLISS_EXPERIMENTAL
    BLISS_BUILDTYPE := EXPERIMENTAL
endif
ifdef BLISS_MAINTENANCE 
    BLISS_BUILDTYPE := MAINTENANCE 
endif
ifdef BLISS_BETA
    BLISS_BUILDTYPE := BETA
endif
# Set Unofficial if no buildtype set (Buildtype should ONLY be set by BLISS Devs!)
ifdef BLISS_BUILDTYPE
else
    BLISS_BUILDTYPE := UNOFFICIAL
    BLISS_VERSION_MAJOR := 6
    BLISS_VERSION_MINOR := 1
endif

# Set BLISS version
ifdef BLISS_RELEASE
    BLISS_VERSION := Bliss-v$(VERSION)
else
    BLISS_VERSION := Bliss-v$(VERSION)-$(BLISS_BUILD)-$(BLISS_BUILDTYPE)-$(shell date +%Y%m%d-%H%M)
endif

BLISS_DISPLAY_VERSION := $(VERSION)
BLISS_DISPLAY_BUILDTYPE := $(BLISS_BUILDTYPE)

PRODUCT_PROPERTY_OVERRIDES += \
  ro.modversion=$(BLISS_DISPLAY_VERSION) \
  ro.bliss.display.version=$(BLISS_DISPLAY_VERSION) \
  ro.bliss.display.buildtype=$(BLISS_DISPLAY_BUILDTYPE)

export BLISS_OTA_XMLVER=$(BLISS_VERSION_MAJOR)
