X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Makefile;h=1a23e2ebbe20f1c3ba81f411836ca05df3417eed;hb=6f66d02c9654fc037db0582857acdcc15e0fd1d3;hp=2920bf3053cead913f79567dc1a1ae9cf2be169f;hpb=6c734cda6f6a3de5be66385cc31c5ffbd15cbed1;p=ghc-hetmet.git diff --git a/Makefile b/Makefile index 2920bf3..1a23e2e 100644 --- a/Makefile +++ b/Makefile @@ -1,132 +1,124 @@ -################################################################################# +# ----------------------------------------------------------------------------- # -# fptools/Makefile +# (c) 2009 The University of Glasgow # -# This is the main Makefile for fptools. +# This file is part of the GHC build system. # -################################################################################# +# To understand how the build system works and how to modify it, see +# http://hackage.haskell.org/trac/ghc/wiki/Building/Architecture +# http://hackage.haskell.org/trac/ghc/wiki/Building/Modifying +# +# ----------------------------------------------------------------------------- -TOP=. -include $(TOP)/mk/boilerplate.mk -SRC_DIST_DIR=$(shell pwd)/$(SRC_DIST_NAME) +ifeq "$(wildcard distrib/)" "" -# -# Totally evil hack to make the setting of SUBDIRS be dependent -# on whether we do `make install' or not. Having a $(ifeq ... ) would -# be preferable.. -CURRENT_TARGET = $(MAKECMDGOALS) -SUBDIRS = $(shell if (test x$(CURRENT_TARGET) = xinstall) ; then echo $(ProjectsToInstall); else echo $(ProjectsToBuild); fi) - -ifeq (x$(CURRENT_TARGET),xbinary-dist) - include $(shell echo $(Project) | tr A-Z a-z)/mk/config.mk +# We're in a bindist + +.PHONY: default +default: + @echo 'Run "make install" to install' + @false + +.PHONY: install show +install show: + $(MAKE) -r --no-print-directory -f ghc.mk $@ BINDIST=YES NO_INCLUDE_DEPS=YES + +else + +default : all + @: + +# For help, type 'make help' +.PHONY: help +help : + @cat MAKEHELP + +ifneq "$(findstring clean,$(MAKECMDGOALS))" "" +-include mk/config.mk +else +include mk/config.mk +ifeq "$(ProjectVersion)" "" +$(error Please run ./configure first) +endif endif -# -# Files to include in fptools source distribution -# -SRC_DIST_DIRS += mk docs CONTRIB distrib $(ProjectsToBuild) -SRC_DIST_FILES += configure.in config.guess config.sub configure aclocal.m4 acconfig.h README INSTALL Makefile install-sh +include mk/custom-settings.mk -# -# Making a binary distribution -# -# To make a particular binary distribution: -# set $(Project) to the name of the project (currently Ghc or Happy). +# No need to update makefiles for these targets: +REALGOALS=$(filter-out binary-dist binary-dist-prep bootstrapping-files framework-pkg clean clean_% distclean maintainer-clean show help install-docs test fulltest,$(MAKECMDGOALS)) -BIN_DIST_TMPDIR=$(shell pwd) -BIN_DIST_NAME=fptools +# configure touches certain files even if they haven't changed. This +# can mean a lot of unnecessary recompilation after a re-configure, so +# here we cache the old versions of these files so we can restore the +# timestamps. +%.old: % + @set -x && test -f $@ && cmp -s $< $@ || cp -p $< $@ + touch -r $@ $< -# -# list of toplevel directories to include in binary distrib. -# -BIN_DIST_MAIN_DIR=$($(Project)MainDir) -BIN_DIST_DIRS=$($(Project)BinDistDirs) - -binary-dist:: binary-dist-pre - -BIN_DIST_TOP= distrib/Makefile-bin.in \ - distrib/configure-bin.in \ - README \ - distrib/INSTALL \ - $(BIN_DIST_MAIN_DIR)/ANNOUNCE \ - $(BIN_DIST_MAIN_DIR)/PATCHLEVEL \ - $(BIN_DIST_MAIN_DIR)/RELEASE \ - glafp-utils/mkdirhier/mkdirhier \ - install-sh \ - config.guess \ - config.sub \ - aclocal.m4 - -binary-dist:: - @for i in $(BIN_DIST_TOP); do \ - if test -f "$$i"; then \ - echo cp $$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); \ - cp $$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); \ - fi; \ - done; - @echo "Configuring the Makefile for this project..." - touch $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - echo "package = $(ProjectNameShort)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - echo "version = $(ProjectVersion)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - echo "PACKAGE_SH_SCRIPTS = $($(Project)BinDistShScripts)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - echo "PACKAGE_PRL_SCRIPTS = $($(Project)BinDistPrlScripts)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - echo "PACKAGE_LIB_PRL_SCRIPTS = $($(Project)BinDistLibPrlScripts)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - echo "PACKAGE_BINS = $($(Project)BinDistBins)" >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - cat $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile-bin.in >> $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - @echo "Generating a shippable configure script.." - $(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/configure-bin.in $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/configure.in - ( cd $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); autoconf ) -# -# binary dist'ing the documentation. -# Which documentation to build/install is hardcoded below. -# +# NB. not the same as saying '%: ...', which doesn't do the right thing: +# it does nothing if we specify a target that already exists. +.PHONY: $(REALGOALS) +$(REALGOALS) all: mk/config.mk.old mk/project.mk.old compiler/ghc.cabal.old +ifneq "$(OMIT_PHASE_0)" "YES" + @echo "===--- building phase 0" + $(MAKE) -r --no-print-directory -f ghc.mk phase=0 phase_0_builds +endif +ifneq "$(OMIT_PHASE_1)" "YES" + @echo "===--- building phase 1" + $(MAKE) -r --no-print-directory -f ghc.mk phase=1 phase_1_builds +endif + @echo "===--- building final phase" + $(MAKE) -r --no-print-directory -f ghc.mk phase=final $@ -BINDIST_DOCS = $($(Project)BinDistDocs) -BINDIST_DOCS_WAYS = html info dvi - -binary-dist :: - @for way in $(BINDIST_DOCS_WAYS); do \ - $(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/$$way/$(ProjectNameShort)-$(ProjectVersion); \ - for dir in $(BINDIST_DOCS); do \ - echo Making $$way documentation in $$dir && \ - $(MAKE) -C $$dir --no-print-directory $(MFLAGS) $$way && \ - echo cp -f $$dir/*.$$way $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/$$way/$(ProjectNameShort)-$(ProjectVersion) && \ - cp -f $$dir/*.$$way $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/$$way/$(ProjectNameShort)-$(ProjectVersion) && \ - echo "Done."; \ - done; \ - done - -# Rename scripts to $i.prl and $i.sh where necessary. -# ToDo: do this in a cleaner way... - -ifneq "$($(Project)BinDistPrlScripts)" "" -binary-dist:: - @for i in $($(Project)BinDistPrlScripts); do \ - echo "Renaming $$i to $$i.prl"; \ - $(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i.prl; \ - done +binary-dist: binary-dist-prep +ifeq "$(mingw32_TARGET_OS)" "1" + mv bindistprep/*.exe . +endif + mv bindistprep/*.tar.bz2 . + +binary-dist-prep: +ifeq "$(mingw32_TARGET_OS)" "1" + $(MAKE) -r --no-print-directory -f ghc.mk windows-binary-dist-prep + $(MAKE) -r --no-print-directory -f ghc.mk windows-installer +else + rm -f bindist-list + $(MAKE) -r --no-print-directory -f ghc.mk bindist BINDIST=YES + $(MAKE) -r --no-print-directory -f ghc.mk unix-binary-dist-prep endif -ifneq "$($(Project)BinDistLibPrlScripts)" "" -binary-dist:: - @for i in $($(Project)BinDistLibPrlScripts); do \ - echo "Renaming $$i to $$i.prl"; \ - $(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i.prl; \ - done +clean distclean maintainer-clean: + $(MAKE) -r --no-print-directory -f ghc.mk $@ CLEANING=YES + test ! -d testsuite || $(MAKE) -C testsuite $@ + +$(filter clean_%, $(MAKECMDGOALS)) : clean_% : + $(MAKE) -r --no-print-directory -f ghc.mk $@ CLEANING=YES + +bootstrapping-files show: + $(MAKE) -r --no-print-directory -f ghc.mk $@ + +ifeq "$(darwin_TARGET_OS)" "1" +framework-pkg: + $(MAKE) -C distrib/MacOS $@ endif -ifneq "$($(Project)BinDistShScripts)" "" -binary-dist:: - @for i in $($(Project)BinDistShScripts); do \ - echo "Renaming $$i to $$i.sh"; \ - $(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/$(ProjectNameShort)-$(ProjectVersion)/$$i.sh; \ - done +# install-docs is a historical target that isn't supported in GHC 6.12. See #3662. +install-docs: + @echo "The install-docs target is not supported in GHC 6.12.1 and later." + @echo "'make install' now installs everything, including documentation." + @exit 1 + +# If the user says 'make A B', then we don't want to invoke two +# instances of the rule above in parallel: +.NOTPARALLEL: + endif -dist :: dist-pre -include $(TOP)/mk/target.mk -dist :: dist-post +.PHONY: test +test: + $(MAKE) -C testsuite/tests/ghc-regress CLEANUP=1 OUTPUT_SUMMARY=../../../testsuite_summary.txt fast + +.PHONY: fulltest +fulltest: + $(MAKE) -C testsuite/tests/ghc-regress CLEANUP=1 OUTPUT_SUMMARY=../../../testsuite_summary.txt -binary-dist:: - @echo "Mechanical and super-natty! Inspect the result and *if* happy; freeze, sell and get some sleep!"