#
#    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 makefile for c-kermit, a combined serial and
#      network communication software package.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No

include pre.mak

PackageName		:= ckermit

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:=

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

PackageBuildMakefile	= $(call GenerateBuildPaths,makefile)

CleanPaths		+= $(PackageLicenseFile)

NCursesDir		:= sw/tps/ncurses
NCursesIncDir		:= $(call GenerateResultPaths,$(NCursesDir),usr/include)
NCursesLibDir		:= $(call GenerateResultPaths,$(NCursesDir),usr/lib)

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/COPYING.TXT: source

$(PackageLicenseFile): $(PackageSourceDir)/COPYING.TXT
	$(copy-result)

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

$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
	$(create-directory)
	$(Echo) "Expanding \"$(PackageArchive)\" to \"$@\""
	$(Verbose)extension=`echo $(PackageArchive) | awk -F . '{if (NF > 1) {print $$NF}}'`; \
	if [ $$extension = "bz2" ]; then \
		tar -C $(PackageSourceDir) --bzip2 -xf $(PackageArchive); \
	elif [ $$extension = "gz" ]; then \
		tar -C $(PackageSourceDir) --gzip -xf $(PackageArchive); \
	elif [ $$extension = "tar" ]; then \
		tar -C $(PackageSourceDir) -xf $(PackageArchive); \
	fi
	$(Verbose)touch $@
	$(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)
	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))

# 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) -C $(BuildDirectory) \
	CC=$(CC) CXX=$(CXX) AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	NCURSES_CPPFLAGS=-I$(NCursesIncDir) \
	NCURSES_LDFLAGS=-L$(NCursesLibDir) \
	linux-cross

# 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) \
	DESTDIR=$(ResultDirectory) \
	prefix=/usr \
	MANDIR="" \
	install

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

include post.mak
