#
#    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 libxml2, a C-based library for
#      parsing Extensible Markup Language (XML) documents.
#


include pre.mak

PackageName		:= libxml2

PackageExtension	:= tar.gz
PackageSeparator	:= -

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

ifeq ($(BUILD_FEATURE_LTTNG_TOOLS), 1)
	WRITER_SUPPORT = --with-writer=yes
	SCHEMAS_SUPPORT = --with-schemas=yes
else
	WRITER_SUPPORT = --with-writer=no
	SCHEMAS_SUPPORT = --with-schemas=no
endif

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/COPYING: $(BuildDirectory)/source

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

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

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

# Prepare the sources.

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

# Patch the sources, if necessary.

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

# Generate the package build makefile.

# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)cd $(BuildDirectory) && \
	$(CURDIR)/$(PackageSourceDir)/configure \
	CC="$(CC) $(CPPOPTFLAGS)" CXX="$(CXX) $(CPPOPTFLAGS)" AR=$(AR) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncludePath))" \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	--with-zlib=$(ZlibPrefixPath) \
	--without-python \
	--prefix=$(addprefix $(LibPrefixConfigOption),/usr) \
	--sysconfdir=$(addprefix $(LibPrefixConfigOption),/etc) \
	--localstatedir=$(addprefix $(LibPrefixConfigOption),/var) \
	--disable-static \
	--with-gnu-ld=no \
	--with-c14n=no \
	--with-catalog=no \
	--with-debug=no \
	--with-docbook=no \
	--with-fexceptions=no \
	--with-ftp=no \
	--with-history=no \
	--with-html=no \
	--with-http=no \
	--with-iconv=no \
	--with-iso8859x=no \
	--with-legacy=no \
	--with-mem-debug=no \
	--with-minimum=no \
	--with-output=yes \
	--with-pattern=no \
	--with-push=no \
	--with-reader=no \
	--with-readline=no \
	--with-regexps=no \
	--with-run-debug=no \
	--with-sax1=yes \
	$(SCHEMAS_SUPPORT) \
	--with-schematron=no \
	--with-threads=no \
	--with-thread-alloc=no \
	--with-tree=yes \
	--with-valid=no \
	$(WRITER_SUPPORT) \
	--with-xinclude=no \
	--with-xpath=no \
	--with-xptr=no \
	--with-modules=no
	$(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 'libxml2.la' because some packages that depend
# on libxml2 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
# '-llibxml2' to '/usr/lib/libxml2.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) $(call GenerateLibraryDestinationArgument,$(ResultDirectory)) install
	$(Verbose)$(RM) $(RMFLAGS) $(call GenerateResultPaths,,usr/lib/libxml2.la)
	$(Verbose)touch $@

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

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

include post.mak
