#
#    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 for the Linux process utilities, procps. These
#      utilities provide both command line and full-screen information
#      about the Linux process table and the processes within it.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No

include pre.mak

PackageName		:= procps

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:= -p1

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

LicenseSourceFiles	:= COPYING COPYING.LIB
LicenseSourcePaths      := $(addprefix $(PackageSourceDir)/,$(LicenseSourceFiles))

CleanPaths		+= $(PackageLicenseFile)

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

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(LicenseSourcePaths): source

$(PackageLicenseFile): $(LicenseSourcePaths)
	$(Verbose)touch $@
	$(Verbose)for file in $(LicenseSourcePaths); do	\
		echo "Concatenating \"$${file}\"...";	\
		cat $${file} >> $@;			\
	done

# 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)
	$(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 | $(BuildDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	CC="$(CC)" CXX="$(CXX)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncDir)) \
	$(call ToolGenerateIncludeArgument,$(NCursesIncDir))" \
	LDFLAGS="-L$(NCursesLibDir)" \
	all

# Stage the build to a temporary installation area.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.
#
# Also, override both install and ldconfig. We aren't running install
# for a native host and we aren't running as super user, so the
# default actions for those won't otherwise work.

.PHONY: stage stage-default stage-headers
stage: stage-default stage-headers

stage-default: build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	DESTDIR=$(ResultDirectory) \
	install="$(shell which install) -D" \
	ldconfig="$(shell which true)" \
        m64=-m32 \
        lib64=lib \
	install

ResultHeaderDir			= $(ResultDirectory)/usr/include/proc
SourceHeaderPaths		= $(wildcard $(BuildDirectory)/proc/*.h)

$(ResultHeaderDir):
	$(create-directory)

stage-headers: build | $(ResultHeaderDir)
	install --mode=0664 $(SourceHeaderPaths) $(ResultHeaderDir)

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

include post.mak
