#
#    Copyright (c) 2010-2011 Nest, 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 makefile for an open-source version of Apple's
#      CoreFoundation library.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No

include pre.mak

PackageName		:= opencflite

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:= -p1

PackageArchive		:= $(PackageName).$(PackageExtension)
PackageSourceDir	:= $(call GenerateBuildPaths,$(PackageName)$(PackageSeparator)$(PackageVersion))

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

# XXX - CoreFoundation occassionally has a segment fault in
# CFDictionaryRemoveValue when compiled with -O2 or higher. Until this
# has been fully-debugged, build with -Os.

PackageOptimizerFlags	:= -g -Os

ICUSearchPath := $(ICUPath)/usr
UUIDSearchPath := $(UUIDPath)/usr
TzSearchPath := $(TzPath)/usr

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/LICENSE: source

$(PackageLicenseFile): $(PackageSourceDir)/LICENSE
	$(copy-result)

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

$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths) | $(BuildDirectory)
	$(call expand-archive,$(PackageArchive),$(BuildDirectory))
	$(call patch-directory,$(@),$(PackagePatchArgs),$(PackagePatchPaths))
	$(Verbose)touch $(@)

# Prepare the sources.

.PHONY: source
source: | $(PackageSourceDir)

# Patch the sources, if necessary.

.PHONY: patch
patch: source

PackageConfigFlags = --disable-profile

# The host config of OSM requires shared libraries.
ifneq ($(CONFIG_OSM_HOST),1)
PackageConfigFlags += --disable-shared
endif

# Generate the package build makefile.

$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)cd $(BuildDirectory) && \
	$(CURDIR)/$(PackageSourceDir)/configure \
	CC="$(CC)" CXX="$(CXX)" AR=$(AR) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CFLAGS="$(PackageOptimizerFlags)" \
	CXXFLAGS="$(PackageOptimizerFlags)" \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	$(PackageConfigFlags) \
	--with-icu=$(ICUSearchPath) \
	--with-uuid=$(UUIDSearchPath) \
	--with-tz-includes=$(TzSearchPath) \
	--prefix=/usr \
	--sysconfdir=/etc \
	--localstatedir=/var

# Configure the source for building.

.PHONY: configure
configure: source $(PackageBuildMakefile)

# Build the source.
#

.PHONY: build
build: configure
	$(Verbose)$(MAKE) -C $(BuildDirectory) all

# Stage the build to a temporary installation area.
#
# We explictly remove 'libfoo.la' because some packages that depend on
# these libraries use libtool. If libtool finds a 'libfoo.la' file for
# a library, it uses the value of 'libdir=<dir>' it finds. In our
# case, since '--prefix=/usr' this value is '/usr/lib'. It then
# resolves '-lfoo'. In a cross-compilation environment, this is likely
# to be neither the right architecture nor the right version to link
# against. In short, we lose.
#
# We could also handle this by removing DESTDIR and setting the prefix
# to $(ResultDirectory); however, that results in libtool hard-coding
# $(ResultDirectory) as the RPATH in the linked executables which is
# NOT what we want either. We lose again.
#
# By removing the '*.la' file, we win by ensuring neither a misdirected
# link nor an RPATH.

.PHONY: stage
stage: build | $(ResultDirectory)
	$(Verbose)$(MAKE) -C $(BuildDirectory) DESTDIR=$(ResultDirectory) install
	$(Verbose)$(RM) $(RMFLAGS) $(call GenerateResultPaths,,usr/lib/libCoreFoundation.la usr/lib/libCoreFoundation_debug.la usr/lib/libCoreFoundation_profile.la)

clean:
	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)/* $(BuildDirectory)/..?* $(BuildDirectory)/.[!.]*
	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)/* $(ResultDirectory)/..?* $(ResultDirectory)/.[!.]*

.PHONY: install
install: $(PackageSourceDir)
	$(Verbose)cp $(PackageSourceDir)/CFCharacterSetBitmaps.bitmap /usr/share/CoreFoundation/CharacterSets/
	$(Verbose)cp $(PackageSourceDir)/CFUnicodeData-B.mapping /usr/share/CoreFoundation/CharacterSets/
	$(Verbose)cp $(PackageSourceDir)/CFUnicodeData-L.mapping /usr/share/CoreFoundation/CharacterSets/
	$(Verbose)cp $(PackageSourceDir)/CFUniCharPropertyDatabase.data /usr/share/CoreFoundation/CharacterSets/

include post.mak
