# Makefile for OpenWrt
#
# Copyright (C) 2007 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

#
# GPL source distribution
#
GPL_SVN_REPOSITORY_URL=$(shell svn info|grep 'URL:'|gawk -F' ' '{print $$2}')
GPL_SVN_DIR=~/tmp/im2/openwrt
GPL_SOURCE_FILENAME=hbm-im2-gpl-source
GPL_SOURCE_ARCHIVE=$(GPL_SOURCE_FILENAME).tar.gz
GPL_SOURCE_ARCHIVE_LIST=$(GPL_SOURCE_FILENAME).lst
TAR_INDEX_FILE=.index.lst
GPL_SOURCES=./ \
			scripts/

GPL_EXCLUDED_SOURCES=".config*" \
					 "configs" \
					 "download/hbm*" \
					 "package/hbm-base-files" \
					 "package/hbm-bootkernel-base-files" \
					 "package/hbm-bootkernel-test-tools" \
					 "package/hbm-bsp-api" \
					 "package/hbm-eth-api" \
					 "package/hbm-fpga-api" \
					 "package/hbm-fpga-prg" \
					 "package/hbm-gpio-api" \
					 "package/hbm-genseries" \
					 "package/hbm-gps-irig-module" \
					 "package/hbm-gps-irig-module-api" \
					 "package/hbm-settingspart" \
					 "package/hbm-system-tools" \
					 "package/hbm-system-tools-extra" \
					 "package/hbm-test-tools" \
					 "staging_dir" \
					 "target/hbm*" \
					 "target/linux/x86/hbm*" \
					 "tmp"

GPL_EXCLUDED_SOURCES_FILE=.excluded.lst


SETUP_STAMP=.setup_stamp

TOPDIR:=${CURDIR}
LC_ALL:=C
LANG:=C
export TOPDIR LC_ALL LANG

all: FORCE
	time $(MAKE) V=99 world


gpl: gpl/setup $(GPL_SOURCE_ARCHIVE)
	echo "Done making gpl archive"

setup:	$(SETUP_STAMP)

world:


#$(SETUP_STAMP): setup/pre $(OWRT_FEEDS_CONFIG) $(FEEDS_SETUP_STAMP) $(OWRT_CONFIG_FILE)
$(SETUP_STAMP): 
	touch $(SETUP_STAMP)

include $(TOPDIR)/include/host.mk

ifneq ($(OPENWRT_BUILD),1)
	# XXX: these three lines are normally defined by rules.mk
	# but we can't include that file in this context
	empty:=
	space:= $(empty) $(empty)
	_SINGLE=export MAKEFLAGS=$(space);

	override OPENWRT_BUILD=1
	export OPENWRT_BUILD
	GREP_OPTIONS=
	export GREP_OPTIONS
	include $(TOPDIR)/include/debug.mk
	include $(TOPDIR)/include/depends.mk
	include $(TOPDIR)/include/toplevel.mk
else
	include rules.mk
	include $(INCLUDE_DIR)/depends.mk
	include $(INCLUDE_DIR)/subdir.mk
	include target/Makefile
	include package/Makefile
	include tools/Makefile
	include toolchain/Makefile

$(toolchain/stamp-install): $(tools/stamp-install)
$(target/stamp-compile): $(toolchain/stamp-install) $(tools/stamp-install) $(BUILD_DIR)/.prepared
$(package/stamp-cleanup): $(target/stamp-compile)
$(package/stamp-compile): $(target/stamp-compile) $(package/stamp-cleanup)
$(package/stamp-install): $(package/stamp-compile)
$(package/stamp-rootfs-prepare): $(package/stamp-install)
$(target/stamp-install): $(package/stamp-compile) $(package/stamp-install) $(package/stamp-rootfs-prepare)

printdb:
	@true

prepare: $(target/stamp-compile)

clean: FORCE
	$(_SINGLE)$(SUBMAKE) target/linux/clean
	rm -rf $(BUILD_DIR) $(BIN_DIR) $(BUILD_LOG_DIR)

dirclean: clean
	rm -rf $(STAGING_DIR) $(STAGING_DIR_HOST) $(STAGING_DIR_TOOLCHAIN) $(TOOLCHAIN_DIR) $(BUILD_DIR_HOST) $(BUILD_DIR_TOOLCHAIN)
	rm -rf $(TMP_DIR)

ifndef DUMP_TARGET_DB
$(BUILD_DIR)/.prepared: Makefile
	@mkdir -p $$(dirname $@)
	@touch $@

tmp/.prereq_packages: .config
	unset ERROR; \
	for package in $(sort $(prereq-y) $(prereq-m)); do \
		$(_SINGLE)$(NO_TRACE_MAKE) -s -r -C package/$$package prereq || ERROR=1; \
	done; \
	if [ -n "$$ERROR" ]; then \
		echo "Package prerequisite check failed."; \
		false; \
	fi
	touch $@
endif

# check prerequisites before starting to build
prereq: $(target/stamp-prereq) tmp/.prereq_packages
	@if [ ! -f "$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME)" ]; then \
		echo 'ERROR: Missing site config for target "$(REAL_GNU_TARGET_NAME)" !'; \
		echo '       The missing file will cause configure scripts to fail during compilation.'; \
		echo '       Please provide a "$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME)" file and restart the build.'; \
		exit 1; \
	fi

prepare: .config $(tools/stamp-install) $(toolchain/stamp-install)
world: prepare $(target/stamp-compile) $(package/stamp-cleanup) $(package/stamp-compile) $(package/stamp-install) $(package/stamp-rootfs-prepare) $(target/stamp-install) FORCE
	$(_SINGLE)$(SUBMAKE) -r package/index

# update all feeds, re-create index files, install symlinks
package/symlinks:
	$(SCRIPT_DIR)/feeds update -a
	$(SCRIPT_DIR)/feeds install -a

# re-create index files, install symlinks
package/symlinks-install:
	$(SCRIPT_DIR)/feeds update -i
	$(SCRIPT_DIR)/feeds install -a

# remove all symlinks, don't touch ./feeds
package/symlinks-clean:
	$(SCRIPT_DIR)/feeds uninstall -a

.PHONY: clean dirclean prereq prepare world package/symlinks package/symlinks-install package/symlinks-clean

endif


$(GPL_SVN_DIR): FORCE
	@echo ""
	@echo " Making GPL archive."
	@echo ""
	@echo " This procedure assumes that the openwrt source tree is checked out in " $(GPL_SVN_DIR)
	@echo ""
	@echo " The GPL tar.gz can be found in the current directory"
	@echo "-------------------------------------------------------"
	@#@echo Removing SVN checkout directory '$@'. Please wait...
	@#@rm -rf $(GPL_SVN_DIR)
	@#@echo Checking out $(GPL_SVN_REPOSITORY_URL)
	@# the next line should be replaced by 'tf view' which is not supported by the linux version of tf
	@#@svn co $(GPL_SVN_REPOSITORY_URL) $(GPL_SVN_DIR)
	@#@echo Checkout done.

gpl/svn: $(GPL_SVN_DIR)

$(GPL_EXCLUDED_SOURCES_FILE): FORCE
	@rm -rf $(GPL_EXCLUDED_SOURCES_FILE)
	@for excluded in $(GPL_EXCLUDED_SOURCES); do echo "$${excluded}" >> $(GPL_EXCLUDED_SOURCES_FILE); done

gpl/excluded: $(GPL_EXCLUDED_SOURCES_FILE)

$(GPL_SOURCE_ARCHIVE): $(GPL_EXCLUDED_SOURCES_FILE) FORCE
	@echo Builing GPL source archive. Please wait...
	@rm -f $(GPL_SOURCE_ARCHIVE)
	@tar -v --group=root --owner=root --index-file=$(TAR_INDEX_FILE) --exclude-vcs \
		--exclude-from=$(GPL_EXCLUDED_SOURCES_FILE) -C $(GPL_SVN_DIR) -c -a -f $(GPL_SOURCE_ARCHIVE) $(GPL_SOURCES)
	@cat $(TAR_INDEX_FILE) | sort > $(GPL_SOURCE_ARCHIVE_LIST)
	@echo OK

gpl/tar: $(GPL_SOURCE_ARCHIVE)

gpl/setup: $(GPL_SVN_DIR)
	@make -C $(GPL_SVN_DIR) setup

gpl/clean: FORCE
	@rm -f $(GPL_SOURCE_ARCHIVE)
	@rm -f $(GPL_SOURCE_ARCHIVE_LIST)
	@rm -rf $(GPL_SVN_DIR)
	@rm -f $(TAR_INDEX_FILE)
	@rm -f $(GPL_EXCLUDED_SOURCES_FILE)
