From 2de31b61d0a963803eb5632c9659c6093d74f345 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Sun, 10 Aug 2008 00:50:16 +0000 Subject: [PATCH] bindists are now some way towards working --- Makefile | 163 +++++++++++++++++++------------------ compiler/Makefile | 6 +- docs/Makefile | 15 ++-- docs/docbook-cheat-sheet/Makefile | 3 + docs/ext-core/Makefile | 3 + docs/man/Makefile | 8 +- docs/storage-mgt/Makefile | 3 + docs/users_guide/Makefile | 3 + driver/Makefile | 6 +- driver/ghc/Makefile | 4 +- driver/ghci/Makefile | 4 +- driver/mangler/Makefile | 6 +- driver/split/Makefile | 6 +- gmp/Makefile | 22 ++--- includes/Makefile | 6 +- libraries/Makefile | 29 ++----- libraries/Makefile.local | 3 + mk/cabal.mk | 3 +- mk/config.mk.in | 9 +- mk/install.mk | 17 ---- rts/Makefile | 15 ++-- utils/Makefile | 15 ++-- utils/genapply/Makefile | 3 + utils/genprimopcode/Makefile | 3 + utils/hp2ps/Makefile | 6 +- utils/mkdependC/Makefile | 3 + utils/mkdirhier/Makefile | 6 +- utils/parallel/Makefile | 10 +-- utils/runstdtest/Makefile | 3 + utils/unlit/Makefile | 6 +- 30 files changed, 181 insertions(+), 208 deletions(-) diff --git a/Makefile b/Makefile index edad014..1f9b653 100644 --- a/Makefile +++ b/Makefile @@ -307,90 +307,99 @@ binary-dist:: else -BinDistDirs = includes compiler docs rts - -BIN_DIST_TOP= distrib/Makefile \ - distrib/configure-bin.ac \ - distrib/INSTALL \ - distrib/README \ - ANNOUNCE \ - LICENSE \ - install-sh \ - extra-gcc-opts.in \ - config.guess \ - config.sub \ - aclocal.m4 +.PHONY: binary-dist -ifeq "$(darwin_TARGET_OS)" "1" -BIN_DIST_TOP+=mk/fix_install_names.sh -endif - -.PHONY: binary-dist-pre% binary-dist - -binary-dist:: binary-dist-pre - -binary-dist-pre:: - $(MKDIRHIER) $(BIN_DIST_DIR)/mk - echo 'include $$(TOP)/Makefile-vars' > $(BIN_DIST_DIR)/mk/boilerplate.mk - echo 'include $$(TOP)/mk/package.mk' > $(BIN_DIST_DIR)/mk/target.mk - echo 'include $$(TOP)/mk/install.mk' >> $(BIN_DIST_DIR)/mk/target.mk - echo 'include $$(TOP)/mk/recurse.mk' >> $(BIN_DIST_DIR)/mk/target.mk - cp mk/package.mk $(BIN_DIST_DIR)/mk/ - cp mk/install.mk $(BIN_DIST_DIR)/mk/ - cp mk/recurse.mk $(BIN_DIST_DIR)/mk/ - cp mk/fptools.css $(BIN_DIST_DIR)/mk/ - $(MKDIRHIER) $(BIN_DIST_DIR)/lib/$(TARGETPLATFORM) - $(MKDIRHIER) $(BIN_DIST_DIR)/share +BIN_DIST_VARFILE=$(BIN_DIST_PREP)/Makefile-vars.in -binary-dist:: - $(MAKE) -C gmp binary-dist DOING_BIN_DIST=YES - $(MAKE) -C includes binary-dist DOING_BIN_DIST=YES - $(MAKE) -C compiler binary-dist DOING_BIN_DIST=YES $(INSTALL_STAGE) - $(MAKE) -C rts binary-dist DOING_BIN_DIST=YES - $(MAKE) -C driver binary-dist DOING_BIN_DIST=YES - $(MAKE) -C utils binary-dist DOING_BIN_DIST=YES - $(MAKE) -C docs binary-dist DOING_BIN_DIST=YES - $(MAKE) -C libraries binary-dist DOING_BIN_DIST=YES - $(MAKE) -C libraries/Cabal/doc binary-dist DOING_BIN_DIST=YES - -VARFILE=$(BIN_DIST_DIR)/Makefile-vars.in +WHERE_AM_I = $(BIN_DIST_NAME) binary-dist:: - @for i in $(BIN_DIST_TOP); do \ - if test -f "$$i"; then \ - echo cp $$i $(BIN_DIST_DIR); \ - cp $$i $(BIN_DIST_DIR); \ - fi; \ - done; - @echo "Configuring the Makefile for this project..." - echo > $(VARFILE) - echo "package = ghc" >> $(VARFILE) - echo "version = $(ProjectVersion)" >> $(VARFILE) - echo "ProjectVersion = $(ProjectVersion)" >> $(VARFILE) - echo "HaveLibGmp = $(HaveLibGmp)" >> $(VARFILE) - echo "GhcLibsWithUnix = $(GhcLibsWithUnix)" >> $(VARFILE) - echo "GhcWithInterpreter = $(GhcWithInterpreter)" >> $(VARFILE) - echo "GhcHasEditline = $(GhcHasEditline)" >> $(VARFILE) - echo "BootingFromHc = $(BootingFromHc)" >> $(VARFILE) - echo "XMLDocWays = $(XMLDocWays)" >> $(VARFILE) - # We won't actually use xsltproc, but we need to know if it's "" or not - echo "XSLTPROC = $(XSLTPROC)" >> $(VARFILE) - echo "TARGETPLATFORM = $(TARGETPLATFORM)" >> $(VARFILE) - echo "HADDOCK_DOCS = $(HADDOCK_DOCS)" >> $(VARFILE) - - cat distrib/Makefile-bin-vars.in >> $(VARFILE) - @echo "Generating a shippable configure script.." - $(MV) $(BIN_DIST_DIR)/configure-bin.ac $(BIN_DIST_DIR)/configure.ac - ( cd $(BIN_DIST_DIR); autoreconf ) +# For the most part we will be putting filenames in $(BIN_DIST_LIST), +# and telling tar to tar all of those files up. So to start with we +# remove $(BIN_DIST_LIST) so that we can start with an empty slate + $(RM) -f $(BIN_DIST_LIST) +# Now we add a few files from mk/ to $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/mk/package.mk >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/mk/install.mk >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/mk/recurse.mk >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/mk/cabal.mk >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/mk/cabal-flags.mk >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/mk/fptools.css >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/ANNOUNCE >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/LICENSE >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/install-sh >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/extra-gcc-opts.in >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/config.guess >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/config.sub >> $(BIN_DIST_LIST) +# Now we recurse into various subdirectories and tell them to add and +# files that they want into $(BIN_DIST_LIST) +# XXX Ug, this duplication of "-C foo WHERE_AM_I=.../foo" isn't nice. + $(MAKE) -C gmp binary-dist WHERE_AM_I=$(WHERE_AM_I)/gmp + $(MAKE) -C includes binary-dist WHERE_AM_I=$(WHERE_AM_I)/includes + $(MAKE) -C compiler binary-dist WHERE_AM_I=$(WHERE_AM_I)/compiler $(INSTALL_STAGE) + $(MAKE) -C rts binary-dist WHERE_AM_I=$(WHERE_AM_I)/rts + $(MAKE) -C driver binary-dist WHERE_AM_I=$(WHERE_AM_I)/driver + $(MAKE) -C utils binary-dist WHERE_AM_I=$(WHERE_AM_I)/utils + $(MAKE) -C docs binary-dist WHERE_AM_I=$(WHERE_AM_I)/docs + $(MAKE) -C libraries binary-dist WHERE_AM_I=$(WHERE_AM_I)/libraries + $(MAKE) -C libraries/Cabal/doc binary-dist WHERE_AM_I=$(WHERE_AM_I)/libraries/Cabal/doc +# Now thinks get messier. Some files we need to move around, rename or +# generate. We do this under $(BIN_DIST_PREP). + $(RM) -rf $(BIN_DIST_PREP_DIR) + $(MKDIRHIER) $(BIN_DIST_PREP)/utils/pwd + cp utils/pwd/dist-install/build/pwd/pwd $(BIN_DIST_PREP)/utils/pwd + $(MKDIRHIER) $(BIN_DIST_PREP)/mk + echo 'include $$(TOP)/Makefile-vars' > $(BIN_DIST_PREP)/mk/boilerplate.mk + echo 'include $$(TOP)/mk/package.mk' > $(BIN_DIST_PREP)/mk/target.mk + echo 'include $$(TOP)/mk/install.mk' >> $(BIN_DIST_PREP)/mk/target.mk + echo 'include $$(TOP)/mk/recurse.mk' >> $(BIN_DIST_PREP)/mk/target.mk + touch $(BIN_DIST_PREP)/mk/bindist.mk +ifeq "$(darwin_TARGET_OS)" "1" + cp mk/fix_install_names.sh $(BIN_DIST_PREP)/mk endif -# Tar up the distribution and build a manifest -binary-dist :: tar-binary-dist + cp distrib/Makefile $(BIN_DIST_PREP) + cp distrib/INSTALL $(BIN_DIST_PREP) + cp distrib/README $(BIN_DIST_PREP) + cp distrib/configure-bin.ac $(BIN_DIST_PREP)/configure.ac +# We can't just list aclocal.m4 in $(BIN_DIST_LIST), as it needs to be +# next to configure.ac when we run autoreconf + cp aclocal.m4 $(BIN_DIST_PREP) + cd $(BIN_DIST_PREP) && autoreconf + + echo "package = ghc" >> $(BIN_DIST_VARFILE) + echo "version = $(ProjectVersion)" >> $(BIN_DIST_VARFILE) + echo "ProjectVersion = $(ProjectVersion)" >> $(BIN_DIST_VARFILE) + echo "HaveLibGmp = $(HaveLibGmp)" >> $(BIN_DIST_VARFILE) + echo "GhcLibsWithUnix = $(GhcLibsWithUnix)" >> $(BIN_DIST_VARFILE) + echo "GhcWithInterpreter = $(GhcWithInterpreter)" >> $(BIN_DIST_VARFILE) + echo "GhcHasEditline = $(GhcHasEditline)" >> $(BIN_DIST_VARFILE) + echo "BootingFromHc = $(BootingFromHc)" >> $(BIN_DIST_VARFILE) + echo "XMLDocWays = $(XMLDocWays)" >> $(BIN_DIST_VARFILE) +# We won't actually use xsltproc, but we need to know if it's "" or not + echo "XSLTPROC = $(XSLTPROC)" >> $(BIN_DIST_VARFILE) + echo "TARGETPLATFORM = $(TARGETPLATFORM)" >> $(BIN_DIST_VARFILE) + echo "HADDOCK_DOCS = $(HADDOCK_DOCS)" >> $(BIN_DIST_VARFILE) + cat distrib/Makefile-bin-vars.in >> $(BIN_DIST_VARFILE) + +# With that done, we can now build the actual tarball + + $(RM) -f $(BIN_DIST_NAME) + ln -s . $(BIN_DIST_NAME) + tar cf $(BIN_DIST_TAR) -T $(BIN_DIST_LIST) + cd $(BIN_DIST_PREP_DIR) && tar rf $(BIN_DIST_TAR) $(BIN_DIST_NAME) + bzip2 < $(BIN_DIST_TAR) > $(BIN_DIST_TAR_BZ2) + tar tf $(BIN_DIST_TAR) | sort > bin-manifest-$(ProjectVersion) +endif -.PHONY: tar-binary-dist -tar-binary-dist: - ( cd $(BIN_DIST_TOPDIR_ABS); tar cf - $(BIN_DIST_NAME) | bzip2 >$(BIN_DIST_TARBALL) ) - ( cd $(BIN_DIST_TOPDIR_ABS); bunzip2 -c $(BIN_DIST_TARBALL) | tar tf - | sed "s/^ghc-$(ProjectVersion)/fptools/" | sort >$(FPTOOLS_TOP_ABS)/bin-manifest-$(ProjectVersion) ) +# XXX Presumably we still need to do this for Windows? +## Tar up the distribution and build a manifest +#binary-dist :: tar-binary-dist +# +#.PHONY: tar-binary-dist +#tar-binary-dist: +# ( cd $(BIN_DIST_TOPDIR_ABS); tar cf - $(BIN_DIST_NAME) | bzip2 >$(BIN_DIST_TARBALL) ) +# ( cd $(BIN_DIST_TOPDIR_ABS); bunzip2 -c $(BIN_DIST_TARBALL) | tar tf - | sed "s/^ghc-$(ProjectVersion)/fptools/" | sort >$(FPTOOLS_TOP_ABS)/bin-manifest-$(ProjectVersion) ) PUBLISH_FILES = $(BIN_DIST_TARBALL) diff --git a/compiler/Makefile b/compiler/Makefile index 5598be6..1dbb2d3 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -435,10 +435,14 @@ primop-primop-info.hs-incl: prelude/primops.txt primop-usage.hs-incl: prelude/primops.txt $(GENPRIMOP) --usage < $< > $@ -# XXX: #----------------------------------------------------------------------------- # binary-dist # + +# XXX This is just broken, currently +binary-dist: + @: + #binary-dist: # $(INSTALL_DIR) $(BIN_DIST_DIR)/compiler # $(INSTALL_DIR) $(BIN_DIST_DIR)/compiler/stage$(stage) diff --git a/docs/Makefile b/docs/Makefile index fc60173..9b51adb 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -6,21 +6,20 @@ ifneq "$(DOING_BIN_DIST)" "YES" SUBDIRS += ext-core storage-mgt endif -PAGES = index.html +PAGE = index.html -install-docs :: $(PAGES) - $(INSTALL_DIR) $(DESTDIR)$(htmldir) - $(INSTALL_DATA) $(INSTALL_OPTS) $(PAGES) $(DESTDIR)$(htmldir) +install-docs :: $(PAGE) + $(INSTALL_DIR) $(DESTDIR)$(htmldir) + $(INSTALL_DATA) $(INSTALL_OPTS) $(PAGE) $(DESTDIR)$(htmldir) .PHONY: binary-dist binary-dist.doc.% binary-dist: $(foreach SUBDIR,$(SUBDIRS),binary-dist.doc.$(SUBDIR)) - $(MKDIRHIER) $(BIN_DIST_DIR)/docs - cp Makefile $(BIN_DIST_DIR)/docs/ - cp $(PAGES) $(BIN_DIST_DIR)/docs/ + echo $(WHERE_AM_I)/Makefile >> $(BIN_DIST_LIST) + echo $(WHERE_AM_I)/$(PAGE) >> $(BIN_DIST_LIST) $(foreach SUBDIR,$(SUBDIRS),binary-dist.doc.$(SUBDIR)): \ binary-dist.doc.%: - $(MAKE) -C $* binary-dist + $(MAKE) -C $* binary-dist WHERE_AM_I=$(WHERE_AM_I)/$* include $(TOP)/mk/target.mk diff --git a/docs/docbook-cheat-sheet/Makefile b/docs/docbook-cheat-sheet/Makefile index 95896d1..14e0c3c 100644 --- a/docs/docbook-cheat-sheet/Makefile +++ b/docs/docbook-cheat-sheet/Makefile @@ -4,4 +4,7 @@ include $(TOP)/mk/boilerplate.mk XML_DOC = docbook-cheat-sheet INSTALL_XML_DOC = docbook-cheat-sheet +binary-dist: + @: + include $(TOP)/mk/target.mk diff --git a/docs/ext-core/Makefile b/docs/ext-core/Makefile index 561b71b..10f3183 100644 --- a/docs/ext-core/Makefile +++ b/docs/ext-core/Makefile @@ -28,6 +28,9 @@ distclean: clean maintainer-clean: distclean +binary-dist: + @: + # dummy targets all: boot: diff --git a/docs/man/Makefile b/docs/man/Makefile index 7fa112d..71644ca 100644 --- a/docs/man/Makefile +++ b/docs/man/Makefile @@ -45,11 +45,7 @@ install-docs:: $(MAN_PAGE).$(MAN_SECTION) endif -binary-dist:: $(MAN_PAGE).$(MAN_SECTION) - $(MKDIRHIER) $(BIN_DIST_DIR)/docs/man - cp Makefile $(BIN_DIST_DIR)/docs/man/ -ifneq "$(strip $(XSLTPROC))" "" - cp $(MAN_PAGE).$(MAN_SECTION) $(BIN_DIST_DIR)/docs/man/ -endif +BINDIST_EXTRAS += $(MAN_PAGE).$(MAN_SECTION) +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk diff --git a/docs/storage-mgt/Makefile b/docs/storage-mgt/Makefile index 871766d..9ef54ad 100644 --- a/docs/storage-mgt/Makefile +++ b/docs/storage-mgt/Makefile @@ -25,6 +25,9 @@ distclean: clean maintainer-clean: distclean +binary-dist: + @: + # dummy targets all: boot: diff --git a/docs/users_guide/Makefile b/docs/users_guide/Makefile index f0a31fb..1a370d5 100644 --- a/docs/users_guide/Makefile +++ b/docs/users_guide/Makefile @@ -4,4 +4,7 @@ include $(TOP)/mk/boilerplate.mk XML_DOC = users_guide INSTALL_XML_DOC = users_guide +binary-dist: + @: + include $(TOP)/mk/target.mk diff --git a/driver/Makefile b/driver/Makefile index e81b1ea..5825356 100644 --- a/driver/Makefile +++ b/driver/Makefile @@ -28,9 +28,7 @@ INSTALL_DATAS += package.conf ghc-usage.txt ghci-usage.txt CLEAN_FILES += package.conf* stamp-pkg-conf* binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/driver - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/driver - $(INSTALL_DATA) $(INSTALL_DATAS) $(BIN_DIST_DIR)/driver - set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d binary-dist; done + for FILE in Makefile $(INSTALL_DATAS); do echo $(WHERE_AM_I)/$$FILE >> $(BIN_DIST_LIST); done + set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d binary-dist WHERE_AM_I=$(WHERE_AM_I)/$$d; done include $(TOP)/mk/target.mk diff --git a/driver/ghc/Makefile b/driver/ghc/Makefile index 66a8d2b..fc9bb4a 100644 --- a/driver/ghc/Makefile +++ b/driver/ghc/Makefile @@ -23,8 +23,6 @@ endif # ----------------------------------------------------------------------------- -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/driver/ghc - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/driver/ghc/ +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk diff --git a/driver/ghci/Makefile b/driver/ghci/Makefile index 2c118fa..94fe452 100644 --- a/driver/ghci/Makefile +++ b/driver/ghci/Makefile @@ -53,8 +53,6 @@ ghci.res : ghci.rc ghci.ico windres --preprocessor="$(CPP) -xc -DRC_INVOKED" -o ghci.res -i ghci.rc -O coff endif -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/driver/ghci - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/driver/ghci/ +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk diff --git a/driver/mangler/Makefile b/driver/mangler/Makefile index dfc7c39..1242d6c 100644 --- a/driver/mangler/Makefile +++ b/driver/mangler/Makefile @@ -20,9 +20,7 @@ ifeq "$(BootingFromHc)" "YES" boot :: all endif -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/driver/mangler - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/driver/mangler/ - $(INSTALL_SCRIPT) $(PROG) $(BIN_DIST_DIR)/driver/mangler/ +BINDIST_EXTRAS += $(PROG) +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk diff --git a/driver/split/Makefile b/driver/split/Makefile index cce7618..404cb97 100644 --- a/driver/split/Makefile +++ b/driver/split/Makefile @@ -15,9 +15,7 @@ all:: $(PROG).prl INSTALL_LIBEXEC_SCRIPTS += $(PROG) CLEAN_FILES += $(PROG) $(PROG).prl -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/driver/split - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/driver/split/ - $(INSTALL_SCRIPT) $(PROG) $(BIN_DIST_DIR)/driver/split/ +BINDIST_EXTRAS += $(PROG) +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk diff --git a/gmp/Makefile b/gmp/Makefile index f194f66..2a9fdcf 100644 --- a/gmp/Makefile +++ b/gmp/Makefile @@ -114,21 +114,9 @@ endif include $(TOP)/mk/target.mk -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/gmp - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/gmp/ -ifneq "$(HaveLibGmp)" "YES" - ifneq "$(HaveFrameworkGMP)" "YES" - $(INSTALL_DATA) $(BINDIST_STAMPS) $(BIN_DIST_DIR)/gmp/ - ifneq "$(INSTALL_PROGS)" "" - $(INSTALL_DATA) $(INSTALL_PROGS) $(BIN_DIST_DIR)/gmp/ - endif - ifneq "$(INSTALL_LIBS)" "" - $(INSTALL_DATA) $(INSTALL_LIBS) $(BIN_DIST_DIR)/gmp/ - endif - ifneq "$(INSTALL_HEADERS)" "" - $(INSTALL_HEADER) $(INSTALL_HEADERS) $(BIN_DIST_DIR)/gmp/ - endif - endif -endif +BINDIST_EXTRAS += $(BINDIST_STAMPS) +BINDIST_EXTRAS += $(INSTALL_PROGS) +BINDIST_EXTRAS += $(INSTALL_LIBS) +BINDIST_EXTRAS += $(INSTALL_HEADERS) +include $(TOP)/mk/bindist.mk diff --git a/includes/Makefile b/includes/Makefile index bebe2eb..bacf4bd 100644 --- a/includes/Makefile +++ b/includes/Makefile @@ -177,10 +177,8 @@ endif # INSTALL_HEADERS += $(H_FILES) $(H_CONFIG) $(H_PLATFORM) -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/includes - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/includes/ - $(INSTALL_DATA) $(INSTALL_HEADERS) $(BIN_DIST_DIR)/includes/ +BINDIST_EXTRAS += $(INSTALL_HEADERS) +include $(TOP)/mk/bindist.mk # # `make clean' settings: diff --git a/libraries/Makefile b/libraries/Makefile index 5c5d192..6cc349b 100644 --- a/libraries/Makefile +++ b/libraries/Makefile @@ -371,33 +371,20 @@ install.library.%: ifBuildable/ifBuildable BIN_DIST_LIBDIR=$(BIN_DIST_DIR)/libraries -binary-dist: $(foreach SUBDIR,$(SUBDIRS),binary-dist.library.$(SUBDIR)) - mkdir $(BIN_DIST_LIBDIR)/ifBuildable - cp ifBuildable/ifBuildable $(BIN_DIST_LIBDIR)/ifBuildable - cp Makefile $(BIN_DIST_LIBDIR) +BINDIST_EXTRAS += ifBuildable/ifBuildable ifeq "$(HADDOCK_DOCS)" "YES" - cp gen_contents_index $(BIN_DIST_LIBDIR) - cp index.html $(BIN_DIST_LIBDIR) - cp doc-index*.html $(BIN_DIST_LIBDIR) +BINDIST_EXTRAS += gen_contents_index +BINDIST_EXTRAS += index.html +BINDIST_EXTRAS += doc-index*.html endif - cp -pR stamp $(BIN_DIST_LIBDIR) +binary-dist: $(foreach SUBDIR,$(SUBDIRS),binary-dist.library.$(SUBDIR)) +# This is a bit of a hack, but it works... + echo $(WHERE_AM_I)/Makefile >> $(BIN_DIST_LIST) $(foreach SUBDIR,$(SUBDIRS),binary-dist.library.$(SUBDIR)): \ binary-dist.library.%: if $(IFBUILDABLE) $*; then \ - $(MKDIRHIER) $(BIN_DIST_LIBDIR)/$*; \ - cd $* && \ - cp $*.cabal $(BIN_DIST_LIBDIR)/$* && \ - cp LICENSE $(BIN_DIST_LIBDIR)/$* && \ - cp -R dist $(BIN_DIST_LIBDIR)/$* && \ - $(FIND) . -name "*.buildinfo" -exec cp {} $(BIN_DIST_LIBDIR)/$* \; && \ - $(FIND) . -name unbuildable -exec cp {} $(BIN_DIST_LIBDIR)/$* \; && \ - (cp -RL include $(BIN_DIST_LIBDIR)/$* || true) && \ - $(FIND) $(BIN_DIST_LIBDIR)/$*/dist \ - \( -name "*_split" -o -name "autogen" \) | xargs rm -rf && \ - $(FIND) $(BIN_DIST_LIBDIR)/$*/dist \ - \( \( -name "*.o" -o -name "*.p_o" \) -a ! -name "HS*" \) \ - -exec rm {} \; ; \ + $(MAKE) -C $* -f Makefile.local binary-dist BINDIST_EXTRAS="$*.cabal LICENSE $*.buildinfo unbuildable" WHERE_AM_I=$(WHERE_AM_I)/$*; \ fi # Ignore some doc targets that we don't support diff --git a/libraries/Makefile.local b/libraries/Makefile.local index 7ca6115..0caadcf 100644 --- a/libraries/Makefile.local +++ b/libraries/Makefile.local @@ -33,3 +33,6 @@ endif # Now add flags from the GHC build system to the Cabal build: GHC_OPTS += $(SRC_HC_OPTS) GHC_OPTS += $(GhcLibHcOpts) + +include $(TOP)/mk/bindist.mk + diff --git a/mk/cabal.mk b/mk/cabal.mk index 98b985b..1ae6cba 100644 --- a/mk/cabal.mk +++ b/mk/cabal.mk @@ -1,5 +1,6 @@ include $(TOP)/mk/cabal-flags.mk +include $(TOP)/mk/bindist.mk # XXX We would like to turn this on, but Cabal generates paths files # that are not -Wall clean! @@ -60,5 +61,3 @@ ifneq "$(EXTRA_CLEAN)" "" $(RM) -f $(EXTRA_CLEAN) endif -# XXX fix binary-dist - diff --git a/mk/config.mk.in b/mk/config.mk.in index 839fe29..3812475 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -535,10 +535,15 @@ endif # On Windows this is a c:/foo/bar style path. FPTOOLS_TOP_ABS = @hardtop@ -BIN_DIST_NAME=ghc-$(ProjectVersion) BIN_DIST_TOPDIR_ABS=$(FPTOOLS_TOP_ABS) BIN_DIST_DIR=$(BIN_DIST_TOPDIR_ABS)/$(BIN_DIST_NAME) -BIN_DIST_TARBALL=$(FPTOOLS_TOP_ABS)/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.bz2 + +BIN_DIST_NAME=ghc-$(ProjectVersion) +BIN_DIST_TAR=$(FPTOOLS_TOP_ABS)/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar +BIN_DIST_TAR_BZ2=$(BIN_DIST_TAR).bz2 +BIN_DIST_PREP_DIR=$(FPTOOLS_TOP_ABS)/bindist-prep +BIN_DIST_PREP=$(BIN_DIST_PREP_DIR)/$(BIN_DIST_NAME) +BIN_DIST_LIST=$(FPTOOLS_TOP_ABS)/bindist-list # Definition of installation directories, we don't use half of these, but since # the configure script has them on offer while passing through, we might as well diff --git a/mk/install.mk b/mk/install.mk index dd8dfc4..41b312c 100644 --- a/mk/install.mk +++ b/mk/install.mk @@ -270,10 +270,6 @@ ifeq "$(DOC_SUBDIR)" "" DOC_SUBDIR=docs/$(XML_DOC) endif -binary-dist:: - $(MKDIRHIER) $(BIN_DIST_DIR)/$(DOC_SUBDIR) - $(CP) Makefile $(BIN_DIST_DIR)/$(DOC_SUBDIR) - ifneq "$(XMLDocWays)" "" # TODO: The following could be an entry for an Obfuscated Makefile Contest... install-docs:: $(foreach i,$(XMLDocWays),$(INSTALL_XML_DOC)$(patsubst %.html-no-chunks,%.html,$(patsubst %.html,%/index.html,.$(i)))) @@ -293,19 +289,6 @@ install-docs-html-no-chunks: install-docs-%: $(INSTALL_DIR) $(DESTDIR)$($*dir) $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_XML_DOC).$* $(DESTDIR)$($*dir) - -binary-dist:: $(foreach i,$(XMLDocWays),$(INSTALL_XML_DOC)$(patsubst %.html-no-chunks,%.html,$(patsubst %.html,%/index.html,.$(i)))) - -binary-dist:: $(foreach i,$(XMLDocWays),binary-dist-docs-$i) - -binary-dist-docs-html: - $(CP) -r $(INSTALL_XML_DOC) $(BIN_DIST_DIR)/$(DOC_SUBDIR) - -binary-dist-docs-html-no-chunks: - $(CP) $(INSTALL_XML_DOC).html $(BIN_DIST_DIR)/$(DOC_SUBDIR)/ - -binary-dist-docs-%: - $(CP) $(INSTALL_XML_DOC).$* $(BIN_DIST_DIR)/$(DOC_SUBDIR)/ endif endif diff --git a/rts/Makefile b/rts/Makefile index 8ca69ef..09f5766 100644 --- a/rts/Makefile +++ b/rts/Makefile @@ -468,13 +468,8 @@ endif # # binary-dist -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/rts - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/rts/ - $(INSTALL_DATA) package.conf.in $(BIN_DIST_DIR)/rts/ -ifneq "$(INSTALL_LIBS)" "" - $(INSTALL_DATA) $(INSTALL_LIBS) $(BIN_DIST_DIR)/rts/ -endif -ifneq "$(INSTALL_LIBEXECS)" "" - $(INSTALL_PROGRAM) $(INSTALL_LIBEXECS) $(BIN_DIST_DIR)/rts/ -endif +BINDIST_EXTRAS += package.conf.in +BINDIST_EXTRAS += $(INSTALL_LIBS) +BINDIST_EXTRAS += $(INSTALL_LIBEXECS) +include $(TOP)/mk/bindist.mk + diff --git a/utils/Makefile b/utils/Makefile index a6d39cc..6dc6838 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -42,11 +42,6 @@ endif # unlikely to want it desperately. It is easy to build once you have # a Haskell compiler and if you want it. -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/utils - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/utils/ - set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d binary-dist; done - include $(TOP)/mk/target.mk # genprimopcode is needed to boot in ghc/compiler... @@ -57,7 +52,7 @@ endif WITH_BOOTSTRAPPING_COMPILER = installPackage ghc-pkg hsc2hs hpc -WITH_STAGE1 = installPackage ghc-pkg hasktags runghc hpc +WITH_STAGE1 = installPackage ghc-pkg hasktags runghc hpc pwd ifneq "$(NO_INSTALL_HSC2HS)" "YES" WITH_STAGE1 += hsc2hs endif @@ -65,6 +60,10 @@ endif # sort removes duplicates - we don't actually care about the order WITH_EITHER = $(sort $(WITH_BOOTSTRAPPING_COMPILER) $(WITH_STAGE1)) +binary-dist: $(foreach P,$(WITH_STAGE1),binary-dist.$P) + echo $(WHERE_AM_I)/Makefile >> $(BIN_DIST_LIST) + set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d binary-dist WHERE_AM_I=$(WHERE_AM_I)/$$d; done + clean distclean:: $(foreach P,$(WITH_EITHER),clean.$P) with-bootstrapping-compiler: \ @@ -90,3 +89,7 @@ $(foreach P,$(WITH_STAGE1),install.$P): \ install.%: $(MAKE) -C $* install +$(foreach P,$(WITH_STAGE1),binary-dist.$P): \ +binary-dist.%: + $(MAKE) -C $* binary-dist WHERE_AM_I=$(WHERE_AM_I)/$* + diff --git a/utils/genapply/Makefile b/utils/genapply/Makefile index 64489db..a017547 100644 --- a/utils/genapply/Makefile +++ b/utils/genapply/Makefile @@ -27,4 +27,7 @@ GenApply.o : $(GHC_INCLUDE_DIR)/ghcconfig.h GenApply.o : $(GHC_INCLUDE_DIR)/MachRegs.h GenApply.o : $(GHC_INCLUDE_DIR)/Constants.h +binary-dist: + @: + include $(TOP)/mk/target.mk diff --git a/utils/genprimopcode/Makefile b/utils/genprimopcode/Makefile index 20c409a..ed011eb 100644 --- a/utils/genprimopcode/Makefile +++ b/utils/genprimopcode/Makefile @@ -3,5 +3,8 @@ include $(TOP)/mk/boilerplate.mk HS_PROG = genprimopcode +binary-dist: + @: + include $(TOP)/mk/target.mk diff --git a/utils/hp2ps/Makefile b/utils/hp2ps/Makefile index 09c193f..93aa856 100644 --- a/utils/hp2ps/Makefile +++ b/utils/hp2ps/Makefile @@ -14,9 +14,7 @@ LIBS = $(LIBM) CLEAN_FILES += $(C_OBJS) $(C_PROG) -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/utils/hp2ps - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/utils/hp2ps/ - $(INSTALL_PROGRAM) $(C_PROG) $(BIN_DIST_DIR)/utils/hp2ps/ +BINDIST_EXTRAS += $(C_PROG) +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk diff --git a/utils/mkdependC/Makefile b/utils/mkdependC/Makefile index 9c00c09..432c898 100644 --- a/utils/mkdependC/Makefile +++ b/utils/mkdependC/Makefile @@ -18,4 +18,7 @@ all:: cat $(PROG).prl >> $(PROG) $(EXECUTABLE_FILE) $(PROG) +binary-dist: + @: + include $(TOP)/mk/target.mk diff --git a/utils/mkdirhier/Makefile b/utils/mkdirhier/Makefile index 9dbbb9b..0e32bbb 100644 --- a/utils/mkdirhier/Makefile +++ b/utils/mkdirhier/Makefile @@ -11,9 +11,7 @@ all:: cat $(PROG).sh >> $(PROG) $(EXECUTABLE_FILE) $(PROG) -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/utils/mkdirhier - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/utils/mkdirhier/ - $(INSTALL_SCRIPT) $(PROG) $(BIN_DIST_DIR)/utils/mkdirhier/ +BINDIST_EXTRAS += $(PROG) +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk diff --git a/utils/parallel/Makefile b/utils/parallel/Makefile index 78bf6f0..50909c6 100644 --- a/utils/parallel/Makefile +++ b/utils/parallel/Makefile @@ -48,12 +48,8 @@ $(BASH_INSTALLERS): install.bash.%: cat $*.bash >> $(bindir)/$* $(EXECUTABLE_FILE) $(bindir)/$* -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/utils/parallel - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/utils/parallel/ -ifeq "$(INSTALL_PARALLEL_SCRIPTS)" "YES" - $(INSTALL_DATA) $(addsuffix .pl,$(PERL_PROGS)) $(BIN_DIST_DIR)/utils/parallel/ - $(INSTALL_DATA) $(addsuffix .bash,$(BASH_PROGS)) $(BIN_DIST_DIR)/utils/parallel/ -endif +BINDIST_EXTRAS += $(addsuffix .pl,$(PERL_PROGS)) +BINDIST_EXTRAS += $(addsuffix .bash,$(BASH_PROGS)) +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk diff --git a/utils/runstdtest/Makefile b/utils/runstdtest/Makefile index 5003bf7..e9cb751 100644 --- a/utils/runstdtest/Makefile +++ b/utils/runstdtest/Makefile @@ -12,4 +12,7 @@ all:: cat $(PROG).prl >> $(PROG) $(EXECUTABLE_FILE) $(PROG) +binary-dist: + @: + include $(TOP)/mk/target.mk diff --git a/utils/unlit/Makefile b/utils/unlit/Makefile index 6323129..1723a08 100644 --- a/utils/unlit/Makefile +++ b/utils/unlit/Makefile @@ -19,9 +19,7 @@ boot :: all # INSTALL_LIBEXECS += $(C_PROG) -binary-dist: - $(INSTALL_DIR) $(BIN_DIST_DIR)/utils/unlit - $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/utils/unlit/ - $(INSTALL_PROGRAM) $(C_PROG) $(BIN_DIST_DIR)/utils/unlit/ +BINDIST_EXTRAS += $(C_PROG) +include $(TOP)/mk/bindist.mk include $(TOP)/mk/target.mk -- 1.7.10.4