Fix #11723 and #11724.
[ghc.git] / mk / install.mk.in
index 2d45807..aa3afea 100644 (file)
-#-----------------------------------------------------------------------------
-# $Id: install.mk.in,v 1.2 1996/11/21 16:50:34 simonm Exp $
-
-AT_GLASGOW     = @AT_GLASGOW@
-prefix         = @prefix@
-exec_prefix    = @exec_prefix@
+#                                                               -*-makefile-*-
+# @configure_input@
+#
+################################################################################
+#
+# install.mk.in
+#
+# This file sets up the installation directories.
+#
+# DO NOT EDIT THIS FILE!
+#
+#      - install.mk is auto-generated from install.mk.in by configure.
+#        If you edit install.mk your changes will be spammed.
+#
+#      - Settings in this file may be overriden by giving replacement
+#        definitions in build.mk.
+
+# 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
+# set them. Note that we have to be careful, because the GNU coding standards
+# have changed a bit over the course of time, and autoconf development reflects
+# this.
+#
+# A little bit of history regarding autoconf and GNU coding standards, use this
+# as a cheat-sheet for the stuff below:
+#
+# variable    | default < 2.60     | default >= 2.60
+# ------------+--------------------+--------------------------------------
+# exec_prefix | ${prefix}          | ${prefix}
+# libdir      | ${exec_prefix}/lib | ${exec_prefix}/lib
+# datarootdir | NONE!              | ${prefix}/share
+# datadir     | ${prefix}/share    | ${datarootdir}
+# infodir     | ${prefix}/info     | ${datarootdir}/info
+# mandir      | ${prefix}/man      | ${datarootdir}/man
+# docdir      | NONE!              | ${datarootdir}/doc/${PACKAGE_TARNAME}
+# htmldir     | NONE!              | ${docdir}
+# dvidir      | NONE!              | ${docdir}
+# pdfdir      | NONE!              | ${docdir}
+# psdir       | NONE!              | ${docdir}
+#
+# NOTE: The default e.g. ${docdir} above means that autoconf substitutes the
+# string "${docdir}", not the value of docdir! This is crucial for the GNU
+# coding standards. See Trac #1924.
+
+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 (because a version
+# of autoconf that is too old was used), so set it to a sensible value
+ifneq "$$(filter @%,$$($1))" ""
+$1 = $2
+endif
+endef
+
+prefix          = @prefix@
+
+datarootdir = @datarootdir@
+$(eval $(call set_default,datarootdir,$${prefix}/share))
+
+exec_prefix     = @exec_prefix@
+bindir          = @bindir@
+datadir         = @datadir@
+libdir          = @libdir@
+includedir      = @includedir@
+mandir          = @mandir@
+
+# Note that `./configure --docdir=/foo/bar` should work.
+docdir = @docdir@
+PACKAGE_TARNAME = ghc-${ProjectVersion}
+$(eval $(call set_default,docdir,$${datarootdir}/doc/$${PACKAGE_TARNAME}))
+
+htmldir = @htmldir@
+dvidir  = @dvidir@
+pdfdir  = @pdfdir@
+psdir   = @psdir@
+$(eval $(call set_default,htmldir,$${docdir}))
+$(eval $(call set_default,dvidir,$${docdir}))
+$(eval $(call set_default,pdfdir,$${docdir}))
+$(eval $(call set_default,psdir,$${docdir}))
+
+ifeq "$(RelocatableBuild)" "YES"
+
+# Hack: our directory layouts tend to be different on Windows, so
+# hack around configure's bogus assumptions here.
+datarootdir = $(prefix)
+datadir     = $(prefix)/lib
+libdir      = $(prefix)/lib
+
+docdir    = $(prefix)/doc
+htmldir   = $(docdir)
+dvidir    = $(docdir)
+pdfdir    = $(docdir)
+psdir     = $(docdir)
+
+ghclibdir = $(libdir)
 
-ifeq ($(AT_GLASGOW), 1)
-INSTBINDIR     = $(exec_prefix)/bin/`/usr/local/gnu/bin/hw_os`
 else
-INSTBINDIR     = $(exec_prefix)/bin
+
+# Unix: override libdir and datadir to put ghc-specific stuff in
+# a subdirectory with the version number included.
+ghclibdir     = $(libdir)/$(CrossCompilePrefix)ghc-$(ProjectVersion)
 endif
 
-INSTSCRIPTDIR  = $(exec_prefix)/bin
-INSTLIBDIR     = $(prefix)/lib/$(HOSTPLATFORM)
-INSTDATADIR    = $(prefix)/lib
+ghclibexecdir = $(ghclibdir)
+topdir        = $(ghclibdir)
+ghcheaderdir  = $(ghclibdir)/include
 
 #-----------------------------------------------------------------------------
-# Man pages & Documentation
-
-# top of manual page tree to install in
-# NB: not necessarily the same place as to look for man pages (?)
-INSTMANROOT    = $(prefix)
-
-# prefix for man page _sources_ (vs .../cat)
-INSTMANSRCROOT         = $(INSTMANROOT)/man
-
-# man pages for commands
-INSTCOMMANDIR  = $(INSTMANSRCROOT)$(COMMANSUFFIX)
-
-# man pages for library routines
-INSTLIBMANDIR  = $(INSTMANSRCROOT)$(LIBMANSUFFIX)
-
-# man pages for system commands
-INSTSYSMANDIR  = $(INSTMANSRCROOT)$(SYSMANSUFFIX)
+# install configuration
 
-# suffix for installing commands'/etcs' man pages
-COMMANSUFFIX   = 1
-LIBMANSUFFIX   = 3
-SYSMANSUFFIX   = 8
-
-ifeq ($(AT_GLASGOW), 1)
-INSTINFODIR    = /local/doc/info
-else
-INSTINFODIR    = $(prefix)/info
-endif
+#
+# Set this to have files installed with a specific owner
+#
+INSTALL_OWNER =
 
-#-----------------------------------------------------------------------------
-# How to install things
+# 
+# Set this to have files installed with a specific group
+#
+INSTALL_GROUP =
 
-# this stuff about "who" does the installing doesn't have make vars
-# as it is not intended to be runtime-changeable.
 #
-ifdef OWNER
-INSTOWNER      = -o $(OWNER)
-else
-INSTOWNER      =
-endif
+# 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
+
+# runhaskell and hsc2hs are special, in that other compilers besides
+# GHC might provide them.  Systems with a package manager often come
+# with tools to manage this kind of clash, e.g. RPM's
+# update-alternatives.  When building a distribution for such a system,
+# we recommend setting both of the following to 'YES'.
+#
+# NO_INSTALL_RUNHASKELL = YES
+# NO_INSTALL_HSC2HS     = YES
+#
+# 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.
 
-ifdef GROUP
-INSTGROUP      = -g $(GROUP)
-else
-INSTGROUP      =
+ifneq "$(DESTDIR)" ""
+override DESTDIR := $(abspath $(DESTDIR))
 endif
 
-INSTFILEFLAGS  =
-INSTSTRIP      =
-INSTBINFLAGS   = \
-       -m 0755 $(INSTOWNER) $(INSTGROUP) $(INSTFILEFLAGS) $(INSTSTRIP)
-
-
-#      No strip flags on rest of these -- avoids message from install
-#      about stripping non-binaries.
-
-GENINSTALLFLAGS = $(INSTOWNER) $(INSTGROUP) $(INSTFILEFLAGS)
-
-INSTSCRIPTFLAGS        = -m 0755 $(GENINSTALLFLAGS)
-INSTLIBFLAGS           = -m 0644 $(GENINSTALLFLAGS)
-INSTDATALIBFLAGS       = -m 0644 $(GENINSTALLFLAGS)
-INSTINCFLAGS           = -m 0644 $(GENINSTALLFLAGS)
-INSTDATAFLAGS          = -m 0644 $(GENINSTALLFLAGS)
-INSTMANFLAGS           = -m 0644 $(GENINSTALLFLAGS)
-INSTRANLIBFLAGS        =