#
#    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 Open Secure Socket Layer
#      (SSL) library.
#

.NOTPARALLEL:


include pre.mak

PackageName		:= openssl

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:= -p1

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

LinuxDir		:= sw/tps/linux
LinuxIncDir		:= $(call GenerateResultPaths,$(LinuxDir),include)

ZlibDir			:= sw/tps/zlib
ZlibIncDir      	:= $(call GenerateResultPaths,$(ZlibDir),usr/include)
ZlibLibDir      	:= $(call GenerateResultPaths,$(ZlibDir),usr/lib)

OpenSSLPackageOptions	+= experimental-jpake $(call ToolGenerateDefineArgument,OPENSSL_EXPERIMENTAL_JPAKE)

OpenSSLTargets	      = all
OpenSSLInstallTargets = install

# If the feature BUILD_FEATURE_OPENSSL_FORCE32_LONG is set, we're forcing OpenSSL to use a 32bit long
# We typically set this when building the simulator because our PASE code expects BN_BYTES == 4
# We force 32bit by setting the TargetConfig to gcc
# Couple unfortunate side effects:
# 1) Assembly is not supported
# 2) This TargetConfig forces us to build as a static library (OpenSSL limitation)
# 3) We have to turn off compression.  Zlib causes problems for other packages like curl 
#    whose configure script can't seem to realize that it needs to bring in zlib as well
#    (might be a pkgconfig issue with openssl?)
# 4) We have to compile with -fPIC since other dylibs (curl) link openssl
ifeq ($(BUILD_FEATURE_OPENSSL_FORCE32_LONG),1)
OpenSSLPackageOptions += no-asm no-zlib
OpenSSLCCFlags        = -fPIC
OpenSSLTargetConfig   = gcc
else
OpenSSLPackageOptions += shared zlib
endif

SOURCEDIRS                      = $(PackageSourceDir)
$(PackageSourceDir)_RULE_TARGET = $(BuildDirectory)/configure

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/LICENSE: $(BuildDirectory)/source

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

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

$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
	$(expand-and-patch-package)

# Prepare the sources.

$(BuildDirectory)/source: | $(PackageSourceDir)
	$(Verbose)touch $@

# Patch the sources, if necessary.

$(BuildDirectory)/patch: $(BuildDirectory)/source
	$(Verbose)touch $@

# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory)) ; \
	cd $(BuildDirectory) && \
	INSTALL="$(INSTALL) $(INSTALLFLAG)" \
	./Configure \
	--prefix=/usr \
	--openssldir=/usr/lib/ssl \
	$(call ToolGenerateIncludeArgument,$(ZlibIncDir)) \
	$(call ToolGenerateLibraryPathArgument,$(ZlibLibDir)) \
	$(OpenSSLPackageOptions) \
	$(OpenSSLCCFlags) \
	$(OpenSSLTargetConfig)
	$(Verbose)touch $@

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

$(BuildDirectory)/build: $(BuildDirectory)/configure | $(BuildDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	CC="$(CC)" AR="$(AR) $(ARFLAGS)" RANLIB=$(RANLIB) \
	INSTALL_PREFIX=$(ResultDirectory) \
	$(OpenSSLTargets)
	$(Verbose)touch $@

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

$(BuildDirectory)/stage: $(BuildDirectory)/build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) -C $(BuildDirectory) \
	CC="$(CC)" AR="$(AR) $(ARFLAGS)" RANLIB=$(RANLIB) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	INSTALL_PREFIX=$(ResultDirectory) \
	$(OpenSSLInstallTargets)
	$(Verbose)touch $@

.PHONY: stage
stage: $(BuildDirectory)/stage

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

include post.mak
