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

include pre.mak

PackageName		:= openssl

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:= -p1

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

PackageResultPath = $(call GenerateResultPaths,,usr)

CleanPaths		+= $(PackageLicenseFile)

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.

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

# Patch the sources, if necessary.

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

# Configure the source for building.

.PHONY: configure
configure: $(BuildDirectory)/configure
$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory)) ; \
	cd $(BuildDirectory) && \
	INSTALL="$(INSTALL) $(INSTALLFLAG)" \
	./Configure \
	--openssldir=/lib/ssl \
	--prefix=$(PackageResultPath) \
	--install_prefix=$(PackageResultPath) \
	$(call ToolGenerateIncludeArgument,$(LinuxIncludePath)) \
	$(call ToolGenerateIncludeArgument,$(ZlibIncludePath)) \
	$(call GenerateLibraryPathArgument,$(ZlibLibraryPath)) \
	$(OpenSSLPackageOptions) \
	$(OpenSSLCCFlags) \
	$(OpenSSLTargetConfig)
	$(Verbose)touch $@

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

.PHONY: build
build: $(BuildDirectory)/build
$(BuildDirectory)/build: $(BuildDirectory)/configure | $(BuildDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	CC="$(CC) $(CPPOPTFLAGS)" AR="$(AR) $(ARFLAGS)" RANLIB=$(RANLIB) \
	$(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) $(CPPOPTFLAGS)" AR="$(AR) $(ARFLAGS)" RANLIB=$(RANLIB) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	INSTALLTOP=/ \
	$(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
