#
#    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 Makefile is used to build lua, a lightweight scripting language.
#    This package produces both a standalone lua interpreter and a C binding library.
#


include pre.mak

PackageName		:= lua

PackageExtension	:= tar.gz
PackageSeparator	:= -

PackagePatchArgs 	:= -p1

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

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

CleanPaths		+= $(PackageLicenseFile)

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

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

$(PackageLicenseFile): $(PackageSourceDir)/COPYRIGHT
	$(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}
	$(Verbose)touch $@

# Patch the sources, if necessary.

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

# Generate the package build makefile.

$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory)
	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))

# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/patch | ${PackageBuildMakefile}
	$(Verbose)touch $@

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

ifeq ($(TargetOS),darwin)
MYLIBS="-ldl"
PLAT=macosx
else
MYLIBS="-Wl,-E -ldl"
PLAT=posix
endif

$(BuildDirectory)/build: $(BuildDirectory)/configure | $(BuildDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory)/src \
	CC="$(CC)" AR="$(AR) -cr" NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	PLAT=$(PLAT) \
	MYCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" \
	MYLIBS=$(MYLIBS) \
	all
	$(Verbose)touch $@

# Stage the build to a temporary installation area.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.

$(BuildDirectory)/stage: $(BuildDirectory)/build | $(ResultDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	INSTALL_TOP=$(ResultDirectory) \
	install
	$(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
