Make our install variables etc compliant with GNU standards; fixes #1924
authorIan Lynagh <igloo@earth.li>
Fri, 14 Aug 2009 22:45:49 +0000 (22:45 +0000)
committerIan Lynagh <igloo@earth.li>
Fri, 14 Aug 2009 22:45:49 +0000 (22:45 +0000)
16 files changed:
configure.ac
distrib/Makefile-bin-vars.in
distrib/configure-bin.ac
ghc.mk
ghc/ghc.wrapper
mk/config.mk.in
mk/install.mk.in [new file with mode: 0644]
mk/tree.mk
rts/ghc.mk
rules/build-perl.mk
rules/build-prog.mk
rules/manual-package-config.mk
rules/shell-wrapper.mk
utils/ghc-pkg/ghc-pkg.wrapper
utils/touchy/ghc.mk
utils/unlit/ghc.mk

index dcea6e1..44db95e 100644 (file)
@@ -870,7 +870,7 @@ if grep '   ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
 fi
 
-AC_CONFIG_FILES([mk/config.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml distrib/ghc.iss])
+AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml distrib/ghc.iss])
 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
 AC_OUTPUT
 
index d213498..0899369 100644 (file)
@@ -7,30 +7,7 @@ FPTOOLS_TOP_ABS  = @hardtop@
 # rather than ghc-pkg.exe.
 GHC_PKG_PROG = $(FPTOOLS_TOP_ABS)/utils/ghc-pkg/ghc-pkg.bin
 
-# Where the different pieces of the bundle should go:
-bindir      = @bindir@
-libdir      = @libdir@/$(package)-$(version)
-libexecdir  = $(libdir)
-datarootdir = @datarootdir@
-# datadir is set to libdir here as GHC needs package.conf and unlit
-# to be in the same place (and things like ghc-pkg need to agree on
-# where package.conf is, so we just set it globally).
-datadir     = $(libdir)
-
 platform    = @TargetPlatform@
-prefix      = @prefix@
-exec_prefix = @exec_prefix@
-
-mandir      = $(datarootdir)/man
-
-headerdir   = $(libdir)/include
-
-# default
-docdir      = @datadir@/doc/ghc
-htmldir     = $(docdir)
-psdir       = $(docdir)
-pdfdir      = $(docdir)
-
 
 PERL        = @PerlCmd@
 SH         = /bin/sh
@@ -56,36 +33,6 @@ CPP         = @CPP@
 
 RAWCPP_FLAGS            = -undef -traditional
 
-#----------end of user-serviceable parts------------
-#
-#
-# How to install the different pieces
-# 
-INSTALL_DIR     = $(bindist_abs_root)/utils/mkdirhier/mkdirhier
-INSTALL_BIN     = $(INSTALL) $(INSTALL_BIN_OPTS)
-INSTALL_LIB     = $(INSTALL) $(INSTALL_LIB_OPTS)
-INSTALL_DATA    = $(INSTALL) $(INSTALL_DATA_OPTS)
-INSTALL_SCRIPT  = $(INSTALL) $(INSTALL_SCRIPT_OPTS)
-INSTALL_PROGRAM = $(INSTALL) $(INSTALL_PROGRAM_OPTS)
-INSTALL_HEADER  = $(INSTALL) $(INSTALL_HEADER_OPTS)
-INSTALL_SHLIB   = $(INSTALL) $(INSTALL_SHLIB_OPTS)
-INSTALL_MAN     = $(INSTALL) $(INSTALL_MAN_OPTS)
-
-# What's common to all installs
-INSTALL_OPTS= $(EXTRA_INSTALL_OPTS)
-
-BIN_PERMS = 755
-LIB_PERMS = 644
-
-INSTALL_BIN_OPTS     = -m $(BIN_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_BIN_OPTS)
-INSTALL_LIB_OPTS     = -m $(LIB_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_LIB_OPTS)
-INSTALL_DATA_OPTS    = -m $(LIB_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_DATA_OPTS)
-INSTALL_SCRIPT_OPTS  = -m $(BIN_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_SCRIPT_OPTS)
-INSTALL_PROGRAM_OPTS = -m $(BIN_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_PROGRAM_OPTS)
-INSTALL_HEADER_OPTS  = -m $(LIB_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_HEADER_OPTS)
-INSTALL_SHLIB_OPTS   = -m $(BIN_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_SHLIB_OPTS)
-INSTALL_MAN_OPTS     = -m $(LIB_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_MAN_OPTS)
-
 EXECUTABLE_FILE = chmod $(BIN_PERMS)
 
 GHC_COMPAT_DIR=$(TOP)/mk
index 783c1f1..49f995c 100644 (file)
@@ -167,7 +167,7 @@ dnl ** Check gcc version and flags we need to pass it **
 FP_GCC_EXTRA_FLAGS
 
 #
-AC_CONFIG_FILES(extra-gcc-opts mk/config.mk)
+AC_CONFIG_FILES(extra-gcc-opts mk/config.mk mk/install.mk)
 AC_OUTPUT
 
 echo "****************************************************"
diff --git a/ghc.mk b/ghc.mk
index b33a6b9..56af0ee 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
@@ -697,52 +697,58 @@ libraries/ghc-prim/dist-install/build/autogen/GHC/PrimopWrappers.hs: \
 # Installation
 
 install: install_packages install_libs install_libexecs install_headers \
-         install_libexec_scripts install_bins install_docs
+         install_libexec_scripts install_bins install_docs install_topdirs
 
 install_bins: $(INSTALL_BINS)
        $(INSTALL_DIR) $(DESTDIR)$(bindir)
        for i in $(INSTALL_BINS); do \
                $(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(DESTDIR)$(bindir) ;  \
                 if test "$(darwin_TARGET_OS)" = "1"; then \
-                   sh mk/fix_install_names.sh $(libdir) $(DESTDIR)$(bindir)/$$i ; \
+                   sh mk/fix_install_names.sh $(ghclibdir) $(DESTDIR)$(bindir)/$$i ; \
                 fi ; \
        done
 
 install_libs: $(INSTALL_LIBS)
-       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(ghclibdir)
        for i in $(INSTALL_LIBS); do \
                case $$i in \
                  *.a) \
-                   $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir); \
-                   $(RANLIB) $(DESTDIR)$(libdir)/`basename $$i` ;; \
+                   $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir); \
+                   $(RANLIB) $(DESTDIR)$(ghclibdir)/`basename $$i` ;; \
                  *.dll) \
-                   $(INSTALL_DATA) -s $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir) ;; \
+                   $(INSTALL_DATA) -s $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir) ;; \
                  *.so) \
-                   $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir) ;; \
+                   $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir) ;; \
                  *.dylib) \
-                   $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir); \
-                   install_name_tool -id $(DESTDIR)$(libdir)/`basename $$i` $(DESTDIR)$(libdir)/`basename $$i` ;; \
+                   $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir); \
+                   install_name_tool -id $(DESTDIR)$(ghclibdir)/`basename $$i` $(DESTDIR)$(ghclibdir)/`basename $$i` ;; \
                  *) \
-                   $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir); \
+                   $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir); \
                esac; \
        done
 
 install_libexec_scripts: $(INSTALL_LIBEXEC_SCRIPTS)
-       $(INSTALL_DIR) $(DESTDIR)$(libexecdir)
+       $(INSTALL_DIR) $(DESTDIR)$(ghclibexecdir)
        for i in $(INSTALL_LIBEXEC_SCRIPTS); do \
-               $(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i $(DESTDIR)$(libexecdir); \
+               $(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibexecdir); \
        done
 
 install_libexecs:  $(INSTALL_LIBEXECS)
-       $(INSTALL_DIR) $(DESTDIR)$(libexecdir)
+       $(INSTALL_DIR) $(DESTDIR)$(ghclibexecdir)
        for i in $(INSTALL_LIBEXECS); do \
-               $(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(DESTDIR)$(libexecdir); \
+               $(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(DESTDIR)$(ghclibexecdir); \
+       done
+
+install_topdirs: $(INSTALL_TOPDIRS)
+       $(INSTALL_DIR) $(DESTDIR)$(topdir)
+       for i in $(INSTALL_TOPDIRS); do \
+               $(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(DESTDIR)$(topdir); \
        done
 
 install_headers: $(INSTALL_HEADERS)
-       $(INSTALL_DIR) $(DESTDIR)$(headerdir)
+       $(INSTALL_DIR) $(DESTDIR)$(ghcheaderdir)
        for i in $(INSTALL_HEADERS); do \
-               $(INSTALL_HEADER) $(INSTALL_OPTS) $$i $(DESTDIR)$(headerdir); \
+               $(INSTALL_HEADER) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghcheaderdir); \
        done
 
 install_docs: $(INSTALL_HEADERS)
@@ -760,19 +766,19 @@ install_docs: $(INSTALL_HEADERS)
                $(INSTALL_DOC) $(INSTALL_OPTS) $$i/* $(DESTDIR)$(docdir)/html/`basename $$i`; \
        done
 
-INSTALLED_PACKAGE_CONF=$(DESTDIR)$(libdir)/package.conf
+INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf
 
 # Install packages in the right order, so that ghc-pkg doesn't complain.
 # Also, install ghc-pkg first.
 ifeq "$(Windows)" "NO"
-INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(libexecdir)/ghc-pkg
+INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/ghc-pkg
 else
 INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
 endif
 
 install_packages: install_libexecs
 install_packages: libffi/package.conf.install rts/package.conf.install
-       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(topdir)
        "$(RM)" $(RM_OPTS) $(INSTALLED_PACKAGE_CONF)
        $(CREATE_DATA)     $(INSTALLED_PACKAGE_CONF)
        echo "[]"       >> $(INSTALLED_PACKAGE_CONF)
@@ -783,12 +789,12 @@ install_packages: libffi/package.conf.install rts/package.conf.install
                 $(INSTALLED_GHC_PKG_REAL) \
                 $(INSTALLED_PACKAGE_CONF) \
                 libraries/$p dist-install \
-                '$(DESTDIR)' '$(prefix)' '$(libdir)' '$(docdir)/html/libraries' &&) true
+                '$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries' &&) true
        "$(GHC_CABAL_INPLACE)" install \
                 $(INSTALLED_GHC_PKG_REAL) \
                 $(INSTALLED_PACKAGE_CONF) \
                 compiler stage2 \
-                '$(DESTDIR)' '$(prefix)' '$(libdir)' '$(docdir)/html/libraries'
+                '$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries'
 
 # -----------------------------------------------------------------------------
 # Binary distributions
@@ -810,6 +816,7 @@ $(eval $(call bindist,root1,\
     $(INSTALL_HEADERS) \
     $(INSTALL_LIBEXECS) \
     $(INSTALL_LIBEXEC_SCRIPTS) \
+    $(INSTALL_TOPDIRS) \
     $(INSTALL_BINS) \
     $(INSTALL_DOCS) \
     $(INSTALL_LIBRARY_DOCS) \
@@ -819,9 +826,10 @@ $(eval $(call bindist,root2,\
        docs/index.html \
        $(wildcard libraries/*/dist-install/doc/) \
     $(filter-out extra-gcc-opts,$(INSTALL_LIBS)) \
-    $(filter-out %/project.mk,$(filter-out mk/config.mk,$(MAKEFILE_LIST))) \
+    $(filter-out %/project.mk mk/config.mk %/mk/install.mk,$(MAKEFILE_LIST)) \
        mk/fix_install_names.sh \
        mk/project.mk \
+       mk/install.mk.in \
        bindist.mk \
        libraries/dph/LICENSE \
  ))
index 9b2ba0f..093d9af 100644 (file)
@@ -1 +1 @@
-exec $executablename -B$datadir ${1+"$@"}
+exec $executablename -B$topdir ${1+"$@"}
index e6140d2..b35b4b6 100644 (file)
@@ -12,9 +12,7 @@
 # DO NOT EDIT THIS FILE!
 #
 #      - config.mk is auto-generated from config.mk.in by configure.
-#        This may be triggered automatically by the build system (say
-#        if config.mk.in has changed more recently than config.mk),
-#        so if you edit config.mk your changes will be spammed.
+#        If you edit config.mk your changes will be spammed.
 #
 #      - Settings in this file may be overriden by giving replacement
 #        definitions in build.mk.  See build.mk.sample for a good
@@ -28,6 +26,7 @@
 TOP            = @hardtop@
 
 include $(TOP)/mk/project.mk
+include $(TOP)/mk/install.mk
 
 ################################################################################
 #
@@ -381,150 +380,6 @@ BIN_DIST_LIST=$(TOP)/bindist-list
 WINDOWS_INSTALLER_BASE = ghc-$(ProjectVersion)-i386-windows
 WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
 
-# 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.
-
-# This gets used in the default docdir when autoconf >= 2.60 is used
-PACKAGE_TARNAME := @PACKAGE_TARNAME@
-
-prefix          := @prefix@
-
-# New autoconf (>= 2.60?) make a configure with a --datarootdir=DIR flag.
-# However, in order to support older autoconf's we don't use it.
-# datarootdir is set lower down instead.
-# But, as datadir is defined in terms of datarootdir, we also need to
-# set it to the value (if any) that configure gives it here.
-datarootdir     := @datarootdir@
-
-exec_prefix     := @exec_prefix@
-bindir          := @bindir@
-datadir0        := @datadir@
-libdir0         := @libdir@
-includedir      := @includedir@
-mandir          := @mandir@
-dynlibdir       := @libdir@
-
-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)
-
-else
-
-# Unix: override libdir and datadir to put ghc-specific stuff in
-# a subdirectory with the version number included.
-#
-# datadir is set to libdir here as GHC needs package.conf and unlit
-# to be in the same place (and things like ghc-pkg need to agree on
-# where package.conf is, so we just set it globally).
-#
-datarootdir := $(datadir0)
-libdir      := $(libdir0)/ghc-$(ProjectVersion)
-datadir     := $(libdir)
-
-# 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@
-#htmldir   := @htmldir@
-#dvidir    := @dvidir@
-#pdfdir    := @pdfdir@
-#psdir     := @psdir@
-
-docdir    := $(datarootdir)/doc/ghc
-htmldir   := $(docdir)
-dvidir    := $(docdir)
-pdfdir    := $(docdir)
-psdir     := $(docdir)
-
-endif # Windows
-
-headerdir := $(libdir)/include
-
-# Default place for putting interface files is $(libdir)
-# (overriden for packages in package.mk)
-ifacedir               = $(libdir)
-
-# NOTE: by intention, libexecdir and libdir point to 
-# the same place.
-#  => Only way to override this is to set libexecdir= on the command line.
-#     (NOTE: configure script setting is ignored).
-libexecdir             = $(libdir)
-
-#-----------------------------------------------------------------------------
-# install configuration
-
-#
-# Set this to have files installed with a specific owner
-#
-INSTALL_OWNER =
-
-# 
-# Set this to have files installed with a specific group
-#
-INSTALL_GROUP =
-
-#
-# 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.
-
 # -----------------------------------------------------------------------------
 # Utilities programs: flags 
 
diff --git a/mk/install.mk.in b/mk/install.mk.in
new file mode 100644 (file)
index 0000000..75c2a32
--- /dev/null
@@ -0,0 +1,158 @@
+#                                                               -*-makefile-*-
+# @configure_input@
+#
+################################################################################
+#
+# dirs.mk.in
+#
+# This file sets up the installation directories.
+#
+# DO NOT EDIT THIS FILE!
+#
+#      - dirs.mk is auto-generated from dirs.mk.in by configure.
+#        If you edit dirs.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.
+
+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
+ifneq "$$(filter @%,$$($1))" ""
+$1 = $2
+endif
+endef
+
+# This gets used in the default docdir when autoconf >= 2.60 is used
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+
+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@
+
+# 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))
+
+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)
+
+topdir = $(libdir)
+
+else
+
+# Unix: override libdir and datadir to put ghc-specific stuff in
+# a subdirectory with the version number included.
+#
+# datadir is set to libdir here as GHC needs package.conf and unlit
+# to be in the same place (and things like ghc-pkg need to agree on
+# where package.conf is, so we just set it globally).
+#
+ghclibdir     = $(libdir)/ghc-$(ProjectVersion)
+ghclibexecdir = $(ghclibdir)
+topdir        = $(ghclibdir)
+ghcdocdir     = $(datarootdir)/doc/ghc
+endif
+
+ghcheaderdir  = $(ghclibdir)/include
+
+#-----------------------------------------------------------------------------
+# install configuration
+
+#
+# Set this to have files installed with a specific owner
+#
+INSTALL_OWNER =
+
+# 
+# Set this to have files installed with a specific group
+#
+INSTALL_GROUP =
+
+#
+# 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.
+
index d27e2a7..cd3988d 100644 (file)
@@ -41,10 +41,11 @@ GHC_MANGLER_DIR         = $(GHC_DRIVER_DIR)/mangler
 GHC_SPLIT_DIR           = $(GHC_DRIVER_DIR)/split
 GHC_SYSMAN_DIR          = $(GHC_RTS_DIR)/parallel
 
-INPLACE                        = inplace
-INPLACE_BIN            = $(INPLACE)/bin
-INPLACE_LIB            = $(INPLACE)/lib
-INPLACE_MINGW          = $(INPLACE)/mingw
+INPLACE                 = inplace
+INPLACE_BIN             = $(INPLACE)/bin
+INPLACE_LIB             = $(INPLACE)/lib
+INPLACE_TOPDIR          = $(INPLACE)/lib
+INPLACE_MINGW           = $(INPLACE)/mingw
 
 # These are here, rather than in config.mk, as they need to exist in an
 # unconfigured tree so that the various clean targets can be used
index e0ff690..69b03d1 100644 (file)
@@ -372,9 +372,9 @@ install : install_rts
 
 .PHONY: install_rts
 install_rts:
-       $(INSTALL_DIR) $(DESTDIR)$(libdir)
-       $(INSTALL_DIR) $(DESTDIR)$(libdir)/include
-       "$(CP)" $(ALL_RTS_LIBS) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(ghclibdir)
+       $(INSTALL_DIR) $(DESTDIR)$(ghclibdir)/include
+       "$(CP)" $(ALL_RTS_LIBS) $(DESTDIR)$(ghclibdir)
 
 # -----------------------------------------------------------------------------
 # cleaning
index 982a2b6..86f729f 100644 (file)
@@ -22,8 +22,8 @@ define build-perl
 # $1 = dir
 # $2 = distdir
 
-ifeq "$$($1_$2_LIBEXEC)" "YES"
-$1_$2_INPLACE = $(INPLACE_LIB)/$$($1_$2_PROG)
+ifeq "$$($1_$2_TOPDIR)" "YES"
+$1_$2_INPLACE = $(INPLACE_TOPDIR)/$$($1_$2_PROG)
 else
 $1_$2_INPLACE = $(INPLACE_BIN)/$$($1_$2_PROG)
 endif
index 6910e8f..3631a90 100644 (file)
@@ -126,8 +126,8 @@ else
 ifeq "$$($1_$2_SHELL_WRAPPER) $$(Windows)" "YES NO"
 $1_$2_INPLACE = $$(INPLACE_LIB)/$$($1_$2_PROG)
 else
-ifeq "$$($1_$2_LIBEXEC)" "YES"
-$1_$2_INPLACE = $$(INPLACE_LIB)/$$($1_$2_PROG)
+ifeq "$$($1_$2_TOPDIR)" "YES"
+$1_$2_INPLACE = $$(INPLACE_TOPDIR)/$$($1_$2_PROG)
 else
 $1_$2_INPLACE = $$(INPLACE_BIN)/$$($1_$2_PROG)
 endif
@@ -150,8 +150,8 @@ endif
 $(call shell-wrapper,$1,$2)
 
 ifeq "$$($1_$2_INSTALL)" "YES"
-ifeq "$$($1_$2_LIBEXEC)" "YES"
-INSTALL_LIBEXECS += $1/$2/build/tmp/$$($1_$2_PROG)
+ifeq "$$($1_$2_TOPDIR)" "YES"
+INSTALL_TOPDIRS += $1/$2/build/tmp/$$($1_$2_PROG)
 else
 INSTALL_BINS += $1/$2/build/tmp/$$($1_$2_PROG)
 endif
index da5cacf..5a24141 100644 (file)
@@ -29,8 +29,8 @@ $1/package.conf.inplace : $1/package.conf.in $(GHC_PKG_INPLACE)
 $1/package.conf.install:
        $$(CPP) $$(RAWCPP_FLAGS) -P \
                -DINSTALLING \
-               -DLIB_DIR='"$$(libdir)"' \
-               -DINCLUDE_DIR='"$$(libdir)/include"' \
+               -DLIB_DIR='"$$(ghclibdir)"' \
+               -DINCLUDE_DIR='"$$(ghclibdir)/include"' \
                $$($1_PACKAGE_CPP_OPTS) \
                -x c -I$$(GHC_INCLUDE_DIR) $1/package.conf.in | \
        grep -v '^#pragma GCC' | \
index 312504e..9535a7d 100644 (file)
@@ -38,6 +38,7 @@ $$(INPLACE_BIN)/$$($1_$2_PROG): $$($1_$2_INPLACE)
        echo 'executablename=$$(TOP)/$$<'              >> $$@
        echo 'datadir=$$(TOP)/$$(INPLACE_LIB)'         >> $$@
        echo 'bindir=$$(TOP)/$$(INPLACE_BIN)'          >> $$@
+       echo 'topdir=$$(TOP)/$$(INPLACE_TOPDIR)'       >> $$@
        cat $$($1_$2_SHELL_WRAPPER_NAME)               >> $$@
        $$(EXECUTABLE_FILE)                               $$@
 endif
@@ -58,14 +59,15 @@ install: install_$1_$2_wrapper
 install_$1_$2_wrapper: WRAPPER=$$(DESTDIR)$$(bindir)/$$($1_$2_INSTALL_SHELL_WRAPPER_NAME)
 install_$1_$2_wrapper:
        $$(INSTALL_DIR) $$(DESTDIR)$$(bindir)
-       "$$(RM)" $$(RM_OPTS)                           $$(WRAPPER)
-       $$(CREATE_SCRIPT)                              $$(WRAPPER)
-       echo '#!$$(SHELL)'                          >> $$(WRAPPER)
-       echo 'executablename=$$(libexecdir)/$$($1_$2_PROG)' >> $$(WRAPPER)
-       echo 'datadir=$$(datadir)'                  >> $$(WRAPPER)
-       echo 'bindir=$$(bindir)'                    >> $$(WRAPPER)
-       cat $$($1_$2_SHELL_WRAPPER_NAME)            >> $$(WRAPPER)
-       $$(EXECUTABLE_FILE)                            $$(WRAPPER)
+       "$$(RM)" $$(RM_OPTS)                                      $$(WRAPPER)
+       $$(CREATE_SCRIPT)                                         $$(WRAPPER)
+       echo '#!$$(SHELL)'                                     >> $$(WRAPPER)
+       echo 'executablename=$$(ghclibexecdir)/$$($1_$2_PROG)' >> $$(WRAPPER)
+       echo 'datadir=$$(datadir)'                             >> $$(WRAPPER)
+       echo 'bindir=$$(bindir)'                               >> $$(WRAPPER)
+       echo 'topdir=$$(topdir)'                               >> $$(WRAPPER)
+       cat $$($1_$2_SHELL_WRAPPER_NAME)                       >> $$(WRAPPER)
+       $$(EXECUTABLE_FILE)                                       $$(WRAPPER)
 
 endif # $1_$2_INSTALL_SHELL_WRAPPER
 
index 27b8ced..6d3c2af 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/sh
 
-PKGCONF=$datadir/package.conf
+PKGCONF=$topdir/package.conf
 exec $executablename --global-conf $PKGCONF ${1+"$@"}
 
index 3e5bb84..fc9c845 100644 (file)
@@ -12,6 +12,6 @@
 
 utils/touchy_dist_C_SRCS  = touchy.c
 utils/touchy_dist_PROG    = $(GHC_TOUCHY_PGM)
-utils/touchy_dist_LIBEXEC = YES
+utils/touchy_dist_TOPDIR  = YES
 utils/touchy_dist_INSTALL = YES
 $(eval $(call build-prog,utils/touchy,dist,0))
index 709291e..f46c3b3 100644 (file)
@@ -12,7 +12,7 @@
 
 utils/unlit_dist_C_SRCS  = unlit.c
 utils/unlit_dist_PROG    = $(GHC_UNLIT_PGM)
-utils/unlit_dist_LIBEXEC = YES
+utils/unlit_dist_TOPDIR  = YES
 utils/unlit_dist_INSTALL = YES
 
 $(eval $(call build-prog,utils/unlit,dist,0))