#
#    Copyright (c) 2010-2012 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 the library and command line
#      utility for transferring files with URL syntax, libcurl and
#      curl, respectively.
#

include pre.mak

PackageName		:= curl

PackageExtension	:= tar.gz
PackageSeparator	:= -

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

TpsDir                  = sw/tps

OpenSSLDir              = $(TpsDir)/openssl
OpenSSLPrefixDir        = usr
OpenSSLIncludeDir       = $(OpenSSLPrefixDir)/include
OpenSSLLibraryDir       = $(OpenSSLPrefixDir)/lib
OpenSSLNames            = crypto ssl
OpenSSLSearchPath       = $(call GenerateResultPaths,$(OpenSSLDir),$(OpenSSLPrefixDir))
OpenSSLIncludePath      = $(call GenerateResultPaths,$(OpenSSLDir),$(OpenSSLIncludeDir))
OpenSSLLibraryPath      = $(call GenerateResultPaths,$(OpenSSLDir),$(OpenSSLLibraryDir))
OpenSSLLibraryPaths     = $(call GenerateResultPaths,$(OpenSSLResultsDir),$(addprefix $(OpenSSLLibraryDir)/,$(OpenSSLNames)))
OpenSSLDependPaths      = $(call GenerateSharedLibraryResultPaths,$(OpenSSLDir)/$(OpenSSLLibraryDir),$(OpenSSLNames))

ZlibDir                 = $(TpsDir)/zlib
ZlibPrefixDir           = usr
ZlibIncludeDir          = $(ZlibPrefixDir)/include
ZlibLibraryDir          = $(ZlibPrefixDir)/lib
ZlibName                = z
ZlibSearchPath          = $(call GenerateResultPaths,$(ZlibDir),$(ZlibPrefixDir))
ZlibIncludePath         = $(call GenerateResultPaths,$(ZlibDir),$(ZlibIncludeDir))
ZlibLibraryPath         = $(call GenerateResultPaths,$(ZlibDir),$(ZlibLibraryDir))
ZlibDependPath          = $(call GenerateSharedLibraryResultPaths,$(ZlibDir)/$(ZlibLibraryDir),$(ZlibName))

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/COPYING: source

$(PackageLicenseFile): $(PackageSourceDir)/COPYING
	$(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.
#
# For non-cross-compiled targets (e.g. simulators), the curl configure
# attempts to perform run-time tests.
#
# To ensure this works against the in-project versions of openssl and
# zlib, the paths to these shared objects MUST be found by the dynamic
# loader.

$(PackageBuildMakefile): export $(LoaderSearchPath) := $(OpenSSLLibraryPath):$(ZlibLibraryPath):$($(LoaderSearchPath))

$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)cd $(BuildDirectory) && \
	$(CURDIR)/$(PackageSourceDir)/configure \
	CC=$(CC) CXX=$(CXX) AR=$(AR) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(OpenSSLIncludePath))" \
	LDFLAGS="$(call GenerateResolveArguments,$(ZlibDependPath)) \
	$(call GenerateResolveArguments,$(OpenSSLDependPaths)) \
	$(call ToolGenerateLibraryPathArgument,$(OpenSSLLibraryPath))" \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	$(CurlPackageOptions) \
	--disable-dict \
	--disable-ldap \
	--disable-ldaps \
	--disable-telnet \
	--enable-ipv6 \
	--with-ssl=$(OpenSSLSearchPath) \
	--with-zlib=$(ZlibSearchPath) \
	--with-ca-bundle=/usr/lib/ssl/certs/ca-bundle.pem \
	--without-libidn \
	--prefix=/usr \
	--sysconfdir=/etc \
	--localstatedir=/var

# Configure the source for building.

.PHONY: configure
configure: source $(PackageBuildMakefile)

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

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

# Stage the build to a temporary installation area.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.
#
# We explictly remove 'libcurl.la' because some packages that depend
# on libcurl use libtool. If libtool finds a '*.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
# '-lcurl' to '/usr/lib/libcurl.so'. 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)unset MAKEFLAGS && \
	$(MAKE) -C $(BuildDirectory) DESTDIR=$(ResultDirectory) install
	$(Verbose)$(RM) $(RMFLAGS) $(call GenerateResultPaths,,usr/lib/libcurl.la) 

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

include post.mak
