#
#    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
EnableParallel  = Yes

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)

# The following libraries are for connmanctl

LibEditDir		:= sw/tps/libedit
LibEditIncDirs		:= $(call GenerateResultPaths,$(LibEditDir),usr/include usr/include/editline)
LibEditLibDir		:= $(call GenerateResultPaths,$(LibEditDir),usr/lib)

NCursesDir		:= sw/tps/ncurses
NCursesIncDir		= $(call GenerateResultPaths,$(NCursesDir),usr/include)
NCursesLibDir		= $(call GenerateResultPaths,$(NCursesDir),usr/lib)



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 \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	CC="$(CC)" CXX="$(CXX)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncDir) $(LibEditIncDirs) $(NCursesIncDir))" \
	LDFLAGS="-L$(LibEditLibDir) -L$(NCursesLibDir) -lcurses" \
	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 \
	--enable-client \
	--disable-bluetooth \
	--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-sleep \
	--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) $(JOBSFLAG) -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) $(JOBSFLAG) -C $(BuildDirectory) \
	DESTDIR=$(ResultDirectory) \
	install
	$(Verbose)$(RM) $(RMFLAGS) $(call GenerateResultPaths,,$(addprefix usr/lib/connman/plugins/,ethernet.la loopback.la ntpd.la wifi.la sleepplugin.la))
DeviceUser:=root
quick-install: stage
	tar -czC $(ResultDirectory)/usr/ . | ssh $(DeviceUser)@$(DeviceAddress) tar xvzC /usr

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

include post.mak
