#
#    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 the make file for connman, a daemon for managing
#      network connections within embedded devices running the Linux
#      operating system.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No

include pre.mak

PackageRoot		:= .

PackageName		:= connman

PackageSeparator	:=

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

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)

GlibDir			:= sw/tps/glib
GlibIncDirs		:= $(call GenerateResultPaths,$(GlibDir),usr/include/glib-2.0 usr/lib/glib-2.0/include)
GlibLibDir		:= $(call GenerateResultPaths,$(GlibDir),usr/lib)

GnuTlsDir		:= sw/tps/gnutls
GnuTlsIncDir		:= $(call GenerateResultPaths,$(GnuTlsDir),usr/include)
GnuTlsLibDir		:= $(call GenerateResultPaths,$(GnuTlsDir),usr/lib)

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)

IptablesDir		:= sw/tps/iptables
IptablesIncDir		:= $(call GenerateResultPaths,$(IptablesDir),usr/include)
IptablesLibDir		:= $(call GenerateResultPaths,$(IptablesDir),usr/lib)

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

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

# Generate the package build makefile.

$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory) $(ResultDirectory)
	$(Verbose)cd $(BuildDirectory) && \
	$(CURDIR)/$(PackageSourceDir)/configure \
	CC=$(CC) CXX=$(CXX) AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncDir))" \
	DBUS_CFLAGS="$(call ToolGenerateIncludeArgument,$(DbusIncDirs))" \
	DBUS_LIBS="-L$(DbusLibDir) -ldbus-1" \
	GLIB_CFLAGS="$(call ToolGenerateIncludeArgument,$(GlibIncDirs))" \
	GLIB_LIBS="-L$(GlibLibDir) -lglib-2.0" \
	GNUTLS_CFLAGS="$(call ToolGenerateIncludeArgument,$(GnuTlsIncDir))" \
	GNUTLS_LIBS="-L$(GnuTlsLibDir) -lgnutls -Wl,-rpath-link -Wl,$(GpgErrorLibDir) -Wl,-rpath-link -Wl,$(GcryptLibDir)" \
	GTHREAD_CFLAGS="$(call ToolGenerateIncludeArgument,$(GlibIncDirs))" \
	GTHREAD_LIBS="-L$(GlibLibDir) -lgthread-2.0" \
	XTABLES_CFLAGS="$(call ToolGenerateIncludeArgument,$(IptablesIncDir))" \
	XTABLES_LIBS="-L$(IptablesLibDir) -lxtables" \
	WPASUPPLICANT="/sbin/wpa_supplicant" \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	--prefix=/usr \
	--sysconfdir=/etc \
	--localstatedir=/var \
	--disable-bluetooth \
	--disable-client \
	--disable-dundee \
	--disable-gtk-doc \
	--disable-hh2serial-gps \
	--disable-iospm \
	--disable-ofono \
	--disable-openconnect \
	--disable-openvpn \
	--disable-pacrunner \
	--disable-polkit \
	--disable-threads \
	--disable-tools \
	--disable-vpnc \
	--disable-wispr \
	--enable-debug \
	--enable-ethernet=builtin \
	--enable-loopback=builtin \
	--enable-wifi=builtin

# 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
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) -C $(BuildDirectory) \
	all

# Stage the build to a temporary installation area.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.
#
# We explictly remove plug-in '*.la' files because some packages that
# depend on these libraries use libtool. If libtool finds a '*.la'
# file for a library, it uses the value of 'libdir=<dir>' it finds. In
# our case, since '--prefix=/usr' this value is '/usr/lib'. It then
# resolves '-lfoo' to '/usr/lib/libfoo.so'. In a cross-compilation
# environment, this is likely to be neither the right architecture nor
# the right version to link against. In short, we lose.
#
# We could also handle this by removing DESTDIR and setting the prefix
# to $(ResultDirectory); however, that results in libtool hard-coding
# $(ResultDirectory) as the RPATH in the linked executables which is
# NOT what we want either. We lose again.
#
# By removing the '*.la' file, we win by ensuring neither a misdirected
# link nor an RPATH.

.PHONY: stage
stage: build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) -C $(BuildDirectory) \
	DESTDIR=$(ResultDirectory) \
	install
	$(Verbose)$(RM) $(RMFLAGS) $(call GenerateResultPaths,,$(addprefix usr/lib/connman/plugins/,ethernet.la loopback.la ntpd.la wifi.la))

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

include post.mak
