#
#    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 the "list open files" (lsof) utility.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No
ifneq (,$(filter $(BuildProduct),diamond3 sunstone))
EnableParallel  = No
else
EnableParallel  = Yes
endif

include pre.mak

PackageName		:= lsof

PackageExtension	:= tar.bz2
PackageSeparator	:= _

PackagePatchArgs	:= -g 0 -p2

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

PackageSourceArchive	:= $(PackageWrapperDir)/$(PackageName)$(PackageSeparator)$(PackageVersion)$(PackageSeparator)src.tar
PackageSourceDir	:= $(PackageWrapperDir)/$(PackageName)$(PackageSeparator)$(PackageVersion)$(PackageSeparator)src

PackageBuildMakefile	= $(call GenerateBuildPaths,Configure)

CleanPaths		+= $(PackageLicenseFile)

all: $(PackageDefaultGoal)

# Expand the wrapper directory which contains another archive
# containing the source.

$(PackageSourceArchive): $(PackageArchive)
	$(call expand-archive,$(<),.)
	$(Verbose)touch $(@)

# Generate the package license contents.

$(PackageSourceDir)/00README: source

$(PackageLicenseFile): $(PackageSourceDir)/00README
	$(Verbose)$(SED) -n -e '/^License$$/,/\*\/$$/{;p;/\*\/$$/q;}' < $< > $@

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

$(PackageSourceDir): $(PackageSourceArchive)
	$(call expand-archive,$(<),$(PackageWrapperDir))
	$(Verbose)touch $(@)
	$(call patch-directory,$(@),$(PackagePatchArgs),$(PackagePatchPaths))

# 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)
	$(Verbose)cd $(BuildDirectory) && \
	LSOF_CC="$(CC)" \
	LINUX_CLIB="-DGLIBCV=211" \
	LSOF_INCLUDE="$(ToolIncDir)" \
	LSOF_LINUX_INCL="$(call GenerateResultPaths,sw/tps/linux,include)" \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	./Configure \
	-n \
	$(TargetOS)

# 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) \
	CC="$(CC)" \
	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) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	DESTDIR=$(ResultDirectory) \
	install

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

include post.mak
