#
#    Copyright (c) 2011 Nest Labs, 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 crda, the Central Regulatory Domain Agent
#      for wireless drivers to determine the regulatory domain
#      channel and power settings for a given region.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No
EnableParallel  = Yes

include pre.mak

PackageName		:= crda

PackageExtension	:= tar.bz2
PackageSeparator	:= -

PackagePatchArgs	:= -p1

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

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

CleanPaths		+= $(PackageLicenseFile)

GcryptDir		:= sw/tps/libgcrypt
GcryptIncDir		:= $(call GenerateResultPaths,$(GcryptDir),usr/include)
GcryptLibDir		:= $(call GenerateResultPaths,$(GcryptDir),usr/lib)

GpgErrorDir		:= sw/tps/libgpg-error
GpgErrorIncDir		:= $(call GenerateResultPaths,$(GpgErrorDir),usr/include)
GpgErrorLibDir		:= $(call GenerateResultPaths,$(GpgErrorDir),usr/lib)

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)" \
	GCRYPTCFLAGS="$(call ToolGenerateIncludeArgument,$(GcryptIncDir)) \
	$(call ToolGenerateIncludeArgument,$(GpgErrorIncDir))" \
	GCRYPTLDFLAGS="-L$(GcryptLibDir) -Wl,-rpath-link -Wl,$(GcryptLibDir) \
	-Wl,-rpath-link -Wl,$(GpgErrorLibDir)" \
	all_noverify

# 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) \
	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)" \
	GCRYPTCFLAGS="$(call ToolGenerateIncludeArgument,$(GcryptIncDir)) \
	$(call ToolGenerateIncludeArgument,$(GpgErrorIncDir))" \
	GCRYPTLDFLAGS="-L$(GcryptLibDir) -Wl,-rpath-link -Wl,$(GcryptLibDir) \
	-Wl,-rpath-link -Wl,$(GpgErrorLibDir)" \
	DESTDIR=$(ResultDirectory) \
	install

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

include post.mak
