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

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/license.html: 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.

.PHONY: source
source: | $(PackageSourceDir)

# Patch the sources, if necessary.

.PHONY: patch
patch: source

# Generate the package build makefile.

$(PackageBuildMakefile): | $(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


# Configure the source for building.

$(ICUDataConfMaybeBuildPaths): | $(BuildDirectory)

.PHONY: configure
configure: source $(ICUDataConfMaybeBuildPaths) $(PackageBuildMakefile)

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

.PHONY: build
build: configure
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) all

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

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

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

include post.mak
