#
#    Copyright (c) 2010-2012 Nest Labs, Inc.
#    All rights reserved.
#
#    This document is the property of Nest. It is considered
#    confidential and proprietary information.
#
#    This document may not be reproduced or transmitted in any form,
#    in whole or in part, without the express written permission of
#    Nest.
#
#    Description:
#      This file is the target make file for the International
#      Components for Unicode (ICU) library.
#

include pre.mak
include ./Makefile.common

PackageName		:= icu

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:= -p1

PackageArchive		:= $(PackageName).$(PackageExtension)
PackageSourceDir	:= $(PackageName)

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

# Find where the native host boot strap build is at. This is required
# to cross-compile ICU.
#
# This is beyond ugly but expedient.

ICUHostBuildPath	:= $(call Slashify,$(CURDIR))$(call Deslashify,$(dir $(firstword $(shell find $(BuildBaseDirectory)/Makefile.host -type f -name "icudefs.mk"))))

CleanPaths		+= $(PackageLicenseFile)

SOURCEDIRS                      = $(PackageSourceDir) configs
$(PackageSourceDir)_RULE_TARGET = $(BuildDirectory)/configure
configs_RULE_TARGET             = $(BuildDirectory)/configure

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/license.html: $(BuildDirectory)/source

$(PackageLicenseFile): $(PackageSourceDir)/license.html
	$(copy-result)

# Extract the source from the archive and apply patches, if any.

$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
	$(expand-and-patch-package)

# Prepare the sources.

$(BuildDirectory)/source: | $(PackageSourceDir)
	$(Verbose)touch $@

# Patch the sources, if necessary.

$(BuildDirectory)/patch: $(BuildDirectory)/source
	$(Verbose)touch $@

# Generate the package build makefile.

# Configure the source for building.

$(ICUDataConfMaybeBuildPaths): | $(BuildDirectory)

$(BuildDirectory)/configure: $(BuildDirectory)/source $(ICUDataConfMaybeBuildPaths) | $(PackageSourceDir) $(BuildDirectory) $(ResultDirectory) $(ICUHostBuildPath)
	$(Verbose)cd $(BuildDirectory) && \
	$(CURDIR)/$(PackageSourceDir)/source/configure \
	CC="$(filter-out $(TOOLCHAIN_EXTRA_CFLAGS),$(CC))" CXX="$(filter-out $(TOOLCHAIN_EXTRA_CFLAGS),$(CXX))" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	CPPFLAGS="$(CPPOPTFLAGS)" \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	--with-cross-build=$(ICUHostBuildPath) \
	--prefix=/usr \
	--sysconfdir=/etc \
	--localstatedir=/var \
	--disable-extras \
	--disable-icuio \
	--disable-layout \
	--disable-tests \
	--disable-samples
	$(Verbose)touch $@

# Build the source.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.

$(BuildDirectory)/build: $(BuildDirectory)/configure
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) all
	$(Verbose)touch $@

# Stage the build to a temporary installation area.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.

$(BuildDirectory)/stage: $(BuildDirectory)/build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) DESTDIR=$(ResultDirectory) install
	$(Verbose)touch $@

.PHONY: stage
stage: $(BuildDirectory)/stage

clean:
	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)

include post.mak
