X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Makefile;h=93ee7bc7d18af4a9bdb1f4e968135cbb67eaf46d;hb=e55d6fa8fcab24a7a072688a19b2e68e09c7f585;hp=09356fd6084c6d4a5169b12724c46bb0108cad14;hpb=e103630d2858bbfffffe1f846b44f7aaac0e9961;p=ghc-hetmet.git diff --git a/Makefile b/Makefile index 09356fd..93ee7bc 100644 --- a/Makefile +++ b/Makefile @@ -1,140 +1,130 @@ -################################################################################# +# ----------------------------------------------------------------------------- # -# 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/)" "" -SUBDIRS = $(ProjectsToBuild) +# We're in a bindist -# -# Files to include in fptools source distribution -# -SRC_DIST_DIRS += mk $(ProjectsToBuild) -SRC_DIST_FILES += configure.in config.guess config.sub configure README ANNOUNCE NEWS INSTALL Makefile +.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 -# -# Making a binary distribution -# -BIN_DIST_TMPDIR=$(shell pwd) -BIN_DIST_NAME=fptools +else -# -# list of toplevel `projects' to include in binary distrib. -# -BIN_DIST_DIRS=ghc - -binary-dist:: binary-dist-pre - -BIN_DIST_TOP= distrib/Makefile-bin.in \ - distrib/configure-bin.in \ - distrib/README \ - distrib/INSTALL \ - distrib/ANNOUNCE \ - distrib/PATCHLEVEL \ - glafp-utils/mkdirhier/mkdirhier \ - ghc/RELEASE \ - install-sh \ - config.guess \ - config.sub - -binary-dist:: - @for i in $(BIN_DIST_TOP); do \ - echo cp $$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); \ - cp $$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); \ - done; - @echo "hackily rename some of these chaps.." - $(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile-bin.in $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/Makefile.in - $(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/configure-bin.in $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/configure.in - @echo "Generating a shippable configure script.." - -(cd $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME); autoconf ) +default : all + @: -# -# Creating and copying the documentation into the bin-dist tree. -# (this tries to be oh-so-general about copyng docs, but isn't really -# suited for anything else than ghc/) -# -# Needless to say, the rule below could be cleaned up somewhat. -# -binary-dist:: - @$(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/html/ghc-2.02 - @$(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/dvi/ghc-2.02 - @$(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/info/ghc-2.02 - @echo "Making html documentation.." - @echo "For fptools.." - #$(MAKE) -C docs --no-print-directory $(MFLAGS) html - #cp -f docs/html/* docs/*.html $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/html/ghc-2.02 - #@echo "Done." - #@for i in $(BIN_DIST_DIRS); do \ - # echo "For $$i.."; \ - # echo cp -f $$i/docs/users_guide/html/* $$i/docs/users_guide/*.html $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/html/ghc-2.02; \ - # cp -f $$i/docs/users_guide/html/* $$i/docs/users_guide/*.html $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/html/ghc-2.02; \ - # echo cp -f $$i/docs/html/* $$i/docs/*.html $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/html/ghc-2.02; \ - # cp -f $$i/docs/html/* $$i/docs/*.html $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/html/ghc-2.02; \ - # echo "Done."; \ - #done - ##@echo "Making dvi files.." - #@echo "For fptools.." - #-$(MAKE) -C docs --no-print-directory $(MFLAGS) dvi - #-cp -f docs/*.dvi $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/dvi/ghc-2.02 - #@echo "Done." - #@for i in $(BIN_DIST_DIRS); do \ - # echo "For $$i.."; \ - # echo cp -f $$i/docs/users_guide/*.dvi $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/dvi/ghc-2.02; \ - # cp -f $$i/docs/users_guide/*.dvi $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/dvi/ghc-2.02; \ - # echo cp -f $$i/docs/*.dvi $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/dvi/ghc-2.02; \ - # cp -f $$i/docs/*.dvi $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/dvi/ghc-2.02; \ - # echo "Done."; \ - #done - #@echo "Making info files.." - #@echo "For fptools.." - #-$(MAKE) -C docs --no-print-directory $(MFLAGS) info - #-cp -f docs/*.info $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/info/ghc-2.02/ - #@echo "Done." - #@for i in $(BIN_DIST_DIRS); do \ - # echo "For $$i docs.."; \ - # echo cp -f $$i/docs/users_guide/*.info $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/info/ghc-2.02; \ - # cp -f $$i/docs/users_guide/*.info $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/info/ghc-2.02; \ - # echo cp -f $$i/docs/*.info $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/info/ghc-2.02; \ - # cp -f $$i/docs/*.info $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/info/ghc-2.02; \ - # echo "Done."; \ - #done +# 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 + +include mk/custom-settings.mk + +# 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)) + +# 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 $@ $< + + +# 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 + @echo "===--- updating makefiles phase 0" + $(MAKE) -r --no-print-directory -f ghc.mk phase=0 just-makefiles +ifneq "$(OMIT_PHASE_1)" "YES" + @echo "===--- updating makefiles phase 1" + $(MAKE) -r --no-print-directory -f ghc.mk phase=1 just-makefiles +endif +ifneq "$(OMIT_PHASE_2)" "YES" + @echo "===--- updating makefiles phase 2" + $(MAKE) -r --no-print-directory -f ghc.mk phase=2 just-makefiles +endif +ifneq "$(OMIT_PHASE_3)" "YES" + @echo "===--- updating makefiles phase 3" + $(MAKE) -r --no-print-directory -f ghc.mk phase=3 just-makefiles +endif + @echo "===--- finished updating makefiles" + $(MAKE) -r --no-print-directory -f ghc.mk $@ + +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 + +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 + +# 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 + +.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'ing hslibs/, hackily. -# -binary-dist :: - @echo $(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/ghc-$(ProjectVersion)/hslibs; - @$(MKDIRHIER) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/ghc-$(ProjectVersion)/hslibs; - $(MAKE) -C hslibs $(MFLAGS) install \ - BIN_DIST=1 BIN_DIST_NAME=$(BIN_DIST_NAME) \ - prefix=$(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME) \ - exec_prefix=$(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME) \ - bindir=$(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/ghc-$(ProjectVersion) \ - libdir=$(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/ghc-$(ProjectVersion)/hslibs \ - libexecdir=$(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/ghc-$(ProjectVersion)/hslibs \ - datadir=$(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/share/$$i-$(ProjectVersion) ; - -# Even more of a hack, but I'm too tired to fix this up right now.. -BIN_DIST_SCRIPTS_NEEDING_RENAMING=ghc stat2resid hstags mkdependHS - -binary-dist:: - @for i in $(BIN_DIST_SCRIPTS_NEEDING_RENAMING); do \ - echo "Renaming $$i to $$i.prl"; \ - $(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/ghc-$(ProjectVersion)/$$i $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/bin/$(TARGETPLATFORM)/ghc-$(ProjectVersion)/$$i.prl; \ - done - @echo "Renaming hscpp to hscpp.prl" - @$(MV) $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/ghc-$(ProjectVersion)/hscpp $(BIN_DIST_TMPDIR)/$(BIN_DIST_NAME)/lib/$(TARGETPLATFORM)/ghc-$(ProjectVersion)/hscpp.prl - -dist :: dist-pre -include $(TOP)/mk/target.mk -dist :: dist-post - -binary-dist:: - @echo "Mechanical and super-natty! Inspect the result and *if* happy; freeze, sell and get some sleep!"