define set_default
# $1 = variable to set
# $2 = default value to use, if configure didn't expand it
-# If $1 starts with an @ then configure didn't set it,
-# so set it to a sensible value
+# If $1 starts with an @ then configure didn't set it (because a version
+# of autoconf that is too old was used), so set it to a sensible value
ifneq "$$(filter @%,$$($1))" ""
$1 = $2
endif
includedir = @includedir@
mandir = @mandir@
-# New autoconf (>= 2.60?) make a configure with --docdir=DIR etc flags.
-# However, in order to support older autoconf's we don't use them.
-
docdir = @docdir@
$(eval $(call set_default,docdir,$${datarootdir}/doc/ghc))
pdfdir = $(docdir)
psdir = $(docdir)
-topdir = $(libdir)
+ghclibdir = $(libdir)
+ghcdocdir = $(datarootdir)/doc
else
# where package.conf is, so we just set it globally).
#
ghclibdir = $(libdir)/ghc-$(ProjectVersion)
-ghclibexecdir = $(ghclibdir)
-topdir = $(ghclibdir)
ghcdocdir = $(datarootdir)/doc/ghc
endif
+ghclibexecdir = $(ghclibdir)
+topdir = $(ghclibdir)
ghcheaderdir = $(ghclibdir)/include
#-----------------------------------------------------------------------------
# Invocations of `install' for the four different classes
# of targets:
#
-CREATE_SCRIPT = create () { touch $$1 && chmod 755 $$1 ; } && create
-CREATE_DATA = create () { touch $$1 && chmod 644 $$1 ; } && create
-INSTALL_PROGRAM = $(INSTALL) -m 755
-INSTALL_SCRIPT = $(INSTALL) -m 755
-INSTALL_SHLIB = $(INSTALL) -m 755
-INSTALL_DATA = $(INSTALL) -m 644
-INSTALL_HEADER = $(INSTALL) -m 644
-INSTALL_MAN = $(INSTALL) -m 644
-INSTALL_DOC = $(INSTALL) -m 644
-INSTALL_DIR = $(INSTALL) -m 755 -d
+CREATE_SCRIPT = create () { touch "$$1" && chmod 755 "$$1" ; } && create
+CREATE_DATA = create () { touch "$$1" && chmod 644 "$$1" ; } && create
+# These takes 3 arguments:
+# $1 = flags
+# $2 = files
+# $3 = dest
+INSTALL_PROGRAM = $(INSTALL) -m 755 $1 $2 $(call MK_INSTALL_DEST,$3)
+INSTALL_SCRIPT = $(INSTALL) -m 755 $1 $2 $(call MK_INSTALL_DEST,$3)
+INSTALL_SHLIB = $(INSTALL) -m 755 $1 $2 $(call MK_INSTALL_DEST,$3)
+INSTALL_DATA = $(INSTALL) -m 644 $1 $2 $(call MK_INSTALL_DEST,$3)
+INSTALL_HEADER = $(INSTALL) -m 644 $1 $2 $(call MK_INSTALL_DEST,$3)
+INSTALL_MAN = $(INSTALL) -m 644 $1 $2 $(call MK_INSTALL_DEST,$3)
+INSTALL_DOC = $(INSTALL) -m 644 $1 $2 $(call MK_INSTALL_DEST,$3)
+# Only 1 argument, the directory to create:
+INSTALL_DIR = $(INSTALL) -m 755 -d $(call MK_INSTALL_DEST,$1)
+
+# cygwin's /bin/install doesn't set file modes correctly if the
+# destination path is a C: style path:
+#
+# $ /bin/install -c -m 644 foo /cygdrive/c/cygwin/home/ian/foo2
+# $ /bin/install -c -m 644 foo c:/cygwin/home/ian/foo3
+# $ ls -l foo*
+# -rw-r--r-- 1 ian None 0 2011-01-06 18:28 foo
+# -rw-r--r-- 1 ian None 0 2011-01-06 18:29 foo2
+# -rwxrwxrwx 1 ian None 0 2011-01-06 18:29 foo3
+#
+# This causes problems for bindisttest/checkBinaries.sh which then
+# thinks that e.g. the userguide HTML files are binaries.
+#
+# We therefore use a /cygdrive path if we are on cygwin (only)
+# (This will make a Cygwin build run slowly
+# because of all those shell invocations.)
+ifeq "$(OSTYPE)" "cygwin"
+MK_INSTALL_DEST = $$(cygpath $1)
+else
+MK_INSTALL_DEST = $1
+endif
#
# runhaskell and hsc2hs are special, in that other compilers besides
# NB. we use negative tests here because for binary-distributions we cannot
# test build-time variables at install-time, so they must default to on.
+ifneq "$(DESTDIR)" ""
+override DESTDIR := $(abspath $(DESTDIR))
+endif
+