# GHC major.minor
GHC_VERSION := $(shell ghc --numeric-version | cut -d. -f1-2)
BNFC_VERSION=$(shell sed -ne "s/^[Vv]ersion: *\([0-9.]*\).*/\1/p" BNFC.cabal)

# Cabal options (to be overwritten from the command line)
CABAL_OPTS           =
CABAL_BUILD_OPTS     = --builddir=dist-ghc-$(GHC_VERSION)
CABAL_CONFIGURE_OPTS = --enable-tests
CABAL_INSTALL_OPTS   = $(CABAL_CONFIGURE_OPTS) $(CABAL_BUILD_OPTS)
CABAL_TEST_OPTS      = $(CABAL_BUILD_OPTS)

CABAL                = cabal $(CABAL_OPTS)
CABAL_CONFIGURE      = $(CABAL) configure $(CABAL_CONFIGURE_OPTS)
CABAL_BUILD          = $(CABAL) build     $(CABAL_BUILD_OPTS)
CABAL_INSTALL        = $(CABAL) install   $(CABAL_INSTALL_OPTS)
CABAL_TEST           = $(CABAL) test      $(CABAL_TEST_OPTS)

# Name for binary distribution (e.g. bnfc-2.4.5-linux32)
BDIST_TAG=bnfc-${BNFC_VERSION}-$(shell uname -s)-$(shell uname -m)

.PHONY: default build install doc test bdist show-version debug TAGS

default: install test

build:
	$(CABAL_CONFIGURE) && $(CABAL_BUILD)

install:
	$(CABAL_INSTALL)

test:
	$(CABAL_CONFIGURE)
	$(CABAL_TEST)

doc:
	$(CABAL) haddock --executables --internal

TAGS :
	hasktags --etags .

# Binary package (tgz, for linux)
bdist: dist/${BDIST_TAG}.tar.gz

dist/%.tar.gz:
	cabal clean
	cabal install ${CABAL_OPTS} --only-dependencies
	cabal configure ${CABAL_OPTS} --prefix=/
	cabal build ${CABAL_OPTS}
	cabal copy --destdir=dist/install
	mkdir dist/$*
	cp dist/install/bin/bnfc dist/$*
	cp LICENSE dist/$*
	tar -cvz -C dist $* > $@

# Print the bnfc version from the cabal file
show-version:
	@echo ${BNFC_VERSION}

debug:
	@echo GHC_VERSION  = $(GHC_VERSION)
	@echo BNFC_VERSION = $(BNFC_VERSION)
# EOF