include ../android_setenv.sh
#include ../export_includes.sh

export MODULE_NAME := dvbcore

export MODULE_ROOT:=$(shell pwd)

ALL_PREREQUISITES = database stb media CA dvb

ALL_OBJS = $(BIN_BUILD_PATH)/CA/*.o	\
		$(BIN_BUILD_PATH)/database/*.o	\
		$(BIN_BUILD_PATH)/media/*.o	\
		$(BIN_BUILD_PATH)/stb/*.o	\
		$(BIN_BUILD_PATH)/dvb/*.o

ifeq ($(DTVKIT_INCLUDE_HBBTV),1)
# This interface module only relevant for HBBTV 1.5 
ALL_PREREQUISITES += hbbtvif
ALL_OBJS += $(BIN_BUILD_PATH)/hbbtvif/*.o
ADDITIONAL_CLEAN += hbbtv_clean
endif

ifneq ($(DTVKIT_INTEGRATE_MHEG5),)
ALL_PREREQUISITES += dvbmheg
ALL_OBJS += $(BIN_BUILD_PATH)/dvbmheg/*.o
ADDITIONAL_CLEAN += dvbmheg_clean
 ifneq (,$(findstring ciplus,$(DTVKIT_INTEGRATE_MHEG5)))
  ifneq ($(DTVKIT_INTEGRATE_CI),1)
   $(warning Environment indicates MHEG5 includes CI-Plus, but DTVKIT_INTEGRATE_CI is not set) 
  endif
 endif
endif

ifeq ($(DTVKIT_INCLUDE_OTA_SSU),1)
ALL_PREREQUISITES += ota
ALL_OBJS += $(BIN_BUILD_PATH)/ota/*.o
endif

ifeq ($(DTVKIT_INTEGRATE_CI),1)
ALL_PREREQUISITES += dvbci
ALL_OBJS += $(BIN_BUILD_PATH)/dvbci/*.o
ADDITIONAL_CLEAN += dvbci_clean
endif

ifeq ($(DTVKIT_INTEGRATE_SQLITE),1)
DATABASE = database/dba_sqlite
else
DATABASE = database/dba_nvm
endif

MODULE_LIB = $(BIN_BUILD_PATH)/lib$(MODULE_NAME).a

DTVKIT_INSTALL_DIR ?= $(MODULE_ROOT)/install

INSTALL_LIB_PATH=$(DTVKIT_INSTALL_DIR)/lib
INSTALL_INC_PATH=$(DTVKIT_INSTALL_DIR)/include/$(MODULE_NAME)
INSTALL_DOC_PATH=$(DTVKIT_INSTALL_DIR)/doc/$(MODULE_NAME)
INSTALL_AUX_PATH=$(DTVKIT_INSTALL_DIR)/share/$(MODULE_NAME)

# default target must be before inclusion common.mak to avoid using its default rule
all : linkall

include common.mak

linkall : $(MODULE_LIB)
$(MODULE_LIB): $(ALL_PREREQUISITES:%=$(BIN_BUILD_PATH)/lib%.a)
	$(QUIET)$(DTVKIT_AR) rsc $@ $(ALL_OBJS)

$(BIN_BUILD_PATH)/libdvb.a: force
	$(QUIET)$(MAKE) -C dvb

$(BIN_BUILD_PATH)/libdatabase.a: force
	$(QUIET)$(MAKE) -C $(DATABASE)

$(BIN_BUILD_PATH)/libhbbtvif.a: force
	$(QUIET)$(MAKE) -C externals/HBBTV

$(BIN_BUILD_PATH)/libdvbci.a: force
	$(QUIET)$(MAKE) -C externals/CIPlus

$(BIN_BUILD_PATH)/libdvbmheg.a: force
	$(QUIET)$(MAKE) -C externals/MHEG5

$(BIN_BUILD_PATH)/lib%.a: midware/% force
	$(QUIET)$(MAKE) -C $<

hbbtv_clean:
	@$(MAKE) -C externals/HBBTV clean

dvbci_clean:
	@$(MAKE) -C externals/CIPlus clean

dvbmheg_clean:
	@$(MAKE) -C externals/MHEG5 clean

clean: common_clean
	@rm -rf $(BIN_BUILD_PATH)/libdvbcore.a
	# Remove the folder only if it's not empty
	-@rmdir $(DTVKIT_OUTPUT_DIR)

module_clean: $(ADDITIONAL_CLEAN)
	@$(MAKE) -C dvb clean
	@$(MAKE) -C midware/stb clean
	@$(MAKE) -C midware/media clean
	@$(MAKE) -C midware/CA clean
	@$(MAKE) -C database/dba_nvm clean
	@$(MAKE) -C database/dba_sqlite clean
	@$(MAKE) -C midware/ota clean

.PHONY: install uninstall

define install
	install -C -d $(1) && \
	install -C -m u=rw,go=r,a-s -t $(1) $(2)
endef

define rmdir_if_empty
	if [ -d $(1) ]; then \
		find $(1) -depth -type d -empty -delete; \
	fi
endef

install: linkall
	@echo Installing $(MODULE_NAME)
	@$(call install,$(INSTALL_LIB_PATH),$(MODULE_LIB))
	@$(call install,$(INSTALL_INC_PATH)/inc,inc/*.h)
	@$(call install,$(INSTALL_INC_PATH)/dvb/inc,dvb/inc/*.h)
	@$(call install,$(INSTALL_INC_PATH)/midware/CA/inc,midware/CA/inc/*.h)
	@$(call install,$(INSTALL_INC_PATH)/midware/CI/inc,midware/CI/inc/*.h)
	@$(call install,$(INSTALL_INC_PATH)/midware/media/inc,midware/media/inc/*.h)
	@$(call install,$(INSTALL_INC_PATH)/midware/ota/inc,midware/ota/inc/*.h)
	@$(call install,$(INSTALL_INC_PATH)/midware/stb/inc,midware/stb/inc/*.h)
	@$(call install,$(INSTALL_INC_PATH)/platform/inc,platform/inc/*.h)
	@$(call install,$(INSTALL_DOC_PATH),licence.txt documents/*)
	@$(call install,$(INSTALL_AUX_PATH),version.mak)

uninstall:
	@echo Uninstalling $(MODULE_NAME)
	@rm -f $(INSTALL_LIB_PATH)/$(notdir $(MODULE_LIB))
	@rm -rf $(INSTALL_INC_PATH)
	@rm -rf $(INSTALL_DOC_PATH)
	@rm -rf $(INSTALL_AUX_PATH)
	@$(call rmdir_if_empty,$(DTVKIT_INSTALL_DIR))

beautify:
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup inc/*.h
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup database/dba_nvm/src/*.[ch]
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup database/dba_sqlite/src/*.[ch]
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup database/inc/*.h
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup dvb/src/*.[ch]
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup dvb/inc/*.h
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/stb/src/*.[ch]
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/stb/inc/*.h
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/CA/src/*.[ch]
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/CA/inc/*.h
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/CI/src/*.[ch]
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/CI/inc/*.h
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/media/src/*.[ch]
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/media/inc/*.h
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/ota/src/*.[ch]
	uncrustify -c tools/uncrustify/uncrustify.cfg --replace --no-backup midware/ota/inc/*.h

doc:
	doxygen tools/doxygen/Doxyfile
	$(MAKE) -C tools/doxygen/latex
	cp tools/doxygen/latex/refman.pdf documents

clean-doc:
	rm -rf tools/doxygen/latex
