#
#    Copyright (c) 2010-2012 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 the make file for wpa_supplicant, a free software
#      implementation of an IEEE 802.11i security supplicant for
#      Linux, FreeBSD, NetBSD and Microsoft Windows.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No
EnableParallel  = Yes

include pre.mak

PackageRoot		:= .

PackageName		:= hostap

PackageSeparator	:=

PackageSourceDir	:= $(PackageRoot)/$(PackageName)

PackageBuildSubdir	:= $(BuildDirectory)/wpa_supplicant

PackageConfigDir	:= configs
PackageProductConfig 	:= $(PackageConfigDir)/$(BuildProduct)/defconfig
PackageSiteConfig	:= $(PackageConfigDir)/defconfig
PackageDefaultConfig	:= $(PackageBuildSubdir)/defconfig

PackageSiteConfig	:= $(if $(wildcard $(PackageProductConfig)),$(PackageProductConfig),$(wildcard $(PackageSiteConfig)))

PackageSourceConfig	:= $(if $(PackageSiteConfig),$(PackageSiteConfig),$(PackageDefaultConfig))
PackageBuildConfig	:= $(PackageBuildSubdir)/.config

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

LicenseSourceFile	:= $(PackageSourceDir)/COPYING

CleanPaths		+= $(PackageLicenseFile)

DbusDir			:= sw/tps/dbus
DbusIncDirs		:= $(call GenerateResultPaths,$(DbusDir),usr/include/dbus-1.0 usr/lib/dbus-1.0/include)
DbusLibDir		:= $(call GenerateResultPaths,$(DbusDir),usr/lib)

LinuxDir		:= sw/tps/linux
LinuxIncDir		:= $(call GenerateResultPaths,$(LinuxDir),include)

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

OpenSSLDir		:= sw/tps/openssl
OpenSSLIncDir		:= $(call GenerateResultPaths,$(OpenSSLDir),usr/include)
OpenSSLLibDir		:= $(call GenerateResultPaths,$(OpenSSLDir),usr/lib)

ZlibDir			:= sw/tps/zlib
ZlibIncDir      	:= $(call GenerateResultPaths,$(ZlibDir),usr/include)
ZlibLibDir      	:= $(call GenerateResultPaths,$(ZlibDir),usr/lib)

WpaDbusConfSourcePath	:= $(PackageSourceDir)/wpa_supplicant/dbus/dbus-wpa_supplicant.conf
WpaDbusConfResultPath	:= $(call GenerateResultPaths,,$(notdir $(WpaDbusConfSourcePath)))

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(LicenseSourceFile): source

$(PackageLicenseFile): $(LicenseSourceFile)
	$(copy-result)

# We are building this package from version-controlled source, so
# there is nothing to do for this target goal.

$(PackageSourceDir):

# Prepare the sources.

.PHONY: source
source: | $(PackageSourceDir)

# Patch the sources, if necessary.

.PHONY: patch
patch: source

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

$(PackageBuildConfig): $(PackageSourceConfig) | $(PackageBuildSubdir)
	$(copy-result)

# Configure the source for building.

.PHONY: configure
configure: source $(PackageBuildConfig)

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

.PHONY: build
build: configure
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(PackageBuildSubdir) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	CC="$(CC)" CXX="$(CXX)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	DBUSCFLAGS="$(call ToolGenerateIncludeArgument,$(DbusIncDirs))" \
	DBUSLDFLAGS="-L$(DbusLibDir) -ldbus-1" \
	DBUSVERSION=$(shell cat $(BuildRoot)/$(DbusDir)/dbus.version) \
	LINUXCFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncDir))" \
	NETLINKCFLAGS="$(call ToolGenerateIncludeArgument,$(NetlinkIncDir))" \
	NETLINKLDFLAGS="-L$(NetlinkLibDir) -lnl -lnl-genl" \
	OPENSSLCFLAGS="-I$(OpenSSLIncDir)" \
	OPENSSLLDFLAGS="-L$(OpenSSLLibDir) -L$(ZlibLibDir) -lz" \
	all

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

.PHONY: stage
stage: stage-default stage-other

.PHONY: stage-default
stage-default: build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(PackageBuildSubdir) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	DBUSCFLAGS="$(call ToolGenerateIncludeArgument,$(DbusIncDirs))" \
	DBUSLDFLAGS="-L$(DbusLibDir) -ldbus-1" \
	DBUSVERSION=$(shell cat $(BuildRoot)/$(DbusDir)/dbus.version) \
	LINUXCFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncDir))" \
	NETLINKCFLAGS="$(call ToolGenerateIncludeArgument,$(NetlinkIncDir))" \
	NETLINKLDFLAGS="-L$(NetlinkLibDir)" \
	OPENSSLCFLAGS="-I$(OpenSSLIncDir)" \
	OPENSSLLDFLAGS="-L$(OpenSSLLibDir) -L$(ZlibLibDir) -lz" \
	BINDIR=/usr/sbin \
	LIBDIR=/usr/lib \
	DESTDIR=$(ResultDirectory) \
	install

.PHONY: stage-other
stage-other: $(WpaDbusConfResultPath)

$(WpaDbusConfSourcePath): build

$(WpaDbusConfResultPath): $(WpaDbusConfSourcePath) | $(ResultDirectory)
	$(copy-result)

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

include post.mak
