# binary-dist
# Builds a binary distribution
#
+# framework-pkg [MacOS only]
+# Builds /Library/Frameworks/GHC.framework wrapped into a Mac
+# installer package
+#
+# framework-binary-dist [MacOS only]
+# Builds GHC.framework encapsulating a binary distribution
+# (to give a relocatable framework)
+#
# hc-file-bundle
# Builds an HC-file bundle, for bootstrapping
#
# We can't 'make boot' in libraries until stage1 is built
ifeq "$(BootingFromHc)" "YES"
-SUBDIRS_BUILD = gmp includes rts compat compiler docs utils driver
+SUBDIRS_BUILD = includes compiler docs utils driver
else
-SUBDIRS_BUILD = gmp includes compat utils driver docs compiler rts libraries/Cabal/doc
+SUBDIRS_BUILD = includes utils driver docs compiler libraries/Cabal/doc
endif
-SUBDIRS = gmp includes compat utils driver docs rts libraries compiler libraries/Cabal/doc
+SUBDIRS = gmp libffi includes utils driver docs rts compiler ghc libraries libraries/Cabal/doc
+
+check-all: check-tools check-packages
+
+check-tools:
+ @:
+ifeq "$(HADDOCK_DOCS)" "YES"
+ifeq "$(HADDOCK)" ""
+ echo "Couldn't find haddock" >&2
+ exit 1
+endif
+endif
# Sanity check that all the boot libraries are in the tree, to catch
# failure to run darcs-all.
endif
endif
-stage1 : $(GCC_LIB_DEP) check-packages
+stage1 : $(GCC_LIB_DEP) check-all
+ $(MAKE) -C libraries boot
+ $(MAKE) -C gmp all
+ $(MAKE) -C libffi all
$(MAKE) -C utils/mkdependC boot
+ $(MAKE) -C utils with-bootstrapping-compiler
@case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
for i in $(SUBDIRS_BUILD); do \
echo "------------------------------------------------------------------------"; \
$(MAKE) --no-print-directory -C $$i $(MFLAGS) all; \
if [ $$? -eq 0 -o $$x_on_err -eq 0 ] ; then true; else exit 1; fi; \
done
- $(MAKE) -C libraries boot
+ $(MAKE) -C ghc stage=1 boot
+ $(MAKE) -C ghc stage=1
+ $(MAKE) -C rts boot
+ $(MAKE) -C rts
$(MAKE) -C libraries all
-
-stage2 : check-packages
- $(MAKE) -C compiler boot stage=2
+ $(MAKE) -C utils with-stage-1
+
+# When making distributions (i.e., whether with binary-dist or using the
+# vanilla install target to create an installer package), we can have problems
+# if some things (e.g. ghc-pkg) are compiled with the bootstrapping compiler
+# and some (e.g. the stage 2 compiler) with the stage1 compiler. See #1860 for
+# an example. Thus, we explicitly build a second version with the stage 1
+# compiler of all utils that get installed and of all extra support binaries
+# includes in binary dists.
+stage2 : check-all
+ $(MAKE) -C compiler stage=2 boot
$(MAKE) -C compiler stage=2
+ $(MAKE) -C ghc stage=2 boot
+ $(MAKE) -C ghc stage=2
-stage3 : check-packages
- $(MAKE) -C compiler boot stage=3
+stage3 : check-all
+ $(MAKE) -C compiler stage=3 boot
$(MAKE) -C compiler stage=3
+ $(MAKE) -C ghc stage=3 boot
+ $(MAKE) -C ghc stage=3
bootstrap : bootstrap2
# -----------------------------------------------------------------------------
# Making a binary distribution
#
-# `dist' `binary-dist' `binary-dist-macos'
+# `dist' `binary-dist'
# Create a distribution tar file for this program. The tar file
# should be set up so that the file names in the tar file start with
# a subdirectory name which is the name of the package it is a
# that are in the distribution, to make sure they are up to date in
# the distribution. See Making Releases.
#
-# binary-dist is a GHC addition for binary distributions and
-# binary-dist-macos is the Mac OS X-specific variant creating an
-# installer package for GHC.framework.
+# binary-dist is a GHC addition for binary distributions
#
binary-dist::
-rm -rf $(BIN_DIST_DIR)
-$(RM) $(BIN_DIST_TARBALL)
-# When making bindists, we can have problems if some things (e.g. ghc-pkg)
-# are compiled with the bootstrapping compiler and some (e.g. the stage 2
-# compiler) with the stage1 compiler. See #1860 for an example.
-# Thus we rebuild the utils with stage 1 here. This is a bit unpleasant,
-# as binary-dist really shouldn't actually build anything, but it works.
-# We need to do the same for utilities used during library package installation.
-binary-dist::
- $(MAKE) -C utils clean
- $(MAKE) -C utils UseStage1=YES boot
- $(MAKE) -C utils UseStage1=YES
- $(RM) -f libraries/ifBuildable/ifBuildable
- $(MAKE) -C libraries UseStage1=YES ifBuildable/ifBuildable
- $(RM) -f libraries/installPackage/installPackage
- $(MAKE) -C libraries UseStage1=YES installPackage/installPackage
-
ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
binary-dist::
BIN_DIST_TOP+=mk/fix_install_names.sh
endif
-.PHONY: binary-dist-pre% binary-dist binary-dist-macos
+.PHONY: binary-dist-pre% binary-dist
binary-dist:: binary-dist-pre
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
- echo '' > $(BIN_DIST_DIR)/mk/compat.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/
echo "HaveLibGmp = $(HaveLibGmp)" >> $(VARFILE)
echo "GhcLibsWithUnix = $(GhcLibsWithUnix)" >> $(VARFILE)
echo "GhcWithInterpreter = $(GhcWithInterpreter)" >> $(VARFILE)
- echo "GhcHasReadline = $(GhcHasReadline)" >> $(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
binary-dist::
@echo "Mechanical and super-natty! Inspect the result and *if* happy; freeze, sell and get some sleep!"
-ifeq "$(darwin_TARGET_OS)" "1"
-
-# Wrap a binary dist as a MacOS framework and put it into an installer package.
+# -----------------------------------------------------------------------------
+# Building MacOS installer packages
+#
+# 'framework-pkg'
+# Create an installer package for /Library/Frameworks/GHC.framework
+#
+# 'framework-binary-dist'
+# Create an installer package for GHC.framework encapsulating a
+# binary-dist to make it relocatable
+# FIXME: This is only partially implemented so far
-# The ProjectVersionInt is GHC's idea of an API version and hence determines
-# the framework version.
-FRAMEWORK_VERSION = $(ProjectVersionInt)
+ifeq "$(darwin_TARGET_OS)" "1"
-# Xcode requires CURRENT_PROJECT_VERSION to be an int or float. We use this
-# only as the build version (aka CFBundleVersion).
-CURRENT_PROJECT_VERSION = $(ProjectVersionInt).$(ProjectPatchLevel)
+.PHONY: framework-pkg, framework-binary-dist
-# The user-visible CFBundleShortVersionString is set to the standard GHC
-# version number.
-SHORT_VERSION_STRING = $(ProjectVersion)
+framework-pkg:
+ $(MAKE) -C distrib/MacOS framework-pkg
-# Instead of making 'binary-dist' a Makefile dependency, we let xcodebuild call
-# 'make binary-dist'. This has the advantage that xcode knows the framework
-# path into which the distribution should be installed and can instruct
-# binary-dist to put it into the right place without copying the whole tree yet
-# another time.
-#
-binary-dist-macos:
- (cd distrib/MacOS; \
- xcodebuild CURRENT_PROJECT_VERSION=$(CURRENT_PROJECT_VERSION)\
- SHORT_VERSION_STRING=$(SHORT_VERSION_STRING)\
- FRAMEWORK_VERSION=$(FRAMEWORK_VERSION)\
- CURRENT_LIBRARY_VERSION=$(FRAMEWORK_VERSION))
- (cd distrib/MacOS; \
- !!!Call the packager!!! )
+framework-binary-dist:
+ $(MAKE) -C distrib/MacOS framework-binary-dist
endif
SRC_DIST_FILES += \
configure.ac config.guess config.sub configure \
aclocal.m4 README ANNOUNCE HACKING LICENSE Makefile install-sh \
- ghc.spec.in extra-gcc-opts.in VERSION boot
+ ghc.spec.in ghc.spec extra-gcc-opts.in VERSION boot
# -----------------------------------------------------------------------------
# Source distributions
$(LN_S) . ghc-$(ProjectVersion)
$(FIND) ghc-$(ProjectVersion)/compiler \
ghc-$(ProjectVersion)/utils \
- ghc-$(ProjectVersion)/compat \
ghc-$(ProjectVersion)/libraries -follow \
\( -name "*.hc" -o -name "*_hsc.[ch]" -o -name "*_stub.[ch]" \) -print > hc-files-to-go
for f in `$(FIND) ghc-$(ProjectVersion)/compiler ghc-$(ProjectVersion)/utils ghc-$(ProjectVersion)/libraries -name "*.hsc" -follow -print` ""; do \
CLEAN_FILES += hc-files-to-go *-hc.tar.gz
DIST_CLEAN_FILES += config.cache config.status mk/config.h mk/stamp-h \
- ghc.spec docs/users_guide/ug-book.xml extra-gcc-opts
+ docs/users_guide/ug-book.xml extra-gcc-opts
# don't clean config.mk: it's needed when cleaning stuff later on
LATE_DIST_CLEAN_FILES += mk/config.mk