#
# Linux-specific packaging
#

define CP_DEB_FILES_TEMPLATE
.PHONY: $(2)/$(1)
$(2)/$(1): $(3)/$(1)
	$(V1)cp -a $$< $$@
endef

# Update this number for every formal release.  The Deb packaging system relies on this to know to update a
# package or not.  Otherwise, the user has to uninstall first.
VERNUM				:= 0.1.0
VERSION_FULL		:= $(VERNUM)-$(PACKAGE_LBL)

FLIGHT_FW			:= coptercontrol revolution

DEB_BUILD_DIR		:= $(ROOT_DIR)/debian

SED_DATE_STRG		= $(shell date -R)
SED_SCRIPT			= s/<VERSION>/$(VERSION_FULL)/;s/<DATE>/$(SED_DATE_STRG)/

DEB_CFG_CMN			:= $(ROOT_DIR)/package/linux/deb_common
DEB_CFG_CMN_FILES	:= $(shell ls $(DEB_CFG_CMN))
DEB_CFG_I386_DIR	:= $(ROOT_DIR)/package/linux/deb_i386
DEB_CFG_I386_FILES	:= $(shell ls $(DEB_CFG_I386_DIR))
DEB_CFG_AMD64_DIR	:= $(ROOT_DIR)/package/linux/deb_amd64
DEB_CFG_AMD64_FILES	:= $(shell ls $(DEB_CFG_AMD64_DIR))
DEB_PLATFORM		:= amd64
DEB_MACHINE_DIR		:= $(DEB_CFG_AMD64_DIR)
DEB_MACHINE_FILES	:= $(DEB_CFG_AMD64_FILES)
MACHINE_TYPE		:= $(shell uname -m)
ifneq ($(MACHINE_TYPE), x86_64)
 DEB_PLATFORM		:= i386
 DEB_MACHINE_DIR	:= $(DEB_CFG_I386_DIR)
 DEB_MACHINE_FILES	:= $(DEB_CFG_I386_FILES)
endif
ALL_DEB_FILES  = $(foreach f, $(DEB_CFG_CMN_FILES), $(DEB_BUILD_DIR)/$(f))
ALL_DEB_FILES += $(foreach f, $(DEB_MACHINE_FILES), $(DEB_BUILD_DIR)/$(f))

DEB_PACKAGE_NAME	:= openpilot_$(VERSION_FULL)_$(DEB_PLATFORM)

linux_deb_package: deb_build gcs
	@echo $@ starting
	cd .. && dpkg-buildpackage -b
	$(V1)mv $(ROOT_DIR)/../$(DEB_PACKAGE_NAME).deb $(BUILD_DIR)
	$(V1)mv $(ROOT_DIR)/../$(DEB_PACKAGE_NAME).changes $(BUILD_DIR)
	$(V1)rm -rf $(DEB_BUILD_DIR)

deb_build: | $(DEB_BUILD_DIR) $(ALL_DEB_FILES) $(BUILD_DIR)/build 
	@echo $@ starting
	$(V1)$(shell echo $(FW_DIR) > $(BUILD_DIR)/package_dir)
	$(V1)sed -i -e "$(SED_SCRIPT)" $(DEB_BUILD_DIR)/changelog

$(BUILD_DIR)/build: package_flight

$(DEB_BUILD_DIR): 
	@echo $@ starting
	$(V1)mkdir -p $(DEB_BUILD_DIR)

$(foreach cpfile, $(DEB_CFG_CMN_FILES), $(eval $(call CP_DEB_FILES_TEMPLATE,$(cpfile),$(DEB_BUILD_DIR),$(DEB_CFG_CMN))))

$(foreach cpfile, $(DEB_MACHINE_FILES), $(eval $(call CP_DEB_FILES_TEMPLATE,$(cpfile),$(DEB_BUILD_DIR),$(DEB_MACHINE_DIR))))

gcs: uavobjects
	@echo "Linux Package Make of GCS."
	$(V1) $(MAKE) -C $(ROOT_DIR) GCS_BUILD_CONF=release $@

identify:
	@echo ""
	@echo "We are in the Linux Package Make system."
	@echo ""

ground_package: | identify linux_deb_package

.PHONY: identify gcs ground_package linux_deb_package deb_build $(DEB_BUILD_DIR)