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


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)

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(LicenseSourcePath): $(BuildDirectory)/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.

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

# Patch the sources, if necessary.

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

# Generate the package build makefile.
#
# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))
	$(Verbose)touch $@

# Build the source.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.

$(BuildDirectory)/build: $(BuildDirectory)/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
	$(Verbose)touch $@

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

$(BuildDirectory)/stage: $(BuildDirectory)/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
	$(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
