#
#    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 makefile for the Avahi ZeroConf (aka Bonjour)
#      multicast DNS (mDNS) Service Discovery (SD) software.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No
EnableParallel  = Yes

include pre.mak

PackageName		:= avahi

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs	:= -p1

PackageArchive		:= $(PackageName).$(PackageExtension)
PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)/

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

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

ExpatDir		:= sw/tps/expat
ExpatIncDir		= $(call GenerateResultPaths,$(ExpatDir),usr/include)
ExpatLibDir		= $(call GenerateResultPaths,$(ExpatDir),usr/lib)

LibCapDir		:= sw/tps/libcap
LibCapIncDir		= $(call GenerateResultPaths,$(LibCapDir),usr/include)
LibCapLibDir		= $(call GenerateResultPaths,$(LibCapDir),lib)

LibDaemonDir		:= sw/tps/libdaemon
LibDaemonIncDir		= $(call GenerateResultPaths,$(LibDaemonDir),usr/include)
LibDaemonLibDir		= $(call GenerateResultPaths,$(LibDaemonDir),usr/lib)

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/LICENSE: source

$(PackageLicenseFile): $(PackageSourceDir)/LICENSE
	$(copy-result)

# Extract the source from the archive and apply patches, if any.

$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
	$(expand-and-patch-package)

# Prepare the sources.

.PHONY: source
source: | $(PackageSourceDir)

# Patch the sources, if necessary.

.PHONY: patch
patch: source

# Generate the package build makefile.

$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)cd $(BuildDirectory) && \
	$(CURDIR)/$(PackageSourceDir)/configure \
	CC="$(CC)" CXX="$(CXX)" AR=$(AR) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	CPPFLAGS="-I$(ExpatIncDir) -I$(LibCapIncDir)" \
	LDFLAGS="-L$(ExpatLibDir) -L$(LibCapLibDir)" \
	DBUS_CFLAGS="-I$(DbusIncDir) -I$(DbusArchIncDir)" \
	DBUS_LIBS="-L$(DbusLibDir) -ldbus-1" \
	DBUS_VERSION=$(shell cat $(BuildRoot)/$(DbusDir)/dbus.version) \
	LIBDAEMON_CFLAGS="-I$(LibDaemonIncDir)" \
	LIBDAEMON_LIBS="-L$(LibDaemonLibDir) -ldaemon" \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	--disable-autoipd \
	--disable-gdbm \
	--disable-glib \
	--disable-gobject \
	--disable-gtk \
	--disable-gtk3 \
	--disable-manpages \
	--disable-mono \
	--disable-monodoc \
	--disable-python \
	--disable-qt3 \
	--disable-qt4 \
	--enable-dbus \
	--enable-libdaemon \
	--with-distro=none \
	--with-xml=expat \
	--prefix=/usr \
	--sysconfdir=/etc \
	--localstatedir=/var

# Configure the source for building.
#
# Avahi uses and, in fact, requires pkg-config to set-up LDFLAGS and
# CFLAGS for LIBDAEMON even though these are explicitly provided on
# the configure command line above as prescribed in the "how to
# configure WITHOUT pkg-config" instructions.
#
# Unfortunately, some site Linux systems are quite old and have a
# version of pkg-config that avahi refuses to work with.
# Consequently, we place $(HostBinDir) first in the path to ensure
# that the project-local version of pkg-config is detected and used
# rather than a host- or site-local version.

configure: PATH := $(HostBinDir):$(PATH)

.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 'libavahi-core.la' and 'libavahi-common.la'
# 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 '-lavahi-core' or
# '-lavahi-common' to '/usr/lib/libavahi-core.so' and
# '/usr/lib/libavahi-common.so', respectively. 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,,usr/lib/libavahi-common.la usr/lib/libavahi-core.la usr/lib/libavahi-client.la)


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

include post.mak



