Agda-2.3.2.2: Makefile
# Top-level Makefile for Agda 2
# Authors: Ulf Norell, Nils Anders Danielsson
SHELL=bash
## Includes ###############################################################
TOP = .
is_configured = $(shell if test -f mk/config.mk; \
then echo Yes; \
else echo No; \
fi \
)
include mk/paths.mk
ifeq ($(is_configured),Yes)
include mk/config.mk
include mk/rules.mk
endif
## Phony targets ##########################################################
.PHONY : default all clean install full prof core \
debug doc dist make_configure clean_test examples \
test tests succeed fail interaction benchmark up-to-date-std-lib \
update-cabal install-lib install-bin install-emacs-mode
## Default target #########################################################
ifeq ($(is_configured),Yes)
default : compile-emacs-mode
# tags
else
default : make_configure
endif
## Cabal-based installation ###############################################
# The cabal command.
CABAL_CMD=cabal
# Options used by cabal install.
CABAL_OPTIONS=
# -f epic
install : update-cabal install-bin compile-emacs-mode setup-emacs-mode
prof : install-prof-bin
update-cabal :
$(CABAL_CMD) update
# Installs the Emacs mode, but does not set it up.
install-bin :
$(CABAL_CMD) install --disable-library-profiling --disable-documentation $(CABAL_OPTIONS)
install-prof-bin :
$(CABAL_CMD) install --enable-library-profiling --enable-executable-profiling \
--program-suffix=_p --disable-documentation $(CABAL_OPTIONS)
compile-emacs-mode : install-bin
agda-mode compile
setup-emacs-mode : install-bin
@echo
@echo "If the agda-mode command is not found, make sure that the directory"
@echo "in which it was installed is located on your shell's search path."
@echo
agda-mode setup
## Making the make system #################################################
m4_macros = $(wildcard $(MACRO_DIR)/*.m4)
make_configure : configure
@echo "Run './configure' to set up the build system."
configure : aclocal.m4 $(m4_macros) configure.ac
autoconf
##
## The following targets are only available after running configure #######
##
ifeq ($(is_configured),Yes)
## Making the documentation ###############################################
doc :
$(MAKE) -C $(HADDOCK_DIR)
## Making the full language ###############################################
ifeq ($(HAVE_RUNHASKELL),Yes)
SETUP = Setup.hs
RUNSETUP = $(RUNHASKELL) $(SETUP)
else
SETUP = setup
RUNSETUP = ./setup
$(SETUP) : Setup.hs
ghc --make -o $@ $<
endif
CONFIG = dist/setup-config
CABAL = Agda.cabal
BUILD = dist/build-complete
INPLACE = dist/installed-inplace
SOURCES = $(shell $(FIND) $(FULL_SRC_DIR) -name '*hs') \
$(shell $(FIND) $(FULL_SRC_DIR) -name '*.y') \
$(shell $(FIND) $(FULL_SRC_DIR) -name '*.x')
$(CONFIG) : $(CABAL) $(SETUP)
$(RUNSETUP) configure
$(BUILD) : $(CONFIG) $(SOURCES)
$(RUNSETUP) build
@date > $@
$(INPLACE) : $(BUILD)
$(RUNSETUP) register --user --inplace
@date > $@
$(AGDA_BIN) : $(INPLACE) $(MAIN_SRC_DIR)/Main.hs
$(MAKE) -C $(MAIN_SRC_DIR)
full : $(AGDA_BIN)
## Making the core language ###############################################
core :
$(MAKE) -C $(CORE_SRC_DIR)
## Making the Agda 1 to Agda 2 translator #################################
transl :
(cd $(TRANSL_SRC_DIR); cabal configure && cabal build)
## Making the source distribution #########################################
ifeq ($(HAVE_DARCS)-$(shell if test -d _darcs; then echo darcs; fi),Yes-darcs)
is_darcs_repo = Yes
else
is_darcs_repo = No
endif
ifeq ($(is_darcs_repo),Yes)
dist : agda2.tar.gz
agda2.tar.gz :
$(DARCS) dist -d agda2
else
dist :
@echo You can only "'make dist'" from the darcs repository.
@$(FALSE)
endif
tags :
$(MAKE) -C $(FULL_SRC_DIR) tags
TAGS :
$(MAKE) -C $(FULL_SRC_DIR) TAGS
## Testing ###########################################################
test : check-whitespace succeed fail interaction examples tests library-test compiler-test lib-succeed epic-test
tests :
@echo "======================================================================"
@echo "======================== Internal test suite ========================="
@echo "======================================================================"
$(AGDA_BIN) --test
succeed :
@echo "======================================================================"
@echo "===================== Suite of successfull tests ====================="
@echo "======================================================================"
@chmod +x test/succeed/checkOutput
@$(MAKE) -C test/succeed
interaction :
@echo "======================================================================"
@echo "===================== Suite of interaction tests ====================="
@echo "======================================================================"
@$(MAKE) -C test/interaction
examples :
@echo "======================================================================"
@echo "========================= Suite of examples =========================="
@echo "======================================================================"
@$(MAKE) -C examples
fail :
@echo "======================================================================"
@echo "======================= Suite of failing tests ======================="
@echo "======================================================================"
@$(MAKE) -C test/fail
std-lib :
darcs get --lazy --repo-name=$@ \
http://www.cse.chalmers.se/~nad/repos/lib/
up-to-date-std-lib : std-lib
@(cd std-lib && darcs pull -a && make setup)
library-test : up-to-date-std-lib
@echo "======================================================================"
@echo "========================== Standard library =========================="
@echo "======================================================================"
@(cd std-lib && \
time $(PWD)/$(AGDA_BIN) -i. -isrc README.agda $(AGDA_TEST_FLAGS) \
+RTS -s)
compiler-test : up-to-date-std-lib
@echo "======================================================================"
@echo "============================== Compiler =============================="
@echo "======================================================================"
@(cd test/compiler && \
time ../../$(AGDA_BIN) --compile -i. -i../../std-lib -i../../std-lib/src \
Main.agda +RTS -H1G -M1.5G && \
./Main)
lib-succeed :
@echo "======================================================================"
@echo "========== Successfull tests using the standard library =============="
@echo "======================================================================"
@$(MAKE) -C test/$@
epic-test :
@echo "======================================================================"
@echo "============================ Epic backend ============================"
@echo "======================================================================"
@$(MAKE) -C test/epic
benchmark :
@$(MAKE) -C benchmark
## Clean ##################################################################
clean :
$(MAKE) -C $(HADDOCK_DIR) clean
rm -rf $(OUT_DIR)
rm -rf dist
veryclean :
$(MAKE) -C $(HADDOCK_DIR) veryclean
rm -rf $(OUT_DIR)
rm -rf configure config.log config.status autom4te.cache mk/config.mk
## Debugging the Makefile #################################################
info :
@echo "The agda binary is at: $(AGDA_BIN)"
@echo "Do we have ghc 6.4? $(HAVE_GHC_6_4)"
@echo "Is this the darcs repository? $(is_darcs_repo)"
else # is_configured
info :
@echo "You haven't run configure."
endif # is_configured
## Whitespace-related #####################################################
# Agda can fail to compile on Windows if files which are CPP-processed
# don't end with a newline character (because we use -Werror).
.PHONY:
fix-whitespace :
fix-agda-whitespace
.PHONY:
check-whitespace :
fix-agda-whitespace --check
.PHONY:
install-fix-agda-whitespace :
cd src/fix-agda-whitespace && \
$(CABAL_CMD) install $(CABAL_OPTIONS)