#
#    Copyright (c) 2010-2011 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 make file for NTP, the reference client and
#      server implementation for the Network Time Protocol (NTP).
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No

include pre.mak

PackageName		:= ntp

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:= -p1

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

LicenseSourceFile	:= $(PackageSourceDir)/COPYRIGHT

CleanPaths		+= $(PackageLicenseFile)

LibCapDir		:= sw/tps/libcap
LibCapIncDir		= $(call GenerateResultPaths,$(LibCapDir),usr/include)
LibCapLibDir		= $(call GenerateResultPaths,$(LibCapDir),lib)

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

OpenSslDir		:= sw/tps/openssl
OpenSslSearchDir	:= $(call GenerateResultPaths,$(OpenSslDir),usr)
OpenSslIncDir		:= $(call GenerateResultPaths,$(OpenSslDir),usr/include)
OpenSslLibDir		:= $(call GenerateResultPaths,$(OpenSslDir),usr/lib)

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(LicenseSourceFile): source

$(PackageLicenseFile): $(LicenseSourceFile)
	$(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.

$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory) $(ResultDirectory)
	$(Verbose)cd $(BuildDirectory) && \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	$(CURDIR)/$(PackageSourceDir)/configure \
	CC="$(CC)" CXX="$(CXX)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncDir)) \
	$(call ToolGenerateIncludeArgument,$(LibCapIncDir))" \
	LDFLAGS="-L$(LibCapLibDir) -Wl,-rpath-link -Wl,$(ZlibLibDir)" \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	--prefix=/usr \
	--sysconfdir=/etc \
	--localstatedir=/var \
	--disable-debugging \
	--disable-debug-timing \
	--disable-all-clocks \
	--disable-parse-clocks \
	--enable-getifaddrs=yes \
	--enable-kmem \
	--enable-linuxcaps \
	--enable-ipv6 \
	--enable-accurate-adjtime \
	--without-net-snmp-config \
	--without-lineeditlibs \
	--with-openssl-libdir=$(OpenSslLibDir) \
	--with-openssl-incdir=$(OpenSslIncDir) \
	--with-crypto=openssl \
	--without-electricfence \
	--with-yielding-select=yes \
	--without-ntpsnmpd

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

.PHONY: stage
stage: build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	DESTDIR=$(ResultDirectory) \
	install

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

include post.mak
