#
#    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

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
