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

BuildConfigSpecialized	:= No

include pre.mak

PackageName		:= openssl

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:= -p1

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

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)
	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))

# Configure the source for building.

OpenSSLTargetConfig   = gcc

ifneq ($(CONFIG_OSM_HOST),1)
OpenSSLPackageOptions = $(MACHFLAGS) \
						-DDEVRANDOM= -DNO_SYSLOG -DNO_CHMOD -DNO_MEMORY_H -DOPENSSL_EXPERIMENTAL_JPAKE

OpenSSLCC_LD	      = CC="$(CC)" LD=$(LD) LDFLAGS="$(LDFLAGS)"

OpenSSLCCFlags        =	$(MACHFLAGS) -Wno-unused-value \
						-Wno-implicit-function-declaration

OpenSSLCCFlags        += no-asm no-threads no-shared no-zlib no-idea no-camellia no-seed no-bf no-cast \
			 no-des no-rc2 no-rc4 no-rc5 no-md2 no-md4 no-ripemd no-mdc2 no-rsa no-dsa no-dh \
			 no-sock no-dgram no-ssl2 no-ssl3 no-err no-krb5 no-engine no-hw no-dso \
			 no-devrandom no-sha512 no-dir no-egd experimental-jpake

ifeq ($(BuildProduct),topaz)

OpenSSLCCFlags        += no-ecdh no-tty

endif

OpenSSLCCFlags	      += $(call ToolGenerateIncludeArgument,$(NewLibCIncludePaths))

OpenSSLTargets	      = build_crypto
OpenSSLInstallTargets = install_crypto
else
OpenSSLTargets	      = all
OpenSSLInstallTargets = install
endif

.PHONY: configure
configure: source $(PackageBuildMakefile)
	$(Verbose)cd $(BuildDirectory) && \
	$(OpenSSL_LD) \
	./Configure \
	--prefix=/usr \
	--openssldir=/usr/lib/ssl \
	shared \
	$(OpenSSLPackageOptions) \
	$(OpenSSLCCFlags) \
	$(OpenSSLTargetConfig)

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

.PHONY: build
build: configure | $(BuildDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) -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_PREFIX=$(ResultDirectory) \
	$(OpenSSLInstallTargets)

prepare: stage

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

include post.mak
