#
#    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 util-linux, a variety of low-
#      level system utilities for Linux.
#

BuildConfigSpecialized	:= No
BuildProductSpecialized	:= No
EnableParallel  = Yes

include pre.mak

PackageName		:= util-linux-ng

PackageExtension	:= tar.bz2
PackageSeparator	:= -

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

LinuxDir		:= sw/tps/linux
LinuxIncDir		:= $(call GenerateResultPaths,$(LinuxDir),include)

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/COPYING: 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.

.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) \
	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncDir)) \
	$(call ToolGenerateIncludeArgument,$(NCursesIncDir))" \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	LDFLAGS="-L$(NCursesLibDir)" \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	--prefix=/usr \
	--sysconfdir=/etc \
	--localstatedir=/var \
	--disable-agetty \
	--disable-cramfs \
	--disable-elvtune \
	--disable-fallocate \
	--disable-fsck \
	--disable-init \
	--disable-kill \
	--disable-last \
	--disable-login-utils \
	--disable-makeinstall-chown \
	--disable-makeinstall-setuid \
	--disable-mesg \
	--disable-nls \
	--disable-partx \
	--disable-pivot_root \
	--disable-raw \
	--disable-rdev \
	--disable-rename \
	--disable-reset \
	--disable-schedutils \
	--disable-switch_root \
	--disable-tls \
	--disable-unshare \
	--disable-uuidd \
	--disable-wall \
	--disable-write \
	--enable-libblkid \
	--enable-libuuid \
	--with-ncurses \
	--without-slang \
	--without-pam \
	--without-selinux \
	--without-audit

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

.PHONY: stage
stage: build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	DESTDIR=$(ResultDirectory) \
	install

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

include post.mak
