ifeq ($(FSROOT),)
$(error FSROOT not set.  Please run "source ./setenv.sh"!)
endif
ifeq ($(BUILD_DEST),)
$(error BUILD_DEST not set.  Please run "source ./setenv.sh"!)
endif
ifeq ($(QT_BUILD_NUM_CPUS),)
$(error QT_BUILD_NUM_CPUST not set.  Please run "source ./setenv.sh"!)
endif
ifeq ($(QT_BUILD_CONFIG_TYPE),)
$(error QT_BUILD_CONFIG_TYPE not set.  Please run "source ./setenv.sh"!)
endif
ifeq ($(QT_CROSS_COMPILE),)
$(error QT_CROSS_COMPILE not set.  Please run "source ./setenv.sh"!)
endif
ifeq ($(QT_RDK_PLATFORM_DIR),)
$(error QT_RDK_PLATFORM_DIR not set.  Please run "source ./setenv.sh"!)
endif

#make variables
BUILD_DIR			:= $(CURDIR)/build
STAGE_DIR			:= $(CURDIR)/stage
QT_SOURCE_DIR		:= $(CURDIR)/source
PREFIX				:= $(BUILD_DEST)
QT_STAGE_DIR		:= $(STAGE_DIR)$(PREFIX)

#platform stage patch
QT_STAGE_PATCH_TAR	:= $(QT_RDK_PLATFORM_DIR)/Qt-stage-patch.tar.gz

#platform flash patch
FLASH_PATCH_TAR		:= $(QT_RDK_PLATFORM_DIR)/windowless_flash_stage_patch.tar.gz
FLASH_PLUGIN_FILE	:= $(QT_RDK_PLATFORM_DIR)/libflashplayer.so
FLASH_PLUGIN_PATH	:= $(STAGE_DIR)$(QTWEBKIT_PLUGIN_PATH)

#Qt config options
QT_CONFIG_OPTS := \
	-opensource \
	-confirm-license \
	-prefix $(PREFIX) \
	-platform linux-g++ \
	-device linux-rdk-g++ \
	-device-option RDK_PLATFORM_PWD=$(QT_RDK_PLATFORM_DIR) \
	-device-option CROSS_COMPILE=$(QT_CROSS_COMPILE) \
	-device-option FOSS_INSTALL_DIR=$(FOSS_INSTALL_DIR) \
	-device-option FSROOT=$(FSROOT) \
	-force-pkg-config \
	-glib \
	-icu \
	-optimized-qmake \
	-no-libudev \
	-no-accessibility \
	-no-cups \
	-no-qml-debug \
	-no-xshape \
	-no-xcb \
	-no-xsync \
	-no-xvideo \
	-no-xinerama \
	-no-xcursor \
	-no-xrandr \
	-no-xfixes \
	-no-xinput \
	-no-xinput2 \
	-no-xkb \
	-no-nis \
	-no-dbus \
	-no-sql-db2 \
	-no-sql-ibase \
	-no-sql-mysql \
	-no-sql-oci \
	-no-sql-odbc \
	-no-sql-psql \
	-no-sql-sqlite \
	-no-sql-sqlite2 \
	-no-sql-sqlite_symbian \
	-no-sql-tds \
	-no-openvg \
	-no-linuxfb \
	-nomake tests \
	-nomake examples \
	-nomake tools \
	-opengl \
	-skip webengine \

ifeq ($(QT_BUILD_CONFIG_VERBOSE),true)
# verbosely print command lines
	QT_CONFIG_OPTS	+= -verbose
else
	QT_CONFIG_OPTS	+= -silent
endif

ifeq ($(QT_BUILD_CONFIG_TYPE),debug)
#the no-separate-debug-info is helpfull when using a debugger that doesn't support the secondary debug file (like intel atom tools)
	QT_CONFIG_OPTS	+= -debug -no-separate-debug-info
endif

ifeq ($(QT_CONFIGURE_HTTP_CHANNELS),1)
#to allow configuring http channel count in libQtNetwork
	QT_CONFIG_OPTS	+= -DCONFIGURE_HTTP_CHANNELS
endif

#custom options set in build scripts
QT_CONFIG_OPTS	+= $(CUSTOM_QT_CONFIG_OPTS)

#apply rdk platform overrides
-include $(QT_RDK_PLATFORM_DIR)/config.mk

all: check_config build install

config: check_config $(BUILD_DIR)/Makefile

check_config:
ifneq ($(QT_NO_CONFIG_CHANGE_TEST),true)
ifneq ($(shell echo $(QT_CONFIG_OPTS)), $(shell cat $(BUILD_DIR)/qt_config_options.txt))
	@echo "Config changed, forcing clean build"
	$(MAKE) clean
endif
endif

$(BUILD_DIR)/Makefile:
	rm -rf $(BUILD_DIR) && mkdir -p $(BUILD_DIR)
	cd $(BUILD_DIR) && $(QT_SOURCE_DIR)/configure $(QT_CONFIG_OPTS)

build: $(BUILD_DIR)/Makefile
	$(MAKE) -C $(BUILD_DIR) -j$(QT_BUILD_NUM_CPUS)
	echo $(QT_CONFIG_OPTS) > $(BUILD_DIR)/qt_config_options.txt

update-qtconf:
	@echo -ne "[Paths]\nPrefix=..\n" > $(QT_STAGE_DIR)/bin/qt.conf

stage:
	rm -rf $(QT_STAGE_DIR) && mkdir -p $(QT_STAGE_DIR)
	INSTALL_ROOT=$(STAGE_DIR) $(MAKE) -C $(BUILD_DIR) install
ifeq ($(QT_STAGE_PATCH_ENABLED),1)
	cd $(STAGE_DIR) && tar zxvf $(QT_STAGE_PATCH_TAR)
endif
ifeq ($(QT_FLASH_PATCH_ENABLED),1)
	cd $(STAGE_DIR) && tar zxvf $(FLASH_PATCH_TAR)
	mkdir -p $(FLASH_PLUGIN_PATH)
	cp $(FLASH_PLUGIN_FILE) $(FLASH_PLUGIN_PATH)
endif

install: stage update-qtconf
	@echo
	@echo "to install into SDK, run this:"
	@echo " mkdir $(PREFIX) OR (mkdir <YOUR_PATH> ln <YOUR_PATH> $(PREFIX) -s)"
	@echo " sudo cp -ar $(QT_STAGE_DIR)/* $(PREFIX)"

clean:
	rm -rf $(BUILD_DIR) $(STAGE_DIR)

.PHONY: all config check_config build stage install clean
