summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorManuel M T Chakravarty <chak@cse.unsw.edu.au>2008-02-02 13:48:53 +0000
committerManuel M T Chakravarty <chak@cse.unsw.edu.au>2008-02-02 13:48:53 +0000
commitc222ce6d2dcde7dcef36d95fc225fd65d56bdb63 (patch)
tree0ac88fe88507f94689997a51b2894bcdfbe99b56 /Makefile
parent937eb1f1386f12c729c6d819417fe81bc4786b9f (diff)
downloadhaskell-c222ce6d2dcde7dcef36d95fc225fd65d56bdb63.tar.gz
First stab at an installer package for the Mac
- GHC as a Mac framework - I tried to make a package where the user could choose whether to install in /Library/Frameworks or ~/Library/Frameworks (to allow installation for non-admins). However, that doesn't work well without including the whole distribution twice as the decision as to whether the admin password needs to be entered is made at packaging time (not at install time).
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile45
1 files changed, 40 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 6643151861..527707148a 100644
--- a/Makefile
+++ b/Makefile
@@ -227,7 +227,7 @@ install-docs ::
# -----------------------------------------------------------------------------
# Making a binary distribution
#
-# `dist' `binary-dist'
+# `dist' `binary-dist' `binary-dist-macos'
# 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
@@ -244,12 +244,14 @@ install-docs ::
# 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
+# 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::
-rm -rf $(BIN_DIST_DIR)
- -$(RM) $(BIN_DIST_DIR).tar.gz
+ -$(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
@@ -299,7 +301,7 @@ ifeq "$(darwin_TARGET_OS)" "1"
BIN_DIST_TOP+=mk/fix_install_names.sh
endif
-.PHONY: binary-dist-pre% binary-dist binary-pack
+.PHONY: binary-dist-pre% binary-dist binary-dist-macos
binary-dist:: binary-dist-pre
@@ -365,7 +367,7 @@ 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 >bin-manifest-$(ProjectVersion) )
+ ( 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)
@@ -417,6 +419,39 @@ publish-binary-dist ::
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.
+
+# The ProjectVersionInt is GHC's idea of an API version and hence determines
+# the framework version.
+FRAMEWORK_VERSION = $(ProjectVersionInt)
+
+# 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)
+
+# The user-visible CFBundleShortVersionString is set to the standard GHC
+# version number.
+SHORT_VERSION_STRING = $(ProjectVersion)
+
+# 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!!! )
+
+endif
+
# -----------------------------------------------------------------------------
# Building source distributions
#