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


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)

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)

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

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

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

# Patch the sources, if necessary.

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

# Generate the package build makefile.

OPTIONS_FLAGS = \
	--disable-bluetooth \
	--disable-dundee \
	--disable-gtk-doc \
	--disable-hh2serial-gps \
	--disable-iospm \
	--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

ifdef BUILD_FEATURE_CONNMANCTL
OPTIONS_FLAGS += \
	--enable-client
else
OPTIONS_FLAGS += \
	--disable-client
endif

ifdef BUILD_FEATURE_NLCELLULAR
OPTIONS_FLAGS += \
	--enable-ofono=builtin
else
OPTIONS_FLAGS += \
	--disable-ofono
endif

# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/source | $(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" \
	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 \
	$(OPTIONS_FLAGS)
	$(Verbose)touch $@

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

$(BuildDirectory)/build: $(BuildDirectory)/configure
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	all
	$(Verbose)touch $@

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

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

DeviceUser:=root
quick-install: stage
	tar -czC $(ResultDirectory)/usr/ . | ssh $(DeviceUser)@$(DeviceAddress) tar xvzC /usr

.PHONY: stage
stage: $(BuildDirectory)/stage

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

include post.mak
