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

BuildConfigSpecialized	:= No

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

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)
	$(expand-and-patch-package)

# Prepare the sources.

.PHONY: source
source: | $(PackageSourceDir)

# Patch the sources, if necessary.

.PHONY: patch
patch: source

$(PackageBuildMakefile): | $(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)

# 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 | $(BuildDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	CC="$(CC)" AR="$(AR) $(ARFLAGS)" RANLIB=$(RANLIB) \
	INSTALL_PREFIX=$(ResultDirectory) \
	$(OpenSSLTargets)

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

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

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

include post.mak
