#
#    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	:= -

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 \
	--disable-static

# 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
