#
#    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 iw, a library and set of utilities for
#      manipulating Linux nl80211-based wireless network interfaces.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No
EnableParallel  = Yes

include pre.mak

PackageName		:= iw

PackageExtension	:= tar.bz2
PackageSeparator	:= -

PackagePatchArgs	:= -p1

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

LicenseSourceFile	:= COPYING
LicenseSourcePath	:= $(addprefix $(PackageSourceDir)/,$(LicenseSourceFile))

CleanPaths		+= $(PackageLicenseFile)

NetlinkDir		:= sw/tps/libnl
NetlinkIncDir		:= $(call GenerateResultPaths,$(NetlinkDir),usr/include)
NetlinkLibDir		:= $(call GenerateResultPaths,$(NetlinkDir),usr/lib)

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(LicenseSourcePath): source

$(PackageLicenseFile): $(LicenseSourcePath)
	$(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)
	$(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) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	NLLIBNAME="libnl-2.0" \
	NLCFLAGS="$(call ToolGenerateIncludeArgument,$(NetlinkIncDir))" \
	NLLDFLAGS="-L$(NetlinkLibDir)" \
	all

# Stage the build to a temporary installation area.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.

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

stage-default: build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	NLLIBNAME="libnl-2.0" \
	DESTDIR=$(ResultDirectory) \
	install

ResultHeaderDir			= $(ResultDirectory)/usr/include
SourceHeaderPaths		= $(wildcard $(BuildDirectory)/*.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
