################################################################################
# Generic package infrastructure
#
# This file implements an infrastructure that eases development of
# package .mk files. It should be used for all non-autotools based
# packages. Autotools-based packages should use the specialized
# autotools infrastructure in package/Makefile.autotools.in.
#
# See the Buildroot documentation for details on the usage of this
# infrastructure
#
# In terms of implementation, this generic infrastructure requires the
# .mk file to specify:
#
#   1. Metadata informations about the package: name, version,
#      download URL, etc.
#
#   2. Description of the commands to be executed to configure, build
#      and install the package
#
# The autotools infrastructure specializes this generic infrastructure
# by already implementing the configure, build and install steps.
################################################################################

# UPPERCASE Macro -- transform its argument to uppercase and replace dots and
# hyphens to underscores

# Heavily inspired by the up macro from gmsl (http://gmsl.sf.net)
# This is approx 5 times faster than forking a shell and tr, and
# as this macro is used a lot it matters
# This works by creating translation character pairs (E.G. a:A b:B)
# and then looping though all of them running $(subst from,to,text)
[FROM] := a b c d e f g h i j k l m n o p q r s t u v w x y z . -
[TO]   := A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ _

UPPERCASE = $(strip $(eval __tmp := $1) \
     $(foreach c, $(join $(addsuffix :,$([FROM])),$([TO])), \
	$(eval __tmp :=	\
		$(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)),\
			$(__tmp)))) \
     $(__tmp))

define KCONFIG_ENABLE_OPT
       $(SED) "/\\<$(1)\\>/d" $(2)
       echo "$(1)=y" >> $(2)
endef

define KCONFIG_SET_OPT
       $(SED) "/\\<$(1)\\>/d" $(3)
       echo "$(1)=$(2)" >> $(3)
endef

define KCONFIG_DISABLE_OPT
       $(SED) "/\\<$(1)\\>/d" $(2)
       echo "# $(1) is not set" >> $(2)
endef

# Helper functions to determine the name of a package and its
# directory from its makefile directory, using the $(MAKEFILE_LIST)
# variable provided by make. This is used by the *TARGETS macros to
# automagically find where the package is located. Note that the
# pkgdir macro is carefully written to handle the case of the Linux
# package, for which the package directory is an empty string.
define pkgdir
$(dir $(lastword $(MAKEFILE_LIST)))
endef

define pkgname
$(lastword $(subst /, ,$(call pkgdir)))
endef

define pkgparentdir
$(patsubst %$(call pkgname)/,%,$(call pkgdir))
endef

# Define extractors for different archive suffixes
INFLATE.bz2  = $(BZCAT)
INFLATE.gz   = $(ZCAT)
INFLATE.tbz  = $(BZCAT)
INFLATE.tbz2 = $(BZCAT)
INFLATE.tgz  = $(ZCAT)
INFLATE.xz   = $(XZCAT)
INFLATE.tar  = cat

# MESSAGE Macro -- display a message in bold type
MESSAGE = echo "$(TERM_BOLD)>>> $($(PKG)_NAME) $($(PKG)_VERSION) $(1)$(TERM_RESET)"
MESSAGE_NOPKG = echo "$(TERM_BOLD)>>> $(1)$(TERM_RESET)"
TERM_BOLD := $(shell tput smso)
TERM_RESET := $(shell tput rmso)

BASH_HEADER = echo "$(TERM_BOLD)>>> $$($(2)_NAME) $$($(2)_VERSION) buildbash$(TERM_RESET)"

# Download method commands
WGET:=$(call qstrip,$(BR2_WGET)) $(QUIET)
SVN:=$(call qstrip,$(BR2_SVN))
BZR:=$(call qstrip,$(BR2_BZR))
GIT:=$(call qstrip,$(BR2_GIT))
HG:=$(call qstrip,$(BR2_HG)) $(QUIET)
SCP:=$(call qstrip,$(BR2_SCP)) $(QUIET)
SSH:=$(call qstrip,$(BR2_SSH)) $(QUIET)
MPM:=$(call qstrip,$(BR2_MPM)) $(QUIET)
GCLIENT:=$(call qstrip,$(BR2_GCLIENT))
LOCALFILES:=$(call qstrip,$(BR2_LOCALFILES))

# Default spider mode is 'DOWNLOAD'. Other possible values are 'SOURCE_CHECK'
# used by the _source-check target and 'SHOW_EXTERNAL_DEPS', used by the
# external-deps target.
DL_MODE=DOWNLOAD

DL_DIR=$(call qstrip,$(BR2_DL_DIR))
ifeq ($(DL_DIR),)
DL_DIR:=$(TOPDIR)/dl
endif

################################################################################
# BUILD_AFTER_BUSYBOX: make the given target build only *after* busybox-like
# packages.  That ensures the given target will install on top of busybox
# (and overwrite the builtin tool with a better one) instead of the other
# way around.
#
# Argument 1 is the name of the package that depends on busybox
################################################################################
define _BUILD_AFTER_BUSYBOX
ifeq ($(BR2_PACKAGE_TOOLBOX),y)
$(call UPPERCASE,$(1))_DEPENDENCIES += toolbox
endif
ifeq ($(BR2_PACKAGE_TOYBOX),y)
$(call UPPERCASE,$(1))_DEPENDENCIES += toybox
endif
ifeq ($(BR2_PACKAGE_BUSYBOX),y)
$(call UPPERCASE,$(1))_DEPENDENCIES += busybox
endif
endef
define BUILD_AFTER_BUSYBOX
$(eval $(call _BUILD_AFTER_BUSYBOX,$(1)))
endef

#
# URI scheme helper functions
# Example URIs:
# * http://www.example.com/dir/file
# * scp://www.example.com:dir/file (with domainseparator :)
#
# geturischeme: http
geturischeme=$(firstword $(subst ://, ,$(call qstrip,$(1))))
# stripurischeme: www.example.com/dir/file
stripurischeme=$(lastword $(subst ://, ,$(call qstrip,$(1))))
# domain: www.example.com
domain=$(firstword $(subst $(call domainseparator,$(2)), ,$(call stripurischeme,$(1))))
# notdomain: dir/file
notdomain=$(patsubst $(call domain,$(1),$(2))$(call domainseparator,$(2))%,%,$(call stripurischeme,$(1)))
#
# default domainseparator is /, specify alternative value as first argument
domainseparator=$(if $(1),$(1),/)

################################################################################
# The DOWNLOAD_{GIT,SVN,BZR,HG,LOCALFILES} helpers are in charge of getting a
# working copy of the source repository for their corresponding SCM,
# checking out the requested version / commit / tag, and create an
# archive out of it. DOWNLOAD_SCP uses scp to obtain a remote file with
# ssh authentication. DOWNLOAD_WGET is the normal wget-based download
# mechanism.
#
# The SOURCE_CHECK_{GIT,SVN,BZR,HG,WGET,LOCALFILES,SCP} helpers are in charge of
# simply checking that the source is available for download. This can be used
# to make sure one will be able to get all the sources needed for
# one's build configuration.
#
# The SHOW_EXTERNAL_DEPS_{GIT,SVN,BZR,HG,WGET,LOCALFILES,SCP} helpers simply
# output to the console the names of the files that will be downloaded, or path
# and revision of the source repositories, producing a list of all the
# "external dependencies" of a given build configuration.
################################################################################
define DOWNLOAD_REPO
	if [ -d $(BUILD_DIR)/$($(PKG)_BASE_NAME)/.git ]; then \
		(cd $(BUILD_DIR)/$($(PKG)_BASE_NAME) && $(GIT) reset --hard) \
	else \
		(cd $(BUILD_DIR) && \
		 rm -rf $($(PKG)_BASE_NAME) && \
		 cd $(TOPDIR)/../$($(PKG)_REPO_PATH) && \
		 git worktree prune && \
		 git worktree add -f $(BUILD_DIR)/$($(PKG)_BASE_NAME) \
			"$$(git rev-parse --abbrev-ref HEAD)"; \
		) \
	fi
endef
define SOURCE_CHECK_REPO
	echo "unimplemented"
endef
define SHOW_EXTERNAL_DEPS_REPO
	echo $($(PKG)_SITE)
endef

define DOWNLOAD_RREPO
	${DOWNLOAD_REPO} ;\
	for dir in $$(find $(TOPDIR)/../$($(PKG)_REPO_PATH) -mindepth 2 -name .git -type d) ; do \
		repo_dir=$$(echo $${dir} | sed 's:$(TOPDIR)/../:$(TOPDIR)/../.repo/projects/:g' | sed 's:/.git$$:.git:'); \
		target_dir=$($(PKG)_BASE_NAME)/$$(echo $${dir} | sed 's:$(TOPDIR)/../$($(PKG)_REPO_PATH)/::g' | sed 's:/.git$$::'); \
		if [ -d $(BUILD_DIR)/$${target_dir}/.git ]; then \
			(cd $(BUILD_DIR)/$${target_dir} && $(GIT) reset --hard) ; \
		else \
			(cd $(BUILD_DIR) && \
			if [ "$($(PKG)_DL_VERSION)" == "HEAD" ]; then \
				DL_VERSION="$$($(GIT) --git-dir=$${dir} show-ref --head HEAD --hash)"; \
				DL_BRANCH="$$($(GIT) --git-dir=$${dir} symbolic-ref HEAD 2>/dev/null)"; \
				[ -n "$$DL_BRANCH" ] && DL_VERSION="$${DL_BRANCH#refs/heads/}"; \
			else \
				DL_VERSION=$($(PKG)_DL_VERSION); \
			fi; \
			rm -rf $${target_dir}.tmp/ && \
			sh /usr/share/doc/git/contrib/workdir/git-new-workdir \
				$${repo_dir} \
				$${target_dir}.tmp/ $$DL_VERSION && \
			mkdir -p $${target_dir}/ && \
			rsync -a $${target_dir}.tmp/ $${target_dir}/ && \
			rm -rf $${target_dir}.tmp/ \
			) ; \
		fi ; \
	done
endef
define SOURCE_CHECK_RREPO
	echo "unimplemented"
endef
define SHOW_EXTERNAL_DEPS_RREPO
	echo $($(PKG)_SITE)
endef

define DOWNLOAD_GIT
	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
	(pushd $(DL_DIR) > /dev/null && \
	$(GIT) clone --bare $($(PKG)_SITE) $($(PKG)_BASE_NAME) && \
	pushd $($(PKG)_BASE_NAME) > /dev/null && \
	$(GIT) archive --format=tar --prefix=$($(PKG)_BASE_NAME)/ $($(PKG)_DL_VERSION) | \
		gzip -c > $(DL_DIR)/$($(PKG)_SOURCE) && \
	popd > /dev/null && \
	rm -rf $($(PKG)_DL_DIR) && \
	popd > /dev/null)
endef

# TODO: improve to check that the given PKG_DL_VERSION exists on the remote
# repository
define SOURCE_CHECK_GIT
  $(GIT) ls-remote --heads $($(PKG)_SITE) > /dev/null
endef

define SHOW_EXTERNAL_DEPS_GIT
	echo $($(PKG)_SOURCE)
endef


define DOWNLOAD_BZR
	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
	$(BZR) export $(DL_DIR)/$($(PKG)_SOURCE) $($(PKG)_SITE) -r $($(PKG)_DL_VERSION)
endef

define SOURCE_CHECK_BZR
	$(BZR) ls --quiet $($(PKG)_SITE) > /dev/null
endef

define SHOW_EXTERNAL_DEPS_BZR
	echo $($(PKG)_SOURCE)
endef


define DOWNLOAD_SVN
	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
	(pushd $(DL_DIR) > /dev/null && \
	$(SVN) export -r $($(PKG)_DL_VERSION) $($(PKG)_SITE) $($(PKG)_DL_DIR) && \
	$(TAR) czf $($(PKG)_SOURCE) $($(PKG)_BASE_NAME)/ && \
	rm -rf $($(PKG)_DL_DIR) && \
	popd > /dev/null)
endef

define SOURCE_CHECK_SVN
  $(SVN) ls $($(PKG)_SITE) > /dev/null
endef

define SHOW_EXTERNAL_DEPS_SVN
  echo $($(PKG)_SOURCE)
endef

# SCP URIs should be of the form scp://[user@]host:filepath
# Note that filepath is relative to the user's home directory, so you may want
# to prepend the path with a slash: scp://[user@]host:/absolutepath
define DOWNLOAD_SCP
	test -e $(DL_DIR)/$(2) || \
	$(SCP) $(call stripurischeme,$(call qstrip,$(1)))/$(2) $(DL_DIR)
endef

define SOURCE_CHECK_SCP
	$(SSH) $(call domain,$(1),:) ls $(call notdomain,$(1)/$(2),:) > /dev/null
endef

define SHOW_EXTERNAL_DEPS_SCP
	echo $(2)
endef


define DOWNLOAD_HG
	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
	(pushd $(DL_DIR) > /dev/null && \
	$(HG) clone --noupdate --rev $($(PKG)_DL_VERSION) $($(PKG)_SITE) $($(PKG)_BASE_NAME) && \
	$(HG) archive --repository $($(PKG)_BASE_NAME) --type tgz --prefix $($(PKG)_BASE_NAME)/ \
	              --rev $($(PKG)_DL_VERSION) $(DL_DIR)/$($(PKG)_SOURCE) && \
	rm -rf $($(PKG)_DL_DIR) && \
	popd > /dev/null)
endef

# TODO: improve to check that the given PKG_DL_VERSION exists on the remote
# repository
define SOURCE_CHECK_HG
  $(HG) incoming --force -l1 $($(PKG)_SITE) > /dev/null
endef

define SHOW_EXTERNAL_DEPS_HG
  echo $($(PKG)_SOURCE)
endef

define DOWNLOAD_MPM
	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
	(pushd $(DL_DIR) > /dev/null && \
        $(MPM) fetch -a -v $($(PKG)_VERSION) $(call stripurischeme,$(call qstrip,$(1))) $($(PKG)_BASE_NAME) && \
	$(TAR) chf $($(PKG)_SOURCE) $($(PKG)_BASE_NAME)/ && \
	rm -rf $($(PKG)_BASE_NAME) $($(PKG)_BASE_NAME).mpm && \
	popd > /dev/null)
endef

define SOURCE_CHECK_MPM
	$(MPM) packageinfo -b $($(PKG)_VERSION) $(call stripurischeme,$(call qstrip,$(1)))
endef

define SHOW_EXTERNAL_DEPS_MPM
	echo $(2)
endef

define DOWNLOAD_WGET
	if ! test -e $(DL_DIR)/$(2); then \
		if test -n "$(BUILDROOT_DL_NEVER)"; then \
			echo "Downloads disabled, skipping download of $(2)"; \
			exit 1; \
		fi && \
		$(WGET) -P $(DL_DIR) $(call qstrip,$(1))/$(2); \
	fi
endef

define SOURCE_CHECK_WGET
  $(WGET) --spider $(call qstrip,$(1))/$(2)
endef

define SHOW_EXTERNAL_DEPS_WGET
  echo $(2)
endef

define DOWNLOAD_LOCALFILES
	test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
		$(LOCALFILES) $(call qstrip,$(subst file://,,$($(PKG)_SITE)))/$($(PKG)_SOURCE) $(DL_DIR)
endef

define SOURCE_CHECK_LOCALFILES
  test -e $(call qstrip,$(subst file://,,$($(PKG)_SITE)))/$($(PKG)_SOURCE)
endef

define SHOW_EXTERNAL_DEPS_LOCALFILES
  echo $($(PKG)_SITE)/$($(PKG)_SOURCE)
endef

define DOWNLOAD_GCLIENT
  test -e $(DL_DIR)/$($(PKG)_SOURCE) || \
  (pushd $(DL_DIR) > /dev/null && \
  mkdir -p $($(PKG)_BASE_NAME) && \
  pushd $($(PKG)_DL_DIR) > /dev/null && \
  $(GCLIENT) config $($(PKG)_SITE) && \
  $(GCLIENT) sync -r $($(PKG)_DL_VERSION) -t && \
  rm -rf .gclient .gclient_entries && \
  find . -name '.svn' -print0 | xargs -0 sh -c 'for i in "$$@" ; do test -e "$$i" && rm -rf "$$i" ; done' _ && \
  find . -name '.git' -print0 | xargs -0 sh -c 'for i in "$$@" ; do test -e "$$i" && rm -rf "$$i" ; done' _ && \
  popd > /dev/null && \
  $(TAR) czf $($(PKG)_SOURCE) $($(PKG)_BASE_NAME)/ && \
  rm -rf $($(PKG)_DL_DIR) && \
  popd > /dev/null)
endef

define SOURCE_CHECK_GCLIENT
  $(SVN) ls $($(PKG)_SITE) > /dev/null || \
  $(GIT) ls-remote --heads $($(PKG)_SITE) > /dev/null
endef

define SHOW_EXTERNAL_DEPS_GCLIENT
  echo $($(PKG)_SOURCE)
endef

################################################################################
# DOWNLOAD -- Download helper. Will try to download source from:
# 1) BR2_PRIMARY_SITE if enabled
# 2) Download site
# 3) BR2_BACKUP_SITE if enabled
#
# Argument 1 is the source location
# Argument 2 is the source filename
#
# E.G. use like this:
# $(call DOWNLOAD,$(FOO_SITE),$(FOO_SOURCE))
################################################################################

define DOWNLOAD
	if test -n "$(call qstrip,$(BR2_PRIMARY_SITE))" ; then \
		case "$(call geturischeme,$(BR2_PRIMARY_SITE))" in \
			scp) $(call $(DL_MODE)_SCP,$(BR2_PRIMARY_SITE),$(2)) && exit ;; \
			*) $(call $(DL_MODE)_WGET,$(BR2_PRIMARY_SITE),$(2)) && exit ;; \
		esac ; \
	fi ; \
	if test -n "$(1)" ; then \
		case "$($(PKG)_SITE_METHOD)" in \
			git) $($(DL_MODE)_GIT) && exit ;; \
			svn) $($(DL_MODE)_SVN) && exit ;; \
			bzr) $($(DL_MODE)_BZR) && exit ;; \
			file) $($(DL_MODE)_LOCALFILES) && exit ;; \
			scp) $($(DL_MODE)_SCP) && exit ;; \
			hg) $($(DL_MODE)_HG) && exit ;; \
			repo) $($(DL_MODE)_REPO) && exit ;; \
			rrepo) $($(DL_MODE)_RREPO) && exit ;; \
			mpm) $($(DL_MODE)_MPM) && exit ;; \
			gclient) $($(DL_MODE)_GCLIENT) && exit ;; \
			null) exit ;; \
			*) $(call $(DL_MODE)_WGET,$(1),$(2)) && exit ;; \
		esac ; \
	fi ; \
	if test -n "$(call qstrip,$(BR2_BACKUP_SITE))" ; then \
		$(call $(DL_MODE)_WGET,$(BR2_BACKUP_SITE),$(2)) && exit ; \
	fi ; \
	exit 1
endef

# Needed for the foreach loops to loop over the list of hooks, so that
# each hook call is properly separated by a newline.
define sep


endef

################################################################################
# Implicit targets -- produce a stamp file for each step of a package build
################################################################################

# Retrieve the archive
$(BUILD_DIR)/%/.stamp_downloaded:
ifeq ($(DL_MODE),DOWNLOAD)
# Only show the download message if it isn't already downloaded
	$(Q)(test -e $(DL_DIR)/$($(PKG)_SOURCE) && \
		(test -z $($(PKG)_PATCH) || test -e $(DL_DIR)$($(PKG)_PATCH))) || \
		$(call MESSAGE,"Downloading")
endif
	$(if $($(PKG)_SOURCE),$(call DOWNLOAD,$($(PKG)_SITE),$($(PKG)_SOURCE)))
	$(if $($(PKG)_PATCH),$(call DOWNLOAD,$($(PKG)_SITE),$($(PKG)_PATCH)))
	$(foreach hook,$($(PKG)_POST_DOWNLOAD_HOOKS),$(call $(hook))$(sep))
ifeq ($(DL_MODE),DOWNLOAD)
	$(Q)mkdir -p $(@D)
	$(Q)touch $@
endif

# Unpack the archive
$(BUILD_DIR)/%/.stamp_extracted:
	@$(call MESSAGE,"Extracting")
	$(Q)mkdir -p $(@D)
	$(Q)$($(PKG)_EXTRACT_CMDS)
# some packages have messed up permissions inside
	$(Q)chmod -R +rw $(@D)
	$(foreach hook,$($(PKG)_POST_EXTRACT_HOOKS),$(call $(hook))$(sep))
	$(Q)touch $@

# Rsync the source directory if the <pkg>_OVERRIDE_SRCDIR feature is
# used.
$(BUILD_DIR)/%/.stamp_rsynced:
	@$(call MESSAGE,"Syncing from source dir $(SRCDIR)")
	@test -d $(SRCDIR) || (echo "ERROR: $(SRCDIR) does not exist" ; exit 1)
	rsync -au $(SRCDIR)/ $(@D)
	$(Q)touch $@

# Handle the SOURCE_CHECK and SHOW_EXTERNAL_DEPS cases for rsynced
# packages
$(BUILD_DIR)/%/.stamp_rsync_sourced:
ifeq ($(DL_MODE),SOURCE_CHECK)
	test -d $(SRCDIR)
else ifeq ($(DL_MODE),SHOW_EXTERNAL_DEPS)
	echo "file://$(SRCDIR)"
else
	@true # Nothing to do to source a local package
endif

# Patch
#
# The RAWNAME variable is the lowercased package name, which allows to
# find the package directory (typically package/<pkgname>) and the
# prefix of the patches
$(BUILD_DIR)/%/.stamp_patched: NAMEVER = $(RAWNAME)-$($(PKG)_VERSION)
$(BUILD_DIR)/%/.stamp_patched:
	@$(call MESSAGE,"Patching $($(PKG)_DIR_PREFIX)/$(RAWNAME)")
	$(foreach hook,$($(PKG)_PRE_PATCH_HOOKS),$(call $(hook))$(sep))
	$(if $($(PKG)_PATCH),$(Q)support/scripts/apply-patches.sh $(@D) $(DL_DIR) $($(PKG)_PATCH))
	$(Q)( \
	if test -d $($(PKG)_DIR_PREFIX)/$(RAWNAME); then \
	  if test "$(wildcard $($(PKG)_DIR_PREFIX)/$(RAWNAME)/$(NAMEVER)*.patch*)"; then \
	    support/scripts/apply-patches.sh $(@D) $($(PKG)_DIR_PREFIX)/$(RAWNAME) $(NAMEVER)\*.patch $(NAMEVER)\*.patch.$(ARCH) || exit 1; \
	  else \
	    support/scripts/apply-patches.sh $(@D) $($(PKG)_DIR_PREFIX)/$(RAWNAME) $(RAWNAME)\*.patch $(RAWNAME)\*.patch.$(ARCH) || exit 1; \
	    if test -d $($(PKG)_DIR_PREFIX)/$(RAWNAME)/$(NAMEVER); then \
	      support/scripts/apply-patches.sh $(@D) $($(PKG)_DIR_PREFIX)/$(RAWNAME)/$(NAMEVER) \*.patch \*.patch.$(ARCH) || exit 1; \
	    fi; \
	  fi; \
	fi; \
	)
	$(foreach hook,$($(PKG)_POST_PATCH_HOOKS),$(call $(hook))$(sep))
	$(Q)touch $@

# Configure
$(BUILD_DIR)/%/.stamp_configured:
	$(foreach hook,$($(PKG)_PRE_CONFIGURE_HOOKS),$(call $(hook))$(sep))
	@$(call MESSAGE,"Configuring")
	+$(Q)$($(PKG)_CONFIGURE_CMDS)
	$(foreach hook,$($(PKG)_POST_CONFIGURE_HOOKS),$(call $(hook))$(sep))
	$(Q)touch $@

# Build
$(BUILD_DIR)/%/.stamp_built::
	@$(call MESSAGE,"Building")
	+$(Q)$($(PKG)_BUILD_CMDS)
	$(foreach hook,$($(PKG)_POST_BUILD_HOOKS),$(call $(hook))$(sep))
	$(Q)touch $@

# Test
$(BUILD_DIR)/%/.stamp_tested::
	@$(call MESSAGE,"Testing")
	+$(Q)$($(PKG)_TEST_CMDS)
	$(Q)touch $@

# Coverage
$(BUILD_DIR)/%/.stamp_coverage_done::
	@$(call MESSAGE,"Generating code coverage information")
	+$(Q)$($(PKG)_COVERAGE_CMDS)
	$(Q)touch $@

# Install to host dir
$(BUILD_DIR)/%/.stamp_host_installed:
	@$(call MESSAGE,"Installing to host directory")
	+$(Q)$($(PKG)_INSTALL_CMDS)
	$(foreach hook,$($(PKG)_POST_INSTALL_HOOKS),$(call $(hook))$(sep))
	$(Q)touch $@

# Install to staging dir
$(BUILD_DIR)/%/.stamp_staging_installed:
	@$(call MESSAGE,"Installing to staging directory")
	+$(Q)$($(PKG)_INSTALL_STAGING_CMDS)
	$(foreach hook,$($(PKG)_POST_INSTALL_STAGING_HOOKS),$(call $(hook))$(sep))
	$(Q)touch $@

# Install to images dir
$(BUILD_DIR)/%/.stamp_images_installed:
	@$(call MESSAGE,"Installing to images directory")
	+$(Q)$($(PKG)_INSTALL_IMAGES_CMDS)
	$(foreach hook,$($(PKG)_POST_INSTALL_IMAGES_HOOKS),$(call $(hook))$(sep))
	$(Q)touch $@

# Install to target dir
$(BUILD_DIR)/%/.stamp_target_installed:
	@$(call MESSAGE,"Installing to target")
	+$(Q)$($(PKG)_INSTALL_TARGET_CMDS)
	$(Q)(rcd="$($(PKG)_DIR_PREFIX)/$(RAWNAME)/rc"; \
	     ocd="$(STAGING_DIR)/etc/s6-rc/source"; \
		for d in $$rcd/*; do \
			mkdir -p "$$ocd" && \
			if test -d "$$d"; then \
				rm -rf "$$ocd/$$(basename "$$d")"; \
				cp -alf "$$d" "$$ocd/"; \
			fi; \
		done \
	)
	$(foreach hook,$($(PKG)_POST_INSTALL_TARGET_HOOKS),$(call $(hook))$(sep))
	$(Q)touch $@

# Install to all appropriate destinations.
#  (dependencies are specified elsewhere)
$(STAMP_DIR)/%:
	@$(call MESSAGE_NOPKG,"Stamping $@")
	$(Q)touch $@

# For packages that don't use GENTARGETS
%-show-depends:
	@echo $* :

# Clean package
$(BUILD_DIR)/%/.stamp_cleaned:
	@$(call MESSAGE,"Cleaning up")
	$($(PKG)_CLEAN_CMDS)
	rm -f $(@D)/.stamp_built

# Uninstall package from target and staging
# Uninstall commands tend to fail, so remove the stamp files first
$(BUILD_DIR)/%/.stamp_uninstalled:
	@$(call MESSAGE,"Uninstalling")
	rm -f $($(PKG)_TARGET_INSTALL_STAGING)
	rm -f $($(PKG)_TARGET_INSTALL_TARGET)
	rm -f $($(PKG)_TARGET_INSTALL_IMAGES)
	$($(PKG)_UNINSTALL_STAGING_CMDS)
	$($(PKG)_UNINSTALL_TARGET_CMDS)
	$($(PKG)_UNINSTALL_IMAGES_CMDS)

# Remove package sources
$(BUILD_DIR)/%/.stamp_dircleaned:
	$($(PKG)_DIRCLEAN_CMDS)
	rm -Rf $(@D)
	@if [[ "$($(PKG)_SITE_METHOD)" == "repo" ]] || [[ "$($(PKG)_SITE_METHOD)" == "rrepo" ]]; then \
		echo rm -f $(DL_DIR)/$($(PKG)_SOURCE); \
		rm -f $(DL_DIR)/$($(PKG)_SOURCE); \
	fi
	rm -f $($(PKG)_TARGET_INSTALL_ALL) $($(PKG)_TARGET_DEPENDS_DONE)


################################################################################
# GENTARGETS_INNER -- generates the make targets needed to build a
# generic package
#
#  argument 1 is the lowercase package name
#  argument 2 is the uppercase package name, including an HOST_ prefix
#             for host packages
#  argument 3 is the uppercase package name, without the HOST_ prefix
#             for host packages
#  argument 4 is the package directory prefix
#  argument 5 is the type (target or host)
################################################################################

define GENTARGETS_INNER

# Define default values for various package-related variables, if not
# already defined. For some variables (version, source, site and
# subdir), if they are undefined, we try to see if a variable without
# the HOST_ prefix is defined. If so, we use such a variable, so that
# these informations have only to be specified once, for both the
# target and host packages of a given .mk file.

$(2)_TYPE                       =  $(5)
$(2)_NAME			=  $(1)

# Keep the package version that may contain forward slashes in the _DL_VERSION
# variable, then replace all forward slashes ('/') by underscores ('_') to
# sanitize the package version that is used in paths, directory and file names.
# Forward slashes may appear in the package's version when pointing to a
# version control system branch or tag, for example remotes/origin/1_10_stable.
ifndef $(2)_VERSION
 ifdef $(3)_VERSION
  $(2)_DL_VERSION = $($(3)_VERSION)
  $(2)_VERSION = $(subst /,_,$($(3)_VERSION))
 else
  $(2)_VERSION = undefined
  $(2)_DL_VERSION = undefined
  ifeq ($(firstword $(subst ://, ,$(call qstrip,$($(2)_SITE)))),repo)
    $(2)_VERSION=HEAD
    $(2)_DL_VERSION=HEAD
  endif
  ifeq ($(firstword $(subst ://, ,$(call qstrip,$($(2)_SITE)))),rrepo)
    $(2)_VERSION=HEAD
    $(2)_DL_VERSION=HEAD
  endif
 endif
else
  $(2)_DL_VERSION = $($(2)_VERSION)
  $(2)_VERSION = $(subst /,_,$($(2)_VERSION))
endif

$(2)_BASE_NAME	=  $(1)-$$($(2)_VERSION)
$(2)_DL_DIR	=  $$(DL_DIR)/$$($(2)_BASE_NAME)
$(2)_DIR	=  $$(BUILD_DIR)/$$($(2)_BASE_NAME)

ifneq ($$($(2)_OVERRIDE_SRCDIR),)
$(2)_VERSION = custom
endif

ifndef $(2)_SOURCE
 ifdef $(3)_SOURCE
  $(2)_SOURCE = $($(3)_SOURCE)
 else
  $(2)_SOURCE			?= $$($(2)_BASE_NAME).tar.gz
 endif
endif

ifndef $(2)_PATCH
 ifdef $(3)_PATCH
  $(2)_PATCH = $($(3)_PATCH)
 endif
endif

ifndef $(2)_TEST
 ifdef $(3)_TEST
  $(2)_TEST = $($(3)_TEST)
 endif
endif

ifndef $(2)_COVERAGE
 ifdef $(3)_COVERAGE
  $(2)_COVERAGE = $($(3)_COVERAGE)
 endif
endif

ifndef $(2)_SITE
 ifdef $(3)_SITE
  $(2)_SITE = $($(3)_SITE)
 else
  $(2)_SITE			?= \
	http://$$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/$(1)
 endif
endif

ifndef $(2)_SITE_METHOD
 ifdef $(3)_SITE_METHOD
  $(2)_SITE_METHOD = $($(3)_SITE_METHOD)
 else
	# Try automatic detection using the scheme part of the URI
	$(2)_SITE_METHOD = $(firstword $(subst ://, ,$(call qstrip,$($(2)_SITE))))
 endif
endif

ifeq ($$($(2)_SITE_METHOD),local)
ifeq ($$($(2)_OVERRIDE_SRCDIR),)
$(2)_OVERRIDE_SRCDIR = $($(2)_SITE)
endif
endif

ifndef $(2)_REPO_PATH
 ifdef $(3)_REPO_PATH
  $(2)_REPO_PATH = $($(3)_REPO_PATH)
 else
  $(2)_REPO_PATH=$(lastword $(subst ://, ,$(call qstrip,$($(2)_SITE))))
 endif
endif

$(2)_DEPENDENCIES ?= $(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES)))

$(2)_TEST			?= NO
$(2)_COVERAGE			?= NO
$(2)_INSTALL_STAGING		?= NO
$(2)_INSTALL_IMAGES		?= NO
ifeq ($$($(2)_TYPE),host)
$(2)_INSTALL_TARGET		?= NO
else
$(2)_INSTALL_TARGET		?= YES
endif
$(2)_DIR_PREFIX			= $(if $(4),$(4),$(TOP_SRCDIR)/package)

# define sub-target stamps
$(2)_TARGET_INSTALL_ALL =	$(STAMP_DIR)/$(1)
$(2)_TARGET_INSTALL_TARGET =	$$($(2)_DIR)/.stamp_target_installed
$(2)_TARGET_INSTALL_STAGING =	$$($(2)_DIR)/.stamp_staging_installed
$(2)_TARGET_INSTALL_IMAGES =	$$($(2)_DIR)/.stamp_images_installed
$(2)_TARGET_INSTALL_HOST =      $$($(2)_DIR)/.stamp_host_installed
$(2)_TARGET_BUILD =		$$($(2)_DIR)/.stamp_built
$(2)_TARGET_CONFIGURE =		$$($(2)_DIR)/.stamp_configured
$(2)_TARGET_DEPENDS_DONE =	$(STAMP_DIR)/$(1).deps
$(2)_TARGET_RSYNC =	        $$($(2)_DIR)/.stamp_rsynced
$(2)_TARGET_RSYNC_SOURCE =      $$($(2)_DIR)/.stamp_rsync_sourced
$(2)_TARGET_PATCH =		$$($(2)_DIR)/.stamp_patched
$(2)_TARGET_TEST =		$$($(2)_DIR)/.stamp_tested
$(2)_TARGET_COVERAGE =		$$($(2)_DIR)/.stamp_coverage_done
$(2)_TARGET_EXTRACT =		$$($(2)_DIR)/.stamp_extracted
$(2)_TARGET_SOURCE =		$$($(2)_DIR)/.stamp_downloaded
$(2)_TARGET_UNINSTALL =		$$($(2)_DIR)/.stamp_uninstalled
$(2)_TARGET_CLEAN =		$$($(2)_DIR)/.stamp_cleaned
$(2)_TARGET_DIRCLEAN =		$$($(2)_DIR)/.stamp_dircleaned

# default extract command
ifeq ($$($(2)_SITE_METHOD),repo)
$(2)_EXTRACT_CMDS ?=
else
ifeq ($$($(2)_SITE_METHOD),rrepo)
$(2)_EXTRACT_CMDS ?=
else
$(2)_EXTRACT_CMDS ?= \
	$$(if $$($(2)_SOURCE),$$(INFLATE$$(suffix $$($(2)_SOURCE))) $(DL_DIR)/$$($(2)_SOURCE) | \
	$(TAR) $(TAR_STRIP_COMPONENTS)=1 -C $$($(2)_DIR) $(TAR_OPTIONS) -)
endif
endif

# post-steps hooks
$(2)_POST_DOWNLOAD_HOOKS        ?=
$(2)_POST_EXTRACT_HOOKS         ?=
$(2)_PRE_PATCH_HOOKS            ?=
$(2)_POST_PATCH_HOOKS           ?=
$(2)_PRE_CONFIGURE_HOOKS        ?=
$(2)_POST_CONFIGURE_HOOKS       ?=
$(2)_POST_BUILD_HOOKS           ?=
$(2)_POST_INSTALL_HOOKS         ?=
$(2)_POST_INSTALL_STAGING_HOOKS ?=
$(2)_POST_INSTALL_TARGET_HOOKS  ?=
$(2)_POST_INSTALL_IMAGES_HOOKS  ?=

# human-friendly targets and target sequencing
$(1):			$(1)-install

$(1)-install:		$$($(2)_TARGET_INSTALL_ALL)
ifeq ($$($(2)_TYPE),host)
$$($(2)_TARGET_INSTALL_ALL):	$$($(2)_TARGET_INSTALL_HOST)
$(2)_DEP_HOST_X = $$($(2)_TARGET_INSTALL_HOST)
else
$$($(2)_TARGET_INSTALL_ALL):
endif

$$($(2)_TARGET_EXTRACT):		$$($(2)_TARGET_SOURCE)
$$($(2)_TARGET_PATCH):			$$($(2)_TARGET_EXTRACT)
$$($(2)_TARGET_CONFIGURE):		$$($(2)_TARGET_PATCH) \
					$$($(2)_TARGET_DEPENDS_DONE)
$$($(2)_TARGET_BUILD):			$$($(2)_TARGET_CONFIGURE)
$$($(2)_TARGET_INSTALL_TARGET):		$$($(2)_TARGET_BUILD) $(BUILD_DIR)/.root
$$($(2)_TARGET_INSTALL_STAGING):	$$($(2)_TARGET_BUILD)
$$($(2)_TARGET_INSTALL_IMAGES):		$$($(2)_TARGET_BUILD)
$$($(2)_TARGET_INSTALL_HOST):		$$($(2)_TARGET_BUILD)
$$($(2)_TARGET_TEST):			$$($(2)_TARGET_BUILD)
$$($(2)_TARGET_COVERAGE):		$$($(2)_TARGET_CONFIGURE)

ifeq ($$($(2)_INSTALL_TARGET),YES)
$(1)-install-target:	$$($(2)_TARGET_INSTALL_TARGET)
$$($(2)_TARGET_INSTALL_ALL):	$$($(2)_TARGET_INSTALL_TARGET)
$(2)_DEP_TARGET_X = $$($(2)_TARGET_INSTALL_TARGET)
else
$(1)-install-target:
endif

ifeq ($$($(2)_INSTALL_STAGING),YES)
$(1)-install-staging:	$$($(2)_TARGET_INSTALL_STAGING)
$$($(2)_TARGET_INSTALL_ALL):	$$($(2)_TARGET_INSTALL_STAGING)
$(2)_DEP_STAGING_X = $$($(2)_TARGET_INSTALL_STAGING)
else
$(1)-install-staging:
endif

ifeq ($$($(2)_INSTALL_IMAGES),YES)
$(1)-install-images:	$$($(2)_TARGET_INSTALL_IMAGES)
$$($(2)_TARGET_INSTALL_ALL):	$$($(2)_TARGET_INSTALL_IMAGES)
$(2)_DEP_IMAGES_X = $$($(2)_TARGET_INSTALL_IMAGES)
else
$(1)-install-images:
endif

# Enforce strict ordering of installation steps so we don't try to install
# to two places at once (many packages crash if you try to do this, because
# they create temporary files in the source dir).  This has to be complicated
# because some packages don't do various kinds of installs.
$$($(2)_TARGET_INSTALL_TARGET):		$$($(2)_DEP_STAGING_X) \
					$$($(2)_DEP_IMAGES_X) \
					$$($(2)_DEP_HOST_X)
$$($(2)_TARGET_INSTALL_STAGING):	$$($(2)_DEP_IMAGES_X) \
					$$($(2)_DEP_HOST_X)
$$($(2)_TARGET_INSTALL_IMAGES):		$$($(2)_DEP_HOST_X)

$(1)-install-host:      $$($(2)_TARGET_INSTALL_HOST)

$(1)-build:		$$($(2)_TARGET_BUILD)

$(1)-test:		$$($(2)_TARGET_TEST)

$(1)-coverage:		$$($(2)_TARGET_COVERAGE)

# Run host tests as part of test if configured.
ifneq ($$(HOST_$(2)_TEST_CMDS),)
$(1)-test:	host-$(1)-test
endif

$(2)_DEPENDS_STAMPS =	$$(patsubst %,$(STAMP_DIR)/%,$$(filter-out $(1),$$($(2)_DEPENDENCIES) $(PRE_DEPENDS)))

$(1)-dp:
	@echo foo1 '|$$($(2)_DEPENDENCIES)|'
	@echo foo2 '|$$($(2)_DEPENDS_STAMPS)|'

$$($(2)_TARGET_DEPENDS_DONE): $$($(2)_TARGET_EXTRACT) \
		$$($(2)_DEPENDS_STAMPS)
	@touch $$($(2)_TARGET_DEPENDS_DONE)

ifeq ($$($(2)_OVERRIDE_SRCDIR),)
# In the normal case (no package override), the sequence of steps is
#  source, by downloading
#  depends
#  extract
#  patch
#  configure
$(1)-configure:		$$($(2)_TARGET_CONFIGURE)
$$($(2)_TARGET_CONFIGURE): $$($(2)_TARGET_PATCH)

$(1)-patch:		$$($(2)_TARGET_PATCH)

$(1)-extract:		$$($(2)_TARGET_EXTRACT)

$(1)-depends:		$$($(2)_TARGET_DEPENDS_DONE)

$(1)-source:		$$($(2)_TARGET_SOURCE)
else
# In the package override case, the sequence of steps
#  source, by rsyncing
#  depends
#  configure
$(1)-configure:		$$($(2)_TARGET_CONFIGURE)

$(1)-depends:		$$($(2)_TARGET_RSYNC) $$($(2)_TARGET_DEPENDS_DONE)

$(1)-rsync:		$$($(2)_TARGET_RSYNC)

$(1)-source:		$$($(2)_TARGET_RSYNC_SOURCE)
endif

$(1)-show-depends: $(patsubst %,%-show-depends,$($(2)_DEPENDENCIES))
			@echo $(1) : $$($(2)_DEPENDENCIES)

$(1)-is-enabled:
	@echo "is-enabled: $(1): '$$(BR2_PACKAGE_$(2))'"
	$(Q) \
	[ "$(1)" = linux ] || \
	[ "$(1)" = automake ] || \
	[ "$(1)" = autoconf ] || \
	[ "$(1)" = libtool ] || \
	[ "$(1)" = cmake ] || \
	[ "$(1)" = gdb_target ] || \
	if [ "$$(BR2_PACKAGE_$(2))" != 'y' ]; then \
		echo "error: $(1) is depended on but BR2_PACKAGE_$(2) not set" >&2; \
		exit 1; \
	fi

$(1)-depcheck:		$$(filter-out host-%,$$(patsubst %,%-is-enabled,$$($(2)_DEPENDENCIES)))

$(1)-uninstall:		$(1)-configure $$($(2)_TARGET_UNINSTALL)

$(1)-clean:		$(1)-uninstall \
			$$($(2)_TARGET_CLEAN)

$(1)-dirclean:		$$($(2)_TARGET_DIRCLEAN)

$(1)-clean-for-rebuild:
ifneq ($$($(2)_OVERRIDE_SRCDIR),)
			rm -f $$($(2)_TARGET_RSYNC)
endif
			rm -f $$($(2)_TARGET_BUILD)
			rm -f $$($(2)_TARGET_INSTALL_STAGING)
			rm -f $$($(2)_TARGET_INSTALL_TARGET)
			rm -f $$($(2)_TARGET_INSTALL_IMAGES)
			rm -f $$($(2)_TARGET_INSTALL_HOST)
			rm -f $$($(2)_TARGET_TEST)
			rm -f $$($(2)_TARGET_COVERAGE)

$(1)-rebuild:		$(1)-clean-for-rebuild all

$(1)-clean-for-reconfigure: $(1)-clean-for-rebuild
			rm -f $$($(2)_TARGET_CONFIGURE)

$(1)-buildbash:		$(1)-extract $$($(2)_TARGET_BASH)
	@$(call BASH_HEADER,$(1),$(2))
	@cd $$($(2)_DIR); env PS1="[build-$(1)] % "  /bin/bash --norc -i </dev/tty

$(1)-reconfigure:	$(1)-clean-for-reconfigure all

# define the PKG variable for all targets, containing the
# uppercase package variable prefix
$$($(2)_TARGET_INSTALL_TARGET):		PKG=$(2)
$$($(2)_TARGET_INSTALL_TARGET):		RAWNAME=$(patsubst host-%,%,$(1))
$$($(2)_TARGET_INSTALL_STAGING):	PKG=$(2)
$$($(2)_TARGET_INSTALL_IMAGES):		PKG=$(2)
$$($(2)_TARGET_INSTALL_HOST):           PKG=$(2)
$$($(2)_TARGET_BUILD):			PKG=$(2)
$$($(2)_TARGET_TEST):			PKG=$(2)
$$($(2)_TARGET_COVERAGE):		PKG=$(2)
$$($(2)_TARGET_CONFIGURE):		PKG=$(2)
$$($(2)_TARGET_RSYNC):                  SRCDIR=$$($(2)_OVERRIDE_SRCDIR)
$$($(2)_TARGET_RSYNC):                  PKG=$(2)
$$($(2)_TARGET_RSYNC_SOURCE):		SRCDIR=$$($(2)_OVERRIDE_SRCDIR)
$$($(2)_TARGET_RSYNC_SOURCE):		PKG=$(2)
$$($(2)_TARGET_PATCH):			PKG=$(2)
$$($(2)_TARGET_PATCH):			RAWNAME=$(patsubst host-%,%,$(1))
$$($(2)_TARGET_EXTRACT):		PKG=$(2)
$$($(2)_TARGET_SOURCE):			PKG=$(2)
$$($(2)_TARGET_UNINSTALL):		PKG=$(2)
$$($(2)_TARGET_CLEAN):			PKG=$(2)
$$($(2)_TARGET_DIRCLEAN):		PKG=$(2)
$$($(2)_TARGET_BASH):			PKG=$(2)

# Compute the name of the Kconfig option that correspond to the
# package being enabled. We handle three cases: the special Linux
# kernel case, the bootloaders case, and the normal packages case.
ifeq ($(1),linux)
$(2)_KCONFIG_VAR = BR2_LINUX_KERNEL
else ifeq ($(4),boot/)
$(2)_KCONFIG_VAR = BR2_TARGET_$(2)
else
$(2)_KCONFIG_VAR = BR2_PACKAGE_$(2)
endif

# add package to the general list of targets if requested by the buildroot
# configuration
ifeq ($$($$($(2)_KCONFIG_VAR)),y)

TARGETS += $(1)
PACKAGES_PERMISSIONS_TABLE += $$($(2)_PERMISSIONS)$$(sep)
PACKAGES_DEVICES_TABLE += $$($(2)_DEVICES)$$(sep)

ifneq ($$($(2)_TYPE),host)
TARGET_STAMPFILES += $$($(2)_TARGET_INSTALL_TARGET)
endif
ifeq ($$($(2)_INSTALL_IMAGES),YES)
IMAGE_STAMPFILES += $$($(2)_TARGET_INSTALL_IMAGES)
endif

ifeq ($$($(2)_SITE_METHOD),svn)
DL_TOOLS_DEPENDENCIES += svn
else ifeq ($$($(2)_SITE_METHOD),git)
DL_TOOLS_DEPENDENCIES += git
else ifeq ($$($(2)_SITE_METHOD),bzr)
DL_TOOLS_DEPENDENCIES += bzr
else ifeq ($$($(2)_SITE_METHOD),scp)
DL_TOOLS_DEPENDENCIES += scp ssh
else ifeq ($$($(2)_SITE_METHOD),hg)
DL_TOOLS_DEPENDENCIES += hg
endif # SITE_METHOD

DL_TOOLS_DEPENDENCIES += $(firstword $(INFLATE$(suffix $($(2)_SOURCE))))

endif # $(2)_KCONFIG_VAR
endef # GENTARGETS_INNER

################################################################################
# GENTARGETS -- the target generator macro for generic packages
#
# Argument 1 is "target" or "host"           [optional, default: "target"]
################################################################################

define GENTARGETS
ifeq ($(1),host)
# In the case of host packages, turn the package name "pkg" into "host-pkg"
$(call GENTARGETS_INNER,$(1)-$(call pkgname),$(call UPPERCASE,$(1)-$(call pkgname)),$(call UPPERCASE,$(call pkgname)),$(call pkgparentdir),host)
else
# In the case of target packages, keep the package name "pkg"
$(call GENTARGETS_INNER,$(call pkgname),$(call UPPERCASE,$(call pkgname)),$(call UPPERCASE,$(call pkgname)),$(call pkgparentdir),target)
endif
endef
# :mode=makefile:
