#
#    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.
#
EnableParallel  = Yes

include pre.mak

PackageName		:= curl

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs    := -p1

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 \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	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-ares \
	--disable-dict \
	--disable-gopher \
	--disable-imap \
	--disable-ldap \
	--disable-ldaps \
	--disable-manual \
	--disable-ntlm-wb \
	--disable-pop3 \
	--disable-rtsp \
	--disable-smtp \
	--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) $(JOBSFLAG) -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) $(JOBSFLAG) -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
