#
#    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 i2c-tools, a heterogeneous set
#      of I2C tools for Linux.
#


include pre.mak

PackageName		:= i2c-tools

PackageExtension	:= tar.bz2
PackageSeparator	:= -

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

SOURCEDIRS                      = $(PackageSourceDir)
$(PackageSourceDir)_RULE_TARGET = $(BuildDirectory)/configure

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/COPYING: $(BuildDirectory)/source

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

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

$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
	$(expand-and-patch-package)

# Prepare the sources.

$(BuildDirectory)/source: | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)touch $@

# Patch the sources, if necessary.

$(BuildDirectory)/patch: $(BuildDirectory)/source
	$(Verbose)touch $@

# Generate the package build makefile.

$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory)
	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))

# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/source $(PackageBuildMakefile)
	$(Verbose)touch $@

# Build the source.

$(BuildDirectory)/build: $(BuildDirectory)/configure
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	CC="$(CC) $(CPPOPTFLAGS)" CXX="$(CXX) $(CPPOPTFLAGS)" AR=$(AR) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CFLAGS="-isystem $(LinuxIncludePath)" \
	prefix=/usr \
	all
	$(Verbose)touch $@

# Stage the build to a temporary installation area.

$(BuildDirectory)/stage: $(BuildDirectory)/build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	prefix=/usr \
	DESTDIR=$(ResultDirectory) \
	install
	$(Verbose)touch $@

.PHONY: stage
stage: $(BuildDirectory)/stage

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

include post.mak
