################################################################################
#
# Makefile.autotools.in --
#
# Implicit and Generated Rules for easily creating autotools-compatible
# buildroot packages
#
## Example minimal makefile for a package named 'foo'
#
# | FOO_VERSION = 1.0
# | FOO_SOURCE = foo-$(FOO_VERSION).tar.gz
# | FOO_SITE = http://www.libfoo.org/dist
# | $(eval $(call AUTOTARGETS,foo))
#
## The following targets can be called from the shell:
#
# foo, foo-source, foo-patch, foo-configure, foo-build, foo-install,
# foo-install-target, foo-install-staging, foo-uninstall, foo-clean,
# foo-dirclean
#
## The following variables which can be (re)defined in the package makefile:
#
# FOO_VERSION [mandatory]
#	version string of the package
# FOO_SOURCE [default foo-$(FOO_VERSION).tar.gz]
#	file name of the package source
# FOO_SITE [default sourceforge project "foo"]
#	URL under wich $(FOO_SOURCE) can be found
# FOO_DEPENDENCIES [default empty]
#	list of (package) targets that must be built before foo
# FOO_AUTORECONF [YES/NO, default NO]
#	run <autoreconf> before <configure>
# FOO_LIBTOOL_PATCH [YES/NO, default YES]
#	Do you want the standard buildroot patch applied to ltmain.sh? (libtool)
# FOO_USE_CONFIG_CACHE [YES/NO default $(BR2_CONFIG_CACHE)]
#   Do you wany to use the central configure cache file? See BR2_CONFIG_CACHE.
# FOO_CONF_ENV [default empty]
#	environment passed to the <configure> script
# FOO_CONF_OPT [default empty]
#	arguments passed to the <configure> script
# FOO_MAKE [default $(MAKE)]
#	command to use to execute <make>
# FOO_MAKE_ENV [default empty]
#	environment passed to all calls to <make> in the package source
#	directory
# FOO_MAKE_OPT [default empty]
#	arguments passed to <make> while building
# FOO_INSTALL_STAGING [YES/NO, default NO]
#	install the package to the staging directory
# FOO_INSTALL_TARGET [YES/NO, default YES]
#	install the package to the target directory
# FOO_INSTALL_STAGING_OPT [default DESTDIR=$(STAGING_DIR) install]
#	arguments passed to <make> while installing to the staging directory
# FOO_INSTALL_TARGET_OPT [default DESTDIR=$(TARGET_DIR) install-exec/install-strip]
#	arguments passed to <make> while installing to the target directory
# FOO_CLEAN_OPT [default clean]
#	arguments passed to <make> while installing to the staging directory
# FOO_UNINSTALL_STAGING_OPT  [default DESTDIR=$(STAGING_DIR) uninstall]
#	arguments passed to <make> while uninstalling from the staging
#	directory
# FOO_UNINSTALL_TARGET_OPT [default DESTDIR=$(TARGET_DIR) uninstall]
#	arguments passed to <make> while uninstalling from the target
#	directory
# FOO_SUBDIR [default empty]
#	relative path in the package source from which to run configure and
#	make
# FOO_DIR_PREFIX [default empty]
#	toplevel relative path to package *.mk file and corresponding patches
#
## The following variables contain hook target names
## by default they do nothing, they can be overriden in package makefiles
#
# FOO_HOOK_POST_EXTRACT, FOO_HOOK_POST_CONFIGURE,
# FOO_HOOK_POST_BUILD, FOO_HOOK_POST_INSTALL
#
## The following variables contain targets that can be overriden
#
# FOO_TARGET_INSTALL_TARGET FOO_TARGET_INSTALL_STAGING FOO_TARGET_BUILD
# FOO_TARGET_CONFIGURE FOO_TARGET_PATCH FOO_TARGET_EXTRACT FOO_TARGET_SOURCE
# FOO_TARGET_UNINSTALL FOO_TARGET_CLEAN FOO_TARGET_DIRCLEAN
#
# E.g. if your package has a no <configure> script you can place the following
# in your package makefile:
#
# | $(FOO_TARGET_INSTALL):
# |	touch $@
#
## The following variables are defined automatically and can be used in
## overriden targets:
#
# PKG
#	is always the current package name ("foo" in the example)
# FOO_DIR
#	the directory in which the package source is extracted.
#	the base name will always be foo-$(FOO_VERSION), no matter what the
#	archive name or the directory-in-archive name are.
# MESSAGE
#	macro that outputs a pretty message to stdout, e.g. use
#	$(call MESSAGE,"Hello World")
#	in a target.
#
# Caveats:
# - the 'eval' line (final line in the example) must be placed
#   after all variable settings, but before all target re-definition
#   (including hooks)
################################################################################

# UPPERCASE Macro -- transform its argument to uppercase and replace dots and
# hyphens to underscores
UPPERCASE = $(shell echo $(1) | tr "a-z.-" "A-Z__")

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

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

################################################################################
# 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))
################################################################################

# support make source-check/external-deps
ifneq ($(SPIDER),)
DOWNLOAD=$(WGET) -P $(DL_DIR) $(1)/$(2)
else
define DOWNLOAD
	$(Q)test -e $(DL_DIR)/$(2) || \
	for site in $(strip $(subst ",,$(BR2_PRIMARY_SITE))) $(1) $(strip $(subst ",,$(BR2_BACKUP_SITE))); \
	do $(WGET) -P $(DL_DIR) $$site/$(2) && exit; done
endef
endif

# Utility programs used to build packages
TAR ?= tar
#ACLOCAL_STAGING_DIR ?= $(STAGING_DIR)/usr/share/aclocal
#ACLOCAL ?= aclocal -I $(ACLOCAL_STAGING_DIR)
#AUTORECONF ?= autoreconf -v -i -f -I $(ACLOCAL_STAGING_DIR)
#	ACLOCAL="$(ACLOCAL)"

# Automatically detect tar --strip-path/components option
TAR_STRIP_COMPONENTS := $(shell $(TAR) --help | grep strip-path > /dev/null ; if test $$? = 0 ; then echo '--strip-path' ; else echo '--strip-components' ; fi)

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

# Retrieve and unpack the archive
$(BUILD_DIR)/%/.stamp_downloaded:
# support make source-check/external-deps
ifeq ($(SPIDER),)
	$(call MESSAGE,"Downloading")
endif
	$(call DOWNLOAD,$($(PKG)_SITE),$($(PKG)_SOURCE))
	$(if $($(PKG)_PATCH),$(call DOWNLOAD,$($(PKG)_SITE),$($(PKG)_PATCH)))
ifeq ($(SPIDER),)
	$(Q)mkdir -p $(@D)
	$(Q)touch $@
endif

# Retrieve and unpack the archive
$(BUILD_DIR)/%/.stamp_extracted:
	$(call MESSAGE,"Extracting")
	$(Q)mkdir -p $(@D)
	$(Q)$(INFLATE$(suffix $($(PKG)_SOURCE))) $(DL_DIR)/$($(PKG)_SOURCE) | \
	$(TAR) $(TAR_STRIP_COMPONENTS)=1 -C $(@D) $(TAR_OPTIONS) -
# some packages have messed up permissions inside
	$(Q)chmod -R ug+rw $(@D)
	$(Q)touch $@

# Fix libtool support if required by the package
$(BUILD_DIR)/%/.stamp_libtool_patch:
	$(call MESSAGE,"Patching libtool")
# if the package uses libtool, patch it for cross-compiling in buildroot
	$(Q)if test "$($(PKG)_LIBTOOL_PATCH)" = "YES"; then \
	for i in `find $(@D) -name ltmain.sh`; do \
		toolchain/patch-kernel.sh $${i%/*} package buildroot-libtool.patch; \
		done \
	fi
	$(Q)touch $@

# Patch
# XXX: FIXME: This has to be done differently and path-independent, i.e. use
# XXX: FIXME: the dir-part of the stem as base-dir (instead of hardcoding
# XXX: FIXME: "package/".
$(BUILD_DIR)/%/.stamp_patched: NAMEVER = $($(PKG)_NAME)-$($(PKG)_VERSION)
$(BUILD_DIR)/%/.stamp_patched:
	$(call MESSAGE,"Patching $($(PKG)_DIR_PREFIX)/$($(PKG)_NAME)")
	$(if $($(PKG)_PATCH),toolchain/patch-kernel.sh $(@D) $(DL_DIR) $($(PKG)_PATCH))
	$(Q)( \
	if test -d $($(PKG)_DIR_PREFIX)/$($(PKG)_NAME); then \
	  if test "$(wildcard $($(PKG)_DIR_PREFIX)/$($(PKG)_NAME)/$(NAMEVER)*.patch*)"; then \
	    toolchain/patch-kernel.sh $(@D) $($(PKG)_DIR_PREFIX)/$($(PKG)_NAME) $(NAMEVER)\*.patch $(NAMEVER)\*.patch.$(ARCH) || exit 1; \
	  else \
	    toolchain/patch-kernel.sh $(@D) $($(PKG)_DIR_PREFIX)/$($(PKG)_NAME) $($(PKG)_NAME)\*.patch $($(PKG)_NAME)\*.patch.$(ARCH) || exit 1; \
	    if test -d $($(PKG)_DIR_PREFIX)/$($(PKG)_NAME)/$(NAMEVER); then \
	      toolchain/patch-kernel.sh $(@D) $($(PKG)_DIR_PREFIX)/$($(PKG)_NAME)/$(NAMEVER) \*.patch \*.patch.$(ARCH) || exit 1; \
	    fi; \
	  fi; \
	fi; \
	)
ifeq ($(BR2_UPDATE_CONFIG),y)
	$(Q)(for file in config.guess config.sub; do \
		for i in $$(find $(@D) -name $$file); do \
			cp package/gnuconfig/$$file $$i; \
		done; \
	done)
endif
	$(Q)touch $@

# Running autoreconf
$(BUILD_DIR)/%/.stamp_autoconfigured:
	$(call MESSAGE,"Running autoreconf")
	$(Q)cd $(@D)/$($(PKG)_SUBDIR) && $(AUTORECONF)
# if the package uses libtool, patch it for cross-compiling in buildroot
	$(Q)if test "$($(PKG)_LIBTOOL_PATCH)" = "YES"; then \
		for i in `find $(@D)/$($(PKG)_SUBDIR) -name ltmain.sh`; do \
		toolchain/patch-kernel.sh $${i%/*} package buildroot-libtool.patch; \
		done \
	fi
	$(Q)touch $@

# Configuring
$(BUILD_DIR)/%/.stamp_configured:
	$(call MESSAGE,"Configuring")
	cd $(@D)/$($(PKG)_SUBDIR) && rm -f config.cache && \
	$(TARGET_CONFIGURE_OPTS) \
	$(TARGET_CONFIGURE_ARGS) \
	$(TARGET_CONFIGURE_ENV) \
	$($(PKG)_CONF_ENV) \
	$(if $(THIS_SRCDIR),$(THIS_SRCDIR)/,./)configure \
		$(if $(filter YES,$($(PKG)_USE_CONFIG_CACHE)),--cache-file="$(PROJECT_BUILD_DIR)/tgt-config.cache",) \
		--target=$(GNU_TARGET_NAME) \
		--host=$(GNU_TARGET_NAME) \
		--build=$(GNU_HOST_NAME) \
		--prefix=/usr \
		--exec-prefix=/usr \
		--sysconfdir=/etc \
		$(DISABLE_DOCUMENTATION) \
		$(DISABLE_NLS) \
		$(DISABLE_LARGEFILE) \
		$(QUIET) $($(PKG)_CONF_OPT)
	$(Q)touch $@

# Build
$(BUILD_DIR)/%/.stamp_built:
	$(call MESSAGE,"Building")
	$($(PKG)_MAKE_ENV) $($(PKG)_MAKE) $($(PKG)_MAKE_OPT) -C $(@D)/$($(PKG)_SUBDIR)
	$(Q)touch $@

# Install to staging dir
$(BUILD_DIR)/%/.stamp_staging_installed:
	$(call MESSAGE,'Installing to host (staging directory)')
	$($(PKG)_MAKE_ENV) $($(PKG)_MAKE) $($(PKG)_INSTALL_STAGING_OPT) -C $(@D)/$($(PKG)_SUBDIR)
#	toolchain/replace.sh $(STAGING_DIR)/usr/lib ".*\.la" "\(['= ]\)/usr" "\\1$(STAGING_DIR)/usr"
	for i in $$(find $(STAGING_DIR)/usr/lib/ -name "*.la"); do \
		cp $$i $$i~; \
		$(SED) "s:\(['= ]\)/usr:\\1$(STAGING_DIR)/usr:g" $$i; \
	done
	touch $@

# Install to target dir
$(PROJECT_BUILD_DIR)/autotools-stamps/%_target_installed:
	$(call MESSAGE,"Installing to target")
	$($(PKG)_MAKE_ENV) $($(PKG)_MAKE) $($(PKG)_INSTALL_TARGET_OPT) -C $($(PKG)_DIR)/$($(PKG)_SUBDIR)
	$(if $(BR2_HAVE_MANPAGES),,for d in man share/man; do \
		rm -rf $(TARGET_DIR)/$$d $(TARGET_DIR)/usr/$$d; \
	done)
	$(if $(BR2_HAVE_INFOPAGES),,for d in info share/info; do \
		rm -rf $(TARGET_DIR)/$$d $(TARGET_DIR)/usr/$$d; \
	done)
	$(if $(BR2_HAVE_DOCUMENTATION),,for d in doc share/doc; do \
		rm -rf $(TARGET_DIR)/$$d $(TARGET_DIR)/usr/$$d; \
	done)
	touch $@

$(BUILD_DIR)/%/.stamp_cleaned:
	$(call MESSAGE,"Cleaning up")
	-$($(PKG)_MAKE_ENV) $($(PKG)_MAKE)  $($(PKG)_CLEAN_OPT) -C $(@D)/$($(PKG)_SUBDIR)
	rm -f $(@D)/.stamp_built

$(BUILD_DIR)/%/.stamp_uninstalled:
	$(call MESSAGE,"Uninstalling")
	$($(PKG)_MAKE_ENV) $($(PKG)_MAKE) $($(PKG)_UNINSTALL_STAGING_OPT) -C $(@D)/$($(PKG)_SUBDIR)
	rm -f $(@D)/.stamp_staging_installed
	$($(PKG)_MAKE_ENV) $($(PKG)_MAKE) $($(PKG)_UNINSTALL_TARGET_OPT) -C $(@D)/$($(PKG)_SUBDIR)
	rm -f $($(PKG)_TARGET_INSTALL_TARGET) $($(PKG)_HOOK_POST_INSTALL)

$(BUILD_DIR)/%/.stamp_dircleaned:
	rm -Rf $(@D)


################################################################################
# AUTOTARGETS -- the target generator macro; define a set of human-readable
# make targets, stamps, and default per-package variables.
# Argument 1 is the package directory prefix.
# Argument 2 is the (lowercase) package name.
################################################################################

define AUTOTARGETS
$(call AUTOTARGETS_INNER,$(2),$(call UPPERCASE,$(2)),$(1))
endef

# AUTOTARGETS_INNER -- does the job for AUTOTARGETS; argument 1 is the
# lowercase package name, argument 2 the uppercase package name,
# argument 3 the package directory prefix
define AUTOTARGETS_INNER

# define package-specific variables to default values
$(2)_NAME			=  $(1)
$(2)_VERSION			?= undefined
$(2)_DIR			=  $$(BUILD_DIR)/$(1)-$$($(2)_VERSION)
$(2)_SOURCE			?= $(1)-$$($(2)_VERSION).tar.gz
$(2)_SITE			?= \
	http://$$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/$(1)
$(2)_DEPENDENCIES		?=
$(2)_AUTORECONF			?= NO
$(2)_LIBTOOL_PATCH		?= YES
$(2)_USE_CONFIG_CACHE   ?= $(if $(BR2_CONFIG_CACHE),YES,NO)
$(2)_CONF_ENV			?=
$(2)_CONF_OPT			?=
$(2)_MAKE			?= $(MAKE)
$(2)_MAKE_ENV			?=
$(2)_MAKE_OPT			?=
$(2)_INSTALL_STAGING		?= NO
$(2)_INSTALL_TARGET		?= YES
$(2)_INSTALL_STAGING_OPT	?= DESTDIR=$$(STAGING_DIR) install
ifeq ($(BR2_ENABLE_DEBUG),y)
$(2)_INSTALL_TARGET_OPT		?= DESTDIR=$$(TARGET_DIR)  install-exec
else
$(2)_INSTALL_TARGET_OPT		?= DESTDIR=$$(TARGET_DIR)  install-strip
endif
$(2)_CLEAN_OPT			?= clean
$(2)_UNINSTALL_STAGING_OPT	?= DESTDIR=$$(STAGING_DIR) uninstall
$(2)_UNINSTALL_TARGET_OPT	?= DESTDIR=$$(TARGET_DIR)  uninstall
$(2)_SUBDIR			?=
$(2)_DIR_PREFIX			=  $(if $(3),$(3),$(TOP_SRCDIR)/package)


# define sub-target stamps
# targets which affect $(TARGET_DIR) must use a unique stamp for each $(PROJECT)
$(2)_TARGET_INSTALL_TARGET =	$(PROJECT_BUILD_DIR)/autotools-stamps/$(1)_target_installed
$(2)_TARGET_INSTALL_STAGING =	$$($(2)_DIR)/.stamp_staging_installed
$(2)_TARGET_BUILD =		$$($(2)_DIR)/.stamp_built
$(2)_TARGET_CONFIGURE =		$$($(2)_DIR)/.stamp_configured
$(2)_TARGET_AUTORECONF =	$$($(2)_DIR)/.stamp_autoconfigured
$(2)_TARGET_LIBTOOL_PATCH =	$$($(2)_DIR)/.stamp_libtool_patch
$(2)_TARGET_PATCH =		$$($(2)_DIR)/.stamp_patched
$(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

$(2)_HOOK_POST_EXTRACT =	$$($(2)_DIR)/.stamp_hook_post_extract
$(2)_HOOK_POST_CONFIGURE =	$$($(2)_DIR)/.stamp_hook_post_configure
$(2)_HOOK_POST_BUILD =		$$($(2)_DIR)/.stamp_hook_post_build
$(2)_HOOK_POST_INSTALL =	$(PROJECT_BUILD_DIR)/autotools-stamps/$(1)_hook_post_install

# human-friendly targets and target sequencing
$(1):			$(1)-install
$(1)-install:		$(1)-install-staging $(1)-install-target \
			$$($(2)_HOOK_POST_INSTALL)

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

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

$(1)-build:		$(1)-configure \
			$$($(2)_TARGET_BUILD) \
			$$($(2)_HOOK_POST_BUILD)

$(1)-configure:		$(1)-autoreconf \
			$$($(2)_TARGET_CONFIGURE) \
			$$($(2)_HOOK_POST_CONFIGURE)

ifeq ($$($(2)_AUTORECONF),YES)
$(1)-autoreconf:	$(1)-patch $$($(2)_TARGET_AUTORECONF)
$(2)_DEPENDENCIES += host-automake host-autoconf host-libtool
else
$(1)-autoreconf:	$(1)-patch
endif

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

$(1)-extract:		$(1)-depends \
			$$($(2)_TARGET_EXTRACT) \
			$$($(2)_HOOK_POST_EXTRACT) \
			$$($(2)_TARGET_LIBTOOL_PATCH)

$(1)-depends:		$(1)-source $$($(2)_DEPENDENCIES)

$(1)-source:		$$($(2)_TARGET_SOURCE)

# non-build targets
$(1)-uninstall:	$(1)-configure $$($(2)_TARGET_UNINSTALL)

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

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

# define the PKG variable for all targets, containing the
# uppercase package variable prefix
$$($(2)_TARGET_INSTALL_TARGET):		PKG=$(2)
$$($(2)_TARGET_INSTALL_STAGING):	PKG=$(2)
$$($(2)_TARGET_BUILD):			PKG=$(2)
$$($(2)_TARGET_CONFIGURE):		PKG=$(2)
$$($(2)_TARGET_LIBTOOL_PATCH):	PKG=$(2)
$$($(2)_TARGET_AUTORECONF):		PKG=$(2)
$$($(2)_TARGET_PATCH):			PKG=$(2)
$$($(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)_HOOK_POST_EXTRACT):		PKG=$(2)
$$($(2)_HOOK_POST_CONFIGURE):	PKG=$(2)
$$($(2)_HOOK_POST_BUILD):		PKG=$(2)
$$($(2)_HOOK_POST_INSTALL):		PKG=$(2)

# define hook targets
# default hook behaviour: do nothing
$$($(2)_HOOK_POST_EXTRACT):
$$($(2)_HOOK_POST_CONFIGURE):
$$($(2)_HOOK_POST_BUILD):
$$($(2)_HOOK_POST_INSTALL):

# add package to the general list of targets if requested by the buildroot
# configuration
ifeq ($$(BR2_PACKAGE_$(2)),y)
TARGETS += $(1)
endif
endef

# :mode=makefile:
