X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=Makefile;h=b8c149853faaceb53ea2dbc33ab2de03d9b9caaa;hp=bafb84647c530a59b00f046286560ec03f030312;hb=14df4276ef4480afd6f911f90f587257019bf4bc;hpb=ec900ef4172bb7d34926f423490401f1647a7b1a diff --git a/Makefile b/Makefile index bafb846..b8c1498 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ # # Targets: # -# bootsrap (DEFAULT) +# bootstrap (DEFAULT) # Builds GHC, then builds the libraries, # then uses this GHC ("stage 1") to build itself # ("stage 2"). @@ -66,7 +66,18 @@ endif SUBDIRS = $(SUBDIRS_NOLIB) libraries -stage1 : +# Sanity check that all the core libraries are in the tree, to catch +# failure to run darcs-all. +check-packages : + @for d in `cat libraries/core-packages`; do \ + if test ! -d libraries/$$d; then \ + echo "Looks like you're missing libraries/$$d,"; \ + echo "maybe you haven't done 'sh darcs-all get'?"; \ + exit 1; \ + fi \ + done + +stage1 : check-packages $(MAKE) -C utils/mkdependC boot @case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \ for i in $(SUBDIRS_NOLIB); do \ @@ -88,11 +99,11 @@ stage1 : @$(MAKE) -C libraries boot @$(MAKE) -C libraries all -stage2 : +stage2 : check-packages $(MAKE) -C compiler boot stage=2 $(MAKE) -C compiler stage=2 -stage3 : +stage3 : check-packages $(MAKE) -C compiler boot stage=3 $(MAKE) -C compiler stage=3 @@ -118,7 +129,7 @@ INSTALL_STAGE = endif # Same as default rule, but we pass $(INSTALL_STAGE) to $(MAKE) too -install :: +install :: check-packages @case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \ for i in $(SUBDIRS); do \ echo "------------------------------------------------------------------------"; \ @@ -147,6 +158,8 @@ install :: -mkdir $(prefix)/include/mingw -cp -rp $(GccDir)../include/* $(prefix)/include/mingw -cp -rp $(GccDir)../lib/gcc-lib/mingw32/$(GccVersion)/* $(prefix)/gcc-lib + -cp -rp $(GccDir)../lib/gcc/mingw32/$(GccVersion)/* $(prefix)/gcc-lib + -cp -rp $(GccDir)../libexec/gcc/mingw32/$(GccVersion)/* $(prefix)/gcc-lib -cp $(GccDir)../lib/*.* $(prefix)/gcc-lib -cp $(GccDir)gcc.exe $(prefix) -cp $(GccDir)as.exe $(prefix)/gcc-lib @@ -209,6 +222,8 @@ BinDistDirs = includes compiler docs driver libraries rts utils BIN_DIST_NAME=ghc-$(ProjectVersion) BIN_DIST_TMPDIR=$(FPTOOLS_TOP_ABS) +BIN_DIST_TARBALL=ghc-$(ProjectVersion)-$(TARGETPLATFORM).tar.bz2 + BIN_DIST_TOP= distrib/Makefile-bin.in \ distrib/configure-bin.ac \ distrib/INSTALL \ @@ -359,22 +374,18 @@ binary-dist:: done endif -# -# Do this separately for now -# -binary-pack:: - ( cd $(BIN_DIST_TMPDIR); $(TAR) chzf $(BIN_DIST_NAME).tar.gz $(BIN_DIST_NAME) ) - -ifneq "$(way)" "" -.PHONY: package-way-dist -package-way-dist:: - ( cd $(BIN_DIST_TMPDIR); $(FIND) $(BIN_DIST_NAME)/ \( -name "*$(_way).a" -o -name "*.$(way_)hi" \) -print | xargs tar cvf $(BIN_DIST_TMPDIR)/ghc-$(ProjectVersion)-$(way)-$(TARGETPLATFORM).tar ) - gzip $(BIN_DIST_TMPDIR)/ghc-$(ProjectVersion)-$(way)-$(TARGETPLATFORM).tar -endif +# Tar up the distribution and build a manifest +binary-dist :: + ( cd $(BIN_DIST_TMPDIR); tar cf - $(BIN_DIST_NAME) | bzip2 >$(BIN_DIST_TARBALL) ) + ( cd $(BIN_DIST_TMPDIR); bunzip2 -c $(BIN_DIST_TARBALL) | tar tf - | sed "s/^ghc-$(ProjectVersion)/fptools/" | sort >bin-manifest-$(ProjectVersion) ) -ifneq "$(way)" "" -remove-way-dist:: - ( cd $(BIN_DIST_TMPDIR); $(FIND) $(BIN_DIST_NAME)/ \( -name "*$(_way).a" -o -name "*.$(way_)hi" \) -print -exec $(RM) {} \; ) +# Upload the distribution +ifneq "$(PublishLocation)" "" +binary-dist :: + @for i in 0 1 2 3 4 5 6 7 8 9; do \ + echo "Try $$i: $(PublishCp) $(SRC_DIST_EXTRALIBS_TARBALL) $(PublishLocation)"; \ + if $(PublishCp) $(SRC_DIST_EXTRALIBS_TARBALL) $(PublishLocation); then break; fi\ + done endif binary-dist:: @@ -402,44 +413,59 @@ SRC_DIST_DIR=$(shell pwd)/$(SRC_DIST_NAME) # # Files to include in source distributions # -SRC_DIST_DIRS += docs distrib $(filter-out docs distrib,$(SUBDIRS)) +SRC_DIST_DIRS += mk docs distrib $(filter-out docs distrib,$(SUBDIRS)) SRC_DIST_FILES += \ configure.ac config.guess config.sub configure \ aclocal.m4 README ANNOUNCE HACKING LICENSE Makefile install-sh \ - ghc.spec.in mk/bootstrap.mk \ - mk/boilerplate.mk mk/config.h.in mk/config.mk.in mk/opts.mk \ - mk/paths.mk mk/package.mk mk/suffix.mk mk/target.mk \ - mk/fptools.css mk/fix_install_names.sh - -# clean the tree first, leaving certain extra files in place (eg. configure) -dist :: distclean + ghc.spec.in -dist :: - -rm -rf $(SRC_DIST_DIR) - -$(RM) $(SRC_DIST_NAME).tar.gz - mkdir $(SRC_DIST_DIR) - mkdir $(SRC_DIST_DIR)/mk - $(FIND) $(SRC_DIST_DIRS) -type d \( -name _darcs -prune -o -name SRC -prune -o -name "autom4te*" -prune -o -print \) | sed -e 's!.*!mkdir "$(SRC_DIST_DIR)/&"!' | sh - $(FIND) $(SRC_DIST_DIRS) $(SRC_DIST_FILES) -name _darcs -prune -o -name SRC -prune -o -name "autom4te*" -prune -o -name "*~" -prune -o -name ".cvsignore" -prune -o -name "\#*" -prune -o -name ".\#*" -prune -o -name "log" -prune -o -name "*-SAVE" -prune -o -name "*.orig" -prune -o -name "*.rej" -prune -o ! -type d -print | sed -e 's!.*!$(LN_S) "$(FPTOOLS_TOP_ABS)/&" "$(SRC_DIST_DIR)/&"!' | sh - -# Automatic generation of a MANIFEST file for a source distribution -# tree that is ready to go. -dist-manifest :: - cd $(SRC_DIST_DIR); $(FIND) . \( -type l -o -type f \) -exec ls -lLG {} \; | sed -e 's/\.\///' > MANIFEST - -dist-package :: dist-package-tar-gz +# ----------------------------------------------------------------------------- +# Source distributions -SRC_DIST_PATHS = $(patsubst %, $(SRC_DIST_NAME)/%, $(SRC_DIST_FILES) $(SRC_DIST_DIRS)) +# A source dist is built from a complete build tree, because we +# require some extra files not contained in a darcs checkout: the +# output from Happy and Alex, for example. +# +# The steps performed by 'make dist' are as follows: +# - create a complete link-tree of the current build tree in /tmp +# - run 'make distclean' on that tree +# - remove a bunch of other files that we know shouldn't be in the dist +# - tar up first the extralibs package, then the main source package -dist-package-tar-bz2 :: - BZIP2=-9 $(TAR) chjf $(SRC_DIST_NAME)-src.tar.bz2 $(SRC_DIST_NAME) || $(RM) $(SRC_DIST_NAME)-src.tar.bz2 +EXTRA_LIBS=$(patsubst %, $(SRC_DIST_NAME)/libraries/%, $(shell cat libraries/extra-packages)) -dist-package-tar-gz :: - $(TAR) chzf $(SRC_DIST_NAME)-src.tar.gz $(SRC_DIST_NAME) || $(RM) $(SRC_DIST_NAME)-src.tar.gz +SRC_DIST_TARBALL = ghc-$(ProjectVersion)-src.tar.bz2 +SRC_DIST_EXTRALIBS_TARBALL = ghc-$(ProjectVersion)-src-extralibs.tar.bz2 -dist-package-zip :: - cd ..; $(LN_S) $(FPTOOLS_TOP_ABS) $(SRC_DIST_NAME) && \ - $(ZIP) $(ZIP_OPTS) -r $(SRC_DIST_NAME)-src.zip $(SRC_DIST_PATHS) +dist :: + $(RM) -rf $(SRC_DIST_DIR) + $(RM) $(SRC_DIST_NAME).tar.gz + mkdir $(SRC_DIST_DIR) + ( cd $(SRC_DIST_DIR) \ + && for i in $(SRC_DIST_DIRS); do mkdir $$i; (cd $$i && lndir $(FPTOOLS_TOP_ABS)/$$i ); done \ + && for i in $(SRC_DIST_FILES); do $(LN_S) $(FPTOOLS_TOP_ABS)/$$i .; done \ + && $(MAKE) distclean \ + && $(RM) -rf compiler/stage[123] mk/build.mk \ + && $(FIND) $(SRC_DIST_DIRS) \( -name _darcs -o -name SRC -o -name "autom4te*" -o -name "*~" -o -name ".cvsignore" -o -name "\#*" -o -name ".\#*" -o -name "log" -o -name "*-SAVE" -o -name "*.orig" -o -name "*.rej" \) -print | xargs $(RM) -rf \ + ) + tar chf - $(EXTRA_LIBS) | bzip2 >$(FPTOOLS_TOP_ABS)/$(SRC_DIST_EXTRALIBS_TARBALL) + $(RM) -rf $(EXTRA_LIBS) + tar chf - $(SRC_DIST_NAME) 2>$src_log | bzip2 >$(FPTOOLS_TOP_ABS)/$(SRC_DIST_TARBALL) + +# Upload the distribution(s) +# Retrying is to work around buggy firewalls that corrupt large file transfers +# over SSH. +ifneq "$(PublishLocation)" "" +dist :: + @for i in 0 1 2 3 4 5 6 7 8 9; do \ + echo "Try $$i: $(PublishCp) $(SRC_DIST_EXTRALIBS_TARBALL) $(PublishLocation)"; \ + if $(PublishCp) $(SRC_DIST_EXTRALIBS_TARBALL) $(PublishLocation); then break; fi\ + done + @for i in 0 1 2 3 4 5 6 7 8 9; do \ + echo "Try $$i: $(PublishCp) $(SRC_DIST_TARBALL) $(PublishLocation)"; \ + if $(PublishCp) $(SRC_DIST_TARBALL) $(PublishLocation); then break; fi\ + done +endif # ----------------------------------------------------------------------------- # HC file bundles