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

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 \
	--disable-static

# 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



